summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanley Lai2016-12-17 13:49:13 -0800
committerStanley Lai2016-12-17 13:49:13 -0800
commitb49d7800aeae1009b39b2bff2121864425e73ce9 (patch)
treef73447fc32940c7bc6b691a83567186d1afbc991
parent9ecf9073b96799e52a1f1c0d35b57177382902ce (diff)
parentae95834f5af7404c04e6fe3446019046278d814b (diff)
Merge remote-tracking branch 'refs/remotes/jackhumbert/master'
-rw-r--r--.gitattributes94
-rw-r--r--.gitignore6
-rw-r--r--.gitmodules3
-rw-r--r--.travis.yml11
-rw-r--r--Dockerfile28
-rw-r--r--Makefile785
-rw-r--r--Vagrantfile2
-rw-r--r--build_keyboard.mk254
-rw-r--r--build_test.mk57
-rw-r--r--common.mk27
-rw-r--r--doc/TMK_README.md4
-rw-r--r--doc/VAGRANT_GUIDE.md7
-rw-r--r--doc/basic_how_keyboards_work.md96
-rw-r--r--doc/keycode.txt4
-rw-r--r--doc/keymap.md29
-rw-r--r--keyboards/alps64/Makefile69
-rw-r--r--keyboards/alps64/readme.md4
-rw-r--r--keyboards/alps64/rules.mk66
-rw-r--r--keyboards/amj60/Makefile3
-rw-r--r--keyboards/amj60/amj60.c30
-rw-r--r--keyboards/amj60/amj60.h153
-rw-r--r--keyboards/amj60/config.h94
-rw-r--r--keyboards/amj60/keymaps/iso_split_rshift/Makefile23
-rwxr-xr-xkeyboards/amj60/keymaps/iso_split_rshift/build.sh42
-rw-r--r--keyboards/amj60/keymaps/iso_split_rshift/keymap.c147
-rw-r--r--keyboards/amj60/keymaps/iso_split_rshift/readme.md30
-rwxr-xr-xkeyboards/amj60/keymaps/iso_split_rshift/updatemerge.sh4
-rw-r--r--keyboards/amj60/readme.md57
-rw-r--r--keyboards/amj60/rules.mk66
-rw-r--r--keyboards/arrow_pad/Makefile73
-rw-r--r--keyboards/arrow_pad/readme.md119
-rw-r--r--keyboards/arrow_pad/rules.mk70
-rw-r--r--keyboards/atomic/Makefile72
-rw-r--r--keyboards/atomic/keymaps/pvc/Makefile4
-rw-r--r--keyboards/atomic/keymaps/pvc/config.h11
-rw-r--r--keyboards/atomic/keymaps/pvc/keymap.c444
-rw-r--r--keyboards/atomic/readme.md7
-rw-r--r--keyboards/atomic/rules.mk69
-rw-r--r--keyboards/atreus/Makefile89
-rw-r--r--keyboards/atreus/atreus.h10
-rw-r--r--keyboards/atreus/config.h4
-rw-r--r--keyboards/atreus/keymaps/alphadox/config.h80
-rw-r--r--keyboards/atreus/keymaps/alphadox/keymap.c45
-rw-r--r--keyboards/atreus/keymaps/classic/keymap.c48
-rw-r--r--keyboards/atreus/keymaps/default/keymap.c22
-rw-r--r--keyboards/atreus/keymaps/erlandsona/config.h96
-rw-r--r--keyboards/atreus/keymaps/erlandsona/keymap.c61
-rw-r--r--keyboards/atreus/keymaps/jeremy/keymap.c66
-rw-r--r--keyboards/atreus/keymaps/jeremy/readme.md45
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/atreus-replica-base-colemakdh.pngbin0 -> 76319 bytes
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/atreus-replica-extend.pngbin0 -> 91555 bytes
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/atreus-replica-function.pngbin0 -> 92516 bytes
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/atreus-replica-game.pngbin0 -> 72509 bytes
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/atreus-replica-num.pngbin0 -> 73171 bytes
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/config.h94
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/keymap.c107
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/readme.md57
-rw-r--r--keyboards/atreus/keymaps/xyverz/keymap.c89
-rw-r--r--keyboards/atreus/readme.md7
-rw-r--r--keyboards/atreus/rules.mk82
-rw-r--r--keyboards/atreus62/Makefile3
-rw-r--r--keyboards/atreus62/atreus62.c1
-rw-r--r--keyboards/atreus62/atreus62.h26
-rw-r--r--keyboards/atreus62/config.h83
-rw-r--r--keyboards/atreus62/keymaps/default/keymap.c71
-rw-r--r--keyboards/atreus62/pro_micro.h362
-rw-r--r--keyboards/atreus62/readme.md10
-rw-r--r--keyboards/atreus62/rules.mk66
-rw-r--r--keyboards/bantam44/Makefile73
-rw-r--r--keyboards/bantam44/readme.md7
-rw-r--r--keyboards/bantam44/rules.mk67
-rw-r--r--keyboards/chibios_test/Makefile11
-rw-r--r--keyboards/chibios_test/boards/GENERIC_STM32_F103/board.c98
-rw-r--r--keyboards/chibios_test/boards/GENERIC_STM32_F103/board.h332
-rw-r--r--keyboards/chibios_test/boards/GENERIC_STM32_F103/board.mk10
-rw-r--r--keyboards/chibios_test/ld/MKL26Z64.ld210
-rw-r--r--keyboards/chibios_test/ld/STM32F103x8_stm32duino_bootloader.ld176
-rw-r--r--keyboards/chibios_test/rules.mk8
-rw-r--r--keyboards/chibios_test/stm32_f072_onekey/Makefile42
-rw-r--r--keyboards/chibios_test/stm32_f072_onekey/mcuconf.h342
-rw-r--r--keyboards/chibios_test/stm32_f072_onekey/rules.mk41
-rw-r--r--keyboards/chibios_test/stm32_f103_onekey/Makefile53
-rw-r--r--keyboards/chibios_test/stm32_f103_onekey/mcuconf.h418
-rw-r--r--keyboards/chibios_test/stm32_f103_onekey/rules.mk52
-rw-r--r--keyboards/chibios_test/teensy_lc_onekey/Makefile48
-rw-r--r--keyboards/chibios_test/teensy_lc_onekey/chconf.h1048
-rw-r--r--keyboards/chibios_test/teensy_lc_onekey/halconf.h374
-rw-r--r--keyboards/chibios_test/teensy_lc_onekey/mcuconf.h110
-rw-r--r--keyboards/chibios_test/teensy_lc_onekey/rules.mk49
-rw-r--r--keyboards/clueboard/Makefile108
-rw-r--r--keyboards/clueboard/config.h3
-rw-r--r--keyboards/clueboard/keymaps/default/keymap.c8
-rw-r--r--keyboards/clueboard/keymaps/skully/readme.md5
-rw-r--r--keyboards/clueboard/readme.md97
-rw-r--r--keyboards/clueboard/rev1/Makefile6
-rw-r--r--keyboards/clueboard/rev1/config.h2
-rw-r--r--keyboards/clueboard/rev1/rules.mk5
-rw-r--r--keyboards/clueboard/rev2/Makefile6
-rw-r--r--keyboards/clueboard/rev2/config.h4
-rw-r--r--keyboards/clueboard/rev2/rules.mk5
-rw-r--r--keyboards/clueboard/rules.mk103
-rw-r--r--keyboards/clueboard2/clueboard2.c63
-rw-r--r--keyboards/cluecard/Makefile3
-rw-r--r--keyboards/cluecard/cluecard.c98
-rw-r--r--keyboards/cluecard/cluecard.h22
-rw-r--r--keyboards/cluecard/config.h167
-rw-r--r--keyboards/cluecard/keymaps/default/Makefile21
-rw-r--r--keyboards/cluecard/keymaps/default/config.h8
-rw-r--r--keyboards/cluecard/keymaps/default/keymap.c63
-rw-r--r--keyboards/cluecard/keymaps/default/readme.md5
-rw-r--r--keyboards/cluecard/keymaps/rgb_effects/Makefile21
-rw-r--r--keyboards/cluecard/keymaps/rgb_effects/config.h12
-rw-r--r--keyboards/cluecard/keymaps/rgb_effects/keymap.c28
-rw-r--r--keyboards/cluecard/keymaps/rgb_effects/readme.md7
-rw-r--r--keyboards/cluecard/readme.md28
-rw-r--r--keyboards/cluecard/rules.mk70
-rw-r--r--keyboards/cluepad/Makefile71
-rw-r--r--keyboards/cluepad/config.h2
-rw-r--r--keyboards/cluepad/readme.md4
-rw-r--r--keyboards/cluepad/rules.mk65
-rw-r--r--keyboards/ergodox/Makefile5
-rw-r--r--keyboards/ergodox/config.h37
-rw-r--r--keyboards/ergodox/ergodox.c4
-rw-r--r--keyboards/ergodox/ergodox.h10
-rwxr-xr-xkeyboards/ergodox/ez/190hotfix.sh (renamed from keyboards/ergodox_ez/190hotfix.sh)0
-rw-r--r--keyboards/ergodox/ez/Makefile8
-rw-r--r--keyboards/ergodox/ez/config.h78
-rw-r--r--keyboards/ergodox/ez/ez.c (renamed from keyboards/ergodox_ez/ergodox_ez.c)35
-rw-r--r--keyboards/ergodox/ez/ez.h (renamed from keyboards/ergodox_ez/ergodox_ez.h)41
-rw-r--r--keyboards/ergodox/ez/i2cmaster.h (renamed from keyboards/ergodox_ez/i2cmaster.h)0
-rw-r--r--keyboards/ergodox/ez/keymaps/profet_80/ergodox80.pngbin0 -> 20663 bytes
-rw-r--r--keyboards/ergodox/ez/keymaps/profet_80/keymap.c183
-rw-r--r--keyboards/ergodox/ez/keymaps/profet_80/readme.md10
-rw-r--r--keyboards/ergodox/ez/keymaps/steno/Makefile3
-rw-r--r--keyboards/ergodox/ez/keymaps/steno/keymap.c324
-rw-r--r--keyboards/ergodox/ez/keymaps/steno/readme.md92
-rw-r--r--keyboards/ergodox/ez/matrix.c (renamed from keyboards/ergodox_ez/matrix.c)4
-rw-r--r--keyboards/ergodox/ez/rules.mk (renamed from keyboards/ergodox_ez/Makefile)16
-rw-r--r--keyboards/ergodox/ez/twimaster.c (renamed from keyboards/ergodox_ez/twimaster.c)0
-rw-r--r--keyboards/ergodox/ez/util/compile_keymap.py (renamed from keyboards/ergodox_ez/keymaps/german-manuneo/compile_keymap.py)0
-rw-r--r--keyboards/ergodox/ez/util/readme.md (renamed from keyboards/ergodox_ez/util/readme.md)0
-rw-r--r--keyboards/ergodox/infinity/MEMO.txt (renamed from keyboards/infinity_chibios/MEMO.txt)0
-rw-r--r--keyboards/ergodox/infinity/Makefile3
-rw-r--r--keyboards/ergodox/infinity/bootloader_defs.h (renamed from keyboards/infinity_chibios/bootloader_defs.h)0
-rw-r--r--keyboards/ergodox/infinity/chconf.h (renamed from keyboards/infinity_ergodox/chconf.h)0
-rw-r--r--keyboards/ergodox/infinity/config.h (renamed from keyboards/infinity_ergodox/config.h)25
-rw-r--r--keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h (renamed from keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h)0
-rw-r--r--keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/driver.mk (renamed from keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/driver.mk)0
-rw-r--r--keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c (renamed from keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c)0
-rw-r--r--keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h (renamed from keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h)0
-rw-r--r--keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/driver.mk (renamed from keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/driver.mk)0
-rw-r--r--keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/emulator_lcd.c (renamed from keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c)0
-rw-r--r--keyboards/ergodox/infinity/drivers/gdisp/emulator_led/driver.mk (renamed from keyboards/infinity_ergodox/drivers/gdisp/emulator_led/driver.mk)0
-rw-r--r--keyboards/ergodox/infinity/drivers/gdisp/emulator_led/emulator_led.c (renamed from keyboards/infinity_ergodox/drivers/gdisp/emulator_led/emulator_led.c)0
-rw-r--r--keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/board_ST7565.h (renamed from keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h)0
-rw-r--r--keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/driver.mk (renamed from keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/driver.mk)0
-rw-r--r--keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c (renamed from keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c)0
-rw-r--r--keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_config.h (renamed from keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h)0
-rw-r--r--keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/st7565.h (renamed from keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/st7565.h)0
-rw-r--r--keyboards/ergodox/infinity/gfxconf.h (renamed from keyboards/infinity_ergodox/gfxconf.h)0
-rw-r--r--keyboards/ergodox/infinity/halconf.h (renamed from keyboards/infinity_ergodox/halconf.h)0
-rw-r--r--keyboards/ergodox/infinity/infinity.c (renamed from keyboards/infinity_ergodox/infinity_ergodox.c)86
-rw-r--r--keyboards/ergodox/infinity/infinity.h110
-rw-r--r--keyboards/ergodox/infinity/led.c26
-rw-r--r--keyboards/ergodox/infinity/matrix.c (renamed from keyboards/infinity_ergodox/matrix.c)3
-rw-r--r--keyboards/ergodox/infinity/mcuconf.h (renamed from keyboards/infinity_ergodox/mcuconf.h)0
-rw-r--r--keyboards/ergodox/infinity/rules.mk (renamed from keyboards/infinity_ergodox/Makefile)26
-rw-r--r--keyboards/ergodox/keymaps/ab/Makefile (renamed from keyboards/ergodox_ez/keymaps/ab/Makefile)0
-rw-r--r--keyboards/ergodox/keymaps/ab/keyboard-layout.json (renamed from keyboards/ergodox_ez/keymaps/ab/keyboard-layout.json)0
-rw-r--r--keyboards/ergodox/keymaps/ab/keyboard-layout.png (renamed from keyboards/ergodox_ez/keymaps/ab/keyboard-layout.png)bin80776 -> 80776 bytes
-rw-r--r--keyboards/ergodox/keymaps/ab/keymap.c (renamed from keyboards/ergodox_ez/keymaps/ab/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/ab/readme.md (renamed from keyboards/ergodox_ez/keymaps/ab/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/absenth/absenth_highres.pngbin0 -> 1463041 bytes
-rw-r--r--keyboards/ergodox/keymaps/absenth/keymap.c (renamed from keyboards/ergodox_ez/keymaps/default/keymap.c)21
-rw-r--r--keyboards/ergodox/keymaps/absenth/readme.md11
-rw-r--r--keyboards/ergodox/keymaps/adnw_k_o_y/keymap.c (renamed from keyboards/ergodox_ez/keymaps/adnw_k_o_y/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/adnw_k_o_y/readme.md (renamed from keyboards/ergodox_ez/keymaps/adnw_k_o_y/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/alexjj/keymap.c (renamed from keyboards/ergodox_ez/keymaps/alexjj/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/alexjj/readme.md (renamed from keyboards/ergodox_ez/keymaps/alexjj/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/alexjj/rl-layout.jpg (renamed from keyboards/ergodox_ez/keymaps/alexjj/rl-layout.jpg)bin833107 -> 833107 bytes
-rw-r--r--keyboards/ergodox/keymaps/algernon/COPYING (renamed from keyboards/ergodox_ez/keymaps/algernon/COPYING)0
-rw-r--r--keyboards/ergodox/keymaps/algernon/Makefile (renamed from keyboards/ergodox_ez/keymaps/algernon/Makefile)21
-rw-r--r--keyboards/ergodox/keymaps/algernon/NEWS.md175
-rw-r--r--keyboards/ergodox/keymaps/algernon/config.h (renamed from keyboards/ergodox_ez/keymaps/algernon/config.h)0
-rw-r--r--keyboards/ergodox/keymaps/algernon/images/adore-layer.pngbin0 -> 97357 bytes
-rw-r--r--keyboards/ergodox/keymaps/algernon/images/base-layer.pngbin0 -> 102318 bytes
-rw-r--r--keyboards/ergodox/keymaps/algernon/images/heatmap.pngbin0 -> 139351 bytes
-rw-r--r--keyboards/ergodox/keymaps/algernon/images/hun-layer.png (renamed from keyboards/ergodox_ez/keymaps/algernon/images/hun-layer.png)bin67924 -> 67924 bytes
-rw-r--r--keyboards/ergodox/keymaps/algernon/images/nav-n-media-layer.png (renamed from keyboards/ergodox_ez/keymaps/algernon/images/nav-n-media-layer.png)bin94837 -> 94837 bytes
-rw-r--r--keyboards/ergodox/keymaps/algernon/images/steno-layer.pngbin0 -> 64086 bytes
-rw-r--r--keyboards/ergodox/keymaps/algernon/keymap.c (renamed from keyboards/ergodox_ez/keymaps/algernon/keymap.c)1028
-rw-r--r--keyboards/ergodox/keymaps/algernon/readme.md146
-rw-r--r--keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json486
-rw-r--r--keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json477
-rwxr-xr-xkeyboards/ergodox/keymaps/algernon/tools/hid-commands79
-rwxr-xr-xkeyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py344
-rwxr-xr-xkeyboards/ergodox/keymaps/algernon/tools/text-to-log.py107
-rw-r--r--keyboards/ergodox/keymaps/alphadox/Makefile17
-rw-r--r--keyboards/ergodox/keymaps/alphadox/config.h12
-rw-r--r--keyboards/ergodox/keymaps/alphadox/keymap.c107
-rw-r--r--keyboards/ergodox/keymaps/andrew_osx/keymap.c (renamed from keyboards/ergodox_ez/keymaps/andrew_osx/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/bepo/Makefile (renamed from keyboards/ergodox_ez/keymaps/erez_experimental/Makefile)0
-rw-r--r--keyboards/ergodox/keymaps/bepo/bepo.pngbin0 -> 80249 bytes
-rw-r--r--keyboards/ergodox/keymaps/bepo/keymap.c (renamed from keyboards/ergodox_ez/keymaps/bepo/keymap.c)337
-rw-r--r--keyboards/ergodox/keymaps/bepo/readme.md (renamed from keyboards/ergodox_ez/keymaps/bepo/readme.md)6
-rw-r--r--keyboards/ergodox/keymaps/bepo_csa/keymap.c527
-rw-r--r--keyboards/ergodox/keymaps/bepo_csa/readme.md162
-rw-r--r--keyboards/ergodox/keymaps/coderkun_neo2/Makefile3
-rw-r--r--keyboards/ergodox/keymaps/coderkun_neo2/keymap.c (renamed from keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c)71
-rw-r--r--keyboards/ergodox/keymaps/coderkun_neo2/readme.md (renamed from keyboards/ergodox_ez/keymaps/coderkun_neo2/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/colemak/keymap.c (renamed from keyboards/ergodox_ez/keymaps/colemak/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/colemak/readme.md (renamed from keyboards/ergodox_ez/keymaps/colemak/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/colemak_osx_pc_no/keyboard-layout.png (renamed from keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keyboard-layout.png)bin103158 -> 103158 bytes
-rw-r--r--keyboards/ergodox/keymaps/colemak_osx_pc_no/keymap.c (renamed from keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keymap.c)4
-rw-r--r--keyboards/ergodox/keymaps/colemak_osx_pc_no/readme.md (renamed from keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/csharp_dev/csharp_dev.png (renamed from keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev.png)bin97642 -> 97642 bytes
-rw-r--r--keyboards/ergodox/keymaps/csharp_dev/csharp_dev_legend.png (renamed from keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev_legend.png)bin387797 -> 387797 bytes
-rw-r--r--keyboards/ergodox/keymaps/csharp_dev/keymap.c (renamed from keyboards/ergodox_ez/keymaps/csharp_dev/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/csharp_dev/readme.md (renamed from keyboards/ergodox_ez/keymaps/csharp_dev/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/dave/keymap.c (renamed from keyboards/ergodox_ez/keymaps/dave/keymap.c)14
-rw-r--r--keyboards/ergodox/keymaps/dave/readme.md (renamed from keyboards/ergodox_ez/keymaps/dave/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/default/default.png (renamed from keyboards/ergodox_ez/keymaps/default/default.png)bin193672 -> 193672 bytes
-rw-r--r--keyboards/ergodox/keymaps/default/default_highres.png (renamed from keyboards/ergodox_ez/keymaps/default/default_highres.png)bin1459389 -> 1459389 bytes
-rw-r--r--keyboards/ergodox/keymaps/default/keymap.c223
-rw-r--r--keyboards/ergodox/keymaps/default/readme.md (renamed from keyboards/ergodox_ez/keymaps/default/readme.md)2
-rw-r--r--keyboards/ergodox/keymaps/default_osx/default_osx_highres.png (renamed from keyboards/ergodox_ez/keymaps/default_osx/default_osx_highres.png)bin772418 -> 772418 bytes
-rw-r--r--keyboards/ergodox/keymaps/default_osx/keymap.c (renamed from keyboards/ergodox_ez/keymaps/default_osx/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/default_osx/readme.md (renamed from keyboards/ergodox_ez/keymaps/default_osx/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/dragon788/keymap.c (renamed from keyboards/ergodox_ez/keymaps/dragon788/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/dvorak/dvorak.png (renamed from keyboards/ergodox_ez/keymaps/dvorak/dvorak.png)bin87314 -> 87314 bytes
-rw-r--r--keyboards/ergodox/keymaps/dvorak/keymap.c (renamed from keyboards/ergodox_ez/keymaps/dvorak/keymap.c)2
-rwxr-xr-xkeyboards/ergodox/keymaps/dvorak_emacs/keymap.c165
-rw-r--r--keyboards/ergodox/keymaps/dvorak_emacs/readme.md70
-rw-r--r--keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout0.png (renamed from keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout0.png)bin73585 -> 73585 bytes
-rw-r--r--keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout1.png (renamed from keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout1.png)bin59122 -> 59122 bytes
-rw-r--r--keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout2.png (renamed from keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout2.png)bin53319 -> 53319 bytes
-rw-r--r--keyboards/ergodox/keymaps/dvorak_intl_squisher/keymap.c (renamed from keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/dvorak_intl_squisher/readme.md (renamed from keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/dvorak_plover/README.md14
-rw-r--r--keyboards/ergodox/keymaps/dvorak_plover/keymap.c230
-rw-r--r--keyboards/ergodox/keymaps/dvorak_programmer/Makefile8
-rw-r--r--keyboards/ergodox/keymaps/dvorak_programmer/README.md29
-rw-r--r--keyboards/ergodox/keymaps/dvorak_programmer/keymap.c424
-rwxr-xr-xkeyboards/ergodox/keymaps/dvorak_spanish/keymap.c (renamed from keyboards/ergodox_ez/keymaps/dvorak_spanish/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/dvorak_spanish/readme.md (renamed from keyboards/ergodox_ez/keymaps/dvorak_spanish/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/emacs_osx_dk/default_highres.png (renamed from keyboards/ergodox_ez/keymaps/emacs_osx_dk/default_highres.png)bin142146 -> 142146 bytes
-rw-r--r--keyboards/ergodox/keymaps/emacs_osx_dk/keymap.c (renamed from keyboards/ergodox_ez/keymaps/emacs_osx_dk/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/emacs_osx_dk/readme.md (renamed from keyboards/ergodox_ez/keymaps/emacs_osx_dk/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/erez_experimental/Makefile11
-rw-r--r--keyboards/ergodox/keymaps/erez_experimental/config.h (renamed from keyboards/ergodox_ez/keymaps/erez_experimental/config.h)1
-rw-r--r--keyboards/ergodox/keymaps/erez_experimental/keymap.c (renamed from keyboards/ergodox_ez/keymaps/erez_experimental/keymap.c)50
-rw-r--r--keyboards/ergodox/keymaps/erez_experimental/readme.md (renamed from keyboards/ergodox_ez/keymaps/erez_experimental/readme.md)4
-rw-r--r--keyboards/ergodox/keymaps/galson/Makefile2
-rw-r--r--keyboards/ergodox/keymaps/galson/keymap.c183
-rw-r--r--keyboards/ergodox/keymaps/galson/readme.md11
-rw-r--r--keyboards/ergodox/keymaps/german-kinergo/keymap.c (renamed from keyboards/ergodox_ez/keymaps/german-kinergo/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/german-kinergo/layout-code.png (renamed from keyboards/ergodox_ez/keymaps/german-kinergo/layout-code.png)bin55386 -> 55386 bytes
-rw-r--r--keyboards/ergodox/keymaps/german-kinergo/layout-media.png (renamed from keyboards/ergodox_ez/keymaps/german-kinergo/layout-media.png)bin67634 -> 67634 bytes
-rw-r--r--keyboards/ergodox/keymaps/german-kinergo/layout.png (renamed from keyboards/ergodox_ez/keymaps/german-kinergo/layout.png)bin71175 -> 71175 bytes
-rw-r--r--keyboards/ergodox/keymaps/german-kinergo/readme.md (renamed from keyboards/ergodox_ez/keymaps/german-kinergo/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/german-manuneo/compile_keymap.py (renamed from keyboards/ergodox_ez/util/compile_keymap.py)0
-rw-r--r--keyboards/ergodox/keymaps/german-manuneo/keymap.c (renamed from keyboards/ergodox_ez/keymaps/german-manuneo/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/german-manuneo/keymap.md (renamed from keyboards/ergodox_ez/keymaps/german-manuneo/keymap.md)2
-rw-r--r--keyboards/ergodox/keymaps/german/keymap.c (renamed from keyboards/ergodox_ez/keymaps/german/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/j3rn/keymap.c (renamed from keyboards/ergodox_ez/keymaps/j3rn/keymap.c)51
-rw-r--r--keyboards/ergodox/keymaps/j3rn/readme.md (renamed from keyboards/ergodox_ez/keymaps/j3rn/readme.md)9
-rw-r--r--keyboards/ergodox/keymaps/jack/Makefile6
-rw-r--r--keyboards/ergodox/keymaps/jack/config.h17
-rw-r--r--keyboards/ergodox/keymaps/jack/keymap.c (renamed from keyboards/ergodox_ez/keymaps/jack/keymap.c)24
-rw-r--r--keyboards/ergodox/keymaps/jacobono/img/colemak-default-layer.png (renamed from keyboards/ergodox_ez/keymaps/jacobono/img/colemak-default-layer.png)bin70434 -> 70434 bytes
-rw-r--r--keyboards/ergodox/keymaps/jacobono/img/number-dpad-layer.png (renamed from keyboards/ergodox_ez/keymaps/jacobono/img/number-dpad-layer.png)bin46225 -> 46225 bytes
-rw-r--r--keyboards/ergodox/keymaps/jacobono/img/symbol-layer.png (renamed from keyboards/ergodox_ez/keymaps/jacobono/img/symbol-layer.png)bin49615 -> 49615 bytes
-rw-r--r--keyboards/ergodox/keymaps/jacobono/keymap.c (renamed from keyboards/ergodox_ez/keymaps/jacobono/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/jacobono/readme.md (renamed from keyboards/ergodox_ez/keymaps/jacobono/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/jafo/jafo-Notes10
-rw-r--r--keyboards/ergodox/keymaps/jafo/jafo-layout.pdfbin0 -> 185426 bytes
-rw-r--r--keyboards/ergodox/keymaps/jafo/jafo_highres.pngbin0 -> 179460 bytes
-rw-r--r--keyboards/ergodox/keymaps/jafo/keymap.c183
-rw-r--r--keyboards/ergodox/keymaps/jafo/readme.md20
-rw-r--r--keyboards/ergodox/keymaps/jgarr/keymap.c (renamed from keyboards/ergodox_ez/keymaps/jgarr/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/josh/keymap.c (renamed from keyboards/ergodox_ez/keymaps/josh/keymap.c)3
-rw-r--r--keyboards/ergodox/keymaps/josh/readme.md (renamed from keyboards/ergodox_ez/keymaps/josh/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/kastyle/keymap.c (renamed from keyboards/ergodox_ez/keymaps/kastyle/keymap.c)79
-rw-r--r--keyboards/ergodox/keymaps/kastyle/readme.md14
-rw-r--r--keyboards/ergodox/keymaps/kines-ish/keymap.c (renamed from keyboards/ergodox_ez/keymaps/kines-ish/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/kines-ish/readme.md (renamed from keyboards/ergodox_ez/keymaps/kines-ish/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/kristian/keymap.c79
-rw-r--r--keyboards/ergodox/keymaps/maz/keymap.c229
-rw-r--r--keyboards/ergodox/keymaps/maz/readme.md121
-rw-r--r--keyboards/ergodox/keymaps/mclennon_osx/README.md5
-rw-r--r--keyboards/ergodox/keymaps/mclennon_osx/keymap.c144
-rw-r--r--keyboards/ergodox/keymaps/mpiechotka/keymap.c (renamed from keyboards/ergodox_ez/keymaps/mpiechotka/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/mpiechotka/readme.md (renamed from keyboards/ergodox_ez/keymaps/mpiechotka/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/msc/img/code_layer.png (renamed from keyboards/ergodox_ez/keymaps/msc/img/code_layer.png)bin71266 -> 71266 bytes
-rw-r--r--keyboards/ergodox/keymaps/msc/img/main_layer.png (renamed from keyboards/ergodox_ez/keymaps/msc/img/main_layer.png)bin90624 -> 90624 bytes
-rw-r--r--keyboards/ergodox/keymaps/msc/img/media_layer.png (renamed from keyboards/ergodox_ez/keymaps/msc/img/media_layer.png)bin75750 -> 75750 bytes
-rw-r--r--keyboards/ergodox/keymaps/msc/keymap.c (renamed from keyboards/ergodox_ez/keymaps/msc/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/msc/readme.md (renamed from keyboards/ergodox_ez/keymaps/msc/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/naps62/keymap.c (renamed from keyboards/ergodox_ez/keymaps/naps62/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/naps62/readme.md (renamed from keyboards/ergodox_ez/keymaps/naps62/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keyboard-layout.pngbin0 -> 140077 bytes
-rw-r--r--keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keymap.c180
-rw-r--r--keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/readme.md30
-rw-r--r--keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keyboard-layout.pngbin0 -> 97519 bytes
-rw-r--r--keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keymap.c180
-rw-r--r--keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/readme.md30
-rw-r--r--keyboards/ergodox/keymaps/ordinary/keymap.c429
-rw-r--r--keyboards/ergodox/keymaps/ordinary/ordinary-base.pngbin0 -> 98200 bytes
-rw-r--r--keyboards/ergodox/keymaps/ordinary/ordinary-base.txt (renamed from keyboards/ergodox_ez/keymaps/ordinary/ordinary-base.txt)16
-rw-r--r--keyboards/ergodox/keymaps/ordinary/ordinary-media.pngbin0 -> 123435 bytes
-rw-r--r--keyboards/ergodox/keymaps/ordinary/ordinary-media.txt27
-rw-r--r--keyboards/ergodox/keymaps/ordinary/ordinary-special.pngbin0 -> 68292 bytes
-rw-r--r--keyboards/ergodox/keymaps/ordinary/ordinary-special.txt27
-rw-r--r--keyboards/ergodox/keymaps/ordinary/ordinary-symbol.pngbin0 -> 101255 bytes
-rw-r--r--keyboards/ergodox/keymaps/ordinary/ordinary-symbol.txt27
-rw-r--r--keyboards/ergodox/keymaps/ordinary/readme.md90
-rw-r--r--keyboards/ergodox/keymaps/osx_de/keymap.c (renamed from keyboards/ergodox_ez/keymaps/osx_de/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/osx_de/osx_de_highres.png (renamed from keyboards/ergodox_ez/keymaps/osx_de/osx_de_highres.png)bin298446 -> 298446 bytes
-rw-r--r--keyboards/ergodox/keymaps/osx_de/readme.md (renamed from keyboards/ergodox_ez/keymaps/osx_de/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/osx_de_adnw_koy/keymap.c (renamed from keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png (renamed from keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png)bin183892 -> 183892 bytes
-rw-r--r--keyboards/ergodox/keymaps/osx_de_experimental/keymap.c (renamed from keyboards/ergodox_ez/keymaps/osx_de_experimental/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/osx_de_experimental/osx_de_experimental_highres.png (renamed from keyboards/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental_highres.png)bin303904 -> 303904 bytes
-rw-r--r--keyboards/ergodox/keymaps/osx_de_experimental/readme.md (renamed from keyboards/ergodox_ez/keymaps/osx_de_experimental/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/osx_fr/keymap.c (renamed from keyboards/ergodox_ez/keymaps/osx_fr/keymap.c)4
-rw-r--r--keyboards/ergodox/keymaps/osx_kinesis_pnut/keymap.c (renamed from keyboards/ergodox_ez/keymaps/osx_kinesis_pnut/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/keymap.c231
-rw-r--r--keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/osx_whiskey_tango_foxtrot_capslock.pngbin0 -> 185064 bytes
-rw-r--r--keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/readme.md38
-rw-r--r--keyboards/ergodox/keymaps/phoenix/keymap.c184
-rw-r--r--keyboards/ergodox/keymaps/phoenix/readme.md10
-rw-r--r--keyboards/ergodox/keymaps/plover/keymap.c (renamed from keyboards/ergodox_ez/keymaps/plover/keymap.c)6
-rw-r--r--keyboards/ergodox/keymaps/plums/keymap.c (renamed from keyboards/ergodox_ez/keymaps/plums/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/plums/plums.png (renamed from keyboards/ergodox_ez/keymaps/plums/plums.png)bin223300 -> 223300 bytes
-rw-r--r--keyboards/ergodox/keymaps/plums/readme.md (renamed from keyboards/ergodox_ez/keymaps/plums/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/pvinis/Changelog.md7
-rw-r--r--keyboards/ergodox/keymaps/pvinis/Makefile9
-rw-r--r--keyboards/ergodox/keymaps/pvinis/Readme.md65
-rw-r--r--keyboards/ergodox/keymaps/pvinis/keymap.c430
-rw-r--r--keyboards/ergodox/keymaps/robot_test_layout/keymap.c151
-rw-r--r--keyboards/ergodox/keymaps/robot_test_layout/readme.md5
-rw-r--r--keyboards/ergodox/keymaps/romanzolotarev-norman-osx/keymap.c46
-rw-r--r--keyboards/ergodox/keymaps/romanzolotarev-norman-osx/readme.md41
-rw-r--r--keyboards/ergodox/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png (renamed from keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png)bin96954 -> 96954 bytes
-rw-r--r--keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c (renamed from keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md (renamed from keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md)2
-rw-r--r--keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png (renamed from keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png)bin130692 -> 130692 bytes
-rw-r--r--keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/keymap.c (renamed from keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/readme.md (renamed from keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png (renamed from keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png)bin130464 -> 130464 bytes
-rw-r--r--keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c (renamed from keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/readme.md (renamed from keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png (renamed from keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png)bin100627 -> 100627 bytes
-rw-r--r--keyboards/ergodox/keymaps/sethbc/Makefile3
-rw-r--r--keyboards/ergodox/keymaps/sethbc/keymap.c102
-rw-r--r--keyboards/ergodox/keymaps/sethbc/readme.md4
-rw-r--r--keyboards/ergodox/keymaps/sneako/keymap.c (renamed from keyboards/ergodox_ez/keymaps/sneako/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/sneako/readme.md (renamed from keyboards/ergodox_ez/keymaps/sneako/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/software_neo2/keymap.c (renamed from keyboards/ergodox_ez/keymaps/software_neo2/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/supercoder/config.h (renamed from keyboards/ergodox_ez/keymaps/supercoder/config_user.h)2
-rw-r--r--keyboards/ergodox/keymaps/supercoder/images/layout.png (renamed from keyboards/ergodox_ez/keymaps/supercoder/images/layout.png)bin65607 -> 65607 bytes
-rw-r--r--keyboards/ergodox/keymaps/supercoder/images/supercoder_2000.jpg (renamed from keyboards/ergodox_ez/keymaps/supercoder/images/supercoder_2000.jpg)bin75444 -> 75444 bytes
-rw-r--r--keyboards/ergodox/keymaps/supercoder/keymap.c (renamed from keyboards/ergodox_ez/keymaps/supercoder/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/supercoder/makefile.mk (renamed from keyboards/ergodox_ez/keymaps/supercoder/makefile.mk)0
-rw-r--r--keyboards/ergodox/keymaps/supercoder/readme.md (renamed from keyboards/ergodox_ez/keymaps/supercoder/readme.md)2
-rw-r--r--keyboards/ergodox/keymaps/techtomas/keymap.c (renamed from keyboards/ergodox_ez/keymaps/techtomas/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/techtomas/readme.md (renamed from keyboards/ergodox_ez/keymaps/techtomas/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/teckinesis/keymap.c (renamed from keyboards/ergodox_ez/keymaps/ordinary/keymap.c)39
-rw-r--r--keyboards/ergodox/keymaps/teckinesis/ordinary-special.png (renamed from keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.png)bin63065 -> 63065 bytes
-rw-r--r--keyboards/ergodox/keymaps/teckinesis/ordinary-special.txt (renamed from keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.txt)0
-rw-r--r--keyboards/ergodox/keymaps/teckinesis/readme.md45
-rw-r--r--keyboards/ergodox/keymaps/teckinesis/teckinesis-base.json434
-rw-r--r--keyboards/ergodox/keymaps/teckinesis/teckinesis-base.pngbin0 -> 93743 bytes
-rw-r--r--keyboards/ergodox/keymaps/teckinesis/teckinesis-media.json436
-rw-r--r--keyboards/ergodox/keymaps/teckinesis/teckinesis-media.pngbin0 -> 112216 bytes
-rw-r--r--keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.json422
-rw-r--r--keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.pngbin0 -> 97350 bytes
-rw-r--r--keyboards/ergodox/keymaps/tkuichooseyou/README.md (renamed from keyboards/ergodox_ez/keymaps/tkuichooseyou/README.md)0
-rw-r--r--keyboards/ergodox/keymaps/tkuichooseyou/compiled.hex (renamed from keyboards/ergodox_ez/keymaps/tkuichooseyou/compiled.hex)0
-rw-r--r--keyboards/ergodox/keymaps/tkuichooseyou/keymap.c (renamed from keyboards/ergodox_ez/keymaps/tkuichooseyou/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/tm2030/keymap.c (renamed from keyboards/ergodox_ez/keymaps/tm2030/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/tm2030/readme.md (renamed from keyboards/ergodox_ez/keymaps/tm2030/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/tonyabra_osx/keymap.c (renamed from keyboards/ergodox_ez/keymaps/tonyabra_osx/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/tonyabra_osx/readme.md (renamed from keyboards/ergodox_ez/keymaps/tonyabra_osx/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/townk_osx/config.h44
-rw-r--r--keyboards/ergodox/keymaps/townk_osx/keymap.c (renamed from keyboards/ergodox_ez/keymaps/townk_osx/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/townk_osx/makefile.mk (renamed from keyboards/ergodox_ez/keymaps/townk_osx/makefile.mk)4
-rw-r--r--keyboards/ergodox/keymaps/townk_osx/readme.md (renamed from keyboards/ergodox_ez/keymaps/townk_osx/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/townk_osx/townk_osx_base.png (renamed from keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_base.png)bin785859 -> 785859 bytes
-rw-r--r--keyboards/ergodox/keymaps/townk_osx/townk_osx_fn.png (renamed from keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_fn.png)bin390041 -> 390041 bytes
-rw-r--r--keyboards/ergodox/keymaps/townk_osx/townk_osx_keypad.png (renamed from keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_keypad.png)bin424425 -> 424425 bytes
-rw-r--r--keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c213
-rw-r--r--keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.pngbin0 -> 119825 bytes
-rw-r--r--keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap2.pngbin0 -> 292705 bytes
-rw-r--r--keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/readme.md10
-rw-r--r--keyboards/ergodox/keymaps/twey/keymap.c (renamed from keyboards/ergodox_ez/keymaps/twey/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/twey/readme.md (renamed from keyboards/ergodox_ez/keymaps/twey/readme.md)0
-rw-r--r--keyboards/ergodox/keymaps/videck/Makefile19
-rw-r--r--keyboards/ergodox/keymaps/videck/config.h13
-rw-r--r--keyboards/ergodox/keymaps/videck/keymap.c179
-rw-r--r--keyboards/ergodox/keymaps/videck/readme.md24
-rw-r--r--keyboards/ergodox/keymaps/videck/videck.json443
-rw-r--r--keyboards/ergodox/keymaps/videck/videck.pngbin0 -> 106851 bytes
-rw-r--r--keyboards/ergodox/keymaps/win10_writers-block/Makefile9
-rw-r--r--keyboards/ergodox/keymaps/win10_writers-block/config.h36
-rw-r--r--keyboards/ergodox/keymaps/win10_writers-block/images/base-layer.pngbin0 -> 125979 bytes
-rw-r--r--keyboards/ergodox/keymaps/win10_writers-block/images/media-layer.pngbin0 -> 102643 bytes
-rw-r--r--keyboards/ergodox/keymaps/win10_writers-block/images/rimworld-layer.pngbin0 -> 90359 bytes
-rw-r--r--keyboards/ergodox/keymaps/win10_writers-block/images/symbol-layer.pngbin0 -> 101477 bytes
-rw-r--r--keyboards/ergodox/keymaps/win10_writers-block/keymap.c324
-rw-r--r--keyboards/ergodox/keymaps/win10_writers-block/readme.md113
-rw-r--r--keyboards/ergodox/keymaps/workman_osx_mdw/keymap.c (renamed from keyboards/ergodox_ez/keymaps/workman_osx_mdw/keymap.c)2
-rw-r--r--keyboards/ergodox/keymaps/xyverz/keymap.c312
-rw-r--r--keyboards/ergodox/keymaps/xyverz/readme.md122
-rw-r--r--keyboards/ergodox/keymaps/yoruian/90-ergodox-yoruian.conf6
-rw-r--r--keyboards/ergodox/keymaps/yoruian/Makefile13
-rw-r--r--keyboards/ergodox/keymaps/yoruian/README102
-rw-r--r--keyboards/ergodox/keymaps/yoruian/ergodox_yoruian34
-rw-r--r--keyboards/ergodox/keymaps/yoruian/keymap.c61
-rw-r--r--keyboards/ergodox/keymaps/yoruian/yoruian.h61
-rw-r--r--keyboards/ergodox/keymaps/zweihander-osx/Makefile2
-rw-r--r--keyboards/ergodox/keymaps/zweihander-osx/keymap.c (renamed from keyboards/ergodox_ez/keymaps/zweihander-osx/keymap.c)40
-rw-r--r--keyboards/ergodox/keymaps/zweihander-osx/readme.markdown (renamed from keyboards/ergodox_ez/keymaps/zweihander-osx/readme.markdown)10
-rw-r--r--keyboards/ergodox/keymaps/zweihander-osx/zweihander-osx.hex1151
-rw-r--r--keyboards/ergodox/readme.md165
-rw-r--r--keyboards/ergodox/rules.mk28
-rw-r--r--keyboards/ergodox_ez/keymaps/algernon/images/base-layer.pngbin105162 -> 0 bytes
-rw-r--r--keyboards/ergodox_ez/keymaps/algernon/images/experimental-layer.pngbin105172 -> 0 bytes
-rw-r--r--keyboards/ergodox_ez/keymaps/algernon/images/one-handed-layer.pngbin91140 -> 0 bytes
-rw-r--r--keyboards/ergodox_ez/keymaps/algernon/images/steno-layer.pngbin69557 -> 0 bytes
-rw-r--r--keyboards/ergodox_ez/keymaps/algernon/readme.md230
-rwxr-xr-xkeyboards/ergodox_ez/keymaps/algernon/tools/max-focused5
-rw-r--r--keyboards/ergodox_ez/keymaps/bepo/bepo.pngbin79747 -> 0 bytes
-rw-r--r--keyboards/ergodox_ez/keymaps/coderkun_neo2/Makefile1
-rw-r--r--keyboards/ergodox_ez/keymaps/ordinary/ordinary-base.pngbin99605 -> 0 bytes
-rw-r--r--keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.pngbin124144 -> 0 bytes
-rw-r--r--keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.txt27
-rw-r--r--keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.pngbin103735 -> 0 bytes
-rw-r--r--keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt27
-rw-r--r--keyboards/ergodox_ez/keymaps/ordinary/readme.md103
-rw-r--r--keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/keymap.c46
-rw-r--r--keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/readme.md28
-rw-r--r--keyboards/ergodox_ez/readme.md44
-rw-r--r--keyboards/gh60/Makefile77
-rw-r--r--keyboards/gh60/config.h322
-rw-r--r--keyboards/gh60/gh60.c50
-rw-r--r--keyboards/gh60/gh60.h149
-rw-r--r--keyboards/gh60/keymaps/default/keymap.c36
-rw-r--r--keyboards/gh60/keymaps/robotmaxtron/Makefile224
-rw-r--r--keyboards/gh60/keymaps/robotmaxtron/config.h380
-rw-r--r--keyboards/gh60/keymaps/robotmaxtron/keymap.c58
-rw-r--r--keyboards/gh60/keymaps/sethbc/Makefile3
-rw-r--r--keyboards/gh60/keymaps/sethbc/keymap.c76
-rw-r--r--keyboards/gh60/pinout.txt34
-rw-r--r--keyboards/gh60/readme.md122
-rw-r--r--keyboards/gh60/rules.mk66
-rw-r--r--keyboards/handwired/CMD60/CMD60.c8
-rw-r--r--keyboards/handwired/CMD60/CMD60.h20
-rw-r--r--keyboards/handwired/CMD60/Makefile3
-rw-r--r--keyboards/handwired/CMD60/README.md35
-rw-r--r--keyboards/handwired/CMD60/config.h162
-rw-r--r--keyboards/handwired/CMD60/keymaps/default/keymap.c66
-rw-r--r--keyboards/handwired/CMD60/rules.mk73
-rw-r--r--keyboards/handwired/Makefile2
-rw-r--r--keyboards/handwired/fivethirteen/Makefile74
-rw-r--r--keyboards/handwired/fivethirteen/rules.mk73
-rw-r--r--keyboards/handwired/gamenum/Makefile3
-rw-r--r--keyboards/handwired/gamenum/README.md102
-rw-r--r--keyboards/handwired/gamenum/config.h162
-rw-r--r--keyboards/handwired/gamenum/gamenum.c14
-rw-r--r--keyboards/handwired/gamenum/gamenum.h21
-rw-r--r--keyboards/handwired/gamenum/keymaps/default/keymap.c68
-rw-r--r--keyboards/handwired/gamenum/rules.mk73
-rw-r--r--keyboards/handwired/minorca/Makefile3
-rw-r--r--keyboards/handwired/minorca/config.h80
-rw-r--r--keyboards/handwired/minorca/keymaps/default/Makefile25
-rw-r--r--keyboards/handwired/minorca/keymaps/default/config.h12
-rw-r--r--keyboards/handwired/minorca/keymaps/default/keymap.c44
-rw-r--r--keyboards/handwired/minorca/keymaps/default/readme.md5
-rw-r--r--keyboards/handwired/minorca/keymaps/readme.md23
-rw-r--r--keyboards/handwired/minorca/keymaps/rgb/Makefile25
-rw-r--r--keyboards/handwired/minorca/keymaps/rgb/config.h20
-rw-r--r--keyboards/handwired/minorca/keymaps/rgb/example.jpgbin0 -> 72737 bytes
-rw-r--r--keyboards/handwired/minorca/keymaps/rgb/keymap.c65
-rw-r--r--keyboards/handwired/minorca/keymaps/rgb/readme.md25
-rw-r--r--keyboards/handwired/minorca/keymaps/rgb/wiring1.jpgbin0 -> 119547 bytes
-rw-r--r--keyboards/handwired/minorca/keymaps/rgb/wiring2.jpgbin0 -> 94987 bytes
-rw-r--r--keyboards/handwired/minorca/minorca.c6
-rw-r--r--keyboards/handwired/minorca/minorca.h6
-rw-r--r--keyboards/handwired/minorca/readme.md33
-rw-r--r--keyboards/handwired/minorca/rules.mk67
-rw-r--r--keyboards/handwired/onekey/Makefile64
-rw-r--r--keyboards/handwired/onekey/rules.mk65
-rw-r--r--keyboards/handwired/promethium/Makefile3
-rw-r--r--keyboards/handwired/promethium/config.h162
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/Makefile29
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/config.h17
-rwxr-xr-xkeyboards/handwired/promethium/keymaps/priyadi/flash.sh4
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/keymap.c841
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/readme.md0
-rw-r--r--keyboards/handwired/promethium/keymaps/readme.md22
-rw-r--r--keyboards/handwired/promethium/promethium.c6
-rw-r--r--keyboards/handwired/promethium/promethium.h101
-rw-r--r--keyboards/handwired/promethium/readme.md13
-rw-r--r--keyboards/handwired/promethium/rgbsps.c24
-rw-r--r--keyboards/handwired/promethium/rgbsps.h4
-rw-r--r--keyboards/handwired/promethium/rules.mk74
-rw-r--r--keyboards/handwired/retro_refit/Makefile3
-rw-r--r--keyboards/handwired/retro_refit/config.h (renamed from keyboards/retro_refit/config.h)0
-rw-r--r--keyboards/handwired/retro_refit/keymaps/default/keymap.c (renamed from keyboards/retro_refit/keymaps/default/keymap.c)0
-rw-r--r--keyboards/handwired/retro_refit/readme.md60
-rw-r--r--keyboards/handwired/retro_refit/retro_refit.c (renamed from keyboards/retro_refit/retro_refit.c)0
-rw-r--r--keyboards/handwired/retro_refit/retro_refit.h (renamed from keyboards/retro_refit/retro_refit.h)0
-rw-r--r--keyboards/handwired/retro_refit/rules.mk (renamed from keyboards/retro_refit/Makefile)6
-rw-r--r--keyboards/handwired/rules.mk0
-rw-r--r--keyboards/handwired/traveller/Makefile3
-rw-r--r--keyboards/handwired/traveller/config.h173
-rw-r--r--keyboards/handwired/traveller/keymaps/default/keymap.c305
-rw-r--r--keyboards/handwired/traveller/keymaps/default/readme.md2
-rw-r--r--keyboards/handwired/traveller/readme.md35
-rw-r--r--keyboards/handwired/traveller/rules.mk89
-rw-r--r--keyboards/handwired/traveller/traveller.c61
-rw-r--r--keyboards/handwired/traveller/traveller.h32
-rw-r--r--keyboards/hhkb/Makefile91
-rw-r--r--keyboards/hhkb/keymaps/dbroqua/keymap.c92
-rw-r--r--keyboards/hhkb/keymaps/dbroqua/readme.md9
-rw-r--r--keyboards/hhkb/keymaps/jp/Makefile2
-rw-r--r--keyboards/hhkb/keymaps/rdg_jp/Makefile2
-rw-r--r--keyboards/hhkb/keymaps/sh_jp/Makefile1
-rw-r--r--keyboards/hhkb/keymaps/sh_jp/README.md86
-rw-r--r--keyboards/hhkb/keymaps/sh_jp/keymap.c60
-rw-r--r--keyboards/hhkb/keymaps/shela/Makefile1
-rw-r--r--keyboards/hhkb/keymaps/shela/action_pseudo_lut.c142
-rw-r--r--keyboards/hhkb/keymaps/shela/action_pseudo_lut.h15
-rw-r--r--keyboards/hhkb/keymaps/shela/config.h12
-rw-r--r--keyboards/hhkb/keymaps/shela/keymap.c179
-rw-r--r--keyboards/hhkb/keymaps/shela/keymap_jis2us.h32
-rw-r--r--keyboards/hhkb/keymaps/shela/readme.md14
-rw-r--r--keyboards/hhkb/readme.md8
-rw-r--r--keyboards/hhkb/rules.mk80
-rw-r--r--keyboards/infinity60/MEMO.txt (renamed from keyboards/infinity_ergodox/MEMO.txt)0
-rw-r--r--keyboards/infinity60/Makefile3
-rw-r--r--keyboards/infinity60/bootloader_defs.h (renamed from keyboards/infinity_ergodox/bootloader_defs.h)0
-rw-r--r--keyboards/infinity60/chconf.h (renamed from keyboards/infinity_chibios/chconf.h)1048
-rw-r--r--keyboards/infinity60/config.h (renamed from keyboards/infinity_chibios/config.h)16
-rw-r--r--keyboards/infinity60/halconf.h (renamed from keyboards/infinity_chibios/halconf.h)706
-rw-r--r--keyboards/infinity60/infinity60.c (renamed from keyboards/infinity_chibios/infinity_chibios.c)2
-rw-r--r--keyboards/infinity60/infinity60.h (renamed from keyboards/infinity_chibios/infinity_chibios.h)36
-rw-r--r--keyboards/infinity60/keymaps/default/keymap.c (renamed from keyboards/infinity_chibios/keymaps/default/keymap.c)28
-rwxr-xr-xkeyboards/infinity60/keymaps/depariel/keymap.c82
-rw-r--r--keyboards/infinity60/keymaps/hasu/keymap.c113
-rw-r--r--keyboards/infinity60/led.c (renamed from keyboards/infinity_chibios/led.c)0
-rw-r--r--keyboards/infinity60/matrix.c (renamed from keyboards/infinity_chibios/matrix.c)58
-rw-r--r--keyboards/infinity60/mcuconf.h (renamed from keyboards/infinity_chibios/mcuconf.h)110
-rw-r--r--keyboards/infinity60/readme.md29
-rw-r--r--keyboards/infinity60/rules.mk (renamed from keyboards/infinity_chibios/Makefile)6
-rw-r--r--keyboards/infinity_chibios/keymaps/hasu/keymap.c199
-rw-r--r--keyboards/infinity_ergodox/infinity_ergodox.h44
-rw-r--r--keyboards/infinity_ergodox/keymaps/default/keymap.c114
-rw-r--r--keyboards/infinity_ergodox/keymaps/default/visualizer.c168
-rw-r--r--keyboards/infinity_ergodox/led.c49
-rw-r--r--keyboards/jd40/Makefile3
-rw-r--r--keyboards/jd40/config.h79
-rw-r--r--keyboards/jd40/jd40.c26
-rw-r--r--keyboards/jd40/jd40.h45
-rw-r--r--keyboards/jd40/keymaps/default/keymap.c164
-rw-r--r--keyboards/jd40/readme.md17
-rw-r--r--keyboards/jd40/rules.mk69
-rw-r--r--keyboards/jd45/Makefile72
-rw-r--r--keyboards/jd45/keymaps/jeebak/config.h16
-rw-r--r--keyboards/jd45/keymaps/jeebak/keymap.c423
-rw-r--r--keyboards/jd45/keymaps/jeebak/readme.md129
-rw-r--r--keyboards/jd45/readme.md4
-rw-r--r--keyboards/jd45/rules.mk67
-rw-r--r--keyboards/kc60/Makefile75
-rw-r--r--keyboards/kc60/config.h2
-rw-r--r--keyboards/kc60/kc60.h77
-rw-r--r--keyboards/kc60/keymaps/dbroqua/keymap.c103
-rw-r--r--keyboards/kc60/keymaps/dbroqua/readme.md11
-rw-r--r--keyboards/kc60/keymaps/dbroqua_hhkb/keymap.c73
-rw-r--r--keyboards/kc60/keymaps/dbroqua_hhkb/readme.md9
-rw-r--r--keyboards/kc60/keymaps/default/keymap.c2
-rw-r--r--keyboards/kc60/keymaps/sgoodwin/keymap.c6
-rw-r--r--keyboards/kc60/keymaps/stanleylai/keymap.c8
-rw-r--r--keyboards/kc60/keymaps/wigguno/keymap.c4
-rw-r--r--keyboards/kc60/keymaps/workman-dead/kc60-wm-dead.pngbin0 -> 117155 bytes
-rw-r--r--keyboards/kc60/keymaps/workman-dead/keymap.c183
-rw-r--r--keyboards/kc60/keymaps/workman-dead/readme.md17
-rw-r--r--keyboards/kc60/keymaps/ws2812/config.h2
-rw-r--r--keyboards/kc60/keymaps/ws2812/keymap.c6
-rw-r--r--keyboards/kc60/led.c31
-rw-r--r--keyboards/kc60/readme.md17
-rw-r--r--keyboards/kc60/rules.mk71
-rw-r--r--keyboards/kinesis/Makefile3
-rw-r--r--keyboards/kinesis/config.h174
-rw-r--r--keyboards/kinesis/docs/kicad/kinesis-cache.lib232
-rw-r--r--keyboards/kinesis/docs/kicad/kinesis.pro83
-rw-r--r--keyboards/kinesis/docs/kicad/kinesis.sch634
-rw-r--r--keyboards/kinesis/docs/photos/P1050573.jpgbin0 -> 177711 bytes
-rw-r--r--keyboards/kinesis/docs/photos/P1050574.jpgbin0 -> 343978 bytes
-rw-r--r--keyboards/kinesis/docs/photos/P1050575.jpgbin0 -> 266771 bytes
-rw-r--r--keyboards/kinesis/docs/readme.txt52
-rw-r--r--keyboards/kinesis/docs/schematic.pngbin0 -> 175014 bytes
-rw-r--r--keyboards/kinesis/keymaps/default/Makefile21
-rw-r--r--keyboards/kinesis/keymaps/default/config.h8
-rw-r--r--keyboards/kinesis/keymaps/default/keymap.c116
-rw-r--r--keyboards/kinesis/keymaps/default/readme.md1
-rw-r--r--keyboards/kinesis/keymaps/programmer/Makefile21
-rw-r--r--keyboards/kinesis/keymaps/programmer/config.h8
-rw-r--r--keyboards/kinesis/keymaps/programmer/keymap.c245
-rw-r--r--keyboards/kinesis/keymaps/programmer/readme.md2
-rw-r--r--keyboards/kinesis/kinesis.c106
-rw-r--r--keyboards/kinesis/kinesis.h67
-rw-r--r--keyboards/kinesis/matrix.c228
-rw-r--r--keyboards/kinesis/readme.md42
-rw-r--r--keyboards/kinesis/rules.mk73
-rw-r--r--keyboards/kitten_paw/Makefile3
-rw-r--r--keyboards/kitten_paw/config.h162
-rw-r--r--keyboards/kitten_paw/keymaps/default/keymap.c51
-rw-r--r--keyboards/kitten_paw/keymaps/ickerwx/config.h31
-rw-r--r--keyboards/kitten_paw/keymaps/ickerwx/keymap.c242
-rw-r--r--keyboards/kitten_paw/keymaps/ickerwx/readme.md18
-rw-r--r--keyboards/kitten_paw/kitten_paw.c43
-rw-r--r--keyboards/kitten_paw/kitten_paw.h58
-rw-r--r--keyboards/kitten_paw/matrix.c165
-rw-r--r--keyboards/kitten_paw/readme.md32
-rw-r--r--keyboards/kitten_paw/rules.mk72
-rw-r--r--keyboards/lets_split/Makefile77
-rw-r--r--keyboards/lets_split/config.h43
-rw-r--r--keyboards/lets_split/i2c.c3
-rw-r--r--keyboards/lets_split/imgs/letssplitv2.svg5817
-rw-r--r--keyboards/lets_split/keymaps/default/keymap.c46
-rw-r--r--keyboards/lets_split/keymaps/i2c/config.h (renamed from keyboards/ergodox_ez/keymaps/townk_osx/config.h)54
-rw-r--r--keyboards/lets_split/keymaps/i2c/keymap.c214
-rw-r--r--keyboards/lets_split/keymaps/serial/config.h102
-rw-r--r--keyboards/lets_split/keymaps/serial/keymap.c214
-rw-r--r--keyboards/lets_split/lets_split.c31
-rw-r--r--keyboards/lets_split/lets_split.h26
-rw-r--r--keyboards/lets_split/matrix.c23
-rw-r--r--keyboards/lets_split/pro_micro.h64
-rw-r--r--keyboards/lets_split/readme.md13
-rw-r--r--keyboards/lets_split/rev1/Makefile3
-rw-r--r--keyboards/lets_split/rev1/config.h94
-rw-r--r--keyboards/lets_split/rev1/rev1.c32
-rw-r--r--keyboards/lets_split/rev1/rev1.h28
-rw-r--r--keyboards/lets_split/rev1/rules.mk5
-rw-r--r--keyboards/lets_split/rev2/Makefile3
-rw-r--r--keyboards/lets_split/rev2/config.h102
-rw-r--r--keyboards/lets_split/rev2/rev2.c32
-rw-r--r--keyboards/lets_split/rev2/rev2.h28
-rw-r--r--keyboards/lets_split/rev2/rules.mk5
-rw-r--r--keyboards/lets_split/rules.mk75
-rw-r--r--keyboards/lets_split/serial.c5
-rw-r--r--keyboards/lets_split/split_util.c8
-rw-r--r--keyboards/maxipad/Makefile3
-rw-r--r--keyboards/maxipad/config.h95
-rw-r--r--keyboards/maxipad/keymaps/default/keymap.c26
-rw-r--r--keyboards/maxipad/maxipad.c1
-rw-r--r--keyboards/maxipad/maxipad.h25
-rw-r--r--keyboards/maxipad/readme.md (renamed from keyboards/retro_refit/readme.md)19
-rw-r--r--keyboards/maxipad/rules.mk76
-rw-r--r--keyboards/pegasushoof/Makefile3
-rw-r--r--keyboards/pegasushoof/README.md24
-rw-r--r--keyboards/pegasushoof/config.h46
-rw-r--r--keyboards/pegasushoof/keymaps/blowrak/Makefile22
-rw-r--r--keyboards/pegasushoof/keymaps/blowrak/keymap.c112
-rw-r--r--keyboards/pegasushoof/keymaps/default/Makefile22
-rw-r--r--keyboards/pegasushoof/keymaps/default/keymap.c60
-rw-r--r--keyboards/pegasushoof/matrix.c204
-rw-r--r--keyboards/pegasushoof/pegasushoof.c51
-rw-r--r--keyboards/pegasushoof/pegasushoof.h51
-rw-r--r--keyboards/pegasushoof/rules.mk67
-rw-r--r--keyboards/phantom/Makefile75
-rw-r--r--keyboards/phantom/config.h2
-rw-r--r--keyboards/phantom/keymaps/xyverz/keymap.c104
-rw-r--r--keyboards/phantom/readme.md4
-rw-r--r--keyboards/phantom/rules.mk69
-rw-r--r--keyboards/planck/Makefile71
-rw-r--r--keyboards/planck/keymaps/bone2planck/Makefile4
-rw-r--r--keyboards/planck/keymaps/bone2planck/config.h7
-rw-r--r--keyboards/planck/keymaps/bone2planck/keymap.c207
-rw-r--r--keyboards/planck/keymaps/bone2planck/readme.md8
-rw-r--r--keyboards/planck/keymaps/brandon/Makefile4
-rw-r--r--keyboards/planck/keymaps/callum/Makefile25
-rw-r--r--keyboards/planck/keymaps/callum/keymap.c182
-rw-r--r--keyboards/planck/keymaps/callum/readme.md71
-rw-r--r--keyboards/planck/keymaps/cbbrowne/Makefile7
-rw-r--r--keyboards/planck/keymaps/cbbrowne/config.h11
-rw-r--r--keyboards/planck/keymaps/cbbrowne/keymap.c110
-rw-r--r--keyboards/planck/keymaps/cbbrowne/readme.md67
-rw-r--r--keyboards/planck/keymaps/circuit/Makefile25
-rw-r--r--keyboards/planck/keymaps/circuit/Readme.md44
-rw-r--r--keyboards/planck/keymaps/circuit/config.h91
-rw-r--r--keyboards/planck/keymaps/circuit/keyboard-layout.pngbin0 -> 154368 bytes
-rw-r--r--keyboards/planck/keymaps/circuit/keymap.c258
-rw-r--r--keyboards/planck/keymaps/dbroqua/keymap.c234
-rw-r--r--keyboards/planck/keymaps/dbroqua/layout.pngbin0 -> 21895 bytes
-rw-r--r--keyboards/planck/keymaps/dbroqua/readme.md14
-rw-r--r--keyboards/planck/keymaps/default/Makefile12
-rw-r--r--keyboards/planck/keymaps/default/keymap.c4
-rw-r--r--keyboards/planck/keymaps/experimental/Makefile1
-rw-r--r--keyboards/planck/keymaps/experimental/config.h2
-rw-r--r--keyboards/planck/keymaps/experimental/keymap.c9
-rw-r--r--keyboards/planck/keymaps/impossible/Makefile27
-rw-r--r--keyboards/planck/keymaps/impossible/keymap.c242
-rw-r--r--keyboards/planck/keymaps/impossible/readme.md73
-rw-r--r--keyboards/planck/keymaps/jeebak/Makefile27
-rw-r--r--keyboards/planck/keymaps/jeebak/keymap.c459
-rw-r--r--keyboards/planck/keymaps/jeebak/readme.md127
-rw-r--r--keyboards/planck/keymaps/jhenahan/Makefile27
-rw-r--r--keyboards/planck/keymaps/jhenahan/config.h9
-rw-r--r--keyboards/planck/keymaps/jhenahan/keymap.c314
-rw-r--r--keyboards/planck/keymaps/jhenahan/readme.md41
-rw-r--r--keyboards/planck/keymaps/joe/Makefile5
-rw-r--r--keyboards/planck/keymaps/leo/Makefile5
-rw-r--r--keyboards/planck/keymaps/lucas/Makefile5
-rw-r--r--keyboards/planck/keymaps/mollat/Makefile5
-rw-r--r--keyboards/planck/keymaps/nico/Makefile5
-rw-r--r--keyboards/planck/keymaps/premek/Makefile28
-rw-r--r--keyboards/planck/keymaps/premek/keymap.c231
-rw-r--r--keyboards/planck/keymaps/premek/readme.md4
-rw-r--r--keyboards/planck/keymaps/priyadi/Makefile25
-rw-r--r--keyboards/planck/keymaps/priyadi/keymap.c447
-rw-r--r--keyboards/planck/keymaps/priyadi/readme.md11
-rw-r--r--keyboards/planck/keymaps/pvc/Makefile11
-rw-r--r--keyboards/planck/keymaps/pvc/config.h21
-rw-r--r--keyboards/planck/keymaps/pvc/keymap.c509
-rw-r--r--keyboards/planck/keymaps/sgoodwin/Makefile28
-rw-r--r--keyboards/planck/keymaps/sgoodwin/keymap.c233
-rw-r--r--keyboards/planck/keymaps/sgoodwin/readme.md10
-rw-r--r--keyboards/planck/keymaps/tak3over/Makefile5
-rw-r--r--keyboards/planck/keymaps/thermal_printer/Makefile29
-rw-r--r--keyboards/planck/keymaps/thermal_printer/config.h23
-rw-r--r--keyboards/planck/keymaps/thermal_printer/keymap.c314
-rw-r--r--keyboards/planck/keymaps/thermal_printer/readme.md2
-rw-r--r--keyboards/planck/keymaps/tong92/Makefile62
-rw-r--r--keyboards/planck/keymaps/tong92/keymap.c146
-rw-r--r--keyboards/planck/keymaps/tong92/readme.md66
-rw-r--r--keyboards/planck/keymaps/vifon/Makefile28
-rw-r--r--keyboards/planck/keymaps/vifon/config.h91
-rw-r--r--keyboards/planck/keymaps/vifon/keymap.c187
-rw-r--r--keyboards/planck/keymaps/xyverz/keymap.c262
-rw-r--r--keyboards/planck/keymaps/xyverz/makefile.mk25
-rw-r--r--keyboards/planck/keymaps/yang/config.h2
-rw-r--r--keyboards/planck/planck.c12
-rw-r--r--keyboards/planck/readme.md8
-rw-r--r--keyboards/planck/rev3/rules.mk (renamed from keyboards/planck/rev3/Makefile)0
-rw-r--r--keyboards/planck/rev4/Makefile4
-rw-r--r--keyboards/planck/rev4/rules.mk5
-rw-r--r--keyboards/planck/rules.mk68
-rw-r--r--keyboards/preonic/Makefile72
-rw-r--r--keyboards/preonic/config.h2
-rw-r--r--keyboards/preonic/keymaps/0xdec/Makefile21
-rw-r--r--keyboards/preonic/keymaps/0xdec/README.md30
-rw-r--r--keyboards/preonic/keymaps/0xdec/config.h10
-rw-r--r--keyboards/preonic/keymaps/0xdec/keymap.c173
-rw-r--r--keyboards/preonic/keymaps/CMD-Preonic/README.md77
-rw-r--r--keyboards/preonic/keymaps/CMD-Preonic/keymap.c332
-rw-r--r--keyboards/preonic/keymaps/CMD-Preonic/makefile23
-rw-r--r--keyboards/preonic/keymaps/default/Makefile22
-rw-r--r--keyboards/preonic/keymaps/default/keymap.c10
-rw-r--r--keyboards/preonic/keymaps/jacwib/Makefile20
-rw-r--r--keyboards/preonic/keymaps/jacwib/config.h9
-rw-r--r--keyboards/preonic/keymaps/jacwib/keymap.c293
-rw-r--r--keyboards/preonic/keymaps/jacwib/readme.md15
-rw-r--r--keyboards/preonic/keymaps/kinesis/Makefile27
-rw-r--r--keyboards/preonic/keymaps/kinesis/config.h (renamed from keyboards/ergodox_ez/config.h)44
-rw-r--r--keyboards/preonic/keymaps/kinesis/keymap.c144
-rw-r--r--keyboards/preonic/keymaps/kinesis/readme.md1
-rw-r--r--keyboards/preonic/keymaps/xyverz/keymap.c342
-rw-r--r--keyboards/preonic/keymaps/xyverz/makefile.mk1
-rw-r--r--keyboards/preonic/preonic.c11
-rw-r--r--keyboards/preonic/readme.md8
-rw-r--r--keyboards/preonic/rules.mk70
-rw-r--r--keyboards/readme.md46
-rw-r--r--keyboards/s60-x/Makefile3
-rw-r--r--keyboards/s60-x/config.h164
-rw-r--r--keyboards/s60-x/keymaps/ansi_qwertz/Makefile21
-rw-r--r--keyboards/s60-x/keymaps/ansi_qwertz/config.h14
-rw-r--r--keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.pngbin0 -> 54748 bytes
-rw-r--r--keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg1046
-rw-r--r--keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg1049
-rw-r--r--keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.pngbin0 -> 54041 bytes
-rw-r--r--keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.svg935
-rw-r--r--keyboards/s60-x/keymaps/ansi_qwertz/docs/base_layer.PNGbin0 -> 29411 bytes
-rw-r--r--keyboards/s60-x/keymaps/ansi_qwertz/docs/function_layer.PNGbin0 -> 25567 bytes
-rw-r--r--keyboards/s60-x/keymaps/ansi_qwertz/docs/gaming_layer.PNGbin0 -> 17895 bytes
-rw-r--r--keyboards/s60-x/keymaps/ansi_qwertz/keymap.c237
-rw-r--r--keyboards/s60-x/keymaps/ansi_qwertz/readme.md94
-rw-r--r--keyboards/s60-x/keymaps/custom/keymap.c28
-rw-r--r--keyboards/s60-x/keymaps/custom/readme.md15
-rw-r--r--keyboards/s60-x/keymaps/default/keymap.c48
-rw-r--r--keyboards/s60-x/keymaps/default/readme.md27
-rw-r--r--keyboards/s60-x/keymaps/hasu/keymap.c182
-rw-r--r--keyboards/s60-x/keymaps/hasu/readme.md4
-rw-r--r--keyboards/s60-x/keymaps/hhkb/keymap.c52
-rw-r--r--keyboards/s60-x/keymaps/hhkb/readme.md26
-rw-r--r--keyboards/s60-x/keymaps/iso/keymap.c48
-rw-r--r--keyboards/s60-x/keymaps/iso/readme.md28
-rw-r--r--keyboards/s60-x/keymaps/jpec/keymap.c92
-rw-r--r--keyboards/s60-x/keymaps/jpec/readme.md1
-rw-r--r--keyboards/s60-x/keymaps/plain/keymap.c25
-rw-r--r--keyboards/s60-x/keymaps/plain/readme.md16
-rw-r--r--keyboards/s60-x/keymaps/poker/keymap.c180
-rw-r--r--keyboards/s60-x/keymaps/poker/readme.md31
-rw-r--r--keyboards/s60-x/keymaps/poker_bit/keymap.c110
-rw-r--r--keyboards/s60-x/keymaps/poker_bit/readme.md31
-rw-r--r--keyboards/s60-x/keymaps/poker_set/keymap.c178
-rw-r--r--keyboards/s60-x/keymaps/poker_set/readme.md31
-rw-r--r--keyboards/s60-x/keymaps/spacefn/keymap.c55
-rw-r--r--keyboards/s60-x/keymaps/spacefn/readme.md27
-rw-r--r--keyboards/s60-x/readme.md260
-rw-r--r--keyboards/s60-x/rules.mk69
-rw-r--r--keyboards/s60-x/s60-x.c28
-rw-r--r--keyboards/s60-x/s60-x.h69
-rw-r--r--keyboards/s60-x/s60-x_precompiled.zipbin0 -> 276106 bytes
-rw-r--r--keyboards/satan/Makefile71
-rw-r--r--keyboards/satan/config.h2
-rw-r--r--keyboards/satan/keymaps/dbroqua_hhkb/keymap.c110
-rw-r--r--keyboards/satan/keymaps/dbroqua_hhkb/readme.md9
-rw-r--r--keyboards/satan/keymaps/default/Makefile21
-rw-r--r--keyboards/satan/keymaps/default/keymap.c36
-rw-r--r--keyboards/satan/keymaps/default/readme.md1
-rw-r--r--keyboards/satan/keymaps/denolfe/Makefile20
-rw-r--r--keyboards/satan/keymaps/denolfe/README.md12
-rw-r--r--keyboards/satan/keymaps/denolfe/keyboard-layout.pngbin0 -> 31762 bytes
-rw-r--r--keyboards/satan/keymaps/denolfe/keymap.c171
-rw-r--r--keyboards/satan/keymaps/iso_split_rshift/.gitignore3
-rw-r--r--keyboards/satan/keymaps/iso_split_rshift/LEDpinSatan.jpgbin0 -> 793980 bytes
-rw-r--r--keyboards/satan/keymaps/iso_split_rshift/Makefile16
-rwxr-xr-xkeyboards/satan/keymaps/iso_split_rshift/build.sh42
-rw-r--r--keyboards/satan/keymaps/iso_split_rshift/config.h27
-rw-r--r--keyboards/satan/keymaps/iso_split_rshift/keymap.c209
-rw-r--r--keyboards/satan/keymaps/iso_split_rshift/readme.md36
-rwxr-xr-xkeyboards/satan/keymaps/iso_split_rshift/resetboard.sh4
-rw-r--r--keyboards/satan/keymaps/poker/keymap.c46
-rw-r--r--keyboards/satan/keymaps/sethbc/Makefile21
-rw-r--r--keyboards/satan/keymaps/sethbc/keymap.c25
-rw-r--r--keyboards/satan/keymaps/sethbc/readme.md3
-rw-r--r--keyboards/satan/keymaps/stanleylai/config.h15
-rw-r--r--keyboards/satan/keymaps/stanleylai/keymap.c22
-rw-r--r--keyboards/satan/readme.md4
-rw-r--r--keyboards/satan/rules.mk66
-rw-r--r--keyboards/satan/satan.h91
-rw-r--r--keyboards/sixkeyboard/Makefile76
-rw-r--r--keyboards/sixkeyboard/rules.mk70
-rw-r--r--keyboards/tada68/Makefile3
-rw-r--r--keyboards/tada68/config.h97
-rw-r--r--keyboards/tada68/keymaps/default/Makefile21
-rw-r--r--keyboards/tada68/keymaps/default/keymap.c98
-rw-r--r--keyboards/tada68/keymaps/default/readme.md1
-rw-r--r--keyboards/tada68/readme.md4
-rw-r--r--keyboards/tada68/rules.mk (renamed from keyboards/clueboard2/Makefile)7
-rw-r--r--keyboards/tada68/tada68.c30
-rw-r--r--keyboards/tada68/tada68.h43
-rw-r--r--keyboards/tv44/Makefile3
-rw-r--r--keyboards/tv44/config.h162
-rw-r--r--keyboards/tv44/keymaps/default/Makefile21
-rw-r--r--keyboards/tv44/keymaps/default/config.h8
-rw-r--r--keyboards/tv44/keymaps/default/keymap.c97
-rw-r--r--keyboards/tv44/keymaps/default/readme.md1
-rw-r--r--keyboards/tv44/keymaps/jeebak/Makefile21
-rw-r--r--keyboards/tv44/keymaps/jeebak/config.h21
-rw-r--r--keyboards/tv44/keymaps/jeebak/keymap.c425
-rw-r--r--keyboards/tv44/keymaps/jeebak/readme.md129
-rw-r--r--keyboards/tv44/keymaps/xyverz/Makefile21
-rw-r--r--keyboards/tv44/keymaps/xyverz/config.h8
-rw-r--r--keyboards/tv44/keymaps/xyverz/keymap.c92
-rw-r--r--keyboards/tv44/keymaps/xyverz/readme.md1
-rw-r--r--keyboards/tv44/readme.md28
-rw-r--r--keyboards/tv44/rules.mk69
-rw-r--r--keyboards/tv44/tv44.c28
-rw-r--r--keyboards/tv44/tv44.h22
-rw-r--r--keyboards/vision_division/Makefile3
-rw-r--r--keyboards/vision_division/Potential Layouts.txt84
-rw-r--r--keyboards/vision_division/config.h148
-rw-r--r--keyboards/vision_division/keymaps/default/Makefile21
-rw-r--r--keyboards/vision_division/keymaps/default/config.h81
-rw-r--r--keyboards/vision_division/keymaps/default/keymap.c622
-rw-r--r--keyboards/vision_division/keymaps/default/readme.md1
-rw-r--r--keyboards/vision_division/matrix_types.h168
-rw-r--r--keyboards/vision_division/readme.md34
-rw-r--r--keyboards/vision_division/rules.mk70
-rw-r--r--keyboards/vision_division/vision_division.c68
-rw-r--r--keyboards/vision_division/vision_division.h6
m---------lib/googletest0
-rw-r--r--message.mk79
-rw-r--r--quantum/api.c178
-rw-r--r--quantum/api.h59
-rw-r--r--quantum/api/api_sysex.c29
-rw-r--r--quantum/api/api_sysex.h10
-rw-r--r--quantum/audio/song_list.h8
-rw-r--r--quantum/audio/voices.c23
-rw-r--r--quantum/audio/voices.h1
-rw-r--r--quantum/config_common.h138
-rw-r--r--quantum/dynamic_macro.h231
-rw-r--r--quantum/keycode_config.h5
-rw-r--r--quantum/keymap.h40
-rw-r--r--quantum/keymap_common.c2
-rw-r--r--quantum/keymap_extras/keymap_bepo.h4
-rw-r--r--quantum/keymap_extras/keymap_br_abnt2.h58
-rw-r--r--quantum/keymap_extras/keymap_canadian_multilingual.h255
-rw-r--r--quantum/keymap_extras/keymap_dvorak.h19
-rw-r--r--quantum/keymap_extras/keymap_dvp.h82
-rw-r--r--quantum/keymap_extras/keymap_fr_ch.h2
-rw-r--r--quantum/keymap_extras/keymap_french.h4
-rw-r--r--quantum/keymap_extras/keymap_german.h2
-rw-r--r--quantum/keymap_extras/keymap_german_ch.h2
-rw-r--r--quantum/keymap_extras/keymap_jp.h62
-rw-r--r--quantum/keymap_extras/keymap_nordic.h6
-rw-r--r--quantum/keymap_extras/keymap_norwegian.h2
-rw-r--r--quantum/keymap_extras/keymap_russian.h77
-rw-r--r--quantum/keymap_extras/keymap_spanish.h2
-rw-r--r--quantum/keymap_extras/keymap_uk.h4
-rw-r--r--quantum/keymap_extras/keymap_unicode_cyrillic.h163
-rwxr-xr-xquantum/light_ws2812.c151
-rwxr-xr-xquantum/light_ws2812.h21
-rw-r--r--quantum/matrix.c326
-rw-r--r--quantum/pincontrol.h37
-rw-r--r--quantum/process_keycode/process_midi.c28
-rw-r--r--quantum/process_keycode/process_music.c13
-rw-r--r--quantum/process_keycode/process_printer.c254
-rw-r--r--quantum/process_keycode/process_printer.h8
-rw-r--r--quantum/process_keycode/process_printer_bb.c260
-rw-r--r--quantum/process_keycode/process_tap_dance.c144
-rw-r--r--quantum/process_keycode/process_tap_dance.h52
-rw-r--r--quantum/process_keycode/process_unicode.c261
-rw-r--r--quantum/process_keycode/process_unicode.h55
-rw-r--r--quantum/quantum.c235
-rw-r--r--quantum/quantum.h15
-rw-r--r--quantum/rgblight.c809
-rw-r--r--quantum/rgblight.h21
-rw-r--r--quantum/serial_link/protocol/byte_stuffer.c3
-rw-r--r--quantum/serial_link/protocol/byte_stuffer.h3
-rw-r--r--quantum/serial_link/protocol/transport.c4
-rw-r--r--quantum/serial_link/protocol/transport.h7
-rw-r--r--quantum/serial_link/tests/byte_stuffer_tests.cpp (renamed from quantum/serial_link/tests/byte_stuffer_tests.c)313
-rw-r--r--quantum/serial_link/tests/frame_router_tests.c231
-rw-r--r--quantum/serial_link/tests/frame_router_tests.cpp229
-rw-r--r--quantum/serial_link/tests/frame_validator_tests.cpp (renamed from quantum/serial_link/tests/frame_validator_tests.c)90
-rw-r--r--quantum/serial_link/tests/rules.mk22
-rw-r--r--quantum/serial_link/tests/testlist.mk6
-rw-r--r--quantum/serial_link/tests/transport_tests.c168
-rw-r--r--quantum/serial_link/tests/transport_tests.cpp188
-rw-r--r--quantum/serial_link/tests/triple_buffered_object_tests.cpp (renamed from quantum/serial_link/tests/triple_buffered_object_tests.c)52
-rw-r--r--quantum/template/Makefile76
-rw-r--r--quantum/template/readme.md10
-rw-r--r--quantum/template/rules.mk67
-rw-r--r--quantum/variable_trace.c110
-rw-r--r--quantum/variable_trace.h34
-rw-r--r--readme.md857
-rw-r--r--testlist.mk13
-rw-r--r--tmk_core/avr.mk11
-rw-r--r--tmk_core/chibios.mk12
-rw-r--r--tmk_core/common.mk86
-rw-r--r--tmk_core/common/action.c89
-rw-r--r--tmk_core/common/action.h18
-rw-r--r--tmk_core/common/action_code.h28
-rw-r--r--tmk_core/common/action_layer.c2
-rw-r--r--tmk_core/common/action_util.c10
-rw-r--r--tmk_core/common/avr/bootloader.c8
-rw-r--r--tmk_core/common/avr/suspend.c11
-rw-r--r--tmk_core/common/avr/timer.c36
-rw-r--r--tmk_core/common/avr/xprintf.S1000
-rw-r--r--tmk_core/common/avr/xprintf.h222
-rw-r--r--tmk_core/common/backlight.c4
-rw-r--r--tmk_core/common/bootmagic.c4
-rw-r--r--tmk_core/common/command.c20
-rw-r--r--tmk_core/common/host.c5
-rw-r--r--tmk_core/common/host.h4
-rw-r--r--tmk_core/common/host_driver.h9
-rw-r--r--tmk_core/common/keyboard.c4
-rw-r--r--tmk_core/common/magic.c4
-rw-r--r--tmk_core/common/mbed/xprintf.cpp2
-rw-r--r--tmk_core/common/mbed/xprintf.h2
-rw-r--r--tmk_core/common/print.h172
-rw-r--r--tmk_core/common/raw_hid.h8
-rw-r--r--tmk_core/common/virtser.h10
-rw-r--r--tmk_core/native.mk24
-rw-r--r--tmk_core/protocol/chibios/usb_main.c19
-rw-r--r--tmk_core/protocol/iwrap/suart.S312
-rw-r--r--tmk_core/protocol/iwrap/suart.h16
-rw-r--r--tmk_core/protocol/iwrap/wd.h318
-rw-r--r--tmk_core/protocol/lufa.mk8
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/asf.xml322
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/Bootloaders/DFU/asf.xml312
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/Bootloaders/HID/asf.xml246
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/BootloaderAPITable.S204
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/asf.xml312
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/makefile136
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/BootloaderAPITable.S182
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/asf.xml318
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/makefile110
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/Build/HID_EEPROM_Loader/makefile84
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/asf.xml110
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/HostTemplate/asf.xml82
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/DoxygenPages/BuildSystem.txt1950
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/mshelp/placeholder.txt2
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/placeholder.txt2
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_hv1_transform.xslt90
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_studio_help_styling.css106
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/[Content_Types].xml26
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/asf-manifest.xml36
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/extension.vsixmanifest66
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/generate_caches.py76
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa.xml192
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_common.xml68
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board.xml228
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board_names.xml1706
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_misc.xml112
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_peripheral.xml396
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb.xml62
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_class.xml64
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core.xml170
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_avr8.xml86
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_uc3.xml84
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_xmega.xml72
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform.xml120
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_uc3.xml52
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_xmega.xml46
-rw-r--r--tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_toolchain.xml86
-rw-r--r--tmk_core/protocol/lufa/adafruit_ble.cpp805
-rw-r--r--tmk_core/protocol/lufa/adafruit_ble.h60
-rw-r--r--tmk_core/protocol/lufa/descriptor.c201
-rw-r--r--tmk_core/protocol/lufa/descriptor.h88
-rw-r--r--tmk_core/protocol/lufa/lufa.c351
-rw-r--r--tmk_core/protocol/lufa/lufa.h13
-rw-r--r--tmk_core/protocol/lufa/ringbuffer.hpp66
-rw-r--r--tmk_core/protocol/midi.mk1
-rwxr-xr-xtmk_core/protocol/midi/Config/LUFAConfig.h186
-rw-r--r--tmk_core/protocol/pjrc/usb.c18
-rw-r--r--tmk_core/protocol/pjrc/usb_keyboard.c8
-rw-r--r--tmk_core/protocol/ps2_mouse.c330
-rw-r--r--tmk_core/protocol/ps2_mouse.h131
-rw-r--r--tmk_core/readme.md2
-rw-r--r--tmk_core/ring_buffer.h26
-rw-r--r--tmk_core/rules.mk351
-rw-r--r--tmk_core/tool/chibios/ch-bootloader-jump.patch204
-rw-r--r--util/Win_Check.bat208
-rw-r--r--util/ergodox_ez.html1
-rwxr-xr-x[-rw-r--r--]util/install_dependencies.sh17
-rwxr-xr-xutil/new_project.sh1
-rw-r--r--util/travis_compiled_push.sh6
1043 files changed, 67867 insertions, 16377 deletions
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 000000000..92dfc3c61
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,94 @@
+# auto for anything unspecified
+* text=auto
+
+# sources
+*.c text
+*.cc text
+*.cxx text
+*.cpp text
+*.c++ text
+*.hpp text
+*.h text
+*.h++ text
+*.hh text
+*.bat text
+*.coffee text
+*.css text
+*.htm text
+*.html text
+*.inc text
+*.ini text
+*.js text
+*.jsx text
+*.json text
+*.less text
+*.php text
+*.pl text
+*.py text
+*.rb text
+*.sass text
+*.scm text
+*.scss text
+*.sh text
+*.sql text
+*.styl text
+*.ts text
+*.xml text
+*.xhtml text
+
+# make files (need to always use lf for compatibility with Windows 10 bash)
+Makefile eol=lf
+*.mk eol=lf
+
+# make files (need to always use lf for compatibility with Windows 10 bash)
+*.sh eol=lf
+
+# documentation
+*.markdown text
+*.md text
+*.mdwn text
+*.mdown text
+*.mkd text
+*.mkdn text
+*.mdtxt text
+*.mdtext text
+*.txt text
+AUTHORS text
+CHANGELOG text
+CHANGES text
+CONTRIBUTING text
+COPYING text
+INSTALL text
+license text
+LICENSE text
+NEWS text
+readme text
+*README* text
+TODO text
+
+GRAPHICS
+*.ai binary
+*.bmp binary
+*.eps binary
+*.gif binary
+*.ico binary
+*.jng binary
+*.jp2 binary
+*.jpg binary
+*.jpeg binary
+*.jpx binary
+*.jxr binary
+*.pdf binary
+*.png binary
+*.psb binary
+*.psd binary
+*.svg text
+*.svgz binary
+*.tif binary
+*.tiff binary
+*.wbmp binary
+*.webp binary
+
+# hex files
+*.hex binary
+*.eep binary
diff --git a/.gitignore b/.gitignore
index 7c1e434e3..f66a961fd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,6 +17,7 @@ build/
.build/
*.bak
.vagrant/
+quantum/version.h
.idea/
CMakeLists.txt
.DS_STORE
@@ -26,3 +27,8 @@ CMakeLists.txt
.project
.settings/
.idea
+.browse.VC.db*
+*.stackdump
+util/Win_Check_Output.txt
+.vscode
+.stfolder
diff --git a/.gitmodules b/.gitmodules
index 7e3c92d03..12b7cb918 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -7,3 +7,6 @@
[submodule "lib/ugfx"]
path = lib/ugfx
url = https://bitbucket.org/Tectu/ugfx
+[submodule "lib/googletest"]
+ path = lib/googletest
+ url = https://github.com/google/googletest
diff --git a/.travis.yml b/.travis.yml
index 26deac0ce..e74744a96 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,8 +9,11 @@ branches:
env:
global:
- secure: vBTSL34BDPxDilKUuTXqU4CJ26Pv5hogD2nghatkxSQkI1/jbdnLj/DQdPUrMJFDIY6TK3AltsBx72MaMsLQ1JO/Ou24IeHINHXzUC1FlS9yQa48cpxnhX5kzXNyGs3oa0qaFbvnr7RgYRWtmD52n4bIZuSuW+xpBv05x2OCizdT2ZonH33nATaHGFasxROm4qYZ241VfzcUv766V6RVHgL4x9V08warugs+RENVkfzxxwhk3NmkrISabze0gSVJLHBPHxroZC6EUcf/ocobcuDrCwFqtEt90i7pNIAFUE7gZsN2uE75LmpzAWin21G7lLPcPL2k4FJVd8an1HiP2WmscJU6U89fOfMb2viObnKcCzebozBCmKGtHEuXZo9FcReOx49AnQSpmESJGs+q2dL/FApkTjQiyT4J6O5dJpoww0/r57Wx0cmmqjETKBb5rSgXM51Etk3wO09mvcPHsEwrT7qH8r9XWdyCDoEn7FCLX3/LYnf/D4SmZ633YPl5gv3v9XEwxR5+04akjgnvWDSNIaDbWBdxHNb7l4pMc+WR1bwCyMyA7KXj0RrftEGOrm9ZRLe6BkbT4cycA+j77nbPOMcyZChliV9pPQos+4TOJoTzcK2L8yWVoY409aDNVuAjdP6Yum0R2maBGl/etLmIMpJC35C5/lZ+dUNjJAM=
+ matrix:
+ - TARGET=all-keyboards AUTOGEN=true
+ - TARGET=test AUTOGEN=false
script:
-- make all-keyboards-quick AUTOGEN=true
+- make $TARGET AUTOGEN=$AUTOGEN
addons:
apt:
packages:
@@ -21,4 +24,8 @@ addons:
- gcc-arm-none-eabi
- binutils-arm-none-eabi
- libnewlib-arm-none-eabi
-after_success: bash util/travis_compiled_push.sh
+ - diffutils
+after_success:
+ if [ "$AUTOGEN" == "true" ]; then
+ bash util/travis_compiled_push.sh;
+ fi
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 000000000..c42bbeb32
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,28 @@
+FROM debian:jessie
+MAINTAINER Erik Dasque <erik@frenchguys.com>
+
+RUN apt-get update
+RUN apt-get install --no-install-recommends -y build-essential \
+ gcc \
+ unzip \
+ wget \
+ zip \
+ gcc-avr \
+ binutils-avr \
+ avr-libc \
+ dfu-programmer \
+ dfu-util \
+ gcc-arm-none-eabi \
+ binutils-arm-none-eabi \
+ libnewlib-arm-none-eabi \
+ git
+
+RUN apt-get clean
+RUN rm -rf /var/lib/apt/lists/*
+
+ENV keyboard=ergodox
+ENV subproject=ez
+ENV keymap=default
+
+VOLUME /qmk
+WORKDIR /qmk \ No newline at end of file
diff --git a/Makefile b/Makefile
index a7a10bf32..aa33c40f1 100644
--- a/Makefile
+++ b/Makefile
@@ -2,267 +2,554 @@ ifndef VERBOSE
.SILENT:
endif
-.DEFAULT_GOAL := all
-
-space := $(subst ,, )
-starting_makefile := $(subst $(space),_SPACE_,$(abspath $(firstword $(MAKEFILE_LIST))))
-mkfile_path := $(subst $(space),_SPACE_,$(abspath $(lastword $(MAKEFILE_LIST))))
-abs_tmk_root := $(patsubst %/,%,$(dir $(mkfile_path)))
-
-ifneq (,$(findstring /keyboards/,$(starting_makefile)))
- possible_keyboard:=$(patsubst %/,%,$(dir $(patsubst $(abs_tmk_root)/keyboards/%,%,$(starting_makefile))))
- ifneq (,$(findstring /keymaps/,$(possible_keyboard)))
- KEYMAP_DIR:=$(lastword $(subst /keymaps/, ,$(possible_keyboard)))
- KEYBOARD_DIR:=$(firstword $(subst /keymaps/, ,$(possible_keyboard)))
- ifneq (,$(findstring /,$(KEYBOARD_DIR)))
- # SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR)))
- # KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR)))
- tmk_root = ../../..
- else
- tmk_root = ../../../..
- endif
- else
- KEYMAP_DIR:=default
- KEYBOARD_DIR:=$(possible_keyboard)
- ifneq (,$(findstring /,$(KEYBOARD_DIR)))
- # SUBPROJECT_DIR:=$(lastword $(subst /, ,$(KEYBOARD_DIR)))
- # KEYBOARD_DIR:=$(firstword $(subst /, ,$(KEYBOARD_DIR)))
- tmk_root = ../../..
- else
- tmk_root = ../..
- endif
- endif
-else
- tmk_root = .
-endif
-# $(info $(KEYBOARD_DIR))
-# $(info $(KEYMAP_DIR))
-# $(info $(SUBPROJECT_DIR))
-
-# Directory common source filess exist
-TOP_DIR = $(tmk_root)
-TMK_DIR = tmk_core
-TMK_PATH = $(TOP_DIR)/$(TMK_DIR)
-LIB_PATH = $(TOP_DIR)/lib
-
-QUANTUM_DIR = quantum
-QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR)
-
-
+# Never run this makefile in parallel, as it could screw things up
+# It won't affect the submakes, so you still get the speedup from specifying -jx
+.NOTPARALLEL:
+
+# Allow the silent with lower caps to work the same way as upper caps
+ifdef silent
+ SILENT = $(silent)
+endif
+
+ifdef SILENT
+ SUB_IS_SILENT := $(SILENT)
+endif
+
+# We need to make sure that silent is always turned off at the top level
+# Otherwise the [OK], [ERROR] and [WARN] messags won't be displayed correctly
+override SILENT := false
+
+ON_ERROR := error_occured=1
+
+STARTING_MAKEFILE := $(firstword $(MAKEFILE_LIST))
+ROOT_MAKEFILE := $(lastword $(MAKEFILE_LIST))
+ROOT_DIR := $(dir $(ROOT_MAKEFILE))
+ifeq ($(ROOT_DIR),)
+ ROOT_DIR := .
+endif
+ABS_STARTING_MAKEFILE := $(abspath $(STARTING_MAKEFILE))
+ABS_ROOT_MAKEFILE := $(abspath $(ROOT_MAKEFILE))
+ABS_STARTING_DIR := $(dir $(ABS_STARTING_MAKEFILE))
+ABS_ROOT_DIR := $(dir $(ABS_ROOT_MAKEFILE))
+STARTING_DIR := $(subst $(ABS_ROOT_DIR),,$(ABS_STARTING_DIR))
+BUILD_DIR := $(ROOT_DIR)/.build
+TEST_DIR := $(BUILD_DIR)/test
+ERROR_FILE := $(BUILD_DIR)/error_occured
+
+MAKEFILE_INCLUDED=yes
+
+# Helper function to process the newt element of a space separated path
+# It works a bit like the traditional functional head tail
+# so the CURRENT_PATH_ELEMENT will beome the new head
+# and the PATH_ELEMENTS are the rest that are still unprocessed
+define NEXT_PATH_ELEMENT
+ $$(eval CURRENT_PATH_ELEMENT := $$(firstword $$(PATH_ELEMENTS)))
+ $$(eval PATH_ELEMENTS := $$(wordlist 2,9999,$$(PATH_ELEMENTS)))
+endef
+
+# We change the / to spaces so that we more easily can work with the elements
+# separately
+PATH_ELEMENTS := $(subst /, ,$(STARTING_DIR))
+# Initialize the path elements list for further processing
+$(eval $(call NEXT_PATH_ELEMENT))
+
+# This function sets the KEYBOARD; KEYMAP and SUBPROJECT to the correct
+# variables depending on which directory you stand in.
+# It's really a very simple if else chain, if you squint enough,
+# but the makefile syntax makes it very verbose.
+# If we are in a subfolder of keyboards
+ifeq ($(CURRENT_PATH_ELEMENT),keyboards)
+ $(eval $(call NEXT_PATH_ELEMENT))
+ KEYBOARD := $(CURRENT_PATH_ELEMENT)
+ $(eval $(call NEXT_PATH_ELEMENT))
+ # If we are in a subfolder of keymaps, or in other words in a keymap
+ # folder
+ ifeq ($(CURRENT_PATH_ELEMENT),keymaps)
+ $(eval $(call NEXT_PATH_ELEMENT))
+ KEYMAP := $(CURRENT_PATH_ELEMENT)
+ # else if we are not in the keyboard folder itself
+ else ifneq ($(CURRENT_PATH_ELEMENT),)
+ # the we can assume it's a subproject, as no other folders
+ # should have make files in them
+ SUBPROJECT := $(CURRENT_PATH_ELEMENT)
+ $(eval $(call NEXT_PATH_ELEMENT))
+ # if we are inside a keymap folder of a subproject
+ ifeq ($(CURRENT_PATH_ELEMENT),keymaps)
+ $(eval $(call NEXT_PATH_ELEMENT))
+ KEYMAP := $(CURRENT_PATH_ELEMENT)
+ endif
+ endif
+endif
+
+# Only consider folders with makefiles, to prevent errors in case there are extra folders
+KEYBOARDS := $(notdir $(patsubst %/Makefile,%,$(wildcard $(ROOT_DIR)/keyboards/*/Makefile)))
+
+#Compability with the old make variables, anything you specify directly on the command line
+# always overrides the detected folders
ifdef keyboard
- KEYBOARD ?= $(keyboard)
-endif
-ifdef KEYBOARD_DIR
- KEYBOARD ?= $(KEYBOARD_DIR)
+ KEYBOARD := $(keyboard)
endif
-ifndef KEYBOARD
- KEYBOARD=planck
-endif
-
-MASTER ?= left
-ifdef master
- MASTER = $(master)
-endif
-
-
-# converts things to keyboards/subproject
-ifneq (,$(findstring /,$(KEYBOARD)))
- TEMP:=$(KEYBOARD)
- KEYBOARD:=$(firstword $(subst /, ,$(TEMP)))
- SUBPROJECT:=$(lastword $(subst /, ,$(TEMP)))
-endif
-
-KEYBOARD_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD)
-
ifdef sub
- SUBPROJECT=$(sub)
+ SUBPROJECT := $(sub)
endif
ifdef subproject
- SUBPROJECT=$(subproject)
+ SUBPROJECT := $(subproject)
endif
-
-ifneq ("$(wildcard $(KEYBOARD_PATH)/$(KEYBOARD).c)","")
- KEYBOARD_FILE = keyboards/$(KEYBOARD)/$(KEYBOARD).c
- ifndef ARCH
- ifneq ("$(wildcard $(KEYBOARD_PATH)/Makefile)","")
- include $(KEYBOARD_PATH)/Makefile
- endif
- endif
-else
-$(error "$(KEYBOARD_PATH)/$(KEYBOARD).c" does not exist)
-endif
-
-ifdef SUBPROJECT_DEFAULT
- SUBPROJECT?=$(SUBPROJECT_DEFAULT)
-endif
-
-ifdef SUBPROJECT
- SUBPROJECT_PATH = $(TOP_DIR)/keyboards/$(KEYBOARD)/$(SUBPROJECT)
- ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","")
- OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT)
- SUBPROJECT_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/$(SUBPROJECT).c
- -include $(SUBPROJECT_PATH)/Makefile
- else
-$(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist)
- endif
-endif
-
ifdef keymap
- KEYMAP ?= $(keymap)
-endif
-ifdef KEYMAP_DIR
- KEYMAP ?= $(KEYMAP_DIR)
+ KEYMAP := $(keymap)
endif
-ifndef KEYMAP
- KEYMAP = default
-endif
-KEYMAP_PATH = $(KEYBOARD_PATH)/keymaps/$(KEYMAP)
-ifneq ("$(wildcard $(KEYMAP_PATH)/keymap.c)","")
- KEYMAP_FILE = keyboards/$(KEYBOARD)/keymaps/$(KEYMAP)/keymap.c
- -include $(KEYMAP_PATH)/Makefile
-else
- ifeq ("$(wildcard $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)/keymap.c)","")
-$(error "$(KEYMAP_PATH)/keymap.c" does not exist)
- else
- KEYMAP_PATH = $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)
- KEYMAP_FILE = keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/$(KEYMAP)/keymap.c
- -include $(KEYMAP_PATH)/Makefile
- endif
-endif
-
-ifdef SUBPROJECT
- TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP)
-else
- TARGET ?= $(KEYBOARD)_$(KEYMAP)
-endif
-BUILD_DIR = .build
-
-# Object files directory
-# To put object files in current directory, use a dot (.), do NOT make
-# this an empty or blank macro!
-OBJDIR = $(BUILD_DIR)/obj_$(TARGET)
+# Uncomment these for debugging
+#$(info Keyboard: $(KEYBOARD))
+#$(info Keymap: $(KEYMAP))
+#$(info Subproject: $(SUBPROJECT))
+#$(info Keyboards: $(KEYBOARDS))
-ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
- CONFIG_H = $(KEYMAP_PATH)/config.h
-else
- CONFIG_H = $(KEYBOARD_PATH)/config.h
- ifdef SUBPROJECT
- ifneq ("$(wildcard $(SUBPROJECT_PATH)/$(SUBPROJECT).c)","")
- CONFIG_H = $(SUBPROJECT_PATH)/config.h
- endif
- endif
-endif
-
-# # project specific files
-SRC += $(KEYBOARD_FILE) \
- $(KEYMAP_FILE) \
- $(QUANTUM_DIR)/quantum.c \
- $(QUANTUM_DIR)/keymap_common.c \
- $(QUANTUM_DIR)/keycode_config.c \
- $(QUANTUM_DIR)/process_keycode/process_leader.c
-
-ifdef SUBPROJECT
- SRC += $(SUBPROJECT_FILE)
-endif
-
-ifdef SUBPROJECT
- SRC += $(SUBPROJECT_FILE)
-endif
-
-ifdef SUBPROJECT
- SRC += $(SUBPROJECT_FILE)
-endif
-
-ifndef CUSTOM_MATRIX
- SRC += $(QUANTUM_DIR)/matrix.c
-endif
-
-ifeq ($(strip $(MIDI_ENABLE)), yes)
- OPT_DEFS += -DMIDI_ENABLE
- SRC += $(QUANTUM_DIR)/process_keycode/process_audio.c
-endif
-
-ifeq ($(strip $(AUDIO_ENABLE)), yes)
- OPT_DEFS += -DAUDIO_ENABLE
- SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
- SRC += $(QUANTUM_DIR)/audio/audio.c
- SRC += $(QUANTUM_DIR)/audio/voices.c
- SRC += $(QUANTUM_DIR)/audio/luts.c
-endif
-
-ifeq ($(strip $(UNICODE_ENABLE)), yes)
- OPT_DEFS += -DUNICODE_ENABLE
- SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
-endif
-
-ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
- OPT_DEFS += -DRGBLIGHT_ENABLE
- SRC += $(QUANTUM_DIR)/light_ws2812.c
- SRC += $(QUANTUM_DIR)/rgblight.c
-endif
-
-ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
- OPT_DEFS += -DTAP_DANCE_ENABLE
- SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
-endif
-
-ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
- SERIAL_DIR = $(QUANTUM_DIR)/serial_link
- SERIAL_PATH = $(QUANTUM_PATH)/serial_link
- SERIAL_SRC = $(wildcard $(SERIAL_PATH)/protocol/*.c)
- SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c)
- SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
- OPT_DEFS += -DSERIAL_LINK_ENABLE
- VAPTH += $(SERIAL_PATH)
-endif
-
-# Optimize size but this may cause error "relocation truncated to fit"
-#EXTRALDFLAGS = -Wl,--relax
-
-# Search Path
-VPATH += $(KEYMAP_PATH)
-ifdef SUBPROJECT
- VPATH += $(SUBPROJECT_PATH)
-endif
-VPATH += $(KEYBOARD_PATH)
-VPATH += $(TOP_DIR)
-VPATH += $(TMK_PATH)
-VPATH += $(QUANTUM_PATH)
-VPATH += $(QUANTUM_PATH)/keymap_extras
-VPATH += $(QUANTUM_PATH)/audio
-VPATH += $(QUANTUM_PATH)/process_keycode
-
-
-# We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA
-ifdef MCU_FAMILY
- PLATFORM=CHIBIOS
+# Set the default goal depening on where we are running make from
+# this handles the case where you run make without any arguments
+.DEFAULT_GOAL := all
+ifneq ($(KEYMAP),)
+ ifeq ($(SUBPROJECT),)
+ # Inside a keymap folder, just build the keymap, with the
+ # default subproject
+ .DEFAULT_GOAL := $(KEYBOARD)-$(KEYMAP)
+ else
+ # Inside a subproject keyamp folder, build the keymap
+ # for that subproject
+ .DEFAULT_GOAL := $(KEYBOARD)-$(SUBPROJECT)-$(KEYMAP)
+ endif
+else ifneq ($(SUBPROJECT),)
+ # Inside a subproject folder, build all keymaps for that subproject
+ .DEFAULT_GOAL := $(KEYBOARD)-$(SUBPROJECT)-allkm
+else ifneq ($(KEYBOARD),)
+ # Inside a keyboard folder, build all keymaps for all subprojects
+ # Note that this is different from the old behaviour, which would
+ # build only the default keymap of the default keyboard
+ .DEFAULT_GOAL := $(KEYBOARD)-allsp-allkm
+endif
+
+
+# Compare the start of the RULE variable with the first argument($1)
+# If the rules equals $1 or starts with $1-, RULE_FOUND is set to true
+# and $1 is removed from the RULE variable
+# Otherwise the RULE_FOUND variable is set to false, and RULE left as it was
+# The function is a bit tricky, since there's no built in $(startswith) function
+define COMPARE_AND_REMOVE_FROM_RULE_HELPER
+ ifeq ($1,$$(RULE))
+ RULE:=
+ RULE_FOUND := true
+ else
+ STARTDASH_REMOVED=$$(subst START$1-,,START$$(RULE))
+ ifneq ($$(STARTDASH_REMOVED),START$$(RULE))
+ RULE_FOUND := true
+ RULE := $$(STARTDASH_REMOVED)
+ else
+ RULE_FOUND := false
+ endif
+ endif
+endef
+
+# This makes it easier to call COMPARE_AND_REMOVE_FROM_RULE, since it makes it behave like
+# a function that returns the value
+COMPARE_AND_REMOVE_FROM_RULE = $(eval $(call COMPARE_AND_REMOVE_FROM_RULE_HELPER,$1))$(RULE_FOUND)
+
+
+# Recursively try to find a match for the start of the rule to be checked
+# $1 The list to be checked
+# If a match is found, then RULE_FOUND is set to true
+# and MATCHED_ITEM to the item that was matched
+define TRY_TO_MATCH_RULE_FROM_LIST_HELPER3
+ ifneq ($1,)
+ ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,$$(firstword $1)),true)
+ MATCHED_ITEM := $$(firstword $1)
+ else
+ $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$$(wordlist 2,9999,$1)))
+ endif
+ endif
+endef
+
+# A recursive helper function for finding the longest match
+# $1 The list to be checed
+# It works by always removing the currently matched item from the list
+# and call itself recursively, until a match is found
+define TRY_TO_MATCH_RULE_FROM_LIST_HELPER2
+ # Stop the recursion when the list is empty
+ ifneq ($1,)
+ RULE_BEFORE := $$(RULE)
+ $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER3,$1))
+ # If a match is found in the current list, otherwise just return what we had before
+ ifeq ($$(RULE_FOUND),true)
+ # Save the best match so far and call itself recursivel
+ BEST_MATCH := $$(MATCHED_ITEM)
+ BEST_MATCH_RULE := $$(RULE)
+ RULE_FOUND := false
+ RULE := $$(RULE_BEFORE)
+ $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER2,$$(filter-out $$(MATCHED_ITEM),$1)))
+ endif
+ endif
+endef
+
+
+# Recursively try to find the longest match for the start of the rule to be checked
+# $1 The list to be checked
+# If a match is found, then RULE_FOUND is set to true
+# and MATCHED_ITEM to the item that was matched
+define TRY_TO_MATCH_RULE_FROM_LIST_HELPER
+ BEST_MATCH :=
+ $$(eval $$(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER2,$1))
+ ifneq ($$(BEST_MATCH),)
+ RULE_FOUND := true
+ RULE := $$(BEST_MATCH_RULE)
+ MATCHED_ITEM := $$(BEST_MATCH)
+ else
+ RULE_FOUND := false
+ MATCHED_ITEM :=
+ endif
+endef
+
+# Make it easier to call TRY_TO_MATCH_RULE_FROM_LIST
+TRY_TO_MATCH_RULE_FROM_LIST = $(eval $(call TRY_TO_MATCH_RULE_FROM_LIST_HELPER,$1))$(RULE_FOUND)
+
+define ALL_IN_LIST_LOOP
+ OLD_RULE$1 := $$(RULE)
+ $$(eval $$(call $1,$$(ITEM$1)))
+ RULE := $$(OLD_RULE$1)
+endef
+
+define PARSE_ALL_IN_LIST
+ $$(foreach ITEM$1,$2,$$(eval $$(call ALL_IN_LIST_LOOP,$1)))
+endef
+
+# The entry point for rule parsing
+# parses a rule in the format <keyboard>-<subproject>-<keymap>-<target>
+# but this particular function only deals with the first <keyboard> part
+define PARSE_RULE
+ RULE := $1
+ COMMANDS :=
+ # If the rule starts with allkb, then continue the parsing from
+ # PARSE_ALL_KEYBOARDS
+ ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkb),true)
+ $$(eval $$(call PARSE_ALL_KEYBOARDS))
+ else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,test),true)
+ $$(eval $$(call PARSE_TEST))
+ # If the rule starts with the name of a known keyboard, then continue
+ # the parsing from PARSE_KEYBOARD
+ else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true)
+ $$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM)))
+ # Otherwise use the KEYBOARD variable, which is determined either by
+ # the current directory you run make from, or passed in as an argument
+ else ifneq ($$(KEYBOARD),)
+ $$(eval $$(call PARSE_KEYBOARD,$$(KEYBOARD)))
+ else
+ $$(info make: *** No rule to make target '$1'. Stop.)
+ # Notice the tab instead of spaces below!
+ exit 1
+ endif
+endef
+
+# $1 = Keyboard
+# Parses a rule in the format <subproject>-<keymap>-<target>
+# the keyboard is already known when entering this function
+define PARSE_KEYBOARD
+ CURRENT_KB := $1
+ # A subproject is any keyboard subfolder with a makefile
+ SUBPROJECTS := $$(notdir $$(patsubst %/Makefile,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/*/Makefile)))
+ # if the rule starts with allsp, then continue with looping over all subprojects
+ ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allsp),true)
+ $$(eval $$(call PARSE_ALL_SUBPROJECTS))
+ # A special case for matching the defaultsp (default subproject)
+ else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,defaultsp),true)
+ $$(eval $$(call PARSE_SUBPROJECT,defaultsp))
+ # If the rule starts with the name of a known subproject
+ else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(SUBPROJECTS)),true)
+ $$(eval $$(call PARSE_SUBPROJECT,$$(MATCHED_ITEM)))
+ # Try to use the SUBPROJECT variable, which is either determined by the
+ # directory which invoked make, or passed as an argument to make
+ else ifneq ($$(SUBPROJECT),)
+ $$(eval $$(call PARSE_SUBPROJECT,$$(SUBPROJECT)))
+ # If there's no matching subproject, we assume it's the default
+ # This will allow you to leave the subproject part of the target out
+ else
+ $$(eval $$(call PARSE_SUBPROJECT,))
+ endif
+endef
+
+# if we are going to compile all keyboards, match the rest of the rule
+# for each of them
+define PARSE_ALL_KEYBOARDS
+ $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYBOARD,$(KEYBOARDS)))
+endef
+
+# $1 Subproject
+# When entering this, the keyboard and subproject are known, so now we need
+# to determine which keymaps are going to get compiled
+define PARSE_SUBPROJECT
+ # If we want to compile the default subproject, then we need to
+ # include the correct makefile to determine the actual name of it
+ CURRENT_SP := $1
+ ifeq ($$(CURRENT_SP),)
+ CURRENT_SP := defaultsp
+ endif
+ ifeq ($$(CURRENT_SP),defaultsp)
+ SUBPROJECT_DEFAULT=
+ $$(eval include $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/Makefile)
+ CURRENT_SP := $$(SUBPROJECT_DEFAULT)
+ endif
+ # If current subproject is empty (the default was not defined), and we have a list of subproject
+ # then make all of them
+ ifeq ($$(CURRENT_SP),)
+ ifneq ($$(SUBPROJECTS),)
+ CURRENT_SP := allsp
+ endif
+ endif
+ # The special allsp is handled later
+ ifneq ($$(CURRENT_SP),allsp)
+ # get a list of all keymaps
+ KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/keymaps/*/.)))
+ ifneq ($$(CURRENT_SP),)
+ # if the subproject is defined, then also look for keymaps inside the subproject folder
+ SP_KEYMAPS := $$(notdir $$(patsubst %/.,%,$$(wildcard $(ROOT_DIR)/keyboards/$$(CURRENT_KB)/$$(CURRENT_SP)/keymaps/*/.)))
+ KEYMAPS := $$(sort $$(KEYMAPS) $$(SP_KEYMAPS))
+ endif
+ # if the rule after removing the start of it is empty (we haven't specified a kemap or target)
+ # compile all the keymaps
+ ifeq ($$(RULE),)
+ $$(eval $$(call PARSE_ALL_KEYMAPS))
+ # The same if allkm was specified
+ else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,allkm),true)
+ $$(eval $$(call PARSE_ALL_KEYMAPS))
+ # Try to match the specified keyamp with the list of known keymaps
+ else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYMAPS)),true)
+ $$(eval $$(call PARSE_KEYMAP,$$(MATCHED_ITEM)))
+ # Otherwise try to match the keymap from the current folder, or arguments to the make command
+ else ifneq ($$(KEYMAP),)
+ $$(eval $$(call PARSE_KEYMAP,$$(KEYMAP)))
+ # No matching keymap found, so we assume that the rest of the rule is the target
+ # If we haven't been able to parse out a subproject, then make all of them
+ # This is consistent with running make without any arguments from the keyboard
+ # folder
+ else ifeq ($1,)
+ $$(eval $$(call PARSE_ALL_SUBPROJECTS))
+ # Otherwise, make all keymaps, again this is consistent with how it works without
+ # any arguments
+ else
+ $$(eval $$(call PARSE_ALL_KEYMAPS))
+ endif
+ else
+ # As earlier mentione,d when allsb is specified, we call our self recursively
+ # for all of the subprojects
+ $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$(SUBPROJECTS)))
+ endif
+endef
+
+# If we want to parse all subprojects, but the keyboard doesn't have any,
+# then use defaultsp instead
+define PARSE_ALL_SUBPROJECTS
+ ifeq ($$(SUBPROJECTS),)
+ $$(eval $$(call PARSE_SUBPROJECT,defaultsp))
+ else
+ $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_SUBPROJECT,$$(SUBPROJECTS)))
+ endif
+endef
+
+# $1 Keymap
+# This is the meat of compiling a keyboard, when entering this, everything is known
+# keyboard, subproject, and keymap
+# Note that we are not directly calling the command here, but instead building a list,
+# which will later be processed
+define PARSE_KEYMAP
+ CURRENT_KM = $1
+ # The rest of the rule is the target
+ # Remove the leading "-" from the target, as it acts as a separator
+ MAKE_TARGET := $$(patsubst -%,%,$$(RULE))
+ # We need to generate an unique indentifer to append to the COMMANDS list
+ COMMAND := COMMAND_KEYBOARD_$$(CURRENT_KB)_SUBPROJECT_$(CURRENT_SP)_KEYMAP_$$(CURRENT_KM)
+ # If we are compiling a keyboard without a subproject, we want to display just the name
+ # of the keyboard, otherwise keyboard/subproject
+ ifeq ($$(CURRENT_SP),)
+ KB_SP := $(CURRENT_KB)
+ else
+ KB_SP := $(CURRENT_KB)/$$(CURRENT_SP)
+ endif
+ # Format it in bold
+ KB_SP := $(BOLD)$$(KB_SP)$(NO_COLOR)
+ # Specify the variables that we are passing forward to submake
+ MAKE_VARS := KEYBOARD=$$(CURRENT_KB) SUBPROJECT=$$(CURRENT_SP) KEYMAP=$$(CURRENT_KM)
+ # And the first part of the make command
+ MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_keyboard.mk $$(MAKE_TARGET)
+ # The message to display
+ MAKE_MSG := $$(MSG_MAKE_KB)
+ # We run the command differently, depending on if we want more output or not
+ # The true version for silent output and the false version otherwise
+ $$(eval $$(call BUILD))
+endef
+
+define BUILD
+ MAKE_VARS += VERBOSE=$(VERBOSE) COLOR=$(COLOR)
+ COMMANDS += $$(COMMAND)
+ COMMAND_true_$$(COMMAND) := \
+ printf "$$(MAKE_MSG)" | \
+ $$(MAKE_MSG_FORMAT); \
+ LOG=$$$$($$(MAKE_CMD) $$(MAKE_VARS) SILENT=true 2>&1) ; \
+ if [ $$$$? -gt 0 ]; \
+ then $$(PRINT_ERROR_PLAIN); \
+ elif [ "$$$$LOG" != "" ] ; \
+ then $$(PRINT_WARNING_PLAIN); \
+ else \
+ $$(PRINT_OK); \
+ fi;
+ COMMAND_false_$$(COMMAND) := \
+ printf "$$(MAKE_MSG)\n\n"; \
+ $$(MAKE_CMD) $$(MAKE_VARS) SILENT=false; \
+ if [ $$$$? -gt 0 ]; \
+ then error_occured=1; \
+ fi;
+endef
+
+# Just parse all the keymaps for a specifc keyboard
+define PARSE_ALL_KEYMAPS
+ $$(eval $$(call PARSE_ALL_IN_LIST,PARSE_KEYMAP,$$(KEYMAPS)))
+endef
+
+define BUILD_TEST
+ TEST_NAME := $1
+ MAKE_TARGET := $2
+ COMMAND := $1
+ MAKE_CMD := $$(MAKE) -r -R -C $(ROOT_DIR) -f build_test.mk $$(MAKE_TARGET)
+ MAKE_VARS := TEST=$$(TEST_NAME)
+ MAKE_MSG := $$(MSG_MAKE_TEST)
+ $$(eval $$(call BUILD))
+ ifneq ($$(MAKE_TARGET),clean)
+ TEST_EXECUTABLE := $$(TEST_DIR)/$$(TEST_NAME).elf
+ TESTS += $$(TEST_NAME)
+ TEST_MSG := $$(MSG_TEST)
+ $$(TEST_NAME)_COMMAND := \
+ printf "$$(TEST_MSG)\n"; \
+ $$(TEST_EXECUTABLE); \
+ if [ $$$$? -gt 0 ]; \
+ then error_occured=1; \
+ fi; \
+ printf "\n";
+ endif
+endef
+
+define PARSE_TEST
+ TESTS :=
+ TEST_NAME := $$(firstword $$(subst -, ,$$(RULE)))
+ TEST_TARGET := $$(subst $$(TEST_NAME),,$$(subst $$(TEST_NAME)-,,$$(RULE)))
+ ifeq ($$(TEST_NAME),all)
+ MATCHED_TESTS := $$(TEST_LIST)
+ else
+ MATCHED_TESTS := $$(foreach TEST,$$(TEST_LIST),$$(if $$(findstring $$(TEST_NAME),$$(TEST)),$$(TEST),))
+ endif
+ $$(foreach TEST,$$(MATCHED_TESTS),$$(eval $$(call BUILD_TEST,$$(TEST),$$(TEST_TARGET))))
+endef
+
+
+# Set the silent mode depending on if we are trying to compile multiple keyboards or not
+# By default it's on in that case, but it can be overriden by specifying silent=false
+# from the command line
+define SET_SILENT_MODE
+ ifdef SUB_IS_SILENT
+ SILENT_MODE := $(SUB_IS_SILENT)
+ else ifeq ($$(words $$(COMMANDS)),1)
+ SILENT_MODE := false
+ else
+ SILENT_MODE := true
+ endif
+endef
+
+include $(ROOT_DIR)/message.mk
+
+# The empty line is important here, as it will force a new shell to be created for each command
+# Otherwise the command line will become too long with a lot of keyboards and keymaps
+define RUN_COMMAND
++error_occured=0;\
+$(COMMAND_$(SILENT_MODE)_$(COMMAND))\
+if [ $$error_occured -gt 0 ]; then echo $$error_occured > $(ERROR_FILE); fi;
+
+
+endef
+define RUN_TEST
++error_occured=0;\
+$($(TEST)_COMMAND))\
+if [ $$error_occured -gt 0 ]; then echo $$error_occured > $(ERROR_FILE); fi;
+
+endef
+
+# Allow specifying just the subproject, in the keyboard directory, which will compile all keymaps
+SUBPROJECTS := $(notdir $(patsubst %/Makefile,%,$(wildcard ./*/Makefile)))
+.PHONY: $(SUBPROJECTS)
+$(SUBPROJECTS): %: %-allkm
+
+# Let's match everything, we handle all the rule parsing ourselves
+.PHONY: %
+ifndef SKIP_GIT
+%:
+ # Check if we have the CMP tool installed
+ cmp --version >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi;
+ # Check if the submodules are dirty, and display a warning if they are
+ git submodule status --recursive 2>/dev/null | \
+ while IFS= read -r x; do \
+ case "$$x" in \
+ \ *) ;; \
+ *) printf "$(MSG_SUBMODULE_DIRTY)";break;; \
+ esac \
+ done
+ rm -f $(ERROR_FILE) > /dev/null 2>&1
+ $(eval $(call PARSE_RULE,$@))
+ $(eval $(call SET_SILENT_MODE))
+ # Run all the commands in the same shell, notice the + at the first line
+ # it has to be there to allow parallel execution of the submake
+ # This always tries to compile everything, even if error occurs in the middle
+ # But we return the error code at the end, to trigger travis failures
+ $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND))
+ if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi;
+ $(foreach TEST,$(TESTS),$(RUN_TEST))
+ if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi;
else
- PLATFORM=AVR
-endif
-
-include $(TMK_PATH)/common.mk
-ifeq ($(PLATFORM),AVR)
- include $(TMK_PATH)/protocol/lufa.mk
- include $(TMK_PATH)/avr.mk
-else ifeq ($(PLATFORM),CHIBIOS)
- include $(TMK_PATH)/protocol/chibios.mk
- include $(TMK_PATH)/chibios.mk
- OPT_OS = chibios
+%:
+ # Check if we have the CMP tool installed
+ cmp --version >/dev/null 2>&1; if [ $$? -gt 0 ]; then printf "$(MSG_NO_CMP)"; exit 1; fi;
+ rm -f $(ERROR_FILE) > /dev/null 2>&1
+ $(eval $(call PARSE_RULE,$@))
+ $(eval $(call SET_SILENT_MODE))
+ # Run all the commands in the same shell, notice the + at the first line
+ # it has to be there to allow parallel execution of the submake
+ # This always tries to compile everything, even if error occurs in the middle
+ # But we return the error code at the end, to trigger travis failures
+ $(foreach COMMAND,$(COMMANDS),$(RUN_COMMAND))
+ if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi;
+ $(foreach TEST,$(TESTS),$(RUN_TEST))
+ if [ -f $(ERROR_FILE) ]; then printf "$(MSG_ERRORS)" & exit 1; fi;
+endif
+
+# All should compile everything
+.PHONY: all
+all: all-keyboards test-all
+
+# Define some shortcuts, mostly for compability with the old syntax
+.PHONY: all-keyboards
+all-keyboards: allkb-allsp-allkm
+
+.PHONY: all-keyboards-defaults
+all-keyboards-defaults: allkb-allsp-default
+
+.PHONY: test
+test: test-all
+
+.PHONY: test-clean
+test-clean: test-all-clean
+
+# Generate the version.h file
+ifndef SKIP_GIT
+ GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S")
else
- $(error Unknown platform)
-endif
-
-ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
- VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer
- VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer
- include $(VISUALIZER_PATH)/visualizer.mk
+ GIT_VERSION := NA
endif
-
-include $(TMK_PATH)/rules.mk
-
-GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S")
BUILD_DATE := $(shell date +"%Y-%m-%d-%H:%M:%S")
-OPT_DEFS += -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\"
-OPT_DEFS += -DQMK_VERSION=\"$(GIT_VERSION)\" -DQMK_BUILDDATE=\"$(BUILD_DATE)\"
+$(shell echo '#define QMK_VERSION "$(GIT_VERSION)"' > $(ROOT_DIR)/quantum/version.h)
+$(shell echo '#define QMK_BUILDDATE "$(BUILD_DATE)"' >> $(ROOT_DIR)/quantum/version.h)
+
+include $(ROOT_DIR)/testlist.mk \ No newline at end of file
diff --git a/Vagrantfile b/Vagrantfile
index 8cadeaddf..389b688ae 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -91,7 +91,7 @@ Vagrant.configure(2) do |config|
Or you can copy and paste the example line below.
- cd /vagrant; cd keyboards; cd ergodox_ez; make clean; make
+ cd /vagrant; cd keyboards; cd ergodox; make clean; make
EOT
diff --git a/build_keyboard.mk b/build_keyboard.mk
new file mode 100644
index 000000000..ce505de12
--- /dev/null
+++ b/build_keyboard.mk
@@ -0,0 +1,254 @@
+ifndef VERBOSE
+.SILENT:
+endif
+
+.DEFAULT_GOAL := all
+
+include common.mk
+
+ifneq ($(SUBPROJECT),)
+ TARGET ?= $(KEYBOARD)_$(SUBPROJECT)_$(KEYMAP)
+ KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD)_$(SUBPROJECT)
+else
+ TARGET ?= $(KEYBOARD)_$(KEYMAP)
+ KEYBOARD_OUTPUT := $(BUILD_DIR)/obj_$(KEYBOARD)
+endif
+
+# Force expansion
+TARGET := $(TARGET)
+
+
+MASTER ?= left
+ifdef master
+ MASTER = $(master)
+endif
+
+ifeq ($(MASTER),right)
+ OPT_DEFS += -DMASTER_IS_ON_RIGHT
+else
+ ifneq ($(MASTER),left)
+$(error MASTER does not have a valid value(left/right))
+ endif
+endif
+
+
+
+KEYBOARD_PATH := keyboards/$(KEYBOARD)
+KEYBOARD_C := $(KEYBOARD_PATH)/$(KEYBOARD).c
+
+ifneq ("$(wildcard $(KEYBOARD_C))","")
+ include $(KEYBOARD_PATH)/rules.mk
+else
+ $(error "$(KEYBOARD_C)" does not exist)
+endif
+
+
+ifneq ($(SUBPROJECT),)
+ SUBPROJECT_PATH := keyboards/$(KEYBOARD)/$(SUBPROJECT)
+ SUBPROJECT_C := $(SUBPROJECT_PATH)/$(SUBPROJECT).c
+ ifneq ("$(wildcard $(SUBPROJECT_C))","")
+ OPT_DEFS += -DSUBPROJECT_$(SUBPROJECT)
+ include $(SUBPROJECT_PATH)/rules.mk
+ else
+ $(error "$(SUBPROJECT_PATH)/$(SUBPROJECT).c" does not exist)
+ endif
+endif
+
+# We can assume a ChibiOS target When MCU_FAMILY is defined, since it's not used for LUFA
+ifdef MCU_FAMILY
+ PLATFORM=CHIBIOS
+else
+ PLATFORM=AVR
+endif
+
+ifeq ($(PLATFORM),CHIBIOS)
+ include $(TMK_PATH)/protocol/chibios.mk
+ include $(TMK_PATH)/chibios.mk
+ OPT_OS = chibios
+ ifneq ("$(wildcard $(SUBPROJECT_PATH)/bootloader_defs.h)","")
+ OPT_DEFS += -include $(SUBPROJECT_PATH)/bootloader_defs.h
+ else ifneq ("$(wildcard $(SUBPROJECT_PATH)/boards/$(BOARD)/bootloader_defs.h)","")
+ OPT_DEFS += -include $(SUBPROJECT_PATH)/boards/$(BOARD)/bootloader_defs.h
+ else ifneq ("$(wildcard $(KEYBOARD_PATH)/bootloader_defs.h)","")
+ OPT_DEFS += -include $(KEYBOARD_PATH)/bootloader_defs.h
+ else ifneq ("$(wildcard $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h)","")
+ OPT_DEFS += -include $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h
+ endif
+endif
+
+CONFIG_H = $(KEYBOARD_PATH)/config.h
+ifneq ($(SUBPROJECT),)
+ ifneq ("$(wildcard $(SUBPROJECT_C))","")
+ CONFIG_H = $(SUBPROJECT_PATH)/config.h
+ endif
+endif
+
+# Save the defines and includes here, so we don't include any keymap specific ones
+PROJECT_DEFS := $(OPT_DEFS)
+PROJECT_INC := $(VPATH) $(EXTRAINCDIRS) $(SUBPROJECT_PATH) $(KEYBOARD_PATH)
+PROJECT_CONFIG := $(CONFIG_H)
+
+MAIN_KEYMAP_PATH := $(KEYBOARD_PATH)/keymaps/$(KEYMAP)
+MAIN_KEYMAP_C := $(MAIN_KEYMAP_PATH)/keymap.c
+SUBPROJ_KEYMAP_PATH := $(SUBPROJECT_PATH)/keymaps/$(KEYMAP)
+SUBPROJ_KEYMAP_C := $(SUBPROJ_KEYMAP_PATH)/keymap.c
+ifneq ("$(wildcard $(SUBPROJ_KEYMAP_C))","")
+ -include $(SUBPROJ_KEYMAP_PATH)/Makefile
+ KEYMAP_C := $(SUBPROJ_KEYMAP_C)
+ KEYMAP_PATH := $(SUBPROJ_KEYMAP_PATH)
+else ifneq ("$(wildcard $(MAIN_KEYMAP_C))","")
+ -include $(MAIN_KEYMAP_PATH)/Makefile
+ KEYMAP_C := $(MAIN_KEYMAP_C)
+ KEYMAP_PATH := $(MAIN_KEYMAP_PATH)
+else
+ $(error "$(MAIN_KEYMAP_C)/keymap.c" does not exist)
+endif
+
+
+# Object files directory
+# To put object files in current directory, use a dot (.), do NOT make
+# this an empty or blank macro!
+KEYMAP_OUTPUT := $(BUILD_DIR)/obj_$(TARGET)
+
+
+ifneq ("$(wildcard $(KEYMAP_PATH)/config.h)","")
+ CONFIG_H = $(KEYMAP_PATH)/config.h
+endif
+
+# # project specific files
+SRC += $(KEYBOARD_C) \
+ $(KEYMAP_C) \
+ $(QUANTUM_DIR)/quantum.c \
+ $(QUANTUM_DIR)/keymap_common.c \
+ $(QUANTUM_DIR)/keycode_config.c \
+ $(QUANTUM_DIR)/process_keycode/process_leader.c
+
+ifneq ($(SUBPROJECT),)
+ SRC += $(SUBPROJECT_C)
+endif
+
+ifndef CUSTOM_MATRIX
+ SRC += $(QUANTUM_DIR)/matrix.c
+endif
+
+ifeq ($(strip $(API_SYSEX_ENABLE)), yes)
+ OPT_DEFS += -DAPI_SYSEX_ENABLE
+ SRC += $(QUANTUM_DIR)/api/api_sysex.c
+ OPT_DEFS += -DAPI_ENABLE
+ SRC += $(QUANTUM_DIR)/api.c
+ MIDI_ENABLE=yes
+endif
+
+ifeq ($(strip $(MIDI_ENABLE)), yes)
+ OPT_DEFS += -DMIDI_ENABLE
+ SRC += $(QUANTUM_DIR)/process_keycode/process_midi.c
+endif
+
+ifeq ($(strip $(VIRTSER_ENABLE)), yes)
+ OPT_DEFS += -DVIRTSER_ENABLE
+endif
+
+ifeq ($(strip $(AUDIO_ENABLE)), yes)
+ OPT_DEFS += -DAUDIO_ENABLE
+ SRC += $(QUANTUM_DIR)/process_keycode/process_music.c
+ SRC += $(QUANTUM_DIR)/audio/audio.c
+ SRC += $(QUANTUM_DIR)/audio/voices.c
+ SRC += $(QUANTUM_DIR)/audio/luts.c
+endif
+
+ifeq ($(strip $(UCIS_ENABLE)), yes)
+ OPT_DEFS += -DUCIS_ENABLE
+ UNICODE_ENABLE = yes
+endif
+
+ifeq ($(strip $(UNICODEMAP_ENABLE)), yes)
+ OPT_DEFS += -DUNICODEMAP_ENABLE
+ UNICODE_ENABLE = yes
+endif
+
+ifeq ($(strip $(UNICODE_ENABLE)), yes)
+ OPT_DEFS += -DUNICODE_ENABLE
+ SRC += $(QUANTUM_DIR)/process_keycode/process_unicode.c
+endif
+
+ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
+ OPT_DEFS += -DRGBLIGHT_ENABLE
+ SRC += $(QUANTUM_DIR)/light_ws2812.c
+ SRC += $(QUANTUM_DIR)/rgblight.c
+endif
+
+ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
+ OPT_DEFS += -DTAP_DANCE_ENABLE
+ SRC += $(QUANTUM_DIR)/process_keycode/process_tap_dance.c
+endif
+
+ifeq ($(strip $(PRINTING_ENABLE)), yes)
+ OPT_DEFS += -DPRINTING_ENABLE
+ SRC += $(QUANTUM_DIR)/process_keycode/process_printer.c
+ SRC += $(TMK_DIR)/protocol/serial_uart.c
+endif
+
+ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
+ SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
+ OPT_DEFS += $(SERIAL_DEFS)
+ VAPTH += $(SERIAL_PATH)
+endif
+
+ifneq ($(strip $(VARIABLE_TRACE)),)
+ SRC += $(QUANTUM_DIR)/variable_trace.c
+ OPT_DEFS += -DNUM_TRACED_VARIABLES=$(strip $(VARIABLE_TRACE))
+ifneq ($(strip $(MAX_VARIABLE_TRACE_SIZE)),)
+ OPT_DEFS += -DMAX_VARIABLE_TRACE_SIZE=$(strip $(MAX_VARIABLE_TRACE_SIZE))
+endif
+endif
+
+# Optimize size but this may cause error "relocation truncated to fit"
+#EXTRALDFLAGS = -Wl,--relax
+
+# Search Path
+VPATH += $(KEYMAP_PATH)
+ifneq ($(SUBPROJECT),)
+ VPATH += $(SUBPROJECT_PATH)
+endif
+VPATH += $(KEYBOARD_PATH)
+VPATH += $(COMMON_VPATH)
+
+include $(TMK_PATH)/protocol.mk
+
+include $(TMK_PATH)/common.mk
+SRC += $(TMK_COMMON_SRC)
+OPT_DEFS += $(TMK_COMMON_DEFS)
+EXTRALDFLAGS += $(TMK_COMMON_LDFLAGS)
+
+ifeq ($(PLATFORM),AVR)
+ include $(TMK_PATH)/protocol/lufa.mk
+ include $(TMK_PATH)/avr.mk
+endif
+
+ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
+ VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer
+ VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer
+ include $(VISUALIZER_PATH)/visualizer.mk
+endif
+
+OUTPUTS := $(KEYMAP_OUTPUT) $(KEYBOARD_OUTPUT)
+$(KEYMAP_OUTPUT)_SRC := $(SRC)
+$(KEYMAP_OUTPUT)_DEFS := $(OPT_DEFS) -DQMK_KEYBOARD=\"$(KEYBOARD)\" -DQMK_KEYMAP=\"$(KEYMAP)\"
+$(KEYMAP_OUTPUT)_INC := $(VPATH) $(EXTRAINCDIRS)
+$(KEYMAP_OUTPUT)_CONFIG := $(CONFIG_H)
+$(KEYBOARD_OUTPUT)_SRC := $(CHIBISRC)
+$(KEYBOARD_OUTPUT)_DEFS := $(PROJECT_DEFS)
+$(KEYBOARD_OUTPUT)_INC := $(PROJECT_INC)
+$(KEYBOARD_OUTPUT)_CONFIG := $(PROJECT_CONFIG)
+
+# Default target.
+all: build sizeafter
+
+# Change the build target to build a HEX file or a library.
+build: elf hex
+#build: elf hex eep lss sym
+#build: lib
+
+
+include $(TMK_PATH)/rules.mk
+
diff --git a/build_test.mk b/build_test.mk
new file mode 100644
index 000000000..ee15a4572
--- /dev/null
+++ b/build_test.mk
@@ -0,0 +1,57 @@
+ifndef VERBOSE
+.SILENT:
+endif
+
+.DEFAULT_GOAL := all
+
+include common.mk
+
+TARGET=test/$(TEST)
+
+GTEST_OUTPUT = $(BUILD_DIR)/gtest
+
+TEST_OBJ = $(BUILD_DIR)/test_obj
+
+OUTPUTS := $(TEST_OBJ)/$(TEST) $(GTEST_OUTPUT)
+
+GTEST_INC := \
+ $(LIB_PATH)/googletest/googletest/include\
+ $(LIB_PATH)/googletest/googlemock/include\
+
+GTEST_INTERNAL_INC :=\
+ $(LIB_PATH)/googletest/googletest\
+ $(LIB_PATH)/googletest/googlemock
+
+$(GTEST_OUTPUT)_SRC :=\
+ googletest/src/gtest-all.cc\
+ googletest/src/gtest_main.cc\
+ googlemock/src/gmock-all.cc
+
+$(GTEST_OUTPUT)_DEFS :=
+$(GTEST_OUTPUT)_INC := $(GTEST_INC) $(GTEST_INTERNAL_INC)
+
+LDFLAGS += -lstdc++ -lpthread -shared-libgcc
+CREATE_MAP := no
+
+VPATH +=\
+ $(LIB_PATH)/googletest\
+ $(LIB_PATH)/googlemock
+
+all: elf
+
+VPATH += $(COMMON_VPATH)
+
+include $(TMK_PATH)/common.mk
+include $(QUANTUM_PATH)/serial_link/tests/rules.mk
+
+$(TEST_OBJ)/$(TEST)_SRC := $($(TEST)_SRC)
+$(TEST_OBJ)/$(TEST)_INC := $($(TEST)_INC) $(VPATH) $(GTEST_INC)
+$(TEST_OBJ)/$(TEST)_DEFS := $($(TEST)_DEFS)
+
+include $(TMK_PATH)/native.mk
+include $(TMK_PATH)/rules.mk
+
+
+$(shell mkdir -p $(BUILD_DIR)/test 2>/dev/null)
+$(shell mkdir -p $(TEST_OBJ) 2>/dev/null)
+
diff --git a/common.mk b/common.mk
new file mode 100644
index 000000000..c4b9394a2
--- /dev/null
+++ b/common.mk
@@ -0,0 +1,27 @@
+include message.mk
+
+# Directory common source files exist
+TOP_DIR = .
+TMK_DIR = tmk_core
+TMK_PATH = $(TOP_DIR)/$(TMK_DIR)
+LIB_PATH = $(TOP_DIR)/lib
+
+QUANTUM_DIR = quantum
+QUANTUM_PATH = $(TOP_DIR)/$(QUANTUM_DIR)
+
+BUILD_DIR := $(TOP_DIR)/.build
+
+SERIAL_DIR := $(QUANTUM_DIR)/serial_link
+SERIAL_PATH := $(QUANTUM_PATH)/serial_link
+SERIAL_SRC := $(wildcard $(SERIAL_PATH)/protocol/*.c)
+SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c)
+SERIAL_DEFS += -DSERIAL_LINK_ENABLE
+
+COMMON_VPATH := $(TOP_DIR)
+COMMON_VPATH += $(TMK_PATH)
+COMMON_VPATH += $(QUANTUM_PATH)
+COMMON_VPATH += $(QUANTUM_PATH)/keymap_extras
+COMMON_VPATH += $(QUANTUM_PATH)/audio
+COMMON_VPATH += $(QUANTUM_PATH)/process_keycode
+COMMON_VPATH += $(QUANTUM_PATH)/api
+COMMON_VPATH += $(SERIAL_PATH) \ No newline at end of file
diff --git a/doc/TMK_README.md b/doc/TMK_README.md
index 6164dacd3..e3438eda2 100644
--- a/doc/TMK_README.md
+++ b/doc/TMK_README.md
@@ -34,7 +34,7 @@ You can find some keyboard specific projects under `converter` and `keyboard` di
* [atomic](keyboards/atomic/) - [Atomic] Ortholinear 60% keyboard
### Ergodox EZ
-* [ergodox_ez](keyboards/ergodox_ez) - [Ergodox_EZ] Assembled split keyboard
+* [ergodox_ez](keyboards/ergodox/ez) - [Ergodox_EZ] Assembled split keyboard
## Other projects
@@ -113,7 +113,7 @@ Third party libraries like LUFA, PJRC and V-USB have their own license respectiv
Build Firmware and Program Controller
-------------------------------------
-See [doc/build.md](tmk_core/doc/build.md), or the readme in the particular keyboards/* folder.
+See [build environment setup](/readme.md#build-environment-setup), or the readme in the particular keyboards/* folder.
diff --git a/doc/VAGRANT_GUIDE.md b/doc/VAGRANT_GUIDE.md
index 62044b7f7..439e78da7 100644
--- a/doc/VAGRANT_GUIDE.md
+++ b/doc/VAGRANT_GUIDE.md
@@ -6,7 +6,8 @@ This project includes a Vagrantfile that will allow you to build a new firmware
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.
+*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. **Alternately, you can try running the following command:** `vagrant plugin install vagrant-vbguest`
+
Other than having Vagrant and Virtualbox installed and possibly a restart of your computer afterwards, you can simple run a 'vagrant up' anywhere inside the folder where you checked out this project and it will start a Linux virtual machine that contains all the tools required to build this project. There is a post Vagrant startup hint that will get you off on the right foot, otherwise you can also reference the build documentation below.
@@ -20,7 +21,7 @@ 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](/keyboards/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](/keyboards/ergodox/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/doc/basic_how_keyboards_work.md b/doc/basic_how_keyboards_work.md
new file mode 100644
index 000000000..73c3f5c5f
--- /dev/null
+++ b/doc/basic_how_keyboards_work.md
@@ -0,0 +1,96 @@
+# How keys are registered, and interpreted by computers
+
+In this file, you can will learn the concepts of how keyboards work over USB,
+and you'll be able to better understand what you can expect from changing your
+firmware directly.
+
+## Schematic view
+
+Whenever you type on 1 particular key, here is the chain of actions taking
+place:
+
+``` text
++------+ +-----+ +----------+ +----------+ +----+
+| User |-------->| Key |------>| Firmware |----->| USB wire |---->| OS |
++------+ +-----+ +----------+ +----------+ |----+
+```
+
+This scheme is a very simple view of what's going on, and more details follow
+in the next sections.
+
+## 1. You Press a Key
+
+Whenever you press a key, the firmware of your keyboard can register this event.
+It can register when the key is pressed, held and released.
+
+This usually happens with a [periodic scan of key presses with a frequency around 100 hz](https://github.com/benblazak/ergodox-firmware/blob/master/references.md#typical-keyboard-information).
+This speed often is limited by the mechanical key response time, the protocol
+to transfer those key presses (here USB HID), and by the software it is used in.
+
+## 2. What the Firmware Sends
+
+The [HID specification](http://www.usb.org/developers/hidpage/Hut1_12v2.pdf)
+tells what a keyboard can actually send through USB to have a chance to be
+properly recognised. This includes a pre-defined list of keycodes which are
+simple numbers from `0x00` to `0xE7`. The firmware assigns a keycode to each
+key of the keyboard.
+
+The firmware does not send actually letters or characters, but only keycodes.
+Thus, by modifying the firmware, you only can modify what keycode is sent over
+USB for a given key.
+
+## 3. What the Operating System Does
+
+Once the keycode reaches the operating system, a piece of software has to have
+it match an actual character thanks to a keyboard layout. For example, if your
+layout is set to QWERTY, a sample of the matching table is as follow:
+
+``` text
+| keycode | character |
+|---------+-----------|
+| 0x04 | a/A |
+| 0x05 | b/B |
+| 0x06 | c/C |
+| ... | ... |
+| 0x1C | y/Y |
+| 0x1D | z/Z |
+| ... | ... |
+|---------+-----------|
+```
+
+## Back to the firmware
+
+As the layout is generally fixed (unless you create your own), the firmware can
+actually call a keycode by its layout name directly to ease things for you.
+
+This is exactly what is done here with `KC_A` actually representing `0x04` in
+QWERTY. The full list can be found in `keycode.txt`.
+
+## List of Characters You Can Send
+
+Putting aside shortcuts, having a limited set of keycodes mapped to a limited
+layout means that **the list of characters you can assign to a given key only
+is the ones present in the layout**.
+
+For example, this means that if you have a QWERTY US layout, and you want to
+assign 1 key to produce `€` (euro currency symbol), you are unable to do so,
+because the QWERTY US layout does not have such mapping. You could fix that by
+using a QWERTY UK layout, or a QWERTY US International.
+
+You may wonder why a keyboard layout containing all of Unicode is not devised
+then? The limited number of keycode available through USB simply disallow such
+a thing.
+
+## How to (Maybe) Enter Unicode Characters
+
+You can have the firmware send *sequences of keys* to use the [software Unicode
+Input
+Method](https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input) of
+the target operating system, thus effectively entering characters independently
+of the layout defined in the OS.
+
+Yet, it does come with multiple disadvantages:
+
+ - Tied to a specific OS a a time (need recompilation when changing OS);
+ - Within a given OS, does not work in all software;
+ - Limited to a subset of Unicode on some systems.
diff --git a/doc/keycode.txt b/doc/keycode.txt
index c1134f9bf..687406fda 100644
--- a/doc/keycode.txt
+++ b/doc/keycode.txt
@@ -2,7 +2,7 @@ Keycode Symbol Table
====================
Keycodes are defined in `common/keycode.h`.
Range of 00-A4 and E0-E7 are identical with HID Usage:
-<http://www.usb.org/developers/devclass_docs/Hut1_11.pdf>
+<http://www.usb.org/developers/hidpage/Hut1_12v2.pdf>
Virtual keycodes are defined out of above range to support special actions.
@@ -84,7 +84,7 @@ KC_PAUSE KC_PAUS 48 Keyboard Pause1
KC_INSERT KC_INS 49 Keyboard Insert1
KC_HOME 4A Keyboard Home1
KC_PGUP 4B Keyboard PageUp1
-KC_DELETE KC_DELETE 4C Keyboard Delete Forward
+KC_DELETE KC_DEL 4C Keyboard Delete Forward
KC_END 4D Keyboard End1
KC_PGDOWN KC_PGDN 4E Keyboard PageDown1
KC_RIGHT KC_RGHT 4F Keyboard RightArrow1
diff --git a/doc/keymap.md b/doc/keymap.md
index d1985e567..6f2a663fc 100644
--- a/doc/keymap.md
+++ b/doc/keymap.md
@@ -455,6 +455,35 @@ Turn the backlight on and off without changing level.
+### 2.6 Swap-Hands Action
+The swap-hands action allows support for one-handed keyboards without requiring a separate layer. Set `ONEHAND_ENABLE` in the Makefile and define a `hand_swap_config` entry in your keymap. Now whenever the `ACTION_SWAP_HANDS` command key is pressed the keyboard is mirrored. For instance, to type "Hello, World" on QWERTY you would type `^Ge^s^s^w^c W^wr^sd`
+
+### 2.6.1 Configuration
+The configuration table is a simple 2-dimensional array to map from column/row to new column/row. Example `hand_swap_config` for Planck:
+
+```
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
+ {{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
+ {{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
+ {{11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
+};
+```
+
+Note that the array indices are reversed same as the matrix and the values are of type `keypos_t` which is `{col, row}` and all values are zero-based. In the example above, `hand_swap_config[2][4]` (third row, fifth column) would return {7, 2} (third row, eighth column).
+
+### 2.6.2 Advanced Swap Commands
+- **`ACTION_SWAP_HANDS()`** Swaps hands when pressed, returns to normal when released (momentary).
+- **`ACTION_SWAP_HANDS_TOGGLE()`** Toggles swap on and off with every keypress.
+- **`ACTION_SWAP_HANDS_TAP_TOGGLE()`** Toggles with a tap; momentary when held.
+- **`ACTION_SWAP_HANDS_TAP_KEY(key)`** Sends `key` with a tap; momentary swap when held.
+- **`ACTION_SWAP_HANDS_ON_OFF()`** Alias for `ACTION_SWAP_HANDS()`
+- **`ACTION_SWAP_HANDS_OFF_ON()`** Momentarily turns off swap.
+- **`ACTION_SWAP_HANDS_ON()`** Turns on swapping and leaves it on.
+- **`ACTION_SWAP_HANDS_OFF()`** Turn off swapping and leaves it off. Good for returning to a known state.
+
+
+
## 3. Layer switching Example
There are some ways to switch layer with 'Layer' actions.
diff --git a/keyboards/alps64/Makefile b/keyboards/alps64/Makefile
index d8325e6c8..4e2a6f00f 100644
--- a/keyboards/alps64/Makefile
+++ b/keyboards/alps64/Makefile
@@ -1,70 +1,3 @@
-
-
-# Target file name (without extension).
-
-# project specific files
-SRC = led.c
-
-# 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)
-
-# 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
-#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
-#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../Makefile
endif \ No newline at end of file
diff --git a/keyboards/alps64/readme.md b/keyboards/alps64/readme.md
new file mode 100644
index 000000000..1798b193a
--- /dev/null
+++ b/keyboards/alps64/readme.md
@@ -0,0 +1,4 @@
+Alps64 keyboard firmware
+======================
+
+TODO: to be updated.
diff --git a/keyboards/alps64/rules.mk b/keyboards/alps64/rules.mk
new file mode 100644
index 000000000..c326d3e26
--- /dev/null
+++ b/keyboards/alps64/rules.mk
@@ -0,0 +1,66 @@
+
+
+# Target file name (without extension).
+
+# project specific files
+SRC = led.c
+
+# 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)
+
+# 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
+#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+#NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA \ No newline at end of file
diff --git a/keyboards/amj60/Makefile b/keyboards/amj60/Makefile
new file mode 100644
index 000000000..4e2a6f00f
--- /dev/null
+++ b/keyboards/amj60/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/amj60/amj60.c b/keyboards/amj60/amj60.c
new file mode 100644
index 000000000..993a5917d
--- /dev/null
+++ b/keyboards/amj60/amj60.c
@@ -0,0 +1,30 @@
+#include "amj60.h"
+#include "led.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+ matrix_init_user();
+ led_init_ports();
+};
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+ matrix_scan_user();
+};
+
+void led_init_ports(void) {
+ // * Set our LED pins as output
+ DDRB |= (1<<2);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ // Turn capslock on
+ PORTB &= ~(1<<2);
+ } else {
+ // Turn capslock off
+ PORTB |= (1<<2);
+ }
+}
diff --git a/keyboards/amj60/amj60.h b/keyboards/amj60/amj60.h
new file mode 100644
index 000000000..a0cb47331
--- /dev/null
+++ b/keyboards/amj60/amj60.h
@@ -0,0 +1,153 @@
+#ifndef AMJ60_H
+#define AMJ60_H
+
+#include "quantum.h"
+
+// readability
+#define XXX KC_NO
+
+/* AMJ60 layout to the best of my knowledge matrix layout
+ * ,-----------------------------------------------------------.
+ * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d| 49|
+ * |-----------------------------------------------------------|
+ * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
+ * |-----------------------------------------------------------|
+ * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d |
+ * |-----------------------------------------------------------|
+ * | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3c | 3d |
+ * |-----------------------------------------------------------|
+ * | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
+ * `-----------------------------------------------------------'
+ */
+#define KEYMAP( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49,\
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \
+ k40, k41, k42, k45, k4a, k4b, k4c, k4d \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
+ {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+ {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \
+}
+
+/*
+ * ANSI
+ * ,-----------------------------------------------------------.
+ * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d |
+ * |-----------------------------------------------------------|
+ * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
+ * |-----------------------------------------------------------|
+ * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d |
+ * |-----------------------------------------------------------|
+ * | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d |
+ * |-----------------------------------------------------------|
+ * | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
+ * `-----------------------------------------------------------'
+ */
+#define KEYMAP_ANSI( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \
+ k40, k41, k42, k45, k4a, k4b, k4c, k4d \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
+ {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \
+ {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \
+}
+
+/* AMJ60 HHKB matrix layout
+ * ,------------------------------------------------------------.
+ * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d| 49 |
+ * |------------------------------------------------------------|
+ * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
+ * |------------------------------------------------------------|
+ * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d |
+ * |------------------------------------------------------------|
+ * | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | 3c |
+ * |------------------------------------------------------------|
+ * | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
+ * `------------------------------------------------------------'
+ */
+
+#define KEYMAP_HHKB( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
+ k40, k41, k42, k45, k4a, k4b, k4c, k4d \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
+ {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+ {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \
+}
+
+/* ISO
+ * ,-----------------------------------------------------------.
+ * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d |
+ * |-----------------------------------------------------------|
+ * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
+ * |-----------------------------------------------------------|
+ * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c|2d |
+ * |-----------------------------------------------------------|
+ * | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d |
+ * |-----------------------------------------------------------|
+ * | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
+ * `-----------------------------------------------------------'
+ */
+#define KEYMAP_ISO( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \
+ k40, k41, k42, k45, k4a, k4b, k4c, k4d \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
+ {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, XXX}, \
+ {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \
+}
+/* ISO w/ split right shift key matrix layout
+ * ,-----------------------------------------------------------.
+ * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d |
+ * |-----------------------------------------------------------|
+ * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
+ * |-----------------------------------------------------------|
+ * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c|2d |
+ * |-----------------------------------------------------------|
+ * | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | 3c |
+ * |-----------------------------------------------------------|
+ * | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
+ * `-----------------------------------------------------------'
+ */
+#define KEYMAP_ISO_SPLITRSHIFT( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
+ k40, k41, k42, k45, k4a, k4b, k4c, k4d \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
+ {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+ {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \
+}
+
+void matrix_init_user(void);
+void matrix_scan_user(void);
+
+#endif
diff --git a/keyboards/amj60/config.h b/keyboards/amj60/config.h
new file mode 100644
index 000000000..7c06f9a6c
--- /dev/null
+++ b/keyboards/amj60/config.h
@@ -0,0 +1,94 @@
+/*
+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 0x6066
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Han Chen
+#define PRODUCT AMJ60
+#define DESCRIPTION qmk port of AMJ60 PCB
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+// ROWS: Top to bottom, COLS: Left to right
+
+#define MATRIX_ROW_PINS { F7, F6, F5, F4, D5}
+#define MATRIX_COL_PINS { F1, F0, E6, C7, C6, B0, D4, B1, B7, B5, B4, D7, D6, B3}
+#define UNUSED_PINS
+
+#define BACKLIGHT_PIN B6
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* Backlight configuration
+ */
+#define BACKLIGHT_LEVELS 4
+
+/* Underlight configuration
+ */
+
+#define RGB_DI_PIN E2
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 8 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/amj60/keymaps/iso_split_rshift/Makefile b/keyboards/amj60/keymaps/iso_split_rshift/Makefile
new file mode 100644
index 000000000..2969ed8ae
--- /dev/null
+++ b/keyboards/amj60/keymaps/iso_split_rshift/Makefile
@@ -0,0 +1,23 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/amj60/keymaps/iso_split_rshift/build.sh b/keyboards/amj60/keymaps/iso_split_rshift/build.sh
new file mode 100755
index 000000000..6b4b4568f
--- /dev/null
+++ b/keyboards/amj60/keymaps/iso_split_rshift/build.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+# adjust for cpu
+# -j 16 gave best result on a hyperthreaded quad core core i7
+
+LIMIT=10
+THREADS="-j 16"
+KMAP=iso_split_rshift
+
+echo "We need sudo later"
+sudo ls 2>&1 /dev/null
+
+function wait_bootloader {
+ echo "Waiting for Bootloader..."
+ local STARTTIME=$(date +"%s")
+ local REMIND=0
+ local EXEC=dfu-programmer
+ local TARGET=atmega32u4
+ while true
+ do
+ sudo $EXEC $TARGET get > /dev/null 2>&1
+ [ $? -eq 0 ] && break
+ ENDTIME=$(date +"%s")
+ DURATION=$(($ENDTIME-$STARTTIME))
+ if [ $REMIND -eq 0 -a $DURATION -gt $LIMIT ]
+ then
+ echo "Did you forget to press the reset button?"
+ REMIND=1
+ fi
+ sleep 1
+ done
+}
+make clean
+make KEYMAP=${KMAP} ${THREADS}
+if [[ $? -eq 0 ]]
+then
+ echo "please trigger flashing!"
+ wait_bootloader
+ sudo make KEYMAP=${KMAP} dfu ${THREADS}
+else
+ echo "make failed"
+ exit 77
+fi
diff --git a/keyboards/amj60/keymaps/iso_split_rshift/keymap.c b/keyboards/amj60/keymaps/iso_split_rshift/keymap.c
new file mode 100644
index 000000000..60fb0bfb0
--- /dev/null
+++ b/keyboards/amj60/keymaps/iso_split_rshift/keymap.c
@@ -0,0 +1,147 @@
+// 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 "amj60.h"
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _DEF 0
+#define _SPC 1
+#define _TAB 2
+#define _SFX 3
+
+// dual-role shortcuts
+#define TABDUAL LT(_TAB, KC_TAB)
+#define CAPSDUAL CTL_T(KC_ESC)
+#define SPACEDUAL LT(_SPC, KC_SPACE)
+#define ENTERDUAL CTL_T(KC_ENT)
+// arrow cluster duality bottom right corner
+#define ARRLEFT ALT_T(KC_LEFT)
+#define ARRDOWN GUI_T(KC_DOWN)
+#define ARRUP SFT_T(KC_UP)
+#define ARRRIGHT CTL_T(KC_RIGHT)
+// german brackets
+#define GER_CUR_L RALT(KC_7) // [
+#define GER_CUR_R RALT(KC_0) // ]
+#define GER_PAR_L LSFT(KC_8) // (
+#define GER_PAR_R LSFT(KC_9) // )
+#define GER_ANG_L KC_NUBS // <
+#define GER_ANG_R LSFT(KC_NUBS) // >
+#define GER_BRC_L RALT(KC_8) // [
+#define GER_BRC_R RALT(KC_9) // ]
+
+// increase readability
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _DEF: Default Layer
+ * ,-----------------------------------------------------------.
+ * |Grv| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
+ * |-----------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | Tab is Fn1
+ * |-----------------------------------------------------------|
+ * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| Return |
+ * |-----------------------------------------------------------|
+ * |Sft | < | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn2| RShift is UP
+ * |-----------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space/Fn0 |Alt |Win |Menu|RCtl| Gui Menu, RCtrl is
+ * `-----------------------------------------------------------' LEFT DWN RIGHT
+ */
+ [_DEF] = KEYMAP_ISO_SPLITRSHIFT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ TABDUAL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ CAPSDUAL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, ENTERDUAL, \
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, ARRUP, TG(_SFX), \
+ KC_LCTL, KC_LGUI, KC_LALT, SPACEDUAL, KC_RALT, ARRLEFT, ARRDOWN, ARRRIGHT),
+
+ /* Keymap 1: F-and-vim Layer, modified with Space (by holding space)
+ * ,-----------------------------------------------------------.
+ * |PrSc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete|
+ * |-----------------------------------------------------------|
+ * | |Paus| Up| [ | ] | | | | ( | ) | | | | |
+ * |-----------------------------------------------------------|
+ * | |Lft|Dwn|Rgt| | |Left|Down|Right|Up| | | PLAY |
+ * |-----------------------------------------------------------|
+ * | | | | | < | > | |M0 | | | | | Vol+ | |
+ * |-----------------------------------------------------------|
+ * | | | | |Alt |Prev|Vol-|Next|
+ * `-----------------------------------------------------------'
+ */
+ [_SPC] = KEYMAP_ISO_SPLITRSHIFT(
+ KC_PSCR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ _______, KC_PAUS, KC_UP, GER_BRC_L, GER_BRC_R, _______, _______, GER_PAR_L, GER_PAR_R, _______, _______, _______, _______, _______, \
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, KC_MPLY, \
+ _______, _______, _______, _______, GER_ANG_L, GER_ANG_R, KC_SPACE, M(0), _______, _______, _______, _______, KC_VOLU, _______, \
+ _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT),
+
+ /* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (by holding tab)
+ * ,-----------------------------------------------------------.
+ * |WAKE| | | | | | | | | | | | |Insert| TAB+GRC = WAKE
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | { | } | | | | |
+ * |-----------------------------------------------------------|
+ * | | | | | | |Pos1|PgDn|PgUp|End| | |Retrn |
+ * |-----------------------------------------------------------|
+ * | | | | | | | |AF2| | | | | PgUp | |
+ * |-----------------------------------------------------------|
+ * | | | | |Alt |Pos1|PgDn|End |
+ * `-----------------------------------------------------------'
+ */
+ [_TAB] = KEYMAP_ISO_SPLITRSHIFT(
+ KC_WAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, \
+ _______, _______, _______, _______, _______, _______, _______, GER_CUR_L, GER_CUR_R, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, KC_ENT, \
+ _______, _______, _______, _______, _______, _______, _______, M(1), _______, _______, _______, _______, KC_PGUP, _______, \
+ _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END),
+
+ /* Keymap 3: Split right shift Numpad toggle Layer (by tapping the split rshift key)
+ * ,-----------------------------------------------------------.
+ * |RSET| | | | | | | 7| 8| 9| | | |Backsp |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | 4 | 5 | 6 | | | | \ |
+ * |-----------------------------------------------------------|
+ * | | L | L | | | | | 1 | 2 | 3 | | | Return |
+ * |-----------------------------------------------------------|
+ * | | | L | L | L | L | L | L | | 0 | | /| Up | | All "L"s represent
+ * |-----------------------------------------------------------| LED controlling
+ * |Ctrl|Win |Alt | |Alt |Left|Down|Right|
+ * `-----------------------------------------------------------'
+ */
+ [_SFX] = KEYMAP_ISO_SPLITRSHIFT(
+ RESET, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, _______, _______, KC_BSPC, \
+ _______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, KC_BSLS, \
+ _______, F(2), F(3), _______, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______, XXXXXXX, KC_ENT, \
+ _______, F(4), F(5), F(6), F(7), F(8), F(9), _______, _______, KC_0, _______, KC_SLSH, KC_UP, _______, \
+ _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT),
+};
+
+enum function_id {
+ LAUNCH,
+ RGBLED_TOGGLE,
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_FUNCTION(LAUNCH),
+ [10] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ENT),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ return (record->event.pressed ?
+ MACRO( D(RALT), T(SPC), U(RALT), END )
+ :MACRO( END ));
+ break;
+ case 1:
+ return (record->event.pressed ?
+ MACRO( D(LALT), T(F2), U(LALT), END )
+ :MACRO( END ));
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboards/amj60/keymaps/iso_split_rshift/readme.md b/keyboards/amj60/keymaps/iso_split_rshift/readme.md
new file mode 100644
index 000000000..2113d93e4
--- /dev/null
+++ b/keyboards/amj60/keymaps/iso_split_rshift/readme.md
@@ -0,0 +1,30 @@
+toneman77's custom spacefn Layout
+=====================
+
+##Quantum MK Firmware
+For the full Quantum feature list, see the parent readme.md.
+
+# Features
+* heavily modified ISO (!) layout with split right shift key
+* spaceFn
+* Dual-Role keys:
+*
+ | Original key | when tapped | when held |
+ | ---------------- | ------------- | ------------- |
+ | Space | Space | layer change |
+ | Caps lock | Escape | Control |
+ | Tab | Tab | layer change |
+ | Enter | Enter | Control |
+
+* vim-style arrow keys on hjkl (spacefn layer)
+* corresponding Home/PgDn/PgUp/End on hjkl (tab layer)
+* bonus arrow keys in the bottom right corner on Alt/Win/Menu/rCtrl/Shift
+* more bonus arrow keys on wasd (spacefn layer)
+* media keys prev/next/play/vol+/vol- (spacefn layer)
+* firmware bootloader button
+* additional brackets that only work in german layout due to horrible placement
+in the default qwertz layout
+
+
+### Additional Credits
+* visualization of the layers [here](http://www.keyboard-layout-editor.com/#/gists/aba4e4396459ede85bc66a22cee88e48) (without the LED keys)
diff --git a/keyboards/amj60/keymaps/iso_split_rshift/updatemerge.sh b/keyboards/amj60/keymaps/iso_split_rshift/updatemerge.sh
new file mode 100755
index 000000000..da5457e19
--- /dev/null
+++ b/keyboards/amj60/keymaps/iso_split_rshift/updatemerge.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+git checkout amj60 # gets you on branch amj60
+git fetch origin # gets you up to date with origin
+git merge origin/master
diff --git a/keyboards/amj60/readme.md b/keyboards/amj60/readme.md
new file mode 100644
index 000000000..0896134e0
--- /dev/null
+++ b/keyboards/amj60/readme.md
@@ -0,0 +1,57 @@
+AMJ60 keyboard firmware
+======================
+DIY/Assembled compact 60% keyboard.
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/amj60
+folder. Once your dev env is setup, you'll be able to type `make` to generate
+your .hex - you can then use `make dfu` to program your PCB once you hit the
+reset button.
+
+Depending on which keymap you would like to use, you will have to compile
+slightly differently.
+
+### Default
+To build with the default keymap, simply run `make`.
+
+### Other Keymaps
+Several version of keymap are available in advance but you are recommended to
+define your favorite layout yourself. To define your own keymap create 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.
+
+## Variations
+KEYMAP macros for the following layouts are available:
+
+* default, for all the available, possible keys
+* ANSI, for 60% ANSI keyboard
+* ISO
+* ISO w/ split right shift key
+* HHKB
+
+Remark: all but "ISO w/ split right shift key" are untested and were done to the best of my knowledge.
+
+### Original tmk firmware
+The original firmware that was used to port to qmk can be found [here](https://github.com/AMJKeyboard/AMJ60).
+
+## Further information
+Since information and documentation for this board are sparse, (at least for non-chinese speaking ppl) here is everything that could be found
+
+* [geekhack discussion](https://geekhack.org/index.php?topic=53070.0)
+* [chinese discussion](https://www.v2ex.com/t/161887)
+* Board has [dedicated pinouts](https://i.imgur.com/D0sWhyh.jpg?1) for a bluetooth module
+* has pins for external power [picture](https://i.imgur.com/00VrtIp.jpg?1).
+* most information comes from [reddit](https://www.reddit.com/r/MechanicalKeyboards/comments/32oonr/gh60_pcb_for_your_custom_keyboard/)
diff --git a/keyboards/amj60/rules.mk b/keyboards/amj60/rules.mk
new file mode 100644
index 000000000..18403ac32
--- /dev/null
+++ b/keyboards/amj60/rules.mk
@@ -0,0 +1,66 @@
+
+# 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 ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870)
+BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150)
+MIDI_ENABLE ?= no # MIDI controls
+AUDIO_ENABLE ?= no
+UNICODE_ENABLE ?= no # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/arrow_pad/Makefile b/keyboards/arrow_pad/Makefile
index 09fcf3e7a..4e2a6f00f 100644
--- a/keyboards/arrow_pad/Makefile
+++ b/keyboards/arrow_pad/Makefile
@@ -1,74 +1,3 @@
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=512
-
-
-# Build Options
-# 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
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../Makefile
endif \ No newline at end of file
diff --git a/keyboards/arrow_pad/readme.md b/keyboards/arrow_pad/readme.md
index 5aa44cce5..d0d172272 100644
--- a/keyboards/arrow_pad/readme.md
+++ b/keyboards/arrow_pad/readme.md
@@ -1,24 +1,133 @@
arrow_pad keyboard firmware
======================
+## Keyboard Info
+
+The ArrowPad is a wired conversion that can be made to any stand-alone keypad. It uses two main layers - a standard numpad, and a more advanced arrow cluster navigator.
+
+The first 24-key ArrowPad was handwired, but the PCB was wired as listed below.
+
+```
+<Chip Ref Des> pin <Pin #>
+<Keycap Name> (Silkscreen Name if different) - <Switch Pin #>
+
+
+Note:
+U2 pin 2 is the Num Lock LED and is active low.
+
+U2 pin 1
+Clear (Num Lock) - 1
+Enter - 2
+Esc (ESC) - 2
+
+
+U2 pin 3
+- - 1
+
+U2 pin 4
+7 - 2
+8 - 2
+9 - 2
+
+U2 pin 5
+* - 2
+Delete (BACK SPACE) - 2
+
+U2 pin 6
+1 - 2
+0 - 2
+. - 2
+, - 2
+
+U2 pin 7
+4 - 2
+5 - 2
+6 - 2
+
+U2 pin 8
+Tab - 2
+= (/) - 2
+
+U2 pin 13
+Delete (BACK SPACE) - 1
+9 - 1
+6 - 1
+3 - 1
+. - 1
+
+U2 pin 14
+Tab - 1
+8 - 1
+5 - 1
+2 - 1
+0 - 1
+
+U2 pin 15
+Esc (ESC) - 1
+= (/) - 1
+/ (*) - 1
+7 - 1
+4 - 1
+1 - 1
++ - 1
+
+U2 pin 16
+Enter - 1
+* (<--) - 1
+, - 1
+
+U2 pin 17
+Fn (#NAME?) - 1
+- - 2
+Clear (Num Lock) - 2
+
+U2 pin 18
+Fn (#NAME?) - 2
+* (<--) - 2
++ - 2
+3 - 2
+2 - 2
+```
+
+More info can be found on [GeekHack](https://geekhack.org/index.php?topic=73632.msg1802497#msg1802497)
+
+The second ArrowPad was a conversion from a 21-key Genovation keypad. It used a 2 row x 11 column matrix.
+
+```
+#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, }, \
+}
+```
+
+
## Quantum MK Firmware
For the full Quantum feature list, see [the parent readme.md](/readme.md).
## Building
-Download or clone the whole firmware and navigate to the keyboards/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.
+Download or clone the whole firmware and navigate to the keyboards/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`.
+To build with the default keymap, simply run `make default`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create 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:
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
```
-$ make KEYMAP=[default|jack|<name>]
+$ make [default|pad_21|pad_24|<name>]
```
-Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder. \ No newline at end of file
+
+Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/arrow_pad/rules.mk b/keyboards/arrow_pad/rules.mk
new file mode 100644
index 000000000..3dca9b6ea
--- /dev/null
+++ b/keyboards/arrow_pad/rules.mk
@@ -0,0 +1,70 @@
+
+
+# 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
+# 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 \ No newline at end of file
diff --git a/keyboards/atomic/Makefile b/keyboards/atomic/Makefile
index 08e9205cb..4e2a6f00f 100644
--- a/keyboards/atomic/Makefile
+++ b/keyboards/atomic/Makefile
@@ -1,73 +1,3 @@
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= no # Console for debug(+400)
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
-NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
-MIDI_ENABLE ?= no # MIDI controls
-AUDIO_ENABLE ?= no # Audio output on port C6
-UNICODE_ENABLE ?= no # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../Makefile
endif \ No newline at end of file
diff --git a/keyboards/atomic/keymaps/pvc/Makefile b/keyboards/atomic/keymaps/pvc/Makefile
index 278407e6c..c7c04485f 100644
--- a/keyboards/atomic/keymaps/pvc/Makefile
+++ b/keyboards/atomic/keymaps/pvc/Makefile
@@ -1,7 +1,7 @@
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
+CONSOLE_ENABLE = yes # 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
diff --git a/keyboards/atomic/keymaps/pvc/config.h b/keyboards/atomic/keymaps/pvc/config.h
index 70353323b..18a7253f2 100644
--- a/keyboards/atomic/keymaps/pvc/config.h
+++ b/keyboards/atomic/keymaps/pvc/config.h
@@ -150,10 +150,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* disable debug print */
-//#define NO_DEBUG
+#ifndef NO_DEBUG
+# define NO_DEBUG
+#endif
/* disable print */
-//#define NO_PRINT
+// #ifndef NO_PRINT
+// # define NO_PRINT
+// #endif
+
+/* Only print user print statements */
+#define USER_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
diff --git a/keyboards/atomic/keymaps/pvc/keymap.c b/keyboards/atomic/keymaps/pvc/keymap.c
index f16ec8a6e..d10bfe3bf 100644
--- a/keyboards/atomic/keymaps/pvc/keymap.c
+++ b/keyboards/atomic/keymaps/pvc/keymap.c
@@ -2,48 +2,59 @@
#include "action_layer.h"
#include "eeconfig.h"
#include "led.h"
+#include "mousekey.h"
#ifdef AUDIO_ENABLE
#include "audio.h"
#include "song_list.h"
#endif
-#define LAYER_QWERTY 0
-#define LAYER_COLEMAK 1
-#define LAYER_DVORAK 2
-#define LAYER_UPPER 3
-#define LAYER_LOWER 4
-#define LAYER_FUNCTION 5
-#define LAYER_MOUSE 6
-#define LAYER_ADJUST 7
-
-#define MACRO_QWERTY 0
-#define MACRO_COLEMAK 1
-#define MACRO_DVORAK 2
-#define MACRO_UPPER 3
-#define MACRO_LOWER 4
-#define MACRO_FUNCTION 5
-#define MACRO_MOUSE 6
-#define MACRO_TIMBRE_1 7
-#define MACRO_TIMBRE_2 8
-#define MACRO_TIMBRE_3 9
-#define MACRO_TIMBRE_4 10
-#define MACRO_TEMPO_U 11
-#define MACRO_TEMPO_D 12
-#define MACRO_TONE_DEFAULT 13
-#define MACRO_MUSIC_TOGGLE 14
-#define MACRO_AUDIO_TOGGLE 16
-#define MACRO_INC_VOICE 18
-#define MACRO_DEC_VOICE 19
-#define MACRO_BACKLIGHT 20
-#define MACRO_BREATH_TOGGLE 21
-#define MACRO_BREATH_SPEED_INC 23
-#define MACRO_BREATH_SPEED_DEC 24
-#define MACRO_BREATH_DEFAULT 25
+enum keyboard_layers {
+ LAYER_QWERTY = 0,
+ LAYER_UPPER,
+ LAYER_LOWER,
+ LAYER_FUNCTION,
+ LAYER_MOUSE,
+ LAYER_ADJUST,
+};
+enum keyboard_macros {
+ MACRO_QWERTY = 0,
+ MACRO_UPPER,
+ MACRO_LOWER,
+ MACRO_FUNCTION,
+ MACRO_MOUSE,
+ MACRO_TIMBRE_1,
+ MACRO_TIMBRE_2,
+ MACRO_TIMBRE_3,
+ MACRO_TIMBRE_4,
+ MACRO_TEMPO_U,
+ MACRO_TEMPO_D,
+ MACRO_TONE_DEFAULT,
+ MACRO_MUSIC_TOGGLE,
+ MACRO_AUDIO_TOGGLE,
+ MACRO_INC_VOICE,
+ MACRO_DEC_VOICE,
+ MACRO_BACKLIGHT,
+ MACRO_BREATH_TOGGLE,
+ MACRO_BREATH_SPEED_INC,
+ MACRO_BREATH_SPEED_DEC,
+ MACRO_BREATH_DEFAULT,
+ MACRO_MOUSE_MOVE_UL,
+ MACRO_MOUSE_MOVE_UR,
+ MACRO_MOUSE_MOVE_DL,
+ MACRO_MOUSE_MOVE_DR,
+ MACRO_HELP_1,
+ MACRO_HELP_2,
+ MACRO_HELP_3,
+ MACRO_HELP_4,
+ MACRO_HELP_5,
+ MACRO_HELP_6,
+ MACRO_HELP_7,
+ MACRO_HELP_8,
+ MACRO_HELP_9,
+};
#define M_QWRTY M(MACRO_QWERTY)
-#define M_COLMK M(MACRO_COLEMAK)
-#define M_DVORK M(MACRO_DVORAK)
#define M_UPPER M(MACRO_UPPER)
#define M_LOWER M(MACRO_LOWER)
#define M_FUNCT M(MACRO_FUNCTION)
@@ -60,6 +71,19 @@
#define M_BSPDU M(MACRO_BREATH_SPEED_INC)
#define M_BSPDD M(MACRO_BREATH_SPEED_DEC)
#define M_BDFLT M(MACRO_BREATH_DEFAULT)
+#define M_MS_UL M(MACRO_MOUSE_MOVE_UL)
+#define M_MS_UR M(MACRO_MOUSE_MOVE_UR)
+#define M_MS_DL M(MACRO_MOUSE_MOVE_DL)
+#define M_MS_DR M(MACRO_MOUSE_MOVE_DR)
+#define M_HELP1 M(MACRO_HELP_1)
+#define M_HELP2 M(MACRO_HELP_2)
+#define M_HELP3 M(MACRO_HELP_3)
+#define M_HELP4 M(MACRO_HELP_4)
+#define M_HELP5 M(MACRO_HELP_5)
+#define M_HELP6 M(MACRO_HELP_6)
+#define M_HELP7 M(MACRO_HELP_7)
+#define M_HELP8 M(MACRO_HELP_8)
+#define M_HELP9 M(MACRO_HELP_9)
#define VC_UP M(MACRO_INC_VOICE)
@@ -77,6 +101,7 @@
#define SC_ACLS LALT(KC_F4)
#define SC_CCLS LCTL(KC_F4)
+#define TG_NKRO MAGIC_TOGGLE_NKRO
#define OS_SHFT KC_FN0
#define _______ KC_TRNS
@@ -86,155 +111,126 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* QWERTY
- * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
- * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
- * | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
- * | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | XXXXXX . ENTER | PG UP |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
- * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN |
- * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
- * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT |
- * '--------------------------------------------------------------------------------------------------------------------------------------'
- */
-
- [LAYER_QWERTY] = { // QWERTY
- { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC },
- { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL },
- { KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP },
- { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN },
- { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
- },
-
- /* COLEMAK
- * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
- * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | XXXXXX . BACKSP |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
- * | TAB | Q | W | F | P | G | J | L | U | Y | ; | [ | ] | \ | DEL |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
- * | BACKSP | A | R | S | T | D | H | N | E | I | O | ' | XXXXXX . ENTER | PG UP |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
- * | LSHIFT | Z | X | C | V | B | K | M | , | . | / | XXXXXX . RSHIFT | UP | PG DN |
- * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
- * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT |
- * '--------------------------------------------------------------------------------------------------------------------------------------'
- */
-
- [LAYER_COLEMAK] = { // COLEMAK
- { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC },
- { KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL },
- { KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_ENT, KC_PGUP },
- { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN },
- { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
+/* LAYER = LAYER_QWERTY
+ .--------------------------------------------------------------------------------------------------------------------------------------.
+ | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BACKSP . BACKSP |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | DEL |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | CAP LK | A | S | D | F | G | H | J | K | L | ; | ' | ENTER . ENTER | PG UP |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | LSHIFT | Z | X | C | V | B | N | M | , | . | / | RSHIFT . RSHIFT | UP | PG DN |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | LCTRL | LWIN | FN | LALT | UPPER | SPACE . SPACE | LOWER | OSHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT |
+ '--------------------------------------------------------------------------------------------------------------------------------------'
+*/
+[LAYER_QWERTY] = {
+ { KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC },
+ { KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL },
+ { KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , KC_ENT , KC_PGUP },
+ { KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_RSFT, KC_UP , KC_PGDN },
+ { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC , KC_SPC , M_LOWER, OS_SHFT, KC_RALT, KC_APP , KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT }
},
-
-/* DVORAK
- * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
- * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | [ | ] | XXXXXX . BACKSP |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
- * | TAB | ' | , | . | P | Y | F | G | C | R | L | / | = | \ | DEL |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
- * | CAPS | A | O | E | U | I | D | H | T | N | S | - | XXXXXX . ENTER | PG UP |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
- * | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | XXXXXX . RSHIFT | UP | PG DN |
- * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
- * | LCTRL | LWIN | FN | LALT | UPPER | XXXXXX . SPACE | LOWER | SHIFT | RALT | APP | RCTRL | LEFT | DOWN | RIGHT |
- * '--------------------------------------------------------------------------------------------------------------------------------------'
- */
-
- [LAYER_DVORAK] = { // DVORAK
- { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_BSPC },
- { KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL },
- { KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, KC_ENT, KC_PGUP },
- { KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_RSFT, KC_UP, KC_PGDN },
- { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
- },
-
-/* UPPER
- * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
- * | PRINT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | NUM LK | / | * | | NUM LK | SCR LK | XXXXXX . PAUSE |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
- * | | F1 | F2 | F3 | F4 | | | 7 | 8 | 9 | - | | | | INS |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
- * | CAP LK | F5 | F6 | F7 | F8 | | | 4 | 5 | 6 | + | | XXXXXX . | HOME |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
- * | | F9 | F10 | F11 | F12 | | | 1 | 2 | 3 | ENTER | XXXXXX . | | END |
- * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
- * | | | | | | 0 | | RALT | . | ENTER | | | | |
- * '--------------------------------------------------------------------------------------------------------------------------------------'
- */
-
- [LAYER_UPPER] = { // UPPER
- { KC_PSCR, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, XXXXXXX, XXXXXXX, KC_SLCK, KC_PAUS, KC_PAUS },
- { _______, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, KC_INS },
- { KC_CAPS, KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, ________________, KC_HOME },
- { _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, ________________, _______, KC_END },
- { _______, _______, _______, _______, _______, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, _______, _______, _______, _______ },
- },
-
-/* LOWER
- * .---------------------------------------------------------------------------------------------------------------------- 2u ------------.
- * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | XXXXXX . BACKSP |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
- * | | $ | { | [ | ( | % | # | ) | ] | } | @ | | | | INS |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ------------+--------|
- * | | ^ | * | + | - | ; | : | _ | ' | " | ` | | XXXXXX . | HOME |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+- 2u ---------------------+--------|
- * | | | | & | ! | ~ | / | \ | = | < | > | ? | XXXXXX . | | END |
- * |--------+--------+--------+--------+--------+- 2u ------------+--------+--------+--------+--------+-----------------+--------+--------|
- * | | | | | | | | | | | | | | |
- * '--------------------------------------------------------------------------------------------------------------------------------------'
- */
-
- [LAYER_LOWER] = { // LOWER
- { _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ },
- { _______, KC_DLR, KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT, _______, _______, _______, KC_INS },
- { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SCLN, KC_COLN, KC_UNDS, KC_QUOT, KC_DQT, KC_GRV, _______, ________________, KC_HOME },
- { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SLSH, KC_BSLS, KC_EQL, KC_LT, KC_GT, KC_QUES, ________________, _______, KC_END },
- { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ },
- },
-
- [LAYER_FUNCTION] = { // FUNCTION
- { KC_NLCK, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ________________ },
- { KC_SLCK, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, KC_PAUS },
- { KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_PSCR },
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, KC_VOLU, KC_MUTE },
- { _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT },
- },
-
-#ifdef MOUSEKEY_ENABLE
-
- [LAYER_MOUSE] = { // MOUSE
- { _______, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX },
- { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
- { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXXXXXXXXXXX, KC_WH_U },
- { _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ________________, KC_MS_U, KC_WH_D },
- { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R },
- },
-
-#endif
-
- [LAYER_ADJUST] = { // ADJUST
- { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, _______, _______, MU_TOG, AU_TOG, ________________ },
- { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ },
- { _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, _______, ________________, MUV_IN, _______ },
- { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, MUV_DE, _______ },
- },
-
-
-/*
- [LAYER_EMPTY] = { // LAYER
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________ },
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______ },
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ________________, _______, _______ },
- { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, _______, _______, _______ },
- },
+/* LAYER = LAYER_UPPER
+ .--------------------------------------------------------------------------------------------------------------------------------------.
+ | PRINT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | NUM LK | KP / | KP * | KP - | XXXXXX | XXXXXX | ______ . ______ |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | PAUSE | F1 | F2 | F3 | F4 | NUM LK | KP / | KP 7 | KP 8 | KP 9 | KP - | ______ | ______ | ______ | INS |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ______ | F5 | F6 | F7 | F8 | CAP LK | KP * | KP 4 | KP 5 | KP 6 | KP + | ______ | ______ . ______ | HOME |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ______ | F9 | F10 | F11 | F12 | SCR LK | KP 0 | KP 1 | KP 2 | KP 3 | KP ENT | ______ . ______ | ______ | END |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ______ | ______ | ______ | ______ | UPPER | KP 0 . KP 0 | ______ | RALT | KP . | KP ENT | ______ | ______ | ______ | ______ |
+ '--------------------------------------------------------------------------------------------------------------------------------------'
*/
-
+[LAYER_UPPER] = {
+ { KC_PSCR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, XXXXXXX, XXXXXXX, _______, _______ },
+ { KC_PAUS, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, KC_INS },
+ { _______, KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_CAPS, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, _______, _______, KC_HOME },
+ { _______, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_SLCK, KC_KP_0, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______, _______, _______, KC_END },
+ { _______, _______, _______, _______, M_UPPER, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, _______, _______, _______, _______ }
+},
+/* LAYER = LAYER_LOWER
+ .--------------------------------------------------------------------------------------------------------------------------------------.
+ | PRINT | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | ______ . ______ |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ______ | $ | { | [ | ( | % | # | ) | ] | } | @ | ______ | ______ | ______ | INS |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ______ | ^ | * | + | - | / | \ | _ | ' | " | ` | ______ | ______ . ______ | HOME |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ______ | | | & | ! | ~ | ; | : | = | < | > | ? | ______ . ______ | ______ | END |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ______ | ______ | ______ | ______ | ______ | ______ . ______ | LOWER | ______ | ______ | ______ | ______ | ______ | ______ | ______ |
+ '--------------------------------------------------------------------------------------------------------------------------------------'
+*/
+[LAYER_LOWER] = {
+ { KC_PSCR, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , _______, _______ },
+ { _______, KC_DLR , KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT , _______, _______, _______, KC_INS },
+ { _______, KC_CIRC, KC_ASTR, KC_PLUS, KC_MINS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT , KC_GRV , _______, _______, _______, KC_HOME },
+ { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL , KC_LT , KC_GT , KC_QUES, _______, _______, _______, KC_END },
+ { _______, _______, _______, _______, _______, _______, _______, M_LOWER, _______, _______, _______, _______, _______, _______, _______ }
+},
+/* LAYER = LAYER_FUNCTION
+ .--------------------------------------------------------------------------------------------------------------------------------------.
+ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | XXXXXX | F13 | F14 | F15 | F16 | NUM LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | XXXXXX | F17 | F18 | F19 | F20 | SCR LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | XXXXXX |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ______ | F21 | F22 | F23 | F24 | CAP LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | ______ . ______ | VOL UP | MUTE |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ______ | ______ | FN | ______ | ______ | PLAY . PLAY | ______ | ______ | ______ | ______ | ______ | PREV | VOL DN | NEXT |
+ '--------------------------------------------------------------------------------------------------------------------------------------'
+*/
+[LAYER_FUNCTION] = {
+ { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+ { XXXXXXX, KC_F13 , KC_F14 , KC_F15 , KC_F16 , KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+ { XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+ { _______, KC_F21 , KC_F22 , KC_F23 , KC_F24 , KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, KC_VOLU, KC_MUTE },
+ { _______, _______, M_FUNCT, _______, _______, KC_MPLY, KC_MPLY, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT }
+},
+/* LAYER = LAYER_MOUSE
+ .--------------------------------------------------------------------------------------------------------------------------------------.
+ | ESC | MS AC0 | MS AC1 | MS AC2 | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS UL | MS U | MS UR | XXXXXX | XXXXXX | XXXXXX | MS WHL | MS WHR |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | XXXXXX | MS BT5 | MS BT4 | MS BT3 | MS BT2 | XXXXXX | XXXXXX | MS L | XXXXXX | MS R | XXXXXX | XXXXXX | XXXXXX . XXXXXX | MS WHU |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ______ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS DL | MS D | MS DR | XXXXXX | ______ . ______ | MS U | MS WHD |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ______ | ______ | ______ | ______ | ______ | MS BT1 . MS BT1 | ______ | ______ | ______ | ______ | ______ | MS L | MS D | MS R |
+ '--------------------------------------------------------------------------------------------------------------------------------------'
+*/
+[LAYER_MOUSE] = {
+ { KC_ESC , KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+ { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_UL, KC_MS_U, M_MS_UR, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_L, KC_WH_R },
+ { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, KC_MS_L, XXXXXXX, KC_MS_R, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_U },
+ { _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_DL, KC_MS_D, M_MS_DR, XXXXXXX, _______, _______, KC_MS_U, KC_WH_D },
+ { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R }
+},
+/* LAYER = LAYER_ADJUST
+ .--------------------------------------------------------------------------------------------------------------------------------------.
+ | XXXXXX | HELP 1 | HELP 2 | HELP 3 | HELP 4 | HELP 5 | HELP 6 | HELP 7 | HELP 8 | HELP 9 | XXXXXX | MUSIC | AUDIO | XXXXXX . XXXXXX |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | XXXXXX | BRTOG | BRSPD+ | BRSPD- | BRDFLT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | XXXXXX |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | XXXXXX | QWERTY | XXXXXX | XXXXXX | BACKLT | RESET | XXXXXX | MOUSE | XXXXXX | XXXXXX | XXXXXX | XXXXXX . XXXXXX | VOICE+ | XXXXXX |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | UPPER | XXXXXX . XXXXXX | LOWER | XXXXXX | XXXXXX | XXXXXX | XXXXXX | TEMPO- | VOICE- | TEMPO+ |
+ '--------------------------------------------------------------------------------------------------------------------------------------'
+*/
+[LAYER_ADJUST] = {
+ { XXXXXXX, M_HELP1, M_HELP2, M_HELP3, M_HELP4, M_HELP5, M_HELP6, M_HELP7, M_HELP8, M_HELP9, XXXXXXX, MU_TOG , AU_TOG , XXXXXXX, XXXXXXX },
+ { XXXXXXX, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+ { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+ { XXXXXXX, M_QWRTY, XXXXXXX, XXXXXXX, M_BACKL, RESET , XXXXXXX, M_MOUSE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MUV_IN , XXXXXXX },
+ { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TMPO_DN, MUV_DE , TMPO_UP }
+},
};
#ifdef AUDIO_ENABLE
@@ -276,61 +272,101 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
switch(id)
{
- case MACRO_BREATH_TOGGLE:
+ case MACRO_HELP_1:
if (record->event.pressed)
{
- breathing_toggle();
+ uprintf("1");
}
break;
- case MACRO_BREATH_SPEED_INC:
+ case MACRO_HELP_2:
if (record->event.pressed)
{
- breathing_speed_inc(1);
+ uprintf("2");
}
break;
- case MACRO_BREATH_SPEED_DEC:
+ case MACRO_HELP_3:
if (record->event.pressed)
{
- breathing_speed_dec(1);
+ uprintf("3");
}
break;
- case MACRO_BREATH_DEFAULT:
+ case MACRO_HELP_4:
if (record->event.pressed)
{
- breathing_defaults();
+ uprintf("4");
}
break;
- case MACRO_QWERTY:
+ case MACRO_HELP_5:
if (record->event.pressed)
{
- persistant_default_layer_set(1UL<<LAYER_QWERTY);
- #ifdef AUDIO_ENABLE
- PLAY_NOTE_ARRAY(tone_qwerty, false, STACCATO);
- #endif /* AUDIO_ENABLE */
+ uprintf("5");
}
break;
- case MACRO_COLEMAK:
+ case MACRO_HELP_6:
if (record->event.pressed)
{
- persistant_default_layer_set(1UL<<LAYER_COLEMAK);
- #ifdef AUDIO_ENABLE
- PLAY_NOTE_ARRAY(tone_colemak, false, STACCATO);
- #endif /* AUDIO_ENABLE */
+ uprintf("6");
}
break;
- case MACRO_DVORAK:
+ case MACRO_HELP_7:
if (record->event.pressed)
{
- persistant_default_layer_set(1UL<<LAYER_DVORAK);
- #ifdef AUDIO_ENABLE
- PLAY_NOTE_ARRAY(tone_dvorak, false, STACCATO);
- #endif /* AUDIO_ENABLE */
+ uprintf("7");
+ }
+ break;
+
+ case MACRO_HELP_8:
+ if (record->event.pressed)
+ {
+ uprintf("8");
+ }
+ break;
+
+ case MACRO_HELP_9:
+ if (record->event.pressed)
+ {
+ uprintf("9");
+ }
+ break;
+
+ case MACRO_BREATH_TOGGLE:
+ if (record->event.pressed)
+ {
+ breathing_toggle();
+ }
+ break;
+
+ case MACRO_BREATH_SPEED_INC:
+ if (record->event.pressed)
+ {
+ breathing_speed_inc(1);
+ }
+ break;
+
+ case MACRO_BREATH_SPEED_DEC:
+ if (record->event.pressed)
+ {
+ breathing_speed_dec(1);
+ }
+ break;
+
+ case MACRO_BREATH_DEFAULT:
+ if (record->event.pressed)
+ {
+ breathing_defaults();
+ }
+ break;
+
+ case MACRO_QWERTY:
+ if (record->event.pressed)
+ {
+ persistant_default_layer_set(1UL<<LAYER_QWERTY);
}
break;
diff --git a/keyboards/atomic/readme.md b/keyboards/atomic/readme.md
index ab1e7ba1f..674dcf113 100644
--- a/keyboards/atomic/readme.md
+++ b/keyboards/atomic/readme.md
@@ -13,13 +13,14 @@ Download or clone the whole firmware and navigate to the keyboards/atomic folder
Depending on which keymap you would like to use, you will have to compile slightly differently.
### Default
-To build with the default keymap, simply run `make`.
+To build with the default keymap, simply run `make default`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a file in the keymaps folder named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
-To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
```
-$ make KEYMAP=[default|jack|<name>]
+$ make [default|jack|<name>]
```
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/atomic/rules.mk b/keyboards/atomic/rules.mk
new file mode 100644
index 000000000..d0f3a3a1c
--- /dev/null
+++ b/keyboards/atomic/rules.mk
@@ -0,0 +1,69 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
+MIDI_ENABLE ?= no # MIDI controls
+AUDIO_ENABLE ?= no # Audio output on port C6
+UNICODE_ENABLE ?= no # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend \ No newline at end of file
diff --git a/keyboards/atreus/Makefile b/keyboards/atreus/Makefile
index 95ee1d4d7..4e2a6f00f 100644
--- a/keyboards/atreus/Makefile
+++ b/keyboards/atreus/Makefile
@@ -1,88 +1,3 @@
-
-
-ifdef TEENSY2
- OPT_DEFS += -DATREUS_TEENSY2
- ATRUES_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex
-else
- OPT_DEFS += -DATREUS_ASTAR
- OPT_DEFS += -DCATERINA_BOOTLOADER
- ATRUES_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
- avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
-endif
-
-# 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
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
-NKRO_ENABLE ?= yes # USB Nkey Rollover - not yet supported in LUFA
-# BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
-# MIDI_ENABLE ?= YES # MIDI controls
-UNICODE_ENABLE ?= YES # Unicode
-# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
-
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../Makefile
-endif
-
-USB ?= /dev/cu.usbmodem1411
-
-upload: build
- $(ATRUES_UPLOAD_COMMAND)
- \ No newline at end of file
+endif \ No newline at end of file
diff --git a/keyboards/atreus/atreus.h b/keyboards/atreus/atreus.h
index 2b3803bc2..f841c3519 100644
--- a/keyboards/atreus/atreus.h
+++ b/keyboards/atreus/atreus.h
@@ -10,16 +10,16 @@
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array
#define KEYMAP( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \
- k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \
- k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, \
- k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b \
) \
{ \
{ k00, k01, k02, k03, k04, KC_NO, k05, k06, k07, k08, k09 }, \
{ k10, k11, k12, k13, k14, KC_NO, k15, k16, k17, k18, k19 }, \
{ k20, k21, k22, k23, k24, k35, k25, k26, k27, k28, k29 }, \
- { k2a, k30, k31, k32, k33, k34, k36, k37, k38, k39, k3a } \
+ { k30, k31, k32, k33, k34, k36, k37, k38, k39, k3a, k3b } \
}
#endif
diff --git a/keyboards/atreus/config.h b/keyboards/atreus/config.h
index 624d90188..51162cde3 100644
--- a/keyboards/atreus/config.h
+++ b/keyboards/atreus/config.h
@@ -37,7 +37,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// COLS: Left to right, ROWS: Top to bottom
#if defined(ATREUS_ASTAR)
# define MATRIX_ROW_PINS { D0, D1, D3, D2 }
+#if defined(PCBDOWN)
+# define MATRIX_COL_PINS { B7, D6, F7, F6, B6, D4, E6, B4, B5, C6, D7 }
+#else
# define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 }
+#endif
# define UNUSED_PINS
#elif defined(ATREUS_TEENSY2)
# define MATRIX_ROW_PINS { D0, D1, D2, D3 }
diff --git a/keyboards/atreus/keymaps/alphadox/config.h b/keyboards/atreus/keymaps/alphadox/config.h
new file mode 100644
index 000000000..df56849b0
--- /dev/null
+++ b/keyboards/atreus/keymaps/alphadox/config.h
@@ -0,0 +1,80 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Arbitrary Definitions
+#define PRODUCT Planckeus
+#define DESCRIPTION q.m.k. keyboard firmware for Planckeus
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 11
+
+#define MATRIX_ROW_PINS { D0, D1, D2, D3 }
+#define MATRIX_COL_PINS { F6, F5, F4, F1, F0, F7, B0, B1, B2, B3, B7 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+//#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/atreus/keymaps/alphadox/keymap.c b/keyboards/atreus/keymaps/alphadox/keymap.c
new file mode 100644
index 000000000..b8ec0e032
--- /dev/null
+++ b/keyboards/atreus/keymaps/alphadox/keymap.c
@@ -0,0 +1,45 @@
+#include "atreus.h"
+
+#define BASE 0
+#define SYMB 1
+#define ETC 2
+
+enum macro_id {
+ TEENSY,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[BASE] = KEYMAP(
+ KC_Q, KC_W, KC_D, KC_F, KC_K, KC_J, KC_U, KC_R, KC_L, KC_SCLN,
+ LT(ETC,KC_A), KC_S, KC_E, KC_T, KC_G, KC_Y, KC_N, KC_I, KC_O, KC_H,
+ SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_P, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH),
+ KC_GRV, KC_DEL, KC_LALT, GUI_T(KC_TAB), LT(SYMB,KC_BSPC), CTL_T(KC_ESC), SFT_T(KC_ENT), LT(SYMB,KC_SPC), GUI_T(KC_LEFT), KC_DOWN, KC_UP, LCAG_T(KC_RGHT)
+),
+
+[SYMB] = KEYMAP(
+ KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_EQL, KC_7, KC_8, KC_9, KC_PLUS,
+ KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_BSLS, KC_MINS, KC_4, KC_5, KC_6, KC_QUOT,
+ KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_ASTR, KC_UNDS, KC_1, KC_2, KC_3, KC_DQUO,
+ KC_TILD, KC_AMPR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_NO, KC_DOT, KC_TRNS
+),
+
+[ETC] = KEYMAP(
+ RESET, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_VOLU, KC_F7, KC_F8, KC_F9, KC_HOME,
+ LT(ETC,KC_A), KC_NO, KC_NO, KC_NO, KC_PGDN, KC_VOLD, KC_F4, KC_F5, KC_F6, KC_END,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL, KC_MUTE, KC_F1, KC_F2, KC_F3, KC_INS,
+ KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, 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 TEENSY:
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboards/atreus/keymaps/classic/keymap.c b/keyboards/atreus/keymaps/classic/keymap.c
new file mode 100644
index 000000000..6ca0b2077
--- /dev/null
+++ b/keyboards/atreus/keymaps/classic/keymap.c
@@ -0,0 +1,48 @@
+#include "atreus.h"
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QW 0
+#define _RS 1
+#define _LW 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QW] = { /* Qwerty */
+ {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P },
+ {KC_A, KC_S, KC_D, KC_F, KC_G, KC_TRNS, KC_H, KC_J, KC_K, KC_L, KC_SCLN },
+ {KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH },
+ {KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT }
+},
+[_RS] = { /* [> RAISE <] */
+ {KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR},
+ {KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_TRNS, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS},
+ {KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_LALT, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS},
+ {TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL}
+},
+[_LW] = { /* [> LOWER <] */
+ {KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10},
+ {KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_TRNS, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LALT, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12},
+ {KC_TRNS, KC_TRNS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, DF(_QW), KC_TRNS, KC_TRNS, RESET}
+}};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboards/atreus/keymaps/default/keymap.c b/keyboards/atreus/keymaps/default/keymap.c
index 1c4280ff5..04ad66fed 100644
--- a/keyboards/atreus/keymaps/default/keymap.c
+++ b/keyboards/atreus/keymaps/default/keymap.c
@@ -18,17 +18,29 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH },
{KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT }
},
+/*
+ * ! @ up { } || pgup 7 8 9 *
+ * # left down right $ || pgdn 4 5 6 +
+ * [ ] ( ) & || ` 1 2 3 \
+ * lower insert super shift bksp ctrl || alt space fn . 0 =
+ */
[_RS] = { /* [> RAISE <] */
- {KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR},
- {KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_TRNS, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS},
- {KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_LALT, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS},
+ {KC_EXLM, KC_AT, KC_UP, KC_LCBR, KC_RCBR, KC_TRNS, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR},
+ {KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DLR, KC_TRNS, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS},
+ {KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_LALT, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS},
{TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL}
},
+/*
+ * insert home up end pgup || up F7 F8 F9 F10
+ * del left down right pgdn || down F4 F5 F6 F11
+ * volup reset || F1 F2 F3 F12
+ * voldn super shift bksp ctrl || alt space L0 prtsc scroll pause
+ */
[_LW] = { /* [> LOWER <] */
{KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_TRNS, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10},
{KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_TRNS, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11},
- {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LALT, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12},
- {KC_TRNS, KC_TRNS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, DF(_QW), KC_TRNS, KC_TRNS, RESET}
+ {KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, RESET, KC_LALT, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F12},
+ {KC_TRNS, KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_SPC, DF(_QW), KC_PSCR, KC_SLCK, KC_PAUS}
}};
const uint16_t PROGMEM fn_actions[] = {
diff --git a/keyboards/atreus/keymaps/erlandsona/config.h b/keyboards/atreus/keymaps/erlandsona/config.h
new file mode 100644
index 000000000..d9eb1903e
--- /dev/null
+++ b/keyboards/atreus/keymaps/erlandsona/config.h
@@ -0,0 +1,96 @@
+/*
+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"
+
+
+/* Make Overloaded Keys switch faster */
+#define TAPPING_TERM 150
+
+/* USB Device descriptor parameter */
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Technomancy
+#define PRODUCT Atreus
+#define DESCRIPTION q.m.k. keyboard firmware for Atreus
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 11
+
+// Change this to how you wired your keyboard
+// COLS: Left to right, ROWS: Top to bottom
+#if defined(ATREUS_ASTAR)
+# define MATRIX_ROW_PINS { D0, D1, D3, D2 }
+#if defined(PCBDOWN)
+# define MATRIX_COL_PINS { B7, D6, F7, F6, B6, D4, E6, B4, B5, C6, D7 }
+#else
+# define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 }
+#endif
+# define UNUSED_PINS
+#elif defined(ATREUS_TEENSY2)
+# define MATRIX_ROW_PINS { D0, D1, D2, D3 }
+# define MATRIX_COL_PINS { F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0 }
+# define UNUSED_PINS
+#endif
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+//#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/atreus/keymaps/erlandsona/keymap.c b/keyboards/atreus/keymaps/erlandsona/keymap.c
new file mode 100644
index 000000000..32c8826e0
--- /dev/null
+++ b/keyboards/atreus/keymaps/erlandsona/keymap.c
@@ -0,0 +1,61 @@
+// this is the style you want to emulate.
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+
+#include "atreus.h"
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define BASE 0
+#define NUMS 1
+#define MOUS 2
+
+// Some quick aliases, just to make it look pretty
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[BASE] = KEYMAP( /* Qwerty */
+ KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,
+ KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN ,
+ SFT_T(KC_Z), KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , SFT_T(KC_QUOT),
+ KC_LCTL , KC_LALT, KC_LALT, KC_LGUI, KC_BSPC, KC_ESC, KC_ENT, KC_SPC, F(NUMS), KC_RALT, KC_SLSH, KC_BSLS ),
+
+[NUMS] = KEYMAP( /* Numbers / Arrows / Symbols */
+ KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_LPRN, KC_RPRN, KC_MINS, KC_EQL , KC_LBRC,
+ KC_TAB , KC_5 , KC_6 , KC_7 , KC_8 , KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_RBRC,
+ _______, KC_9 , KC_0 , KC_DOT , KC_COMM, KC_HOME, KC_PGDN, KC_PGUP, KC_END , _______,
+ _______, _______, _______, _______, KC_DEL , F(MOUS), _______, _______, _______, _______, _______, _______),
+
+[MOUS] = KEYMAP( /* Mouse and Media Keys */
+ KC_SLCK, KC_PAUSE, KC_F11 , KC_F10 , KC_F9 , KC_F8 , KC_F7 , KC_F6 , KC_F5 , KC_F4,
+ KC_VOLD, KC_ACL0 , KC_ACL1, KC_ACL2, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_F3,
+ KC_MUTE, KC_MPRV , KC_MPLY, KC_MNXT, KC_MUTE, KC_WH_R, KC_WH_U, KC_WH_D, KC_WH_L, KC_F2,
+ _______, _______ , _______, _______, _______, _______, _______, KC_BTN1, F(BASE), RESET , KC_F12 , KC_F1)
+};
+
+
+// I prefer this layer switching strategy to the TG and MO functions.
+// so that I can get out of mouse mode just by tapping/holding my base layer FN key.
+const uint16_t PROGMEM fn_actions[] = {
+ [BASE] = ACTION_LAYER_OFF(2, 1), // switch back to layer 0
+ [NUMS] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
+ [MOUS] = ACTION_LAYER_ON(2, 1) // switch to layer 2
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboards/atreus/keymaps/jeremy/keymap.c b/keyboards/atreus/keymaps/jeremy/keymap.c
new file mode 100644
index 000000000..90ec6f904
--- /dev/null
+++ b/keyboards/atreus/keymaps/jeremy/keymap.c
@@ -0,0 +1,66 @@
+// This is the personal keymap of Jeremy Cowgar (@jcowgar). It is written for the programmer.
+
+#include "atreus.h"
+#include "action_layer.h"
+#include "keymap_colemak.h"
+
+#define PREVENT_STUCK_MODIFIERS
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+#define ALPH 0
+#define NUMS 1
+#define CURS 2
+#define SYMB 3
+#define FKEY 4
+
+// Some handy macros to keep the keymaps clean and easier to maintain
+#define KM_SAVE LGUI(CM_S)
+#define KM_CLSE LGUI(CM_W)
+#define KM_OPEN LGUI(CM_O)
+
+#define KM_COPY LGUI(KC_C)
+#define KM_CUT LGUI(KC_X)
+#define KM_PAST LGUI(KC_V)
+#define KM_UNDO LGUI(KC_Z)
+#define KM_REDO LGUI(LSFT(KC_Z))
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[ALPH] = {
+ {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P},
+ {KC_A, LT(NUMS, KC_S), LT(FKEY, KC_D), KC_F, KC_G, KC_TRNS, KC_H, KC_J, LT(CURS, KC_K), LT(SYMB, KC_L), KC_SCLN},
+ {KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH},
+ {KC_LCTL, KC_ESC, KC_NO, KC_LSFT, KC_SPC, KC_LGUI, KC_ENT, KC_RSFT, KC_NO, KC_ESC, KC_RCTL}
+},
+[NUMS] = {
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_ASTR, KC_SLSH, KC_TRNS, KC_TRNS, KC_7, KC_8, KC_9, KC_SLSH},
+ {KC_TRNS, KC_TRNS, KC_EQL, KC_PLUS, KC_MINS, KC_TRNS, KC_LPRN, KC_4, KC_5, KC_6, KC_ASTR},
+ {KC_TRNS, KC_TRNS, KC_DOT, KC_COMM, CM_SCLN, KC_TRNS, KC_RPRN, KC_1, KC_2, KC_3, KC_MINS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_DOT, KC_EQL, KC_PLUS}
+},
+[CURS] = {
+ {KC_TRNS, KC_BSPC, KC_UP, KC_DELT, KC_PGUP, KC_TRNS, KC_TRNS, KM_SAVE, KC_TRNS, KM_OPEN, KC_TRNS},
+ {KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_TRNS, KM_UNDO, KC_LALT, KC_TRNS, KC_LGUI, KC_TRNS},
+ {KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_MPLY, KM_COPY, KM_REDO, KM_CLSE, KC_TRNS, KC_TRNS, KC_TRNS},
+ {KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TAB, KM_CUT, KM_PAST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
+},
+[SYMB] = {
+ {KC_BSLS, KC_EXLM, KC_LABK, KC_RABK, CM_COLN, KC_TRNS, KC_UNDS, KC_DLR, KC_QUES, KC_TRNS, KC_PERC},
+ {KC_AT, KC_AMPR, KC_LPRN, KC_RPRN, CM_SCLN, KC_TRNS, KC_COMM, KC_DOT, KC_QUOT, KC_TRNS, KC_TILD},
+ {KC_HASH, KC_PIPE, KC_LCBR, KC_RCBR, KC_SLSH, KC_TRNS, KC_TRNS, KC_GRV, KC_DQT, KC_TRNS, KC_CIRC},
+ {KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
+},
+[FKEY] = {
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F5, KC_F6, KC_F7, KC_F8},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
+}};
+
+const uint16_t PROGMEM fn_actions[] = {};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {}
+
+ return MACRO_NONE;
+};
diff --git a/keyboards/atreus/keymaps/jeremy/readme.md b/keyboards/atreus/keymaps/jeremy/readme.md
new file mode 100644
index 000000000..df0179a8e
--- /dev/null
+++ b/keyboards/atreus/keymaps/jeremy/readme.md
@@ -0,0 +1,45 @@
+Jeremy's Atreus Key Mapping
+===========================
+
+I am a programmer by trade that suffers from the beginning stages of RSI. As a programmer I use letters, symbols and cursor navigation most often. To prevent strange finger gymnastics, I wrote a script to rank which non-letter characters occurred in my primary source projects most often and then placed these characters in the easiest to reach locations, for me. I made heavy use of momentary layer toggling.
+
+My layout is also geared toward a software based Colemak mapping. I would like it to be hardware, but I use my Laptop on the go frequently and thus my laptop keyboard. I have moved the keycaps to reflect the Colemak layout. My laptop is a MacBook Pro (2015).
+
+## Main Layers
+
+1. [Letters](http://www.keyboard-layout-editor.com/#/gists/6861cb9df09ce78efaddf8aa7471e3ac)
+2. [Symbols](http://www.keyboard-layout-editor.com/#/gists/8956a18b508a78e93b9c38ec3fcccaa5)
+3. [Navigation](http://www.keyboard-layout-editor.com/#/gists/6ed492b714a7f54eb1c5de09b87fd8c4)
+4. [Numbers](http://www.keyboard-layout-editor.com/#/gists/399ceb5624e8388e48a3a5eacac8e973)
+5. [Function Keys](http://www.keyboard-layout-editor.com/#/gists/7fd7dc24c7048316f3724b1893c64e89)
+
+## Notes
+
+### General
+
+Some characters can be accessed multiple ways. This was done because you may be in a given layer, such as numbers, where when doing math, you may need quick access to the parentheses characters for grouping. This prevents some layer switching.
+
+I own an ErgoDox and plan on porting this as a base layer, then using the extra keys the ErgoDox provides accordingly. My goal, though, is to be fully functional on this base setup and build everything into muscle memory.
+
+### Symbol Layer
+
+1. I placed characters that deal with an if statement close together, such as !, & and |.
+2. All matching brace/bracket characters are together as well.
+
+### Number Layer
+
+1. Everything I did was a compromise when trying to mimic a ten-key. I did the best I could.
+2. Operators are duplicated on the right and left. I do not find it comfortable to use my pinky much, so I tend to use my left hand for +, -, * and / but those were also placed on the right hand to mimic the ten-key.
+3. Parentheses were added for typing on the calculator.
+
+### Cursor Layer
+
+1. It includes basic audio controls because they didn't really fit anywhere else
+2. It contains basic file manipulation. I'm not sure that was a good idea. I do save all the time, but Cmd+S isn't exactly hard.
+3. It contains the backspace and delete keys right on top of the left and right arrows.
+4. Cmd and Opt keys are duplicated. This makes for very easy navigation, for example on a Mac, Opt+Left/Right moves word by word. It also backspaces or deletes word by word.
+
+### Function Layer
+
+1. Almost all other layers I saw grouped the F keys into a bunch of three. This only gives nine function keys in order if you attempt to stay as close to the home row as possible. I went with a group of four, which gives all twelve function keys to the right hand, one row below and above the home row.
+2. I duplicated the Command and Option keys the same as on the cursor layer. This makes it dead easy to hit modified function keys such as Cmd+Opt+F5. It's also easy to toss in a Shift modifier in there with the right thumb since the bottom row is preserved.
diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-base-colemakdh.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-base-colemakdh.png
new file mode 100644
index 000000000..4640f9f52
--- /dev/null
+++ b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-base-colemakdh.png
Binary files differ
diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-extend.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-extend.png
new file mode 100644
index 000000000..08c2e6140
--- /dev/null
+++ b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-extend.png
Binary files differ
diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-function.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-function.png
new file mode 100644
index 000000000..34ad03dec
--- /dev/null
+++ b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-function.png
Binary files differ
diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-game.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-game.png
new file mode 100644
index 000000000..14ae35b54
--- /dev/null
+++ b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-game.png
Binary files differ
diff --git a/keyboards/atreus/keymaps/replicaJunction/atreus-replica-num.png b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-num.png
new file mode 100644
index 000000000..6598acb27
--- /dev/null
+++ b/keyboards/atreus/keymaps/replicaJunction/atreus-replica-num.png
Binary files differ
diff --git a/keyboards/atreus/keymaps/replicaJunction/config.h b/keyboards/atreus/keymaps/replicaJunction/config.h
new file mode 100644
index 000000000..437aa662c
--- /dev/null
+++ b/keyboards/atreus/keymaps/replicaJunction/config.h
@@ -0,0 +1,94 @@
+/*
+Config file - Atreus QMK with replicaJunction layout
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Technomancy
+#define PRODUCT Atreus
+#define DESCRIPTION q.m.k. keyboard firmware for Atreus
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 11
+
+// Change this to how you wired your keyboard
+// COLS: Left to right, ROWS: Top to bottom
+#if defined(ATREUS_ASTAR)
+# define MATRIX_ROW_PINS { D0, D1, D3, D2 }
+# define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 }
+# define UNUSED_PINS
+#elif defined(ATREUS_TEENSY2)
+# define MATRIX_ROW_PINS { D0, D1, D2, D3 }
+# define MATRIX_COL_PINS { F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0 }
+# define UNUSED_PINS
+#endif
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+//#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+// Default: 5
+#define DEBOUNCING_DELAY 6
+
+// I don't have any locking keys, so I don't need these features
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* Prevent modifiers from sticking when switching layers */
+#define PREVENT_STUCK_MODIFIERS
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/atreus/keymaps/replicaJunction/keymap.c b/keyboards/atreus/keymaps/replicaJunction/keymap.c
new file mode 100644
index 000000000..52d3677fa
--- /dev/null
+++ b/keyboards/atreus/keymaps/replicaJunction/keymap.c
@@ -0,0 +1,107 @@
+/*
+ * Keyboard: Atreus
+ * Keymap: replicaJunction
+ * Version: 0.3
+ *
+ * This keymap is designed to complement my Ergodox keyboard layout, found in keyboards/ergodox_ez.
+ * The Atreus keyboard is a 40% board whose design was heavily influenced by the Ergodox. I now
+ * have both keyboards, so I've designed these layouts in an effort to make switching between the
+ * two as easy as possible.
+ *
+ * Clearly, the Atreus is the limiting factor in this equation, so I've taken heavy advantage of
+ * function and dual-role keys.
+ *
+ * The default key layout in this keymap is Colemak-ModDH. Information on that layout can be found
+ * here: https://colemakmods.github.io/mod-dh/
+ */
+
+#include "atreus.h"
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+// Note that whatever is set as layer 0 will be the default layer of the keyboard.
+
+#define _CO 0 // Colemak
+#define _QW 1 // QWERTY
+#define _GA 2 // Gaming
+#define _EX 3 // Extend
+#define _NU 4 // Numpad
+#define _FN 5 // Function
+
+// Some quick aliases, just to make it look pretty
+#define _______ KC_TRNS
+#define KCX_CA LCTL(KC_LALT)
+#define KCX_CS LCTL(KC_LSFT)
+#define KCX_CSA LCTL(LSFT(KC_LALT))
+#define KCX_LST LSFT(KC_TAB)
+#define KX_COPY LCTL(KC_C)
+#define KX_CUT LCTL(KC_X)
+#define KX_PAST LCTL(KC_V)
+#define KX_UNDO LCTL(KC_Z)
+
+; // This doesn't do anything. It's just for VSCode because its syntax highlighting is weird for the above #define statements.
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_CO] = KEYMAP(
+ KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,
+ KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O,
+ SFT_T(KC_Z), KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, SFT_T(KC_SLSH),
+ KC_ESC, KC_LGUI, KC_TAB, KC_LALT, KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL
+),
+
+[_QW] = KEYMAP( /* Qwerty */
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
+ SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH),
+ KC_ESC, KC_LGUI, KC_TAB, KC_LALT, KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL
+),
+
+[_EX] = KEYMAP( /* Extend */
+ KC_CAPS, _______, _______, _______, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_DEL,
+ _______, KC_LGUI, KC_LALT, KC_LCTL, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC,
+ _______, KX_CUT, KX_COPY, _______, KX_PAST, _______, KC_TAB, KCX_LST, _______, KC_INSERT,
+ _______, _______, _______, _______, _______, _______, _______, KC_SPC, _______, _______, _______, KC_PSCR
+),
+
+[_NU] = KEYMAP( /* Numbers and symbols */
+ KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_AMPR, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR,
+ KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_TILD, KC_PIPE, KC_4, KC_5, KC_6, KC_MINS,
+ KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_GRV, KC_BSLS, KC_1, KC_2, KC_3, KC_PLUS,
+ _______, TG(_GA), _______, MO(_FN), _______, _______, _______, _______, KC_0, KC_DOT, KC_EQL, _______
+),
+
+[_FN] = KEYMAP( /* Functions */
+ KC_DEL, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_BSPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, _______, KC_F4, KC_F5, KC_F6, KC_F11,
+ _______, KC_VOLU, KC_MUTE, KC_VOLD, KC_MPLY, _______, KC_F1, KC_F2, KC_F3, KC_F12,
+ _______, _______, _______, _______, KC_MSTP, _______, _______, _______, KC_NO, DF(_CO), DF(_QW), RESET
+),
+
+[_GA] = KEYMAP( /* Gaming */
+ _______, _______, _______, _______, _______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______,
+ _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______,
+ KC_Z, _______, _______, _______, _______, KC_BTN3, _______, KC_MS_D, _______, _______,
+ _______, TG(_GA), _______, KC_LSFT, KC_SPC, KC_BSPC, KC_BTN2, KC_BTN1, _______, _______, _______, _______
+)};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboards/atreus/keymaps/replicaJunction/readme.md b/keyboards/atreus/keymaps/replicaJunction/readme.md
new file mode 100644
index 000000000..21af48e8f
--- /dev/null
+++ b/keyboards/atreus/keymaps/replicaJunction/readme.md
@@ -0,0 +1,57 @@
+# replicaJunction - Atreus Layout #
+
+This layout is designed to make the absolute most out of the Atreus 40% keyboard.
+
+I was enchanted with the idea of the Atreus keyboard after using my Ergodox for several months. I wanted something of a similar form factor that was easily portable, so I could bring and transport a keyboard to my workplace without much hassle. After building the Atreus keyboard, though, I realized very quickly that the 40% form factor requires a lot more creativity than a full-size keyboard (even one as strangely-shaped as the Ergodox).
+
+The default Atreus keyboard layout provides all the necessary keys in order to function with the keyboard, but as a programmer, I needed quicker access to just about everything. I noticed that the default layer didn't include any dual-role keys, and so I started on my journey to build my perfect layout for the Atreus.
+
+I won't claim that this layout is perfect for everyone. It does make several significant changes from the "normal" Atreus layout. In my own use, though, I've found this keyboard turbocharges my Atreus, and gives it the power of a full-size keyboard without the size.
+
+## Base Layer ##
+
+![Atreus base layout](atreus-replica-base-colemakdh.png)
+
+The letters on this layout are arranged in the [Colemak Mod-DH layout](https://colemakmods.github.io/mod-dh/).
+
+Note that there are four dual-purpose keys: Shift (Backspace), Ctrl (Delete), Alt (Enter), and Space (Number layer). In QMK, these dual-role keys can be made to hold their primary key by double-tapping the key and holding on the second tap. For example, if I wanted to insert a long string of Spaces, I would tap the Space key, then tap it again and hold. A single press and hold would trigger the secondary function of the key instead.
+
+The secondary Alt on the left bottom row exists to provide a single-hand Alt+Tab shortcut, which would take two rows otherwise.
+
+## Extend Layer ##
+
+![Atreus extend layer](atreus-replica-extend.png)
+
+This layout is designed primarily for keyboard navigation. Arrow keys are easily accessible under the right hand (a welcome change from the original Atreus layout, which places them under the left hand), along with Home/End and PgUp/PgDn.
+
+Modifiers are also placed under the home row of the left hand. One of the single keyboard actions I use most is Shift+Ctrl+Left/Right to select a whole word; this layer makes those keypresses simple by adding the Ctrl key in an easy-to-reach location.
+
+For the common Ctrl shortcuts, I also added some hotkeys to this layer over the letter keys they are associated with. This gives the Extend key some extra utility by letting it "feel" like a Ctrl key in some cases.
+
+The Space key exists to prevent going from this layer directly into the Number layer. Similarly, the Shift key on the left pinky helps make sure that the normal letter (Z) doesn't fire.
+
+## Number and Symbol Layer ##
+
+![Atreus number and symbol layer](atreus-replica-num.png)
+
+This layer provides the only way of accessing number keys on this keyboard, since it's too small for its own number row. Note that even though they are laid out in the number pad fashion, they send the "regular" number keystrokes. Games and programs that specifically use NumPad keys are not supported in this layout at the moment.
+
+This layer also provides plenty of symbol shortcuts. Most of these can be accessed through other means (like Shift+8 for the asterisk), but having shortcut keys to them makes for one less keypress, which adds up quickly when using these symbols on a regular basis. I've been through many revisions of this concept on my Ergodox as well as the Atreus, and I've finally arrived at this layout as the one that provides the symbols I need most frequently in places I can think to expect them. The Ordinary layout from the Ergodox-EZ keyboard in this repository was a large influence in this design.
+
+## Function Layer ##
+
+![Atreus function layer](atreus-replica-function.png)
+
+Function keys (F1-F12) are on this layer, as well as some more generic "functions" such as media keys. I've also set up a mirror image of the arrows from the Extend layer in case I need to use these with my left hand, but I don't do this very often.
+
+The reset key is on this layer, as well as a toggle from Colemak to QWERTY and back. The QWERTY layer is not currently documented, but it is functionally identical to the base layer except for letter positions.
+
+## Gaming Layer ##
+
+![Atreus gaming layer](atreus-replica-game.png)
+
+This is a small layer developed to allow some simple gameplay without a mouse. This layer is a toggle (from the Number layer), so it is designed to stay on while in use.
+
+The keys on the left hand bring Space into the left thumb's reach, as well as overriding the dual-role Shift with its standard function (Z in both QWERTY and in Colemak). This allows easy Shift presses without blocking the Z key, commonly used in games.
+
+I would probably not consider this a hard-core gaming keyboard, and this layout does have the huge problem of blocking access to the number keys, but for more casual games, it plays quite well. I've used it quite a bit on Minecraft, for example, and I'm quite pleased with it. \ No newline at end of file
diff --git a/keyboards/atreus/keymaps/xyverz/keymap.c b/keyboards/atreus/keymaps/xyverz/keymap.c
new file mode 100644
index 000000000..b418cc9b5
--- /dev/null
+++ b/keyboards/atreus/keymaps/xyverz/keymap.c
@@ -0,0 +1,89 @@
+// This is the personal keymap of Ian Sterling (@xyverz). It is based on the keymap by
+// Chris Gerber (@gerbercj), with the addition of persistent layers like the Planck and
+// Preonic keyboards by Jack Humbert.
+
+#include "atreus.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _DV 0
+#define _QW 1
+#define _CM 2
+#define _L1 3
+#define _L2 4
+
+// Macro name shortcuts
+#define DVORAK M(_DV)
+#define QWERTY M(_QW)
+#define COLEMAK M(_CM)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_DV] = { /* Dvorak */
+ {KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_NO, KC_F, KC_G, KC_C, KC_R, KC_L },
+ {KC_A, KC_O, KC_E, KC_U, KC_I, KC_NO, KC_D, KC_H, KC_T, KC_N, KC_S },
+ {SFT_T(KC_SCLN), KC_Q, KC_J, KC_K, KC_X, CTL_T(KC_DEL), KC_B, KC_M, KC_W, KC_V, SFT_T(KC_Z) },
+ {KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_SLSH, KC_EQL}
+ },
+ [_QW] = { /* Qwerty */
+ {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P },
+ {KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN},
+ {SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, CTL_T(KC_DEL), KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH) },
+ {KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT}
+ },
+ [_CM] = { /* Colemak */
+ {KC_Q, KC_W, KC_F, KC_P, KC_G, KC_NO, KC_J, KC_L, KC_U, KC_Y, KC_SCLN},
+ {KC_A, KC_R, KC_S, KC_T, KC_D, KC_NO, KC_H, KC_N, KC_E, KC_I, KC_O },
+ {SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, CTL_T(KC_DEL), KC_K, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH) },
+ {KC_ESC, KC_TAB, KC_LGUI, MO(_L2), KC_BSPC, ALT_T(KC_ENT), KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT}
+ },
+ [_L1] = { /* LAYER 1 */
+ {KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0 },
+ {KC_TAB, KC_INS, KC_UP, KC_DEL, KC_HOME, KC_NO, KC_PGUP, KC_MUTE, KC_VOLD, KC_VOLU, KC_EQL },
+ {KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_LCTL, KC_PGDN, KC_MPRV, KC_MPLY, KC_MNXT, KC_BSLS},
+ {KC_TRNS, KC_GRV, KC_LGUI, KC_TRNS, KC_DEL, KC_LALT, KC_SPC, KC_TRNS, KC_LBRC, KC_RBRC, KC_ENT }
+ },
+ [_L2] = { /* LAYER 2 */
+ {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_NO, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN},
+ {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO, KC_TRNS, KC_F6, KC_F7, KC_F8, KC_PLUS},
+ {KC_TRNS, KC_TRNS, DVORAK, QWERTY, COLEMAK, KC_LCTL, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12 },
+ {KC_TRNS, KC_TRNS, KC_LGUI, KC_TRNS, KC_BSPC, KC_LALT, KC_SPC, KC_TRNS, LSFT(KC_LBRC), LSFT(KC_RBRC), RESET}
+ }
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case _DV:
+ if (record->event.pressed) {
+ persistant_default_layer_set(1UL<<_DV);
+ }
+ break;
+ case _QW:
+ if (record->event.pressed) {
+ persistant_default_layer_set(1UL<<_QW);
+ }
+ break;
+ case _CM:
+ if (record->event.pressed) {
+ persistant_default_layer_set(1UL<<_CM);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboards/atreus/readme.md b/keyboards/atreus/readme.md
index 734f58f0f..a4077668e 100644
--- a/keyboards/atreus/readme.md
+++ b/keyboards/atreus/readme.md
@@ -174,13 +174,14 @@ Download or clone the whole firmware and navigate to the keyboards/planck folder
Depending on which keymap you would like to use, you will have to compile slightly differently.
### Default
-To build with the default keymap, simply run `make`.
+To build with the default keymap, simply run `make default`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
-To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
```
-$ make KEYMAP=[default|jack|<name>]
+$ make [default|jack|<name>]
```
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/atreus/rules.mk b/keyboards/atreus/rules.mk
new file mode 100644
index 000000000..3a00993bd
--- /dev/null
+++ b/keyboards/atreus/rules.mk
@@ -0,0 +1,82 @@
+
+
+ifdef TEENSY2
+ OPT_DEFS += -DATREUS_TEENSY2
+ ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex
+else
+ OPT_DEFS += -DATREUS_ASTAR
+ OPT_DEFS += -DCATERINA_BOOTLOADER
+ ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
+ avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
+endif
+
+# 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
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE ?= yes # USB Nkey Rollover - not yet supported in LUFA
+# BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
+# MIDI_ENABLE ?= YES # MIDI controls
+UNICODE_ENABLE ?= YES # Unicode
+# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
+
+USB ?= /dev/cu.usbmodem1411
+
+upload: build
+ $(ATREUS_UPLOAD_COMMAND)
diff --git a/keyboards/atreus62/Makefile b/keyboards/atreus62/Makefile
new file mode 100644
index 000000000..4e2a6f00f
--- /dev/null
+++ b/keyboards/atreus62/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/atreus62/atreus62.c b/keyboards/atreus62/atreus62.c
new file mode 100644
index 000000000..ba5bce989
--- /dev/null
+++ b/keyboards/atreus62/atreus62.c
@@ -0,0 +1 @@
+#include "atreus62.h" \ No newline at end of file
diff --git a/keyboards/atreus62/atreus62.h b/keyboards/atreus62/atreus62.h
new file mode 100644
index 000000000..eacf5b451
--- /dev/null
+++ b/keyboards/atreus62/atreus62.h
@@ -0,0 +1,26 @@
+#ifndef ATREUS62_H
+#define ATREUS62_H
+
+#include "quantum.h"
+
+void promicro_bootloader_jmp(bool program);
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define KEYMAP( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, KC_NO, k06, k07, k08, k09, k0a, k0b }, \
+ { k10, k11, k12, k13, k14, k15, KC_NO, k16, k17, k18, k19, k1a, k1b }, \
+ { k20, k21, k22, k23, k24, k25, KC_NO, k26, k27, k28, k29, k2a, k2b }, \
+ { k30, k31, k32, k33, k34, k35, k46, k36, k37, k38, k39, k3a, k3b }, \
+ { k40, k41, k42, k43, k44, k45, k47, k48, k49, k4a, k4b, k4c, k4d } \
+}
+
+#endif \ No newline at end of file
diff --git a/keyboards/atreus62/config.h b/keyboards/atreus62/config.h
new file mode 100644
index 000000000..90a4aa05a
--- /dev/null
+++ b/keyboards/atreus62/config.h
@@ -0,0 +1,83 @@
+/*
+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 0x6062
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Profet
+#define PRODUCT Atreus62
+#define DESCRIPTION q.m.k. keyboard firmware for Atreus62
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 13
+
+// wiring of each half
+#define MATRIX_ROW_PINS { D2, D3, D1, D0, D4 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6, B5, B4, E6, D7, C6 }
+
+#define CATERINA_BOOTLOADER
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/atreus62/keymaps/default/keymap.c b/keyboards/atreus62/keymaps/default/keymap.c
new file mode 100644
index 000000000..52802c77b
--- /dev/null
+++ b/keyboards/atreus62/keymaps/default/keymap.c
@@ -0,0 +1,71 @@
+// this is the style you want to emulate.
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+
+#include "atreus62.h"
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _DEFAULT 0
+#define _NAV 1
+#define _RESET 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_DEFAULT] = { /* qwerty */
+ { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS },
+ { KC_BSLS, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_TRNS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRC },
+ { KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_TRNS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT },
+ { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_DELT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LBRC },
+ { KC_LCTL, KC_LGUI, KC_LALT, KC_GRV, MO(_NAV),KC_BSPC, KC_ENT, KC_SPC, KC_EQL, KC_MINS, KC_QUOT, KC_ENT, KC_RGUI }
+},
+
+[_NAV] = {
+ { TO(_DEFAULT), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 },
+ { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS },
+ { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS },
+ { TO(_RESET), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS },
+ { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS }
+},
+
+[_RESET] = {
+ { TO(_DEFAULT), 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 , RESET }
+}
+
+
+/*
+[_TRNS] = {
+ { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS },
+ { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS },
+ { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS },
+ { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS },
+ { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS }
+},
+*/
+};
+
+
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch (id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ }
+ else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboards/atreus62/pro_micro.h b/keyboards/atreus62/pro_micro.h
new file mode 100644
index 000000000..f9e7ed75d
--- /dev/null
+++ b/keyboards/atreus62/pro_micro.h
@@ -0,0 +1,362 @@
+/*
+ pins_arduino.h - Pin definition functions for Arduino
+ Part of Arduino - http://www.arduino.cc/
+
+ Copyright (c) 2007 David A. Mellis
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General
+ Public License along with this library; if not, write to the
+ Free Software Foundation, Inc., 59 Temple Place, Suite 330,
+ Boston, MA 02111-1307 USA
+
+ $Id: wiring.h 249 2007-02-03 16:52:51Z mellis $
+*/
+
+#ifndef Pins_Arduino_h
+#define Pins_Arduino_h
+
+#include <avr/pgmspace.h>
+
+// Workaround for wrong definitions in "iom32u4.h".
+// This should be fixed in the AVR toolchain.
+#undef UHCON
+#undef UHINT
+#undef UHIEN
+#undef UHADDR
+#undef UHFNUM
+#undef UHFNUML
+#undef UHFNUMH
+#undef UHFLEN
+#undef UPINRQX
+#undef UPINTX
+#undef UPNUM
+#undef UPRST
+#undef UPCONX
+#undef UPCFG0X
+#undef UPCFG1X
+#undef UPSTAX
+#undef UPCFG2X
+#undef UPIENX
+#undef UPDATX
+#undef TCCR2A
+#undef WGM20
+#undef WGM21
+#undef COM2B0
+#undef COM2B1
+#undef COM2A0
+#undef COM2A1
+#undef TCCR2B
+#undef CS20
+#undef CS21
+#undef CS22
+#undef WGM22
+#undef FOC2B
+#undef FOC2A
+#undef TCNT2
+#undef TCNT2_0
+#undef TCNT2_1
+#undef TCNT2_2
+#undef TCNT2_3
+#undef TCNT2_4
+#undef TCNT2_5
+#undef TCNT2_6
+#undef TCNT2_7
+#undef OCR2A
+#undef OCR2_0
+#undef OCR2_1
+#undef OCR2_2
+#undef OCR2_3
+#undef OCR2_4
+#undef OCR2_5
+#undef OCR2_6
+#undef OCR2_7
+#undef OCR2B
+#undef OCR2_0
+#undef OCR2_1
+#undef OCR2_2
+#undef OCR2_3
+#undef OCR2_4
+#undef OCR2_5
+#undef OCR2_6
+#undef OCR2_7
+
+#define NUM_DIGITAL_PINS 30
+#define NUM_ANALOG_INPUTS 12
+
+#define TX_RX_LED_INIT DDRD |= (1<<5), DDRB |= (1<<0)
+#define TXLED0 PORTD |= (1<<5)
+#define TXLED1 PORTD &= ~(1<<5)
+#define RXLED0 PORTB |= (1<<0)
+#define RXLED1 PORTB &= ~(1<<0)
+
+static const uint8_t SDA = 2;
+static const uint8_t SCL = 3;
+#define LED_BUILTIN 13
+
+// Map SPI port to 'new' pins D14..D17
+static const uint8_t SS = 17;
+static const uint8_t MOSI = 16;
+static const uint8_t MISO = 14;
+static const uint8_t SCK = 15;
+
+// Mapping of analog pins as digital I/O
+// A6-A11 share with digital pins
+static const uint8_t ADC0 = 18;
+static const uint8_t ADC1 = 19;
+static const uint8_t ADC2 = 20;
+static const uint8_t ADC3 = 21;
+static const uint8_t ADC4 = 22;
+static const uint8_t ADC5 = 23;
+static const uint8_t ADC6 = 24; // D4
+static const uint8_t ADC7 = 25; // D6
+static const uint8_t ADC8 = 26; // D8
+static const uint8_t ADC9 = 27; // D9
+static const uint8_t ADC10 = 28; // D10
+static const uint8_t ADC11 = 29; // D12
+
+#define digitalPinToPCICR(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0))
+#define digitalPinToPCICRbit(p) 0
+#define digitalPinToPCMSK(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCMSK0) : ((uint8_t *)0))
+#define digitalPinToPCMSKbit(p) ( ((p) >= 8 && (p) <= 11) ? (p) - 4 : ((p) == 14 ? 3 : ((p) == 15 ? 1 : ((p) == 16 ? 2 : ((p) == 17 ? 0 : (p - A8 + 4))))))
+
+// __AVR_ATmega32U4__ has an unusual mapping of pins to channels
+extern const uint8_t PROGMEM analog_pin_to_channel_PGM[];
+#define analogPinToChannel(P) ( pgm_read_byte( analog_pin_to_channel_PGM + (P) ) )
+
+#define digitalPinToInterrupt(p) ((p) == 0 ? 2 : ((p) == 1 ? 3 : ((p) == 2 ? 1 : ((p) == 3 ? 0 : ((p) == 7 ? 4 : NOT_AN_INTERRUPT)))))
+
+#ifdef ARDUINO_MAIN
+
+// On the Arduino board, digital pins are also used
+// for the analog output (software PWM). Analog input
+// pins are a separate set.
+
+// ATMEL ATMEGA32U4 / ARDUINO LEONARDO
+//
+// D0 PD2 RXD1/INT2
+// D1 PD3 TXD1/INT3
+// D2 PD1 SDA SDA/INT1
+// D3# PD0 PWM8/SCL OC0B/SCL/INT0
+// D4 A6 PD4 ADC8
+// D5# PC6 ??? OC3A/#OC4A
+// D6# A7 PD7 FastPWM #OC4D/ADC10
+// D7 PE6 INT6/AIN0
+//
+// D8 A8 PB4 ADC11/PCINT4
+// D9# A9 PB5 PWM16 OC1A/#OC4B/ADC12/PCINT5
+// D10# A10 PB6 PWM16 OC1B/0c4B/ADC13/PCINT6
+// D11# PB7 PWM8/16 0C0A/OC1C/#RTS/PCINT7
+// D12 A11 PD6 T1/#OC4D/ADC9
+// D13# PC7 PWM10 CLK0/OC4A
+//
+// A0 D18 PF7 ADC7
+// A1 D19 PF6 ADC6
+// A2 D20 PF5 ADC5
+// A3 D21 PF4 ADC4
+// A4 D22 PF1 ADC1
+// A5 D23 PF0 ADC0
+//
+// New pins D14..D17 to map SPI port to digital pins
+//
+// MISO D14 PB3 MISO,PCINT3
+// SCK D15 PB1 SCK,PCINT1
+// MOSI D16 PB2 MOSI,PCINT2
+// SS D17 PB0 RXLED,SS/PCINT0
+//
+// Connected LEDs on board for TX and RX
+// TXLED D24 PD5 XCK1
+// RXLED D17 PB0
+// HWB PE2 HWB
+
+// these arrays map port names (e.g. port B) to the
+// appropriate addresses for various functions (e.g. reading
+// and writing)
+const uint16_t PROGMEM port_to_mode_PGM[] = {
+ NOT_A_PORT,
+ NOT_A_PORT,
+ (uint16_t) &DDRB,
+ (uint16_t) &DDRC,
+ (uint16_t) &DDRD,
+ (uint16_t) &DDRE,
+ (uint16_t) &DDRF,
+};
+
+const uint16_t PROGMEM port_to_output_PGM[] = {
+ NOT_A_PORT,
+ NOT_A_PORT,
+ (uint16_t) &PORTB,
+ (uint16_t) &PORTC,
+ (uint16_t) &PORTD,
+ (uint16_t) &PORTE,
+ (uint16_t) &PORTF,
+};
+
+const uint16_t PROGMEM port_to_input_PGM[] = {
+ NOT_A_PORT,
+ NOT_A_PORT,
+ (uint16_t) &PINB,
+ (uint16_t) &PINC,
+ (uint16_t) &PIND,
+ (uint16_t) &PINE,
+ (uint16_t) &PINF,
+};
+
+const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
+ PD, // D0 - PD2
+ PD, // D1 - PD3
+ PD, // D2 - PD1
+ PD, // D3 - PD0
+ PD, // D4 - PD4
+ PC, // D5 - PC6
+ PD, // D6 - PD7
+ PE, // D7 - PE6
+
+ PB, // D8 - PB4
+ PB, // D9 - PB5
+ PB, // D10 - PB6
+ PB, // D11 - PB7
+ PD, // D12 - PD6
+ PC, // D13 - PC7
+
+ PB, // D14 - MISO - PB3
+ PB, // D15 - SCK - PB1
+ PB, // D16 - MOSI - PB2
+ PB, // D17 - SS - PB0
+
+ PF, // D18 - A0 - PF7
+ PF, // D19 - A1 - PF6
+ PF, // D20 - A2 - PF5
+ PF, // D21 - A3 - PF4
+ PF, // D22 - A4 - PF1
+ PF, // D23 - A5 - PF0
+
+ PD, // D24 - PD5
+ PD, // D25 / D6 - A7 - PD7
+ PB, // D26 / D8 - A8 - PB4
+ PB, // D27 / D9 - A9 - PB5
+ PB, // D28 / D10 - A10 - PB6
+ PD, // D29 / D12 - A11 - PD6
+};
+
+const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
+ _BV(2), // D0 - PD2
+ _BV(3), // D1 - PD3
+ _BV(1), // D2 - PD1
+ _BV(0), // D3 - PD0
+ _BV(4), // D4 - PD4
+ _BV(6), // D5 - PC6
+ _BV(7), // D6 - PD7
+ _BV(6), // D7 - PE6
+
+ _BV(4), // D8 - PB4
+ _BV(5), // D9 - PB5
+ _BV(6), // D10 - PB6
+ _BV(7), // D11 - PB7
+ _BV(6), // D12 - PD6
+ _BV(7), // D13 - PC7
+
+ _BV(3), // D14 - MISO - PB3
+ _BV(1), // D15 - SCK - PB1
+ _BV(2), // D16 - MOSI - PB2
+ _BV(0), // D17 - SS - PB0
+
+ _BV(7), // D18 - A0 - PF7
+ _BV(6), // D19 - A1 - PF6
+ _BV(5), // D20 - A2 - PF5
+ _BV(4), // D21 - A3 - PF4
+ _BV(1), // D22 - A4 - PF1
+ _BV(0), // D23 - A5 - PF0
+
+ _BV(5), // D24 - PD5
+ _BV(7), // D25 / D6 - A7 - PD7
+ _BV(4), // D26 / D8 - A8 - PB4
+ _BV(5), // D27 / D9 - A9 - PB5
+ _BV(6), // D28 / D10 - A10 - PB6
+ _BV(6), // D29 / D12 - A11 - PD6
+};
+
+const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
+ NOT_ON_TIMER,
+ NOT_ON_TIMER,
+ NOT_ON_TIMER,
+ TIMER0B, /* 3 */
+ NOT_ON_TIMER,
+ TIMER3A, /* 5 */
+ TIMER4D, /* 6 */
+ NOT_ON_TIMER,
+
+ NOT_ON_TIMER,
+ TIMER1A, /* 9 */
+ TIMER1B, /* 10 */
+ TIMER0A, /* 11 */
+
+ NOT_ON_TIMER,
+ TIMER4A, /* 13 */
+
+ NOT_ON_TIMER,
+ NOT_ON_TIMER,
+ NOT_ON_TIMER,
+ NOT_ON_TIMER,
+ NOT_ON_TIMER,
+ NOT_ON_TIMER,
+
+ NOT_ON_TIMER,
+ NOT_ON_TIMER,
+ NOT_ON_TIMER,
+ NOT_ON_TIMER,
+ NOT_ON_TIMER,
+ NOT_ON_TIMER,
+ NOT_ON_TIMER,
+ NOT_ON_TIMER,
+ NOT_ON_TIMER,
+ NOT_ON_TIMER,
+};
+
+const uint8_t PROGMEM analog_pin_to_channel_PGM[] = {
+ 7, // A0 PF7 ADC7
+ 6, // A1 PF6 ADC6
+ 5, // A2 PF5 ADC5
+ 4, // A3 PF4 ADC4
+ 1, // A4 PF1 ADC1
+ 0, // A5 PF0 ADC0
+ 8, // A6 D4 PD4 ADC8
+ 10, // A7 D6 PD7 ADC10
+ 11, // A8 D8 PB4 ADC11
+ 12, // A9 D9 PB5 ADC12
+ 13, // A10 D10 PB6 ADC13
+ 9 // A11 D12 PD6 ADC9
+};
+
+#endif /* ARDUINO_MAIN */
+
+// These serial port names are intended to allow libraries and architecture-neutral
+// sketches to automatically default to the correct port name for a particular type
+// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
+// the first hardware serial port whose RX/TX pins are not dedicated to another use.
+//
+// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor
+//
+// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial
+//
+// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library
+//
+// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins.
+//
+// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX
+// pins are NOT connected to anything by default.
+#define SERIAL_PORT_MONITOR Serial
+#define SERIAL_PORT_USBVIRTUAL Serial
+#define SERIAL_PORT_HARDWARE Serial1
+#define SERIAL_PORT_HARDWARE_OPEN Serial1
+
+#endif /* Pins_Arduino_h */
diff --git a/keyboards/atreus62/readme.md b/keyboards/atreus62/readme.md
new file mode 100644
index 000000000..0245b4f9f
--- /dev/null
+++ b/keyboards/atreus62/readme.md
@@ -0,0 +1,10 @@
+atreus62 keyboard firmware
+======================
+
+This firmware is for the atreus62 keyboard.
+
+This version utilizes a Pro Micro for its controller and has a 62 key layout.
+
+https://github.com/profet23/atreus62
+
+TODO: More information \ No newline at end of file
diff --git a/keyboards/atreus62/rules.mk b/keyboards/atreus62/rules.mk
new file mode 100644
index 000000000..f5d0be23a
--- /dev/null
+++ b/keyboards/atreus62/rules.mk
@@ -0,0 +1,66 @@
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+#BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality
+#MIDI_ENABLE ?= no # MIDI controls
+UNICODE_ENABLE ?= yes # Unicode
+#BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
diff --git a/keyboards/bantam44/Makefile b/keyboards/bantam44/Makefile
index 03893dbf8..4e2a6f00f 100644
--- a/keyboards/bantam44/Makefile
+++ b/keyboards/bantam44/Makefile
@@ -1,72 +1,3 @@
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=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
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
-# NKRO_ENABLE ?= yes # USB 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 ?= YES # MIDI controls
-# UNICODE_ENABLE ?= YES # Unicode
-# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../Makefile
-endif
-
+endif \ No newline at end of file
diff --git a/keyboards/bantam44/readme.md b/keyboards/bantam44/readme.md
index 89d7f9d05..462f67c12 100644
--- a/keyboards/bantam44/readme.md
+++ b/keyboards/bantam44/readme.md
@@ -12,13 +12,14 @@ Download or clone the whole firmware and navigate to the keyboards/Bantam44 fold
Depending on which keymap you would like to use, you will have to compile slightly differently.
### Default
-To build with the default keymap, simply run `make`.
+To build with the default keymap, simply run `make default`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
-To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
```
-$ make KEYMAP=[default|jack|<name>]
+$ make [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/keyboards/bantam44/rules.mk b/keyboards/bantam44/rules.mk
new file mode 100644
index 000000000..baa0e9e7a
--- /dev/null
+++ b/keyboards/bantam44/rules.mk
@@ -0,0 +1,67 @@
+
+
+# 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
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
+# NKRO_ENABLE ?= yes # USB 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 ?= YES # MIDI controls
+# UNICODE_ENABLE ?= YES # Unicode
+# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/chibios_test/Makefile b/keyboards/chibios_test/Makefile
index d9f2b8b83..4b07a6234 100644
--- a/keyboards/chibios_test/Makefile
+++ b/keyboards/chibios_test/Makefile
@@ -1,14 +1,5 @@
SUBPROJECT_DEFAULT = stm32_f072_onekey
-#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
-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
-SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
-NKRO_ENABLE ?= yes # USB Nkey Rollover
-CUSTOM_MATRIX ?= yes # Custom matrix file
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../Makefile
endif \ No newline at end of file
diff --git a/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.c b/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.c
index 31319ef57..2809c9d18 100644
--- a/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.c
+++ b/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.c
@@ -1,49 +1,49 @@
-/*
- ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-#include "hal.h"
-
-/**
- * @brief PAL setup.
- * @details Digital I/O ports static configuration as defined in @p board.h.
- * This variable is used by the HAL when initializing the PAL driver.
- */
-#if HAL_USE_PAL || defined(__DOXYGEN__)
-const PALConfig pal_default_config =
-{
- {VAL_GPIOAODR, VAL_GPIOACRL, VAL_GPIOACRH},
- {VAL_GPIOBODR, VAL_GPIOBCRL, VAL_GPIOBCRH},
- {VAL_GPIOCODR, VAL_GPIOCCRL, VAL_GPIOCCRH},
- {VAL_GPIODODR, VAL_GPIODCRL, VAL_GPIODCRH},
- {VAL_GPIOEODR, VAL_GPIOECRL, VAL_GPIOECRH},
-};
-#endif
-
-/*
- * Early initialization code.
- * This initialization must be performed just after stack setup and before
- * any other initialization.
- */
-void __early_init(void) {
-
- stm32_clock_init();
-}
-
-/*
- * Board-specific initialization code.
- */
-void boardInit(void) {
-}
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#include "hal.h"
+
+/**
+ * @brief PAL setup.
+ * @details Digital I/O ports static configuration as defined in @p board.h.
+ * This variable is used by the HAL when initializing the PAL driver.
+ */
+#if HAL_USE_PAL || defined(__DOXYGEN__)
+const PALConfig pal_default_config =
+{
+ {VAL_GPIOAODR, VAL_GPIOACRL, VAL_GPIOACRH},
+ {VAL_GPIOBODR, VAL_GPIOBCRL, VAL_GPIOBCRH},
+ {VAL_GPIOCODR, VAL_GPIOCCRL, VAL_GPIOCCRH},
+ {VAL_GPIODODR, VAL_GPIODCRL, VAL_GPIODCRH},
+ {VAL_GPIOEODR, VAL_GPIOECRL, VAL_GPIOECRH},
+};
+#endif
+
+/*
+ * Early initialization code.
+ * This initialization must be performed just after stack setup and before
+ * any other initialization.
+ */
+void __early_init(void) {
+
+ stm32_clock_init();
+}
+
+/*
+ * Board-specific initialization code.
+ */
+void boardInit(void) {
+}
diff --git a/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.h b/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.h
index 7253e7782..b31d74307 100644
--- a/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.h
+++ b/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.h
@@ -1,166 +1,166 @@
-/*
- ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-#ifndef _BOARD_H_
-#define _BOARD_H_
-
-/*
- * Setup for a Generic STM32F103 board.
- */
-
-/*
- * Board identifier.
- */
-#define BOARD_GENERIC_STM32_F103
-#define BOARD_NAME "Generic STM32F103x board"
-
-/*
- * Board frequencies.
- */
-#define STM32_LSECLK 32768
-#define STM32_HSECLK 8000000
-
-/*
- * MCU type, supported types are defined in ./os/hal/platforms/hal_lld.h.
- */
-#define STM32F103xB
-
-/*
- * IO pins assignments
- */
-
-/* on-board */
-
-#define GPIOC_LED 13
-#define GPIOD_OSC_IN 0
-#define GPIOD_OSC_OUT 1
-
-/* In case your board has a "USB enable" hardware
- controlled by a pin, define it here. (It could be just
- a 1.5k resistor connected to D+ line.)
-*/
-/*
-#define GPIOB_USB_DISC 10
-*/
-
-/*
- * I/O ports initial setup, this configuration is established soon after reset
- * in the initialization code.
- *
- * The digits have the following meaning:
- * 0 - Analog input.
- * 1 - Push Pull output 10MHz.
- * 2 - Push Pull output 2MHz.
- * 3 - Push Pull output 50MHz.
- * 4 - Digital input.
- * 5 - Open Drain output 10MHz.
- * 6 - Open Drain output 2MHz.
- * 7 - Open Drain output 50MHz.
- * 8 - Digital input with PullUp or PullDown resistor depending on ODR.
- * 9 - Alternate Push Pull output 10MHz.
- * A - Alternate Push Pull output 2MHz.
- * B - Alternate Push Pull output 50MHz.
- * C - Reserved.
- * D - Alternate Open Drain output 10MHz.
- * E - Alternate Open Drain output 2MHz.
- * F - Alternate Open Drain output 50MHz.
- * Please refer to the STM32 Reference Manual for details.
- */
-
-/*
- * Port A setup.
- * Everything input with pull-up except:
- * PA2 - Alternate output (USART2 TX).
- * PA3 - Normal input (USART2 RX).
- * PA9 - Alternate output (USART1 TX).
- * PA10 - Normal input (USART1 RX).
- */
-#define VAL_GPIOACRL 0x88884B88 /* PA7...PA0 */
-#define VAL_GPIOACRH 0x888884B8 /* PA15...PA8 */
-#define VAL_GPIOAODR 0xFFFFFFFF
-
-/*
- * Port B setup.
- * Everything input with pull-up except:
- * PB10 - Push Pull output (USB switch).
- */
-#define VAL_GPIOBCRL 0x88888888 /* PB7...PB0 */
-#define VAL_GPIOBCRH 0x88888388 /* PB15...PB8 */
-#define VAL_GPIOBODR 0xFFFFFFFF
-
-/*
- * Port C setup.
- * Everything input with pull-up except:
- * PC13 - Push Pull output (LED).
- */
-#define VAL_GPIOCCRL 0x88888888 /* PC7...PC0 */
-#define VAL_GPIOCCRH 0x88388888 /* PC15...PC8 */
-#define VAL_GPIOCODR 0xFFFFFFFF
-
-/*
- * Port D setup.
- * Everything input with pull-up except:
- * PD0 - Normal input (XTAL).
- * PD1 - Normal input (XTAL).
- */
-#define VAL_GPIODCRL 0x88888844 /* PD7...PD0 */
-#define VAL_GPIODCRH 0x88888888 /* PD15...PD8 */
-#define VAL_GPIODODR 0xFFFFFFFF
-
-/*
- * Port E setup.
- * Everything input with pull-up except:
- */
-#define VAL_GPIOECRL 0x88888888 /* PE7...PE0 */
-#define VAL_GPIOECRH 0x88888888 /* PE15...PE8 */
-#define VAL_GPIOEODR 0xFFFFFFFF
-
-/*
- * USB bus activation macro, required by the USB driver.
- */
-/* The point is that most of the generic STM32F103* boards
- have a 1.5k resistor connected on one end to the D+ line
- and on the other end to some pin. Or even a slightly more
- complicated "USB enable" circuit, controlled by a pin.
- That should go here.
-
- However on some boards (e.g. one that I have), there's no
- such hardware. In which case it's better to not do anything.
-*/
-/*
-#define usb_lld_connect_bus(usbp) palClearPad(GPIOB, GPIOB_USB_DISC)
-*/
-#define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT);
-
-/*
- * USB bus de-activation macro, required by the USB driver.
- */
-/*
-#define usb_lld_disconnect_bus(usbp) palSetPad(GPIOB, GPIOB_USB_DISC)
-*/
-#define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12);
-
-#if !defined(_FROM_ASM_)
-#ifdef __cplusplus
-extern "C" {
-#endif
- void boardInit(void);
-#ifdef __cplusplus
-}
-#endif
-#endif /* _FROM_ASM_ */
-
-#endif /* _BOARD_H_ */
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _BOARD_H_
+#define _BOARD_H_
+
+/*
+ * Setup for a Generic STM32F103 board.
+ */
+
+/*
+ * Board identifier.
+ */
+#define BOARD_GENERIC_STM32_F103
+#define BOARD_NAME "Generic STM32F103x board"
+
+/*
+ * Board frequencies.
+ */
+#define STM32_LSECLK 32768
+#define STM32_HSECLK 8000000
+
+/*
+ * MCU type, supported types are defined in ./os/hal/platforms/hal_lld.h.
+ */
+#define STM32F103xB
+
+/*
+ * IO pins assignments
+ */
+
+/* on-board */
+
+#define GPIOC_LED 13
+#define GPIOD_OSC_IN 0
+#define GPIOD_OSC_OUT 1
+
+/* In case your board has a "USB enable" hardware
+ controlled by a pin, define it here. (It could be just
+ a 1.5k resistor connected to D+ line.)
+*/
+/*
+#define GPIOB_USB_DISC 10
+*/
+
+/*
+ * I/O ports initial setup, this configuration is established soon after reset
+ * in the initialization code.
+ *
+ * The digits have the following meaning:
+ * 0 - Analog input.
+ * 1 - Push Pull output 10MHz.
+ * 2 - Push Pull output 2MHz.
+ * 3 - Push Pull output 50MHz.
+ * 4 - Digital input.
+ * 5 - Open Drain output 10MHz.
+ * 6 - Open Drain output 2MHz.
+ * 7 - Open Drain output 50MHz.
+ * 8 - Digital input with PullUp or PullDown resistor depending on ODR.
+ * 9 - Alternate Push Pull output 10MHz.
+ * A - Alternate Push Pull output 2MHz.
+ * B - Alternate Push Pull output 50MHz.
+ * C - Reserved.
+ * D - Alternate Open Drain output 10MHz.
+ * E - Alternate Open Drain output 2MHz.
+ * F - Alternate Open Drain output 50MHz.
+ * Please refer to the STM32 Reference Manual for details.
+ */
+
+/*
+ * Port A setup.
+ * Everything input with pull-up except:
+ * PA2 - Alternate output (USART2 TX).
+ * PA3 - Normal input (USART2 RX).
+ * PA9 - Alternate output (USART1 TX).
+ * PA10 - Normal input (USART1 RX).
+ */
+#define VAL_GPIOACRL 0x88884B88 /* PA7...PA0 */
+#define VAL_GPIOACRH 0x888884B8 /* PA15...PA8 */
+#define VAL_GPIOAODR 0xFFFFFFFF
+
+/*
+ * Port B setup.
+ * Everything input with pull-up except:
+ * PB10 - Push Pull output (USB switch).
+ */
+#define VAL_GPIOBCRL 0x88888888 /* PB7...PB0 */
+#define VAL_GPIOBCRH 0x88888388 /* PB15...PB8 */
+#define VAL_GPIOBODR 0xFFFFFFFF
+
+/*
+ * Port C setup.
+ * Everything input with pull-up except:
+ * PC13 - Push Pull output (LED).
+ */
+#define VAL_GPIOCCRL 0x88888888 /* PC7...PC0 */
+#define VAL_GPIOCCRH 0x88388888 /* PC15...PC8 */
+#define VAL_GPIOCODR 0xFFFFFFFF
+
+/*
+ * Port D setup.
+ * Everything input with pull-up except:
+ * PD0 - Normal input (XTAL).
+ * PD1 - Normal input (XTAL).
+ */
+#define VAL_GPIODCRL 0x88888844 /* PD7...PD0 */
+#define VAL_GPIODCRH 0x88888888 /* PD15...PD8 */
+#define VAL_GPIODODR 0xFFFFFFFF
+
+/*
+ * Port E setup.
+ * Everything input with pull-up except:
+ */
+#define VAL_GPIOECRL 0x88888888 /* PE7...PE0 */
+#define VAL_GPIOECRH 0x88888888 /* PE15...PE8 */
+#define VAL_GPIOEODR 0xFFFFFFFF
+
+/*
+ * USB bus activation macro, required by the USB driver.
+ */
+/* The point is that most of the generic STM32F103* boards
+ have a 1.5k resistor connected on one end to the D+ line
+ and on the other end to some pin. Or even a slightly more
+ complicated "USB enable" circuit, controlled by a pin.
+ That should go here.
+
+ However on some boards (e.g. one that I have), there's no
+ such hardware. In which case it's better to not do anything.
+*/
+/*
+#define usb_lld_connect_bus(usbp) palClearPad(GPIOB, GPIOB_USB_DISC)
+*/
+#define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT);
+
+/*
+ * USB bus de-activation macro, required by the USB driver.
+ */
+/*
+#define usb_lld_disconnect_bus(usbp) palSetPad(GPIOB, GPIOB_USB_DISC)
+*/
+#define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12);
+
+#if !defined(_FROM_ASM_)
+#ifdef __cplusplus
+extern "C" {
+#endif
+ void boardInit(void);
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FROM_ASM_ */
+
+#endif /* _BOARD_H_ */
diff --git a/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.mk b/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.mk
index d692c0ee4..48e0e51fe 100644
--- a/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.mk
+++ b/keyboards/chibios_test/boards/GENERIC_STM32_F103/board.mk
@@ -1,5 +1,5 @@
-# List of all the board related files.
-BOARDSRC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F103/board.c
-
-# Required include directories
-BOARDINC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F103
+# List of all the board related files.
+BOARDSRC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F103/board.c
+
+# Required include directories
+BOARDINC = $(KEYBOARD_PATH)/boards/GENERIC_STM32_F103
diff --git a/keyboards/chibios_test/ld/MKL26Z64.ld b/keyboards/chibios_test/ld/MKL26Z64.ld
index fb141f888..c4ca8b874 100644
--- a/keyboards/chibios_test/ld/MKL26Z64.ld
+++ b/keyboards/chibios_test/ld/MKL26Z64.ld
@@ -1,105 +1,105 @@
-/*
- * Copyright (C) 2013-2016 Fabio Utzig, http://fabioutzig.com
- * (C) 2016 flabbergast <s3+flabbergast@sdfeu.org>
- *
- * 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.
- */
-
-/*
- * KL26Z64 memory setup.
- */
-MEMORY
-{
- flash0 : org = 0x00000000, len = 0x100
- flash1 : org = 0x00000400, len = 0x10
- flash2 : org = 0x00000410, len = 62k - 0x410
- flash3 : org = 0x0000F800, len = 2k
- flash4 : org = 0x00000000, len = 0
- flash5 : org = 0x00000000, len = 0
- flash6 : org = 0x00000000, len = 0
- flash7 : org = 0x00000000, len = 0
- ram0 : org = 0x1FFFF800, len = 8k
- ram1 : org = 0x00000000, len = 0
- ram2 : org = 0x00000000, len = 0
- ram3 : org = 0x00000000, len = 0
- ram4 : org = 0x00000000, len = 0
- ram5 : org = 0x00000000, len = 0
- ram6 : org = 0x00000000, len = 0
- ram7 : org = 0x00000000, len = 0
-}
-
-/* Flash region for the configuration bytes.*/
-SECTIONS
-{
- .cfmprotect : ALIGN(4) SUBALIGN(4)
- {
- KEEP(*(.cfmconfig))
- } > flash1
-}
-
-/* For each data/text section two region are defined, a virtual region
- and a load region (_LMA suffix).*/
-
-/* Flash region to be used for exception vectors.*/
-REGION_ALIAS("VECTORS_FLASH", flash0);
-REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
-
-/* Flash region to be used for constructors and destructors.*/
-REGION_ALIAS("XTORS_FLASH", flash2);
-REGION_ALIAS("XTORS_FLASH_LMA", flash2);
-
-/* Flash region to be used for code text.*/
-REGION_ALIAS("TEXT_FLASH", flash2);
-REGION_ALIAS("TEXT_FLASH_LMA", flash2);
-
-/* Flash region to be used for read only data.*/
-REGION_ALIAS("RODATA_FLASH", flash2);
-REGION_ALIAS("RODATA_FLASH_LMA", flash2);
-
-/* Flash region to be used for various.*/
-REGION_ALIAS("VARIOUS_FLASH", flash2);
-REGION_ALIAS("VARIOUS_FLASH_LMA", flash2);
-
-/* Flash region to be used for RAM(n) initialization data.*/
-REGION_ALIAS("RAM_INIT_FLASH_LMA", flash2);
-
-/* RAM region to be used for Main stack. This stack accommodates the processing
- of all exceptions and interrupts.*/
-REGION_ALIAS("MAIN_STACK_RAM", ram0);
-
-/* RAM region to be used for the process stack. This is the stack used by
- the main() function.*/
-REGION_ALIAS("PROCESS_STACK_RAM", ram0);
-
-/* RAM region to be used for data segment.*/
-REGION_ALIAS("DATA_RAM", ram0);
-REGION_ALIAS("DATA_RAM_LMA", flash2);
-
-/* RAM region to be used for BSS segment.*/
-REGION_ALIAS("BSS_RAM", ram0);
-
-/* RAM region to be used for the default heap.*/
-REGION_ALIAS("HEAP_RAM", ram0);
-
-__eeprom_workarea_start__ = ORIGIN(flash3);
-__eeprom_workarea_size__ = LENGTH(flash3);
-__eeprom_workarea_end__ = __eeprom_workarea_start__ + __eeprom_workarea_size__;
-
-/* Generic rules inclusion.*/
-INCLUDE rules.ld
+/*
+ * Copyright (C) 2013-2016 Fabio Utzig, http://fabioutzig.com
+ * (C) 2016 flabbergast <s3+flabbergast@sdfeu.org>
+ *
+ * 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.
+ */
+
+/*
+ * KL26Z64 memory setup.
+ */
+MEMORY
+{
+ flash0 : org = 0x00000000, len = 0x100
+ flash1 : org = 0x00000400, len = 0x10
+ flash2 : org = 0x00000410, len = 62k - 0x410
+ flash3 : org = 0x0000F800, len = 2k
+ flash4 : org = 0x00000000, len = 0
+ flash5 : org = 0x00000000, len = 0
+ flash6 : org = 0x00000000, len = 0
+ flash7 : org = 0x00000000, len = 0
+ ram0 : org = 0x1FFFF800, len = 8k
+ ram1 : org = 0x00000000, len = 0
+ ram2 : org = 0x00000000, len = 0
+ ram3 : org = 0x00000000, len = 0
+ ram4 : org = 0x00000000, len = 0
+ ram5 : org = 0x00000000, len = 0
+ ram6 : org = 0x00000000, len = 0
+ ram7 : org = 0x00000000, len = 0
+}
+
+/* Flash region for the configuration bytes.*/
+SECTIONS
+{
+ .cfmprotect : ALIGN(4) SUBALIGN(4)
+ {
+ KEEP(*(.cfmconfig))
+ } > flash1
+}
+
+/* For each data/text section two region are defined, a virtual region
+ and a load region (_LMA suffix).*/
+
+/* Flash region to be used for exception vectors.*/
+REGION_ALIAS("VECTORS_FLASH", flash0);
+REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for constructors and destructors.*/
+REGION_ALIAS("XTORS_FLASH", flash2);
+REGION_ALIAS("XTORS_FLASH_LMA", flash2);
+
+/* Flash region to be used for code text.*/
+REGION_ALIAS("TEXT_FLASH", flash2);
+REGION_ALIAS("TEXT_FLASH_LMA", flash2);
+
+/* Flash region to be used for read only data.*/
+REGION_ALIAS("RODATA_FLASH", flash2);
+REGION_ALIAS("RODATA_FLASH_LMA", flash2);
+
+/* Flash region to be used for various.*/
+REGION_ALIAS("VARIOUS_FLASH", flash2);
+REGION_ALIAS("VARIOUS_FLASH_LMA", flash2);
+
+/* Flash region to be used for RAM(n) initialization data.*/
+REGION_ALIAS("RAM_INIT_FLASH_LMA", flash2);
+
+/* RAM region to be used for Main stack. This stack accommodates the processing
+ of all exceptions and interrupts.*/
+REGION_ALIAS("MAIN_STACK_RAM", ram0);
+
+/* RAM region to be used for the process stack. This is the stack used by
+ the main() function.*/
+REGION_ALIAS("PROCESS_STACK_RAM", ram0);
+
+/* RAM region to be used for data segment.*/
+REGION_ALIAS("DATA_RAM", ram0);
+REGION_ALIAS("DATA_RAM_LMA", flash2);
+
+/* RAM region to be used for BSS segment.*/
+REGION_ALIAS("BSS_RAM", ram0);
+
+/* RAM region to be used for the default heap.*/
+REGION_ALIAS("HEAP_RAM", ram0);
+
+__eeprom_workarea_start__ = ORIGIN(flash3);
+__eeprom_workarea_size__ = LENGTH(flash3);
+__eeprom_workarea_end__ = __eeprom_workarea_start__ + __eeprom_workarea_size__;
+
+/* Generic rules inclusion.*/
+INCLUDE rules.ld
diff --git a/keyboards/chibios_test/ld/STM32F103x8_stm32duino_bootloader.ld b/keyboards/chibios_test/ld/STM32F103x8_stm32duino_bootloader.ld
index 00613328e..f9bfe9c00 100644
--- a/keyboards/chibios_test/ld/STM32F103x8_stm32duino_bootloader.ld
+++ b/keyboards/chibios_test/ld/STM32F103x8_stm32duino_bootloader.ld
@@ -1,88 +1,88 @@
-/*
- ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-/*
- * ST32F103xB memory setup for use with the maplemini bootloader.
- * You will have to
- * #define CORTEX_VTOR_INIT 0x5000
- * in your projects chconf.h
- */
-MEMORY
-{
- flash0 : org = 0x08002000, len = 128k - 0x2000
- flash1 : org = 0x00000000, len = 0
- flash2 : org = 0x00000000, len = 0
- flash3 : org = 0x00000000, len = 0
- flash4 : org = 0x00000000, len = 0
- flash5 : org = 0x00000000, len = 0
- flash6 : org = 0x00000000, len = 0
- flash7 : org = 0x00000000, len = 0
- ram0 : org = 0x20000000, len = 20k
- ram1 : org = 0x00000000, len = 0
- ram2 : org = 0x00000000, len = 0
- ram3 : org = 0x00000000, len = 0
- ram4 : org = 0x00000000, len = 0
- ram5 : org = 0x00000000, len = 0
- ram6 : org = 0x00000000, len = 0
- ram7 : org = 0x00000000, len = 0
-}
-
-/* For each data/text section two region are defined, a virtual region
- and a load region (_LMA suffix).*/
-
-/* Flash region to be used for exception vectors.*/
-REGION_ALIAS("VECTORS_FLASH", flash0);
-REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
-
-/* Flash region to be used for constructors and destructors.*/
-REGION_ALIAS("XTORS_FLASH", flash0);
-REGION_ALIAS("XTORS_FLASH_LMA", flash0);
-
-/* Flash region to be used for code text.*/
-REGION_ALIAS("TEXT_FLASH", flash0);
-REGION_ALIAS("TEXT_FLASH_LMA", flash0);
-
-/* Flash region to be used for read only data.*/
-REGION_ALIAS("RODATA_FLASH", flash0);
-REGION_ALIAS("RODATA_FLASH_LMA", flash0);
-
-/* Flash region to be used for various.*/
-REGION_ALIAS("VARIOUS_FLASH", flash0);
-REGION_ALIAS("VARIOUS_FLASH_LMA", flash0);
-
-/* Flash region to be used for RAM(n) initialization data.*/
-REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0);
-
-/* RAM region to be used for Main stack. This stack accommodates the processing
- of all exceptions and interrupts.*/
-REGION_ALIAS("MAIN_STACK_RAM", ram0);
-
-/* RAM region to be used for the process stack. This is the stack used by
- the main() function.*/
-REGION_ALIAS("PROCESS_STACK_RAM", ram0);
-
-/* RAM region to be used for data segment.*/
-REGION_ALIAS("DATA_RAM", ram0);
-REGION_ALIAS("DATA_RAM_LMA", flash0);
-
-/* RAM region to be used for BSS segment.*/
-REGION_ALIAS("BSS_RAM", ram0);
-
-/* RAM region to be used for the default heap.*/
-REGION_ALIAS("HEAP_RAM", ram0);
-
-/* Generic rules inclusion.*/
-INCLUDE rules.ld
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/*
+ * ST32F103xB memory setup for use with the maplemini bootloader.
+ * You will have to
+ * #define CORTEX_VTOR_INIT 0x5000
+ * in your projects chconf.h
+ */
+MEMORY
+{
+ flash0 : org = 0x08002000, len = 128k - 0x2000
+ flash1 : org = 0x00000000, len = 0
+ flash2 : org = 0x00000000, len = 0
+ flash3 : org = 0x00000000, len = 0
+ flash4 : org = 0x00000000, len = 0
+ flash5 : org = 0x00000000, len = 0
+ flash6 : org = 0x00000000, len = 0
+ flash7 : org = 0x00000000, len = 0
+ ram0 : org = 0x20000000, len = 20k
+ ram1 : org = 0x00000000, len = 0
+ ram2 : org = 0x00000000, len = 0
+ ram3 : org = 0x00000000, len = 0
+ ram4 : org = 0x00000000, len = 0
+ ram5 : org = 0x00000000, len = 0
+ ram6 : org = 0x00000000, len = 0
+ ram7 : org = 0x00000000, len = 0
+}
+
+/* For each data/text section two region are defined, a virtual region
+ and a load region (_LMA suffix).*/
+
+/* Flash region to be used for exception vectors.*/
+REGION_ALIAS("VECTORS_FLASH", flash0);
+REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for constructors and destructors.*/
+REGION_ALIAS("XTORS_FLASH", flash0);
+REGION_ALIAS("XTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for code text.*/
+REGION_ALIAS("TEXT_FLASH", flash0);
+REGION_ALIAS("TEXT_FLASH_LMA", flash0);
+
+/* Flash region to be used for read only data.*/
+REGION_ALIAS("RODATA_FLASH", flash0);
+REGION_ALIAS("RODATA_FLASH_LMA", flash0);
+
+/* Flash region to be used for various.*/
+REGION_ALIAS("VARIOUS_FLASH", flash0);
+REGION_ALIAS("VARIOUS_FLASH_LMA", flash0);
+
+/* Flash region to be used for RAM(n) initialization data.*/
+REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0);
+
+/* RAM region to be used for Main stack. This stack accommodates the processing
+ of all exceptions and interrupts.*/
+REGION_ALIAS("MAIN_STACK_RAM", ram0);
+
+/* RAM region to be used for the process stack. This is the stack used by
+ the main() function.*/
+REGION_ALIAS("PROCESS_STACK_RAM", ram0);
+
+/* RAM region to be used for data segment.*/
+REGION_ALIAS("DATA_RAM", ram0);
+REGION_ALIAS("DATA_RAM_LMA", flash0);
+
+/* RAM region to be used for BSS segment.*/
+REGION_ALIAS("BSS_RAM", ram0);
+
+/* RAM region to be used for the default heap.*/
+REGION_ALIAS("HEAP_RAM", ram0);
+
+/* Generic rules inclusion.*/
+INCLUDE rules.ld
diff --git a/keyboards/chibios_test/rules.mk b/keyboards/chibios_test/rules.mk
new file mode 100644
index 000000000..4b5a84535
--- /dev/null
+++ b/keyboards/chibios_test/rules.mk
@@ -0,0 +1,8 @@
+#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+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
+SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE ?= yes # USB Nkey Rollover
+CUSTOM_MATRIX ?= yes # Custom matrix file \ No newline at end of file
diff --git a/keyboards/chibios_test/stm32_f072_onekey/Makefile b/keyboards/chibios_test/stm32_f072_onekey/Makefile
index eae38c4b2..191c6bb66 100644
--- a/keyboards/chibios_test/stm32_f072_onekey/Makefile
+++ b/keyboards/chibios_test/stm32_f072_onekey/Makefile
@@ -1,41 +1,3 @@
-# project specific files
-SRC = matrix.c \
- led.c
-
-## chip/board settings
-# the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F0xx
-# linker script to use
-# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-MCU_LDSCRIPT = STM32F072xB
-# startup code to use
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f0xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-BOARD = ST_STM32F072B_DISCOVERY
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m0
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 6
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
-# This also requires a patch to chibios:
-# <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
-
-# Build Options
-# comment out to disable the options.
-#
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../../Makefile
-endif
+endif \ No newline at end of file
diff --git a/keyboards/chibios_test/stm32_f072_onekey/mcuconf.h b/keyboards/chibios_test/stm32_f072_onekey/mcuconf.h
index 3d877aaa2..faca3defd 100644
--- a/keyboards/chibios_test/stm32_f072_onekey/mcuconf.h
+++ b/keyboards/chibios_test/stm32_f072_onekey/mcuconf.h
@@ -1,171 +1,171 @@
-/*
- ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-#ifndef _MCUCONF_H_
-#define _MCUCONF_H_
-
-/*
- * STM32F0xx drivers configuration.
- * The following settings override the default settings present in
- * the various device driver implementation headers.
- * Note that the settings for each driver only have effect if the whole
- * driver is enabled in halconf.h.
- *
- * IRQ priorities:
- * 3...0 Lowest...Highest.
- *
- * DMA priorities:
- * 0...3 Lowest...Highest.
- */
-
-#define STM32F0xx_MCUCONF
-
-/*
- * HAL driver system settings.
- */
-#define STM32_NO_INIT FALSE
-#define STM32_PVD_ENABLE FALSE
-#define STM32_PLS STM32_PLS_LEV0
-#define STM32_HSI_ENABLED TRUE
-#define STM32_HSI14_ENABLED TRUE
-#define STM32_HSI48_ENABLED FALSE
-#define STM32_LSI_ENABLED TRUE
-#define STM32_HSE_ENABLED FALSE
-#define STM32_LSE_ENABLED FALSE
-#define STM32_SW STM32_SW_PLL
-#define STM32_PLLSRC STM32_PLLSRC_HSI_DIV2
-#define STM32_PREDIV_VALUE 1
-#define STM32_PLLMUL_VALUE 12
-#define STM32_HPRE STM32_HPRE_DIV1
-#define STM32_PPRE STM32_PPRE_DIV1
-#define STM32_ADCSW STM32_ADCSW_HSI14
-#define STM32_ADCPRE STM32_ADCPRE_DIV4
-#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
-#define STM32_ADCPRE STM32_ADCPRE_DIV4
-#define STM32_ADCSW STM32_ADCSW_HSI14
-#define STM32_USBSW STM32_USBSW_HSI48
-#define STM32_CECSW STM32_CECSW_HSI
-#define STM32_I2C1SW STM32_I2C1SW_HSI
-#define STM32_USART1SW STM32_USART1SW_PCLK
-#define STM32_RTCSEL STM32_RTCSEL_LSI
-
-/*
- * ADC driver system settings.
- */
-#define STM32_ADC_USE_ADC1 FALSE
-#define STM32_ADC_ADC1_DMA_PRIORITY 2
-#define STM32_ADC_IRQ_PRIORITY 2
-#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 2
-
-/*
- * EXT driver system settings.
- */
-#define STM32_EXT_EXTI0_1_IRQ_PRIORITY 3
-#define STM32_EXT_EXTI2_3_IRQ_PRIORITY 3
-#define STM32_EXT_EXTI4_15_IRQ_PRIORITY 3
-#define STM32_EXT_EXTI16_IRQ_PRIORITY 3
-#define STM32_EXT_EXTI17_IRQ_PRIORITY 3
-
-/*
- * GPT driver system settings.
- */
-#define STM32_GPT_USE_TIM1 FALSE
-#define STM32_GPT_USE_TIM2 FALSE
-#define STM32_GPT_USE_TIM3 FALSE
-#define STM32_GPT_USE_TIM14 FALSE
-#define STM32_GPT_TIM1_IRQ_PRIORITY 2
-#define STM32_GPT_TIM2_IRQ_PRIORITY 2
-#define STM32_GPT_TIM3_IRQ_PRIORITY 2
-#define STM32_GPT_TIM14_IRQ_PRIORITY 2
-
-/*
- * I2C driver system settings.
- */
-#define STM32_I2C_USE_I2C1 FALSE
-#define STM32_I2C_USE_I2C2 FALSE
-#define STM32_I2C_BUSY_TIMEOUT 50
-#define STM32_I2C_I2C1_IRQ_PRIORITY 3
-#define STM32_I2C_I2C2_IRQ_PRIORITY 3
-#define STM32_I2C_USE_DMA TRUE
-#define STM32_I2C_I2C1_DMA_PRIORITY 1
-#define STM32_I2C_I2C2_DMA_PRIORITY 1
-#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
-
-/*
- * ICU driver system settings.
- */
-#define STM32_ICU_USE_TIM1 FALSE
-#define STM32_ICU_USE_TIM2 FALSE
-#define STM32_ICU_USE_TIM3 FALSE
-#define STM32_ICU_TIM1_IRQ_PRIORITY 3
-#define STM32_ICU_TIM2_IRQ_PRIORITY 3
-#define STM32_ICU_TIM3_IRQ_PRIORITY 3
-
-/*
- * PWM driver system settings.
- */
-#define STM32_PWM_USE_ADVANCED FALSE
-#define STM32_PWM_USE_TIM1 FALSE
-#define STM32_PWM_USE_TIM2 FALSE
-#define STM32_PWM_USE_TIM3 FALSE
-#define STM32_PWM_TIM1_IRQ_PRIORITY 3
-#define STM32_PWM_TIM2_IRQ_PRIORITY 3
-#define STM32_PWM_TIM3_IRQ_PRIORITY 3
-
-/*
- * SERIAL driver system settings.
- */
-#define STM32_SERIAL_USE_USART1 FALSE
-#define STM32_SERIAL_USE_USART2 FALSE
-#define STM32_SERIAL_USART1_PRIORITY 3
-#define STM32_SERIAL_USART2_PRIORITY 3
-
-/*
- * SPI driver system settings.
- */
-#define STM32_SPI_USE_SPI1 FALSE
-#define STM32_SPI_USE_SPI2 FALSE
-#define STM32_SPI_SPI1_DMA_PRIORITY 1
-#define STM32_SPI_SPI2_DMA_PRIORITY 1
-#define STM32_SPI_SPI1_IRQ_PRIORITY 2
-#define STM32_SPI_SPI2_IRQ_PRIORITY 2
-#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
-
-/*
- * ST driver system settings.
- */
-#define STM32_ST_IRQ_PRIORITY 2
-#define STM32_ST_USE_TIMER 2
-
-/*
- * UART driver system settings.
- */
-#define STM32_UART_USE_USART1 FALSE
-#define STM32_UART_USE_USART2 FALSE
-#define STM32_UART_USART1_IRQ_PRIORITY 3
-#define STM32_UART_USART2_IRQ_PRIORITY 3
-#define STM32_UART_USART1_DMA_PRIORITY 0
-#define STM32_UART_USART2_DMA_PRIORITY 0
-#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
-
-/*
- * USB driver system settings.
- */
-#define STM32_USB_USE_USB1 TRUE
-#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
-#define STM32_USB_USB1_LP_IRQ_PRIORITY 3
-
-#endif /* _MCUCONF_H_ */
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+/*
+ * STM32F0xx drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 3...0 Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3 Lowest...Highest.
+ */
+
+#define STM32F0xx_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT FALSE
+#define STM32_PVD_ENABLE FALSE
+#define STM32_PLS STM32_PLS_LEV0
+#define STM32_HSI_ENABLED TRUE
+#define STM32_HSI14_ENABLED TRUE
+#define STM32_HSI48_ENABLED FALSE
+#define STM32_LSI_ENABLED TRUE
+#define STM32_HSE_ENABLED FALSE
+#define STM32_LSE_ENABLED FALSE
+#define STM32_SW STM32_SW_PLL
+#define STM32_PLLSRC STM32_PLLSRC_HSI_DIV2
+#define STM32_PREDIV_VALUE 1
+#define STM32_PLLMUL_VALUE 12
+#define STM32_HPRE STM32_HPRE_DIV1
+#define STM32_PPRE STM32_PPRE_DIV1
+#define STM32_ADCSW STM32_ADCSW_HSI14
+#define STM32_ADCPRE STM32_ADCPRE_DIV4
+#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
+#define STM32_ADCPRE STM32_ADCPRE_DIV4
+#define STM32_ADCSW STM32_ADCSW_HSI14
+#define STM32_USBSW STM32_USBSW_HSI48
+#define STM32_CECSW STM32_CECSW_HSI
+#define STM32_I2C1SW STM32_I2C1SW_HSI
+#define STM32_USART1SW STM32_USART1SW_PCLK
+#define STM32_RTCSEL STM32_RTCSEL_LSI
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_USE_ADC1 FALSE
+#define STM32_ADC_ADC1_DMA_PRIORITY 2
+#define STM32_ADC_IRQ_PRIORITY 2
+#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 2
+
+/*
+ * EXT driver system settings.
+ */
+#define STM32_EXT_EXTI0_1_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI2_3_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI4_15_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI16_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI17_IRQ_PRIORITY 3
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1 FALSE
+#define STM32_GPT_USE_TIM2 FALSE
+#define STM32_GPT_USE_TIM3 FALSE
+#define STM32_GPT_USE_TIM14 FALSE
+#define STM32_GPT_TIM1_IRQ_PRIORITY 2
+#define STM32_GPT_TIM2_IRQ_PRIORITY 2
+#define STM32_GPT_TIM3_IRQ_PRIORITY 2
+#define STM32_GPT_TIM14_IRQ_PRIORITY 2
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1 FALSE
+#define STM32_I2C_USE_I2C2 FALSE
+#define STM32_I2C_BUSY_TIMEOUT 50
+#define STM32_I2C_I2C1_IRQ_PRIORITY 3
+#define STM32_I2C_I2C2_IRQ_PRIORITY 3
+#define STM32_I2C_USE_DMA TRUE
+#define STM32_I2C_I2C1_DMA_PRIORITY 1
+#define STM32_I2C_I2C2_DMA_PRIORITY 1
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1 FALSE
+#define STM32_ICU_USE_TIM2 FALSE
+#define STM32_ICU_USE_TIM3 FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY 3
+#define STM32_ICU_TIM2_IRQ_PRIORITY 3
+#define STM32_ICU_TIM3_IRQ_PRIORITY 3
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED FALSE
+#define STM32_PWM_USE_TIM1 FALSE
+#define STM32_PWM_USE_TIM2 FALSE
+#define STM32_PWM_USE_TIM3 FALSE
+#define STM32_PWM_TIM1_IRQ_PRIORITY 3
+#define STM32_PWM_TIM2_IRQ_PRIORITY 3
+#define STM32_PWM_TIM3_IRQ_PRIORITY 3
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1 FALSE
+#define STM32_SERIAL_USE_USART2 FALSE
+#define STM32_SERIAL_USART1_PRIORITY 3
+#define STM32_SERIAL_USART2_PRIORITY 3
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1 FALSE
+#define STM32_SPI_USE_SPI2 FALSE
+#define STM32_SPI_SPI1_DMA_PRIORITY 1
+#define STM32_SPI_SPI2_DMA_PRIORITY 1
+#define STM32_SPI_SPI1_IRQ_PRIORITY 2
+#define STM32_SPI_SPI2_IRQ_PRIORITY 2
+#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY 2
+#define STM32_ST_USE_TIMER 2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1 FALSE
+#define STM32_UART_USE_USART2 FALSE
+#define STM32_UART_USART1_IRQ_PRIORITY 3
+#define STM32_UART_USART2_IRQ_PRIORITY 3
+#define STM32_UART_USART1_DMA_PRIORITY 0
+#define STM32_UART_USART2_DMA_PRIORITY 0
+#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_USB1 TRUE
+#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
+#define STM32_USB_USB1_LP_IRQ_PRIORITY 3
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/chibios_test/stm32_f072_onekey/rules.mk b/keyboards/chibios_test/stm32_f072_onekey/rules.mk
new file mode 100644
index 000000000..eae38c4b2
--- /dev/null
+++ b/keyboards/chibios_test/stm32_f072_onekey/rules.mk
@@ -0,0 +1,41 @@
+# project specific files
+SRC = matrix.c \
+ led.c
+
+## chip/board settings
+# the next two should match the directories in
+# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+MCU_FAMILY = STM32
+MCU_SERIES = STM32F0xx
+# linker script to use
+# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+# or <this_dir>/ld/
+MCU_LDSCRIPT = STM32F072xB
+# startup code to use
+# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f0xx
+# it should exist either in <chibios>/os/hal/boards/
+# or <this_dir>/boards
+BOARD = ST_STM32F072B_DISCOVERY
+# Cortex version
+# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
+MCU = cortex-m0
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 6
+# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
+# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
+# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
+# a custom board definition that you plan to reuse).
+# If you're not setting it here, leave it commented out.
+# It is chip dependent, the correct number can be looked up here (page 175):
+# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
+# This also requires a patch to chibios:
+# <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
+#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
+
+# Build Options
+# comment out to disable the options.
+#
+ifndef QUANTUM_DIR
+ include ../../../Makefile
+endif
diff --git a/keyboards/chibios_test/stm32_f103_onekey/Makefile b/keyboards/chibios_test/stm32_f103_onekey/Makefile
index 307ca5b19..191c6bb66 100644
--- a/keyboards/chibios_test/stm32_f103_onekey/Makefile
+++ b/keyboards/chibios_test/stm32_f103_onekey/Makefile
@@ -1,52 +1,3 @@
-# project specific files
-SRC = matrix.c \
- led.c
-
-# GENERIC STM32F103C8T6 board - stm32duino bootloader
-OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000
-MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
-BOARD = GENERIC_STM32_F103
-
-# GENERIC STM32F103C8T6 board - no bootloader (programmer over serial or SWD)
-# OPT_DEFS =
-# MCU_LDSCRIPT = STM32F103x8
-# BOARD = GENERIC_STM32_F103
-
-# MAPLE MINI
-# OPT_DEFS = -DCORTEX_VTOR_INIT=0x5000
-# MCU_LDSCRIPT = STM32F103xB_maplemini_bootloader
-# BOARD = MAPLEMINI_STM32_F103
-
-## chip/board settings
-# the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F1xx
-# linker script to use
-# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-# startup code to use
-# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f1xx
-# it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-# Cortex version
-# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
-MCU = cortex-m3
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
-# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
-# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
-# a custom board definition that you plan to reuse).
-# If you're not setting it here, leave it commented out.
-# It is chip dependent, the correct number can be looked up here (page 175):
-# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
-# This also requires a patch to chibios:
-# <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
-#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
-
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../../Makefile
-endif
+endif \ No newline at end of file
diff --git a/keyboards/chibios_test/stm32_f103_onekey/mcuconf.h b/keyboards/chibios_test/stm32_f103_onekey/mcuconf.h
index 626332a6a..276829216 100644
--- a/keyboards/chibios_test/stm32_f103_onekey/mcuconf.h
+++ b/keyboards/chibios_test/stm32_f103_onekey/mcuconf.h
@@ -1,209 +1,209 @@
-/*
- ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-#ifndef _MCUCONF_H_
-#define _MCUCONF_H_
-
-#define STM32F103_MCUCONF
-
-/*
- * STM32F103 drivers configuration.
- * The following settings override the default settings present in
- * the various device driver implementation headers.
- * Note that the settings for each driver only have effect if the whole
- * driver is enabled in halconf.h.
- *
- * IRQ priorities:
- * 15...0 Lowest...Highest.
- *
- * DMA priorities:
- * 0...3 Lowest...Highest.
- */
-
-/*
- * HAL driver system settings.
- */
-#define STM32_NO_INIT FALSE
-#define STM32_HSI_ENABLED TRUE
-#define STM32_LSI_ENABLED FALSE
-#define STM32_HSE_ENABLED TRUE
-#define STM32_LSE_ENABLED FALSE
-#define STM32_SW STM32_SW_PLL
-#define STM32_PLLSRC STM32_PLLSRC_HSE
-#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1
-#define STM32_PLLMUL_VALUE 9
-#define STM32_HPRE STM32_HPRE_DIV1
-#define STM32_PPRE1 STM32_PPRE1_DIV2
-#define STM32_PPRE2 STM32_PPRE2_DIV2
-#define STM32_ADCPRE STM32_ADCPRE_DIV4
-#define STM32_USB_CLOCK_REQUIRED TRUE
-#define STM32_USBPRE STM32_USBPRE_DIV1P5
-#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
-#define STM32_RTCSEL STM32_RTCSEL_HSEDIV
-#define STM32_PVD_ENABLE FALSE
-#define STM32_PLS STM32_PLS_LEV0
-
-/*
- * ADC driver system settings.
- */
-#define STM32_ADC_USE_ADC1 FALSE
-#define STM32_ADC_ADC1_DMA_PRIORITY 2
-#define STM32_ADC_ADC1_IRQ_PRIORITY 6
-
-/*
- * CAN driver system settings.
- */
-#define STM32_CAN_USE_CAN1 FALSE
-#define STM32_CAN_CAN1_IRQ_PRIORITY 11
-
-/*
- * EXT driver system settings.
- */
-#define STM32_EXT_EXTI0_IRQ_PRIORITY 6
-#define STM32_EXT_EXTI1_IRQ_PRIORITY 6
-#define STM32_EXT_EXTI2_IRQ_PRIORITY 6
-#define STM32_EXT_EXTI3_IRQ_PRIORITY 6
-#define STM32_EXT_EXTI4_IRQ_PRIORITY 6
-#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6
-#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6
-#define STM32_EXT_EXTI16_IRQ_PRIORITY 6
-#define STM32_EXT_EXTI17_IRQ_PRIORITY 6
-#define STM32_EXT_EXTI18_IRQ_PRIORITY 6
-#define STM32_EXT_EXTI19_IRQ_PRIORITY 6
-
-/*
- * GPT driver system settings.
- */
-#define STM32_GPT_USE_TIM1 FALSE
-#define STM32_GPT_USE_TIM2 FALSE
-#define STM32_GPT_USE_TIM3 FALSE
-#define STM32_GPT_USE_TIM4 FALSE
-#define STM32_GPT_USE_TIM5 FALSE
-#define STM32_GPT_USE_TIM8 FALSE
-#define STM32_GPT_TIM1_IRQ_PRIORITY 7
-#define STM32_GPT_TIM2_IRQ_PRIORITY 7
-#define STM32_GPT_TIM3_IRQ_PRIORITY 7
-#define STM32_GPT_TIM4_IRQ_PRIORITY 7
-#define STM32_GPT_TIM5_IRQ_PRIORITY 7
-#define STM32_GPT_TIM8_IRQ_PRIORITY 7
-
-/*
- * I2C driver system settings.
- */
-#define STM32_I2C_USE_I2C1 FALSE
-#define STM32_I2C_USE_I2C2 FALSE
-#define STM32_I2C_BUSY_TIMEOUT 50
-#define STM32_I2C_I2C1_IRQ_PRIORITY 5
-#define STM32_I2C_I2C2_IRQ_PRIORITY 5
-#define STM32_I2C_I2C1_DMA_PRIORITY 3
-#define STM32_I2C_I2C2_DMA_PRIORITY 3
-#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
-
-/*
- * ICU driver system settings.
- */
-#define STM32_ICU_USE_TIM1 FALSE
-#define STM32_ICU_USE_TIM2 FALSE
-#define STM32_ICU_USE_TIM3 FALSE
-#define STM32_ICU_USE_TIM4 FALSE
-#define STM32_ICU_USE_TIM5 FALSE
-#define STM32_ICU_USE_TIM8 FALSE
-#define STM32_ICU_TIM1_IRQ_PRIORITY 7
-#define STM32_ICU_TIM2_IRQ_PRIORITY 7
-#define STM32_ICU_TIM3_IRQ_PRIORITY 7
-#define STM32_ICU_TIM4_IRQ_PRIORITY 7
-#define STM32_ICU_TIM5_IRQ_PRIORITY 7
-#define STM32_ICU_TIM8_IRQ_PRIORITY 7
-
-/*
- * PWM driver system settings.
- */
-#define STM32_PWM_USE_ADVANCED FALSE
-#define STM32_PWM_USE_TIM1 FALSE
-#define STM32_PWM_USE_TIM2 FALSE
-#define STM32_PWM_USE_TIM3 FALSE
-#define STM32_PWM_USE_TIM4 FALSE
-#define STM32_PWM_USE_TIM5 FALSE
-#define STM32_PWM_USE_TIM8 FALSE
-#define STM32_PWM_TIM1_IRQ_PRIORITY 7
-#define STM32_PWM_TIM2_IRQ_PRIORITY 7
-#define STM32_PWM_TIM3_IRQ_PRIORITY 7
-#define STM32_PWM_TIM4_IRQ_PRIORITY 7
-#define STM32_PWM_TIM5_IRQ_PRIORITY 7
-#define STM32_PWM_TIM8_IRQ_PRIORITY 7
-
-/*
- * RTC driver system settings.
- */
-#define STM32_RTC_IRQ_PRIORITY 15
-
-/*
- * SERIAL driver system settings.
- */
-#define STM32_SERIAL_USE_USART1 FALSE
-#define STM32_SERIAL_USE_USART2 FALSE
-#define STM32_SERIAL_USE_USART3 FALSE
-#define STM32_SERIAL_USE_UART4 FALSE
-#define STM32_SERIAL_USE_UART5 FALSE
-#define STM32_SERIAL_USART1_PRIORITY 12
-#define STM32_SERIAL_USART2_PRIORITY 12
-#define STM32_SERIAL_USART3_PRIORITY 12
-#define STM32_SERIAL_UART4_PRIORITY 12
-#define STM32_SERIAL_UART5_PRIORITY 12
-
-/*
- * SPI driver system settings.
- */
-#define STM32_SPI_USE_SPI1 FALSE
-#define STM32_SPI_USE_SPI2 FALSE
-#define STM32_SPI_USE_SPI3 FALSE
-#define STM32_SPI_SPI1_DMA_PRIORITY 1
-#define STM32_SPI_SPI2_DMA_PRIORITY 1
-#define STM32_SPI_SPI3_DMA_PRIORITY 1
-#define STM32_SPI_SPI1_IRQ_PRIORITY 10
-#define STM32_SPI_SPI2_IRQ_PRIORITY 10
-#define STM32_SPI_SPI3_IRQ_PRIORITY 10
-#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
-
-/*
- * ST driver system settings.
- */
-#define STM32_ST_IRQ_PRIORITY 8
-#define STM32_ST_USE_TIMER 2
-
-/*
- * UART driver system settings.
- */
-#define STM32_UART_USE_USART1 FALSE
-#define STM32_UART_USE_USART2 FALSE
-#define STM32_UART_USE_USART3 FALSE
-#define STM32_UART_USART1_IRQ_PRIORITY 12
-#define STM32_UART_USART2_IRQ_PRIORITY 12
-#define STM32_UART_USART3_IRQ_PRIORITY 12
-#define STM32_UART_USART1_DMA_PRIORITY 0
-#define STM32_UART_USART2_DMA_PRIORITY 0
-#define STM32_UART_USART3_DMA_PRIORITY 0
-#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
-
-/*
- * USB driver system settings.
- */
-#define STM32_USB_USE_USB1 TRUE
-#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
-#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
-#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
-
-#endif /* _MCUCONF_H_ */
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+#define STM32F103_MCUCONF
+
+/*
+ * STM32F103 drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 15...0 Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3 Lowest...Highest.
+ */
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT FALSE
+#define STM32_HSI_ENABLED TRUE
+#define STM32_LSI_ENABLED FALSE
+#define STM32_HSE_ENABLED TRUE
+#define STM32_LSE_ENABLED FALSE
+#define STM32_SW STM32_SW_PLL
+#define STM32_PLLSRC STM32_PLLSRC_HSE
+#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1
+#define STM32_PLLMUL_VALUE 9
+#define STM32_HPRE STM32_HPRE_DIV1
+#define STM32_PPRE1 STM32_PPRE1_DIV2
+#define STM32_PPRE2 STM32_PPRE2_DIV2
+#define STM32_ADCPRE STM32_ADCPRE_DIV4
+#define STM32_USB_CLOCK_REQUIRED TRUE
+#define STM32_USBPRE STM32_USBPRE_DIV1P5
+#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
+#define STM32_RTCSEL STM32_RTCSEL_HSEDIV
+#define STM32_PVD_ENABLE FALSE
+#define STM32_PLS STM32_PLS_LEV0
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_USE_ADC1 FALSE
+#define STM32_ADC_ADC1_DMA_PRIORITY 2
+#define STM32_ADC_ADC1_IRQ_PRIORITY 6
+
+/*
+ * CAN driver system settings.
+ */
+#define STM32_CAN_USE_CAN1 FALSE
+#define STM32_CAN_CAN1_IRQ_PRIORITY 11
+
+/*
+ * EXT driver system settings.
+ */
+#define STM32_EXT_EXTI0_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI1_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI2_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI3_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI4_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI16_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI17_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI18_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI19_IRQ_PRIORITY 6
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1 FALSE
+#define STM32_GPT_USE_TIM2 FALSE
+#define STM32_GPT_USE_TIM3 FALSE
+#define STM32_GPT_USE_TIM4 FALSE
+#define STM32_GPT_USE_TIM5 FALSE
+#define STM32_GPT_USE_TIM8 FALSE
+#define STM32_GPT_TIM1_IRQ_PRIORITY 7
+#define STM32_GPT_TIM2_IRQ_PRIORITY 7
+#define STM32_GPT_TIM3_IRQ_PRIORITY 7
+#define STM32_GPT_TIM4_IRQ_PRIORITY 7
+#define STM32_GPT_TIM5_IRQ_PRIORITY 7
+#define STM32_GPT_TIM8_IRQ_PRIORITY 7
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1 FALSE
+#define STM32_I2C_USE_I2C2 FALSE
+#define STM32_I2C_BUSY_TIMEOUT 50
+#define STM32_I2C_I2C1_IRQ_PRIORITY 5
+#define STM32_I2C_I2C2_IRQ_PRIORITY 5
+#define STM32_I2C_I2C1_DMA_PRIORITY 3
+#define STM32_I2C_I2C2_DMA_PRIORITY 3
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1 FALSE
+#define STM32_ICU_USE_TIM2 FALSE
+#define STM32_ICU_USE_TIM3 FALSE
+#define STM32_ICU_USE_TIM4 FALSE
+#define STM32_ICU_USE_TIM5 FALSE
+#define STM32_ICU_USE_TIM8 FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY 7
+#define STM32_ICU_TIM2_IRQ_PRIORITY 7
+#define STM32_ICU_TIM3_IRQ_PRIORITY 7
+#define STM32_ICU_TIM4_IRQ_PRIORITY 7
+#define STM32_ICU_TIM5_IRQ_PRIORITY 7
+#define STM32_ICU_TIM8_IRQ_PRIORITY 7
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED FALSE
+#define STM32_PWM_USE_TIM1 FALSE
+#define STM32_PWM_USE_TIM2 FALSE
+#define STM32_PWM_USE_TIM3 FALSE
+#define STM32_PWM_USE_TIM4 FALSE
+#define STM32_PWM_USE_TIM5 FALSE
+#define STM32_PWM_USE_TIM8 FALSE
+#define STM32_PWM_TIM1_IRQ_PRIORITY 7
+#define STM32_PWM_TIM2_IRQ_PRIORITY 7
+#define STM32_PWM_TIM3_IRQ_PRIORITY 7
+#define STM32_PWM_TIM4_IRQ_PRIORITY 7
+#define STM32_PWM_TIM5_IRQ_PRIORITY 7
+#define STM32_PWM_TIM8_IRQ_PRIORITY 7
+
+/*
+ * RTC driver system settings.
+ */
+#define STM32_RTC_IRQ_PRIORITY 15
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1 FALSE
+#define STM32_SERIAL_USE_USART2 FALSE
+#define STM32_SERIAL_USE_USART3 FALSE
+#define STM32_SERIAL_USE_UART4 FALSE
+#define STM32_SERIAL_USE_UART5 FALSE
+#define STM32_SERIAL_USART1_PRIORITY 12
+#define STM32_SERIAL_USART2_PRIORITY 12
+#define STM32_SERIAL_USART3_PRIORITY 12
+#define STM32_SERIAL_UART4_PRIORITY 12
+#define STM32_SERIAL_UART5_PRIORITY 12
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1 FALSE
+#define STM32_SPI_USE_SPI2 FALSE
+#define STM32_SPI_USE_SPI3 FALSE
+#define STM32_SPI_SPI1_DMA_PRIORITY 1
+#define STM32_SPI_SPI2_DMA_PRIORITY 1
+#define STM32_SPI_SPI3_DMA_PRIORITY 1
+#define STM32_SPI_SPI1_IRQ_PRIORITY 10
+#define STM32_SPI_SPI2_IRQ_PRIORITY 10
+#define STM32_SPI_SPI3_IRQ_PRIORITY 10
+#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY 8
+#define STM32_ST_USE_TIMER 2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1 FALSE
+#define STM32_UART_USE_USART2 FALSE
+#define STM32_UART_USE_USART3 FALSE
+#define STM32_UART_USART1_IRQ_PRIORITY 12
+#define STM32_UART_USART2_IRQ_PRIORITY 12
+#define STM32_UART_USART3_IRQ_PRIORITY 12
+#define STM32_UART_USART1_DMA_PRIORITY 0
+#define STM32_UART_USART2_DMA_PRIORITY 0
+#define STM32_UART_USART3_DMA_PRIORITY 0
+#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_USB1 TRUE
+#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
+#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
+#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/chibios_test/stm32_f103_onekey/rules.mk b/keyboards/chibios_test/stm32_f103_onekey/rules.mk
new file mode 100644
index 000000000..307ca5b19
--- /dev/null
+++ b/keyboards/chibios_test/stm32_f103_onekey/rules.mk
@@ -0,0 +1,52 @@
+# project specific files
+SRC = matrix.c \
+ led.c
+
+# GENERIC STM32F103C8T6 board - stm32duino bootloader
+OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000
+MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
+BOARD = GENERIC_STM32_F103
+
+# GENERIC STM32F103C8T6 board - no bootloader (programmer over serial or SWD)
+# OPT_DEFS =
+# MCU_LDSCRIPT = STM32F103x8
+# BOARD = GENERIC_STM32_F103
+
+# MAPLE MINI
+# OPT_DEFS = -DCORTEX_VTOR_INIT=0x5000
+# MCU_LDSCRIPT = STM32F103xB_maplemini_bootloader
+# BOARD = MAPLEMINI_STM32_F103
+
+## chip/board settings
+# the next two should match the directories in
+# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+MCU_FAMILY = STM32
+MCU_SERIES = STM32F1xx
+# linker script to use
+# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+# or <this_dir>/ld/
+# startup code to use
+# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f1xx
+# it should exist either in <chibios>/os/hal/boards/
+# or <this_dir>/boards
+# Cortex version
+# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
+MCU = cortex-m3
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 7
+# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
+# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
+# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
+# a custom board definition that you plan to reuse).
+# If you're not setting it here, leave it commented out.
+# It is chip dependent, the correct number can be looked up here (page 175):
+# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
+# This also requires a patch to chibios:
+# <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
+#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
+
+
+ifndef QUANTUM_DIR
+ include ../../../Makefile
+endif
diff --git a/keyboards/chibios_test/teensy_lc_onekey/Makefile b/keyboards/chibios_test/teensy_lc_onekey/Makefile
index 43ea9d82d..191c6bb66 100644
--- a/keyboards/chibios_test/teensy_lc_onekey/Makefile
+++ b/keyboards/chibios_test/teensy_lc_onekey/Makefile
@@ -1,49 +1,3 @@
-# project specific files
-SRC = matrix.c \
- led.c
-
-## chip/board settings
-# - the next two should match the directories in
-# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-# - For Teensies, FAMILY = KINETIS and SERIES is either
-# KL2x (LC) or K20x (3.0,3.1,3.2).
-MCU_FAMILY = KINETIS
-MCU_SERIES = KL2x
-
-# Linker script to use
-# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
-# or <this_dir>/ld/
-# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
-# - LDSCRIPT =
-# - MKL26Z64 for Teensy LC
-# - MK20DX128 for Teensy 3.0
-# - MK20DX256 for Teensy 3.1 and 3.2
-MCU_LDSCRIPT = MKL26Z64
-
-# Startup code to use
-# - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
-# - STARTUP =
-# - kl2x for Teensy LC
-# - k20x5 for Teensy 3.0
-# - k20x7 for Teensy 3.1 and 3.2
-MCU_STARTUP = kl2x
-
-# Board: it should exist either in <chibios>/os/hal/boards/
-# or <this_dir>/boards
-# - BOARD =
-# - PJRC_TEENSY_LC for Teensy LC
-# - PJRC_TEENSY_3 for Teensy 3.0
-# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
-BOARD = PJRC_TEENSY_LC
-
-# Cortex version
-# Teensy LC is cortex-m0plus; Teensy 3.x are cortex-m4
-MCU = cortex-m0plus
-
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-# I.e. 6 for Teensy LC; 7 for Teensy 3.x
-ARMV = 6
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../../Makefile
endif \ No newline at end of file
diff --git a/keyboards/chibios_test/teensy_lc_onekey/chconf.h b/keyboards/chibios_test/teensy_lc_onekey/chconf.h
index cb36996c3..3294ac7ee 100644
--- a/keyboards/chibios_test/teensy_lc_onekey/chconf.h
+++ b/keyboards/chibios_test/teensy_lc_onekey/chconf.h
@@ -1,524 +1,524 @@
-/*
- ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-/**
- * @file templates/chconf.h
- * @brief Configuration file template.
- * @details A copy of this file must be placed in each project directory, it
- * contains the application specific kernel settings.
- *
- * @addtogroup config
- * @details Kernel related settings and hooks.
- * @{
- */
-
-#ifndef CHCONF_H
-#define CHCONF_H
-
-#define _CHIBIOS_RT_CONF_
-
-/*===========================================================================*/
-/**
- * @name System timers settings
- * @{
- */
-/*===========================================================================*/
-
-/**
- * @brief System time counter resolution.
- * @note Allowed values are 16 or 32 bits.
- */
-#define CH_CFG_ST_RESOLUTION 32
-
-/**
- * @brief System tick frequency.
- * @details Frequency of the system timer that drives the system ticks. This
- * setting also defines the system tick time unit.
- */
-#define CH_CFG_ST_FREQUENCY 1000
-
-/**
- * @brief Time delta constant for the tick-less mode.
- * @note If this value is zero then the system uses the classic
- * periodic tick. This value represents the minimum number
- * of ticks that is safe to specify in a timeout directive.
- * The value one is not valid, timeouts are rounded up to
- * this value.
- */
-#define CH_CFG_ST_TIMEDELTA 0
-
-/** @} */
-
-/*===========================================================================*/
-/**
- * @name Kernel parameters and options
- * @{
- */
-/*===========================================================================*/
-
-/**
- * @brief Round robin interval.
- * @details This constant is the number of system ticks allowed for the
- * threads before preemption occurs. Setting this value to zero
- * disables the preemption for threads with equal priority and the
- * round robin becomes cooperative. Note that higher priority
- * threads can still preempt, the kernel is always preemptive.
- * @note Disabling the round robin preemption makes the kernel more compact
- * and generally faster.
- * @note The round robin preemption is not supported in tickless mode and
- * must be set to zero in that case.
- */
-#define CH_CFG_TIME_QUANTUM 20
-
-/**
- * @brief Managed RAM size.
- * @details Size of the RAM area to be managed by the OS. If set to zero
- * then the whole available RAM is used. The core memory is made
- * available to the heap allocator and/or can be used directly through
- * the simplified core memory allocator.
- *
- * @note In order to let the OS manage the whole RAM the linker script must
- * provide the @p __heap_base__ and @p __heap_end__ symbols.
- * @note Requires @p CH_CFG_USE_MEMCORE.
- */
-#define CH_CFG_MEMCORE_SIZE 0
-
-/**
- * @brief Idle thread automatic spawn suppression.
- * @details When this option is activated the function @p chSysInit()
- * does not spawn the idle thread. The application @p main()
- * function becomes the idle thread and must implement an
- * infinite loop.
- */
-#define CH_CFG_NO_IDLE_THREAD FALSE
-
-/* Use __WFI in the idle thread for waiting. Does lower the power
- * consumption. */
-#define CORTEX_ENABLE_WFI_IDLE TRUE
-
-/** @} */
-
-/*===========================================================================*/
-/**
- * @name Performance options
- * @{
- */
-/*===========================================================================*/
-
-/**
- * @brief OS optimization.
- * @details If enabled then time efficient rather than space efficient code
- * is used when two possible implementations exist.
- *
- * @note This is not related to the compiler optimization options.
- * @note The default is @p TRUE.
- */
-#define CH_CFG_OPTIMIZE_SPEED TRUE
-
-/** @} */
-
-/*===========================================================================*/
-/**
- * @name Subsystem options
- * @{
- */
-/*===========================================================================*/
-
-/**
- * @brief Time Measurement APIs.
- * @details If enabled then the time measurement APIs are included in
- * the kernel.
- *
- * @note The default is @p TRUE.
- */
-#define CH_CFG_USE_TM FALSE
-
-/**
- * @brief Threads registry APIs.
- * @details If enabled then the registry APIs are included in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#define CH_CFG_USE_REGISTRY TRUE
-
-/**
- * @brief Threads synchronization APIs.
- * @details If enabled then the @p chThdWait() function is included in
- * the kernel.
- *
- * @note The default is @p TRUE.
- */
-#define CH_CFG_USE_WAITEXIT TRUE
-
-/**
- * @brief Semaphores APIs.
- * @details If enabled then the Semaphores APIs are included in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#define CH_CFG_USE_SEMAPHORES TRUE
-
-/**
- * @brief Semaphores queuing mode.
- * @details If enabled then the threads are enqueued on semaphores by
- * priority rather than in FIFO order.
- *
- * @note The default is @p FALSE. Enable this if you have special
- * requirements.
- * @note Requires @p CH_CFG_USE_SEMAPHORES.
- */
-#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
-
-/**
- * @brief Mutexes APIs.
- * @details If enabled then the mutexes APIs are included in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#define CH_CFG_USE_MUTEXES TRUE
-
-/**
- * @brief Enables recursive behavior on mutexes.
- * @note Recursive mutexes are heavier and have an increased
- * memory footprint.
- *
- * @note The default is @p FALSE.
- * @note Requires @p CH_CFG_USE_MUTEXES.
- */
-#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
-
-/**
- * @brief Conditional Variables APIs.
- * @details If enabled then the conditional variables APIs are included
- * in the kernel.
- *
- * @note The default is @p TRUE.
- * @note Requires @p CH_CFG_USE_MUTEXES.
- */
-#define CH_CFG_USE_CONDVARS TRUE
-
-/**
- * @brief Conditional Variables APIs with timeout.
- * @details If enabled then the conditional variables APIs with timeout
- * specification are included in the kernel.
- *
- * @note The default is @p TRUE.
- * @note Requires @p CH_CFG_USE_CONDVARS.
- */
-#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
-
-/**
- * @brief Events Flags APIs.
- * @details If enabled then the event flags APIs are included in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#define CH_CFG_USE_EVENTS TRUE
-
-/**
- * @brief Events Flags APIs with timeout.
- * @details If enabled then the events APIs with timeout specification
- * are included in the kernel.
- *
- * @note The default is @p TRUE.
- * @note Requires @p CH_CFG_USE_EVENTS.
- */
-#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
-
-/**
- * @brief Synchronous Messages APIs.
- * @details If enabled then the synchronous messages APIs are included
- * in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#define CH_CFG_USE_MESSAGES TRUE
-
-/**
- * @brief Synchronous Messages queuing mode.
- * @details If enabled then messages are served by priority rather than in
- * FIFO order.
- *
- * @note The default is @p FALSE. Enable this if you have special
- * requirements.
- * @note Requires @p CH_CFG_USE_MESSAGES.
- */
-#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
-
-/**
- * @brief Mailboxes APIs.
- * @details If enabled then the asynchronous messages (mailboxes) APIs are
- * included in the kernel.
- *
- * @note The default is @p TRUE.
- * @note Requires @p CH_CFG_USE_SEMAPHORES.
- */
-#define CH_CFG_USE_MAILBOXES TRUE
-
-/**
- * @brief Core Memory Manager APIs.
- * @details If enabled then the core memory manager APIs are included
- * in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#define CH_CFG_USE_MEMCORE TRUE
-
-/**
- * @brief Heap Allocator APIs.
- * @details If enabled then the memory heap allocator APIs are included
- * in the kernel.
- *
- * @note The default is @p TRUE.
- * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
- * @p CH_CFG_USE_SEMAPHORES.
- * @note Mutexes are recommended.
- */
-#define CH_CFG_USE_HEAP TRUE
-
-/**
- * @brief Memory Pools Allocator APIs.
- * @details If enabled then the memory pools allocator APIs are included
- * in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#define CH_CFG_USE_MEMPOOLS TRUE
-
-/**
- * @brief Dynamic Threads APIs.
- * @details If enabled then the dynamic threads creation APIs are included
- * in the kernel.
- *
- * @note The default is @p TRUE.
- * @note Requires @p CH_CFG_USE_WAITEXIT.
- * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
- */
-#define CH_CFG_USE_DYNAMIC TRUE
-
-/** @} */
-
-/*===========================================================================*/
-/**
- * @name Debug options
- * @{
- */
-/*===========================================================================*/
-
-/**
- * @brief Debug option, kernel statistics.
- *
- * @note The default is @p FALSE.
- */
-#define CH_DBG_STATISTICS FALSE
-
-/**
- * @brief Debug option, system state check.
- * @details If enabled the correct call protocol for system APIs is checked
- * at runtime.
- *
- * @note The default is @p FALSE.
- */
-#define CH_DBG_SYSTEM_STATE_CHECK TRUE
-
-/**
- * @brief Debug option, parameters checks.
- * @details If enabled then the checks on the API functions input
- * parameters are activated.
- *
- * @note The default is @p FALSE.
- */
-#define CH_DBG_ENABLE_CHECKS TRUE
-
-/**
- * @brief Debug option, consistency checks.
- * @details If enabled then all the assertions in the kernel code are
- * activated. This includes consistency checks inside the kernel,
- * runtime anomalies and port-defined checks.
- *
- * @note The default is @p FALSE.
- */
-#define CH_DBG_ENABLE_ASSERTS TRUE
-
-/**
- * @brief Debug option, trace buffer.
- * @details If enabled then the trace buffer is activated.
- *
- * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
- */
-#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
-
-/**
- * @brief Trace buffer entries.
- * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
- * different from @p CH_DBG_TRACE_MASK_DISABLED.
- */
-#define CH_DBG_TRACE_BUFFER_SIZE 128
-
-/**
- * @brief Debug option, stack checks.
- * @details If enabled then a runtime stack check is performed.
- *
- * @note The default is @p FALSE.
- * @note The stack check is performed in a architecture/port dependent way.
- * It may not be implemented or some ports.
- * @note The default failure mode is to halt the system with the global
- * @p panic_msg variable set to @p NULL.
- */
-#define CH_DBG_ENABLE_STACK_CHECK TRUE
-
-/**
- * @brief Debug option, stacks initialization.
- * @details If enabled then the threads working area is filled with a byte
- * value when a thread is created. This can be useful for the
- * runtime measurement of the used stack.
- *
- * @note The default is @p FALSE.
- */
-#define CH_DBG_FILL_THREADS TRUE
-
-/**
- * @brief Debug option, threads profiling.
- * @details If enabled then a field is added to the @p thread_t structure that
- * counts the system ticks occurred while executing the thread.
- *
- * @note The default is @p FALSE.
- * @note This debug option is not currently compatible with the
- * tickless mode.
- */
-#define CH_DBG_THREADS_PROFILING FALSE
-
-/** @} */
-
-/*===========================================================================*/
-/**
- * @name Kernel hooks
- * @{
- */
-/*===========================================================================*/
-
-/**
- * @brief Threads descriptor structure extension.
- * @details User fields added to the end of the @p thread_t structure.
- */
-#define CH_CFG_THREAD_EXTRA_FIELDS \
- /* Add threads custom fields here.*/
-
-/**
- * @brief Threads initialization hook.
- * @details User initialization code added to the @p chThdInit() API.
- *
- * @note It is invoked from within @p chThdInit() and implicitly from all
- * the threads creation APIs.
- */
-#define CH_CFG_THREAD_INIT_HOOK(tp) { \
- /* Add threads initialization code here.*/ \
-}
-
-/**
- * @brief Threads finalization hook.
- * @details User finalization code added to the @p chThdExit() API.
- */
-#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
- /* Add threads finalization code here.*/ \
-}
-
-/**
- * @brief Context switch hook.
- * @details This hook is invoked just before switching between threads.
- */
-#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
- /* Context switch code here.*/ \
-}
-
-/**
- * @brief ISR enter hook.
- */
-#define CH_CFG_IRQ_PROLOGUE_HOOK() { \
- /* IRQ prologue code here.*/ \
-}
-
-/**
- * @brief ISR exit hook.
- */
-#define CH_CFG_IRQ_EPILOGUE_HOOK() { \
- /* IRQ epilogue code here.*/ \
-}
-
-/**
- * @brief Idle thread enter hook.
- * @note This hook is invoked within a critical zone, no OS functions
- * should be invoked from here.
- * @note This macro can be used to activate a power saving mode.
- */
-#define CH_CFG_IDLE_ENTER_HOOK() { \
- /* Idle-enter code here.*/ \
-}
-
-/**
- * @brief Idle thread leave hook.
- * @note This hook is invoked within a critical zone, no OS functions
- * should be invoked from here.
- * @note This macro can be used to deactivate a power saving mode.
- */
-#define CH_CFG_IDLE_LEAVE_HOOK() { \
- /* Idle-leave code here.*/ \
-}
-
-/**
- * @brief Idle Loop hook.
- * @details This hook is continuously invoked by the idle thread loop.
- */
-#define CH_CFG_IDLE_LOOP_HOOK() { \
- /* Idle loop code here.*/ \
-}
-
-/**
- * @brief System tick event hook.
- * @details This hook is invoked in the system tick handler immediately
- * after processing the virtual timers queue.
- */
-#define CH_CFG_SYSTEM_TICK_HOOK() { \
- /* System tick event code here.*/ \
-}
-
-/**
- * @brief System halt hook.
- * @details This hook is invoked in case to a system halting error before
- * the system is halted.
- */
-#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
- /* System halt code here.*/ \
-}
-
-/**
- * @brief Trace hook.
- * @details This hook is invoked each time a new record is written in the
- * trace buffer.
- */
-#define CH_CFG_TRACE_HOOK(tep) { \
- /* Trace code here.*/ \
-}
-
-/** @} */
-
-/*===========================================================================*/
-/* Port-specific settings (override port settings defaulted in chcore.h). */
-/*===========================================================================*/
-
-#endif /* CHCONF_H */
-
-/** @} */
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/chconf.h
+ * @brief Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ * contains the application specific kernel settings.
+ *
+ * @addtogroup config
+ * @details Kernel related settings and hooks.
+ * @{
+ */
+
+#ifndef CHCONF_H
+#define CHCONF_H
+
+#define _CHIBIOS_RT_CONF_
+
+/*===========================================================================*/
+/**
+ * @name System timers settings
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System time counter resolution.
+ * @note Allowed values are 16 or 32 bits.
+ */
+#define CH_CFG_ST_RESOLUTION 32
+
+/**
+ * @brief System tick frequency.
+ * @details Frequency of the system timer that drives the system ticks. This
+ * setting also defines the system tick time unit.
+ */
+#define CH_CFG_ST_FREQUENCY 1000
+
+/**
+ * @brief Time delta constant for the tick-less mode.
+ * @note If this value is zero then the system uses the classic
+ * periodic tick. This value represents the minimum number
+ * of ticks that is safe to specify in a timeout directive.
+ * The value one is not valid, timeouts are rounded up to
+ * this value.
+ */
+#define CH_CFG_ST_TIMEDELTA 0
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel parameters and options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Round robin interval.
+ * @details This constant is the number of system ticks allowed for the
+ * threads before preemption occurs. Setting this value to zero
+ * disables the preemption for threads with equal priority and the
+ * round robin becomes cooperative. Note that higher priority
+ * threads can still preempt, the kernel is always preemptive.
+ * @note Disabling the round robin preemption makes the kernel more compact
+ * and generally faster.
+ * @note The round robin preemption is not supported in tickless mode and
+ * must be set to zero in that case.
+ */
+#define CH_CFG_TIME_QUANTUM 20
+
+/**
+ * @brief Managed RAM size.
+ * @details Size of the RAM area to be managed by the OS. If set to zero
+ * then the whole available RAM is used. The core memory is made
+ * available to the heap allocator and/or can be used directly through
+ * the simplified core memory allocator.
+ *
+ * @note In order to let the OS manage the whole RAM the linker script must
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_CFG_USE_MEMCORE.
+ */
+#define CH_CFG_MEMCORE_SIZE 0
+
+/**
+ * @brief Idle thread automatic spawn suppression.
+ * @details When this option is activated the function @p chSysInit()
+ * does not spawn the idle thread. The application @p main()
+ * function becomes the idle thread and must implement an
+ * infinite loop.
+ */
+#define CH_CFG_NO_IDLE_THREAD FALSE
+
+/* Use __WFI in the idle thread for waiting. Does lower the power
+ * consumption. */
+#define CORTEX_ENABLE_WFI_IDLE TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Performance options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief OS optimization.
+ * @details If enabled then time efficient rather than space efficient code
+ * is used when two possible implementations exist.
+ *
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_OPTIMIZE_SPEED TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Subsystem options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Time Measurement APIs.
+ * @details If enabled then the time measurement APIs are included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_TM FALSE
+
+/**
+ * @brief Threads registry APIs.
+ * @details If enabled then the registry APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_REGISTRY TRUE
+
+/**
+ * @brief Threads synchronization APIs.
+ * @details If enabled then the @p chThdWait() function is included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_WAITEXIT TRUE
+
+/**
+ * @brief Semaphores APIs.
+ * @details If enabled then the Semaphores APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_SEMAPHORES TRUE
+
+/**
+ * @brief Semaphores queuing mode.
+ * @details If enabled then the threads are enqueued on semaphores by
+ * priority rather than in FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
+
+/**
+ * @brief Mutexes APIs.
+ * @details If enabled then the mutexes APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MUTEXES TRUE
+
+/**
+ * @brief Enables recursive behavior on mutexes.
+ * @note Recursive mutexes are heavier and have an increased
+ * memory footprint.
+ *
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
+
+/**
+ * @brief Conditional Variables APIs.
+ * @details If enabled then the conditional variables APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_CONDVARS TRUE
+
+/**
+ * @brief Conditional Variables APIs with timeout.
+ * @details If enabled then the conditional variables APIs with timeout
+ * specification are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_CONDVARS.
+ */
+#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
+
+/**
+ * @brief Events Flags APIs.
+ * @details If enabled then the event flags APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_EVENTS TRUE
+
+/**
+ * @brief Events Flags APIs with timeout.
+ * @details If enabled then the events APIs with timeout specification
+ * are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_EVENTS.
+ */
+#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
+
+/**
+ * @brief Synchronous Messages APIs.
+ * @details If enabled then the synchronous messages APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MESSAGES TRUE
+
+/**
+ * @brief Synchronous Messages queuing mode.
+ * @details If enabled then messages are served by priority rather than in
+ * FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_MESSAGES.
+ */
+#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
+
+/**
+ * @brief Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ * included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_MAILBOXES TRUE
+
+/**
+ * @brief Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMCORE TRUE
+
+/**
+ * @brief Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ * @p CH_CFG_USE_SEMAPHORES.
+ * @note Mutexes are recommended.
+ */
+#define CH_CFG_USE_HEAP TRUE
+
+/**
+ * @brief Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMPOOLS TRUE
+
+/**
+ * @brief Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_WAITEXIT.
+ * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
+ */
+#define CH_CFG_USE_DYNAMIC TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Debug option, kernel statistics.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_STATISTICS FALSE
+
+/**
+ * @brief Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ * at runtime.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_SYSTEM_STATE_CHECK TRUE
+
+/**
+ * @brief Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ * parameters are activated.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_CHECKS TRUE
+
+/**
+ * @brief Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ * activated. This includes consistency checks inside the kernel,
+ * runtime anomalies and port-defined checks.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_ASSERTS TRUE
+
+/**
+ * @brief Debug option, trace buffer.
+ * @details If enabled then the trace buffer is activated.
+ *
+ * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
+
+/**
+ * @brief Trace buffer entries.
+ * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
+ * different from @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_BUFFER_SIZE 128
+
+/**
+ * @brief Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note The default is @p FALSE.
+ * @note The stack check is performed in a architecture/port dependent way.
+ * It may not be implemented or some ports.
+ * @note The default failure mode is to halt the system with the global
+ * @p panic_msg variable set to @p NULL.
+ */
+#define CH_DBG_ENABLE_STACK_CHECK TRUE
+
+/**
+ * @brief Debug option, stacks initialization.
+ * @details If enabled then the threads working area is filled with a byte
+ * value when a thread is created. This can be useful for the
+ * runtime measurement of the used stack.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_FILL_THREADS TRUE
+
+/**
+ * @brief Debug option, threads profiling.
+ * @details If enabled then a field is added to the @p thread_t structure that
+ * counts the system ticks occurred while executing the thread.
+ *
+ * @note The default is @p FALSE.
+ * @note This debug option is not currently compatible with the
+ * tickless mode.
+ */
+#define CH_DBG_THREADS_PROFILING FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel hooks
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Threads descriptor structure extension.
+ * @details User fields added to the end of the @p thread_t structure.
+ */
+#define CH_CFG_THREAD_EXTRA_FIELDS \
+ /* Add threads custom fields here.*/
+
+/**
+ * @brief Threads initialization hook.
+ * @details User initialization code added to the @p chThdInit() API.
+ *
+ * @note It is invoked from within @p chThdInit() and implicitly from all
+ * the threads creation APIs.
+ */
+#define CH_CFG_THREAD_INIT_HOOK(tp) { \
+ /* Add threads initialization code here.*/ \
+}
+
+/**
+ * @brief Threads finalization hook.
+ * @details User finalization code added to the @p chThdExit() API.
+ */
+#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
+ /* Add threads finalization code here.*/ \
+}
+
+/**
+ * @brief Context switch hook.
+ * @details This hook is invoked just before switching between threads.
+ */
+#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
+ /* Context switch code here.*/ \
+}
+
+/**
+ * @brief ISR enter hook.
+ */
+#define CH_CFG_IRQ_PROLOGUE_HOOK() { \
+ /* IRQ prologue code here.*/ \
+}
+
+/**
+ * @brief ISR exit hook.
+ */
+#define CH_CFG_IRQ_EPILOGUE_HOOK() { \
+ /* IRQ epilogue code here.*/ \
+}
+
+/**
+ * @brief Idle thread enter hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to activate a power saving mode.
+ */
+#define CH_CFG_IDLE_ENTER_HOOK() { \
+ /* Idle-enter code here.*/ \
+}
+
+/**
+ * @brief Idle thread leave hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to deactivate a power saving mode.
+ */
+#define CH_CFG_IDLE_LEAVE_HOOK() { \
+ /* Idle-leave code here.*/ \
+}
+
+/**
+ * @brief Idle Loop hook.
+ * @details This hook is continuously invoked by the idle thread loop.
+ */
+#define CH_CFG_IDLE_LOOP_HOOK() { \
+ /* Idle loop code here.*/ \
+}
+
+/**
+ * @brief System tick event hook.
+ * @details This hook is invoked in the system tick handler immediately
+ * after processing the virtual timers queue.
+ */
+#define CH_CFG_SYSTEM_TICK_HOOK() { \
+ /* System tick event code here.*/ \
+}
+
+/**
+ * @brief System halt hook.
+ * @details This hook is invoked in case to a system halting error before
+ * the system is halted.
+ */
+#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
+ /* System halt code here.*/ \
+}
+
+/**
+ * @brief Trace hook.
+ * @details This hook is invoked each time a new record is written in the
+ * trace buffer.
+ */
+#define CH_CFG_TRACE_HOOK(tep) { \
+ /* Trace code here.*/ \
+}
+
+/** @} */
+
+/*===========================================================================*/
+/* Port-specific settings (override port settings defaulted in chcore.h). */
+/*===========================================================================*/
+
+#endif /* CHCONF_H */
+
+/** @} */
diff --git a/keyboards/chibios_test/teensy_lc_onekey/halconf.h b/keyboards/chibios_test/teensy_lc_onekey/halconf.h
index b1d2cd550..0436408b0 100644
--- a/keyboards/chibios_test/teensy_lc_onekey/halconf.h
+++ b/keyboards/chibios_test/teensy_lc_onekey/halconf.h
@@ -1,187 +1,187 @@
-/*
- ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-/**
- * @file templates/halconf.h
- * @brief HAL configuration header.
- * @details HAL configuration file, this file allows to enable or disable the
- * various device drivers from your application. You may also use
- * this file in order to override the device drivers default settings.
- *
- * @addtogroup HAL_CONF
- * @{
- */
-
-#ifndef _HALCONF_H_
-#define _HALCONF_H_
-
-#include "mcuconf.h"
-
-/**
- * @brief Enables the PAL subsystem.
- */
-#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
-#define HAL_USE_PAL TRUE
-#endif
-
-/**
- * @brief Enables the ADC subsystem.
- */
-#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
-#define HAL_USE_ADC FALSE
-#endif
-
-/**
- * @brief Enables the CAN subsystem.
- */
-#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
-#define HAL_USE_CAN FALSE
-#endif
-
-/**
- * @brief Enables the DAC subsystem.
- */
-#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
-#define HAL_USE_DAC FALSE
-#endif
-
-/**
- * @brief Enables the EXT subsystem.
- */
-#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
-#define HAL_USE_EXT FALSE
-#endif
-
-/**
- * @brief Enables the GPT subsystem.
- */
-#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
-#define HAL_USE_GPT FALSE
-#endif
-
-/**
- * @brief Enables the I2C subsystem.
- */
-#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
-#define HAL_USE_I2C FALSE
-#endif
-
-/**
- * @brief Enables the I2S subsystem.
- */
-#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
-#define HAL_USE_I2S FALSE
-#endif
-
-/**
- * @brief Enables the ICU subsystem.
- */
-#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
-#define HAL_USE_ICU FALSE
-#endif
-
-/**
- * @brief Enables the MAC subsystem.
- */
-#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
-#define HAL_USE_MAC FALSE
-#endif
-
-/**
- * @brief Enables the MMC_SPI subsystem.
- */
-#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
-#define HAL_USE_MMC_SPI FALSE
-#endif
-
-/**
- * @brief Enables the PWM subsystem.
- */
-#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
-#define HAL_USE_PWM FALSE
-#endif
-
-/**
- * @brief Enables the RTC subsystem.
- */
-#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
-#define HAL_USE_RTC FALSE
-#endif
-
-/**
- * @brief Enables the SDC subsystem.
- */
-#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
-#define HAL_USE_SDC FALSE
-#endif
-
-/**
- * @brief Enables the SERIAL subsystem.
- */
-#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
-#define HAL_USE_SERIAL FALSE
-#endif
-
-/**
- * @brief Enables the SERIAL over USB subsystem.
- */
-#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
-#define HAL_USE_SERIAL_USB FALSE
-#endif
-
-/**
- * @brief Enables the SPI subsystem.
- */
-#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
-#define HAL_USE_SPI FALSE
-#endif
-
-/**
- * @brief Enables the UART subsystem.
- */
-#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
-#define HAL_USE_UART FALSE
-#endif
-
-/**
- * @brief Enables the USB subsystem.
- */
-#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
-#define HAL_USE_USB TRUE
-#endif
-
-/**
- * @brief Enables the WDG subsystem.
- */
-#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
-#define HAL_USE_WDG FALSE
-#endif
-
-/*===========================================================================*/
-/* USB driver related settings. */
-/*===========================================================================*/
-
-/**
- * @brief Enables synchronous APIs.
- * @note Disabling this option saves both code and data space.
- */
-#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
-#define USB_USE_WAIT TRUE
-#endif
-
-#endif /* _HALCONF_H_ */
-
-/** @} */
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/halconf.h
+ * @brief HAL configuration header.
+ * @details HAL configuration file, this file allows to enable or disable the
+ * various device drivers from your application. You may also use
+ * this file in order to override the device drivers default settings.
+ *
+ * @addtogroup HAL_CONF
+ * @{
+ */
+
+#ifndef _HALCONF_H_
+#define _HALCONF_H_
+
+#include "mcuconf.h"
+
+/**
+ * @brief Enables the PAL subsystem.
+ */
+#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
+#define HAL_USE_PAL TRUE
+#endif
+
+/**
+ * @brief Enables the ADC subsystem.
+ */
+#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
+#define HAL_USE_ADC FALSE
+#endif
+
+/**
+ * @brief Enables the CAN subsystem.
+ */
+#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
+#define HAL_USE_CAN FALSE
+#endif
+
+/**
+ * @brief Enables the DAC subsystem.
+ */
+#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
+#define HAL_USE_DAC FALSE
+#endif
+
+/**
+ * @brief Enables the EXT subsystem.
+ */
+#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
+#define HAL_USE_EXT FALSE
+#endif
+
+/**
+ * @brief Enables the GPT subsystem.
+ */
+#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
+#define HAL_USE_GPT FALSE
+#endif
+
+/**
+ * @brief Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C FALSE
+#endif
+
+/**
+ * @brief Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S FALSE
+#endif
+
+/**
+ * @brief Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU FALSE
+#endif
+
+/**
+ * @brief Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC FALSE
+#endif
+
+/**
+ * @brief Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM FALSE
+#endif
+
+/**
+ * @brief Enables the RTC subsystem.
+ */
+#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
+#define HAL_USE_RTC FALSE
+#endif
+
+/**
+ * @brief Enables the SDC subsystem.
+ */
+#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
+#define HAL_USE_SDC FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL subsystem.
+ */
+#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL over USB subsystem.
+ */
+#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL_USB FALSE
+#endif
+
+/**
+ * @brief Enables the SPI subsystem.
+ */
+#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the UART subsystem.
+ */
+#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
+#define HAL_USE_UART FALSE
+#endif
+
+/**
+ * @brief Enables the USB subsystem.
+ */
+#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
+#define HAL_USE_USB TRUE
+#endif
+
+/**
+ * @brief Enables the WDG subsystem.
+ */
+#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
+#define HAL_USE_WDG FALSE
+#endif
+
+/*===========================================================================*/
+/* USB driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
+#define USB_USE_WAIT TRUE
+#endif
+
+#endif /* _HALCONF_H_ */
+
+/** @} */
diff --git a/keyboards/chibios_test/teensy_lc_onekey/mcuconf.h b/keyboards/chibios_test/teensy_lc_onekey/mcuconf.h
index c63659019..2764e8898 100644
--- a/keyboards/chibios_test/teensy_lc_onekey/mcuconf.h
+++ b/keyboards/chibios_test/teensy_lc_onekey/mcuconf.h
@@ -1,55 +1,55 @@
-/*
- ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-#ifndef _MCUCONF_H_
-#define _MCUCONF_H_
-
-#define KL2x_MCUCONF
-
-/*
- * HAL driver system settings.
- */
-#if 1
-/* PEE mode - 48MHz system clock driven by (16 MHz) external crystal. */
-#define KINETIS_MCG_MODE KINETIS_MCG_MODE_PEE
-#define KINETIS_PLLCLK_FREQUENCY 96000000UL
-#define KINETIS_SYSCLK_FREQUENCY 48000000UL
-#endif
-
-#if 0
-/* crystal-less FEI mode - 48 MHz with internal 32.768 kHz crystal */
-#define KINETIS_MCG_MODE KINETIS_MCG_MODE_FEI
-#define KINETIS_MCG_FLL_DMX32 1 /* Fine-tune for 32.768 kHz */
-#define KINETIS_MCG_FLL_DRS 1 /* 1464x FLL factor */
-#define KINETIS_SYSCLK_FREQUENCY 47972352UL /* 32.768 kHz * 1464 (~48 MHz) */
-#define KINETIS_CLKDIV1_OUTDIV1 1 /* do not divide system clock */
-#endif
-
-/*
- * SERIAL driver system settings.
- */
-#define KINETIS_SERIAL_USE_UART0 TRUE
-
-/*
- * USB driver settings
- */
-#define KINETIS_USB_USE_USB0 TRUE
-/* Need to redefine this, since the default is for K20x */
-/* This is for Teensy LC; you should comment it out (or change to 5)
- * for Teensy 3.x */
-#define KINETIS_USB_USB0_IRQ_PRIORITY 2
-
-#endif /* _MCUCONF_H_ */
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+#define KL2x_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+#if 1
+/* PEE mode - 48MHz system clock driven by (16 MHz) external crystal. */
+#define KINETIS_MCG_MODE KINETIS_MCG_MODE_PEE
+#define KINETIS_PLLCLK_FREQUENCY 96000000UL
+#define KINETIS_SYSCLK_FREQUENCY 48000000UL
+#endif
+
+#if 0
+/* crystal-less FEI mode - 48 MHz with internal 32.768 kHz crystal */
+#define KINETIS_MCG_MODE KINETIS_MCG_MODE_FEI
+#define KINETIS_MCG_FLL_DMX32 1 /* Fine-tune for 32.768 kHz */
+#define KINETIS_MCG_FLL_DRS 1 /* 1464x FLL factor */
+#define KINETIS_SYSCLK_FREQUENCY 47972352UL /* 32.768 kHz * 1464 (~48 MHz) */
+#define KINETIS_CLKDIV1_OUTDIV1 1 /* do not divide system clock */
+#endif
+
+/*
+ * SERIAL driver system settings.
+ */
+#define KINETIS_SERIAL_USE_UART0 TRUE
+
+/*
+ * USB driver settings
+ */
+#define KINETIS_USB_USE_USB0 TRUE
+/* Need to redefine this, since the default is for K20x */
+/* This is for Teensy LC; you should comment it out (or change to 5)
+ * for Teensy 3.x */
+#define KINETIS_USB_USB0_IRQ_PRIORITY 2
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/chibios_test/teensy_lc_onekey/rules.mk b/keyboards/chibios_test/teensy_lc_onekey/rules.mk
new file mode 100644
index 000000000..43ea9d82d
--- /dev/null
+++ b/keyboards/chibios_test/teensy_lc_onekey/rules.mk
@@ -0,0 +1,49 @@
+# project specific files
+SRC = matrix.c \
+ led.c
+
+## chip/board settings
+# - the next two should match the directories in
+# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+# - For Teensies, FAMILY = KINETIS and SERIES is either
+# KL2x (LC) or K20x (3.0,3.1,3.2).
+MCU_FAMILY = KINETIS
+MCU_SERIES = KL2x
+
+# Linker script to use
+# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+# or <this_dir>/ld/
+# - NOTE: a custom ld script is needed for EEPROM on Teensy LC
+# - LDSCRIPT =
+# - MKL26Z64 for Teensy LC
+# - MK20DX128 for Teensy 3.0
+# - MK20DX256 for Teensy 3.1 and 3.2
+MCU_LDSCRIPT = MKL26Z64
+
+# Startup code to use
+# - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
+# - STARTUP =
+# - kl2x for Teensy LC
+# - k20x5 for Teensy 3.0
+# - k20x7 for Teensy 3.1 and 3.2
+MCU_STARTUP = kl2x
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+# or <this_dir>/boards
+# - BOARD =
+# - PJRC_TEENSY_LC for Teensy LC
+# - PJRC_TEENSY_3 for Teensy 3.0
+# - PJRC_TEENSY_3_1 for Teensy 3.1 or 3.2
+BOARD = PJRC_TEENSY_LC
+
+# Cortex version
+# Teensy LC is cortex-m0plus; Teensy 3.x are cortex-m4
+MCU = cortex-m0plus
+
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+# I.e. 6 for Teensy LC; 7 for Teensy 3.x
+ARMV = 6
+
+ifndef QUANTUM_DIR
+ include ../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/clueboard/Makefile b/keyboards/clueboard/Makefile
index ccc01ea9a..b9bada8f8 100644
--- a/keyboards/clueboard/Makefile
+++ b/keyboards/clueboard/Makefile
@@ -1,109 +1,5 @@
-#----------------------------------------------------------------------------
-# 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".
-#----------------------------------------------------------------------------
-
SUBPROJECT_DEFAULT = rev2
-# 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(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-# comment out to disable the options.
-#
-BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes # Console for debug(+400)
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
-NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-AUDIO_ENABLE ?= no
-RGBLIGHT_ENABLE ?= no # Enable keyboard underlight functionality
-MIDI_ENABLE ?= no # MIDI controls
-UNICODE_ENABLE ?= no # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../Makefile
-endif
+endif \ No newline at end of file
diff --git a/keyboards/clueboard/config.h b/keyboards/clueboard/config.h
index ceac80795..ad6832385 100644
--- a/keyboards/clueboard/config.h
+++ b/keyboards/clueboard/config.h
@@ -29,9 +29,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
diff --git a/keyboards/clueboard/keymaps/default/keymap.c b/keyboards/clueboard/keymaps/default/keymap.c
index 896bc7ebc..01f158bf0 100644
--- a/keyboards/clueboard/keymaps/default/keymap.c
+++ b/keyboards/clueboard/keymaps/default/keymap.c
@@ -66,19 +66,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `----------------------------------------------------------------------------------'
*/
[_RS] = KEYMAP(
- #ifdef RGBLIGHT_ENABLE
KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_VAI, \
KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, \
KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
MO(_FL), KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), RGB_SAI, \
KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, RGB_MOD, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_HUD, RGB_SAD, RGB_HUI),
- #else
- KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,RESET, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, MO(_RS),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_FL), KC_TRNS, KC_TRNS, KC_TRNS),
- #endif
};
enum function_id {
diff --git a/keyboards/clueboard/keymaps/skully/readme.md b/keyboards/clueboard/keymaps/skully/readme.md
new file mode 100644
index 000000000..c1182123d
--- /dev/null
+++ b/keyboards/clueboard/keymaps/skully/readme.md
@@ -0,0 +1,5 @@
+# skullY's Clueboard Layout
+
+This layout is what I (@skullydazed) use on my personal Clueboards. I mostly use it for programming, CAD, and general typing.
+
+The most notable change from the default layout is putting Ctrl on the Capslock key. I also swap Alt and Cmd because I mostly use a Mac day to day.
diff --git a/keyboards/clueboard/readme.md b/keyboards/clueboard/readme.md
new file mode 100644
index 000000000..4a76e2908
--- /dev/null
+++ b/keyboards/clueboard/readme.md
@@ -0,0 +1,97 @@
+Clueboard keyboard firmware
+======================
+
+DIY/Assembled compact 66% keyboard by [Clueboard](http://clueboard.co).
+
+For the full Quantum Mechanical Keyboard feature list, see [the parent readme.md](/readme.md).
+
+## First Time Setup
+
+Download or clone the whole firmware and navigate to the keyboards/clueboard directory. Once your dev env is setup, you'll be able to generate the default .hex:
+
+```
+$ make
+```
+
+You will see a lot of output and if everything worked correctly you will see something similar to this:
+
+```
+Size after:
+ text data bss dec hex filename
+ 0 19992 0 19992 4e18 clueboard_rev2_default.hex
+```
+
+At this point you can press RESET on your Clueboard and flash your keyboard with this command:
+
+```
+$ make dfu
+```
+
+If you would like to use one of the alternative keymaps, or create your own, see below.
+
+## Clueboard 1.0
+
+If you have a first generation Clueboard (one with a black PCB) you will need to use the revision 1 code. To do so add `rev1` to your make command, like this:
+
+```
+$ make rev1
+```
+
+And when flashing your keyboard:
+
+```
+$ make rev1-dfu
+```
+
+If you are flashing an alternative layout to your rev1, include both `rev1` and `<keymap>` in your command, for example when flashing max:
+
+```
+$ make rev1-max-dfu
+```
+
+## Alternate Keymaps
+
+There are many alternative and user-contributed layouts available in the [keymaps/](keymaps/) directory. To compile and flash an alternative you will want to add `<keymap>` to your command:
+
+```
+$ make skully
+```
+
+And when flashing your keyboard, put `<keymap>` between "make" and "dfu":
+
+```
+$ make skully-dfu
+```
+
+### Notable Layouts
+
+These layouts are notable for one reason or another. If you are looking for ideas or inspiration you should look at these first:
+
+* [keymaps/default](keymaps/default) - The default Clueboard layout
+* [keymaps/max](keymaps/max) - A maximised layout that makes use of every key and feature of the Clueboard 2.0 PCB.
+* [keymaps/skully](keymaps/skully) - The layout that @skullydazed uses on his own Clueboards.
+
+## Create Your Own Keymap
+
+There are a lot of possibilities when creating your own keymap, and the primary documentation for doing that is [Customizing Your Keymap](/readme.md##customizing-your-keymap) in the main readme.md. As a way to get started, here is the procedure I recommend:
+
+* Copy `[keymaps/default](keymaps/default/)` to `keymaps/<your_layout>`.
+* Compile the firmware (`$ make <your_layout>`)
+* Flash the firmware (`$ make <your_layout>-dfu`)
+* Make sure everything works like the default keyboard
+* Modify `keymaps/<your_layout>/readme.md` to tell others about your layout.
+* Modify `keymaps/<your_layout>/keymap.c` to reflect your desired layout.
+* Compile your new custom firmware (`$ make <your_layout>`)
+** If you have warnings you may flash without fixing them, but something may not work right.
+** If you have any errors you must fix them before continuing.
+* Flash the firmware (`$ make <your_layout>-dfu`)
+
+## Share Your Keymap
+
+Got your layout dialed in? Please share it with the world so we can benefit from your work! Simply submit a pull request with your layout and we'll include it in the official repository. Please use the following guidelines when putting together your pull request:
+
+* Include a readme.md that states what your primary keyboard use is, how your layout differs from the default, and highlights anything you think makes your layout particularly great.
+* If your layout requires certain features (EG, RGB underlight or backlighting) ensure you have a Makefile and config.h that reflects that
+* If your layout requires special hardware to be added, please describe that in the readme.md
+
+TODO: Write up or link quick how-to on creating and submitting a PR. (Pull requests accepted. :)
diff --git a/keyboards/clueboard/rev1/Makefile b/keyboards/clueboard/rev1/Makefile
index 80a942d06..191c6bb66 100644
--- a/keyboards/clueboard/rev1/Makefile
+++ b/keyboards/clueboard/rev1/Makefile
@@ -1,5 +1,3 @@
-BACKLIGHT_ENABLE = no
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../../Makefile
-endif
+endif \ No newline at end of file
diff --git a/keyboards/clueboard/rev1/config.h b/keyboards/clueboard/rev1/config.h
index 8c9497232..f40876ffb 100644
--- a/keyboards/clueboard/rev1/config.h
+++ b/keyboards/clueboard/rev1/config.h
@@ -26,7 +26,7 @@
/* Underlight configuration
*/
#define RGB_DI_PIN B2
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 14 // Number of LEDs
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
diff --git a/keyboards/clueboard/rev1/rules.mk b/keyboards/clueboard/rev1/rules.mk
new file mode 100644
index 000000000..80a942d06
--- /dev/null
+++ b/keyboards/clueboard/rev1/rules.mk
@@ -0,0 +1,5 @@
+BACKLIGHT_ENABLE = no
+
+ifndef QUANTUM_DIR
+ include ../../../Makefile
+endif
diff --git a/keyboards/clueboard/rev2/Makefile b/keyboards/clueboard/rev2/Makefile
index cea967b79..191c6bb66 100644
--- a/keyboards/clueboard/rev2/Makefile
+++ b/keyboards/clueboard/rev2/Makefile
@@ -1,5 +1,3 @@
-BACKLIGHT_ENABLE = yes
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../../Makefile
-endif
+endif \ No newline at end of file
diff --git a/keyboards/clueboard/rev2/config.h b/keyboards/clueboard/rev2/config.h
index 02982ff29..8435fd02b 100644
--- a/keyboards/clueboard/rev2/config.h
+++ b/keyboards/clueboard/rev2/config.h
@@ -30,10 +30,10 @@
/* Underlight configuration
*/
#define RGB_DI_PIN D7
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 14 // Number of LEDs
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/clueboard/rev2/rules.mk b/keyboards/clueboard/rev2/rules.mk
new file mode 100644
index 000000000..cea967b79
--- /dev/null
+++ b/keyboards/clueboard/rev2/rules.mk
@@ -0,0 +1,5 @@
+BACKLIGHT_ENABLE = yes
+
+ifndef QUANTUM_DIR
+ include ../../../Makefile
+endif
diff --git a/keyboards/clueboard/rules.mk b/keyboards/clueboard/rules.mk
new file mode 100644
index 000000000..3909fbd5c
--- /dev/null
+++ b/keyboards/clueboard/rules.mk
@@ -0,0 +1,103 @@
+#----------------------------------------------------------------------------
+# 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".
+#----------------------------------------------------------------------------
+
+# 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(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+AUDIO_ENABLE ?= no
+RGBLIGHT_ENABLE ?= no # Enable keyboard underlight functionality
+MIDI_ENABLE ?= no # MIDI controls
+UNICODE_ENABLE ?= no # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID \ No newline at end of file
diff --git a/keyboards/clueboard2/clueboard2.c b/keyboards/clueboard2/clueboard2.c
deleted file mode 100644
index d78ffed9b..000000000
--- a/keyboards/clueboard2/clueboard2.c
+++ /dev/null
@@ -1,63 +0,0 @@
-#include "clueboard2.h"
-
-void matrix_init_kb(void) {
- // put your keyboard start-up code here
- // runs once when the firmware starts up
- matrix_init_user();
- led_init_ports();
-
- // JTAG disable for PORT F. write JTD bit twice within four cycles.
- MCUCR |= (1<<JTD);
- MCUCR |= (1<<JTD);
-};
-
-void led_init_ports() {
- // * Set our LED pins as output
- DDRB |= (1<<4);
-}
-
-void led_set_kb(uint8_t usb_led) {
- if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
- // Turn capslock on
- PORTB |= (1<<4);
- } else {
- // Turn capslock off
- PORTB &= ~(1<<4);
- }
-}
-
-/* Clueboard 2.0 LED locations:
- *
- * Capslock: B4, pull high to turn on
- * LCtrl: Shared with Capslock, DO NOT INSTALL LED'S IN BOTH
- * Page Up: B7, pull high to turn on
- * Escape: D6, pull high to turn on
- * Arrows: D4, pull high to turn on
- */
-
-void backlight_init_ports(void) {
- print("init_backlight_pin()\n");
- // Set our LED pins as output
- DDRD |= (1<<6); // Esc
- DDRB |= (1<<7); // Page Up
- DDRD |= (1<<4); // Arrows
-
- // Set our LED pins low
- PORTD &= ~(1<<6); // Esc
- PORTB &= ~(1<<7); // Page Up
- PORTD &= ~(1<<4); // Arrows
-}
-
-void backlight_set(uint8_t level) {
- if ( level == 0 ) {
- // Turn off light
- PORTD |= (1<<6); // Esc
- PORTB |= (1<<7); // Page Up
- PORTD |= (1<<4); // Arrows
- } else {
- // Turn on light
- PORTD &= ~(1<<6); // Esc
- PORTB &= ~(1<<7); // Page Up
- PORTD &= ~(1<<4); // Arrows
- }
-}
diff --git a/keyboards/cluecard/Makefile b/keyboards/cluecard/Makefile
new file mode 100644
index 000000000..4e2a6f00f
--- /dev/null
+++ b/keyboards/cluecard/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/cluecard/cluecard.c b/keyboards/cluecard/cluecard.c
new file mode 100644
index 000000000..81db252d2
--- /dev/null
+++ b/keyboards/cluecard/cluecard.c
@@ -0,0 +1,98 @@
+#include "cluecard.h"
+#define BL_RED OCR1B
+#define BL_GREEN OCR1A
+#define BL_BLUE OCR1C
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, 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);
+}
+
+void backlight_init_ports(void)
+{
+ // Set B5, B6, and B7 as output
+ DDRB |= (1<<7)|(1<<6)|(1<<5);
+
+ // Setup PWM
+ ICR1 = 0xFFFF;
+ TCCR1A = 0b10101010;
+ TCCR1B = 0b00011001;
+
+ BL_RED = 0xFFFF;
+ BL_GREEN = 0xFFFF;
+ BL_BLUE = 0xFFFF;
+}
+
+void backlight_set(uint8_t level)
+{
+ // Set the RGB color
+ switch (level)
+ {
+ case 0:
+ // Off
+ BL_RED = 0xFFFF;
+ BL_GREEN = 0xFFFF;
+ BL_BLUE = 0xFFFF;
+ break;
+ case 1:
+ // Red
+ BL_RED = 0x0000;
+ BL_GREEN = 0xFFFF;
+ BL_BLUE = 0xFFFF;
+ break;
+ case 2:
+ // Green
+ BL_RED = 0xFFFF;
+ BL_GREEN = 0x0000;
+ BL_BLUE = 0xFFFF;
+ break;
+ case 3:
+ // Blue
+ BL_RED = 0xFFFF;
+ BL_GREEN = 0xFFFF;
+ BL_BLUE = 0x0000;
+ break;
+ case 4:
+ // Magenta
+ BL_RED = 0x4000;
+ BL_GREEN = 0x4000;
+ BL_BLUE = 0x4000;
+ break;
+ case 5:
+ // Purple
+ BL_RED = 0x0000;
+ BL_GREEN = 0xFFFF;
+ BL_BLUE = 0x0000;
+ break;
+ case 6:
+ // Yellow
+ BL_RED = 0x0000;
+ BL_GREEN = 0x0000;
+ BL_BLUE = 0xFFFF;
+ break;
+ default:
+ xprintf("Unknown level: %d\n", level);
+ }
+}
diff --git a/keyboards/cluecard/cluecard.h b/keyboards/cluecard/cluecard.h
new file mode 100644
index 000000000..3342a0823
--- /dev/null
+++ b/keyboards/cluecard/cluecard.h
@@ -0,0 +1,22 @@
+#ifndef CLUECARD_H
+#define CLUECARD_H
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define KEYMAP( \
+ k00, k01, k02, \
+ k10, k12, \
+ k20, k21, k22, \
+ k11, \
+ k30, k31, k32 \
+) { \
+ { k00, k01, k02, }, \
+ { k10, k11, k12, }, \
+ { k20, k21, k22, }, \
+ { k30, k31, k32, } \
+}
+
+#endif
diff --git a/keyboards/cluecard/config.h b/keyboards/cluecard/config.h
new file mode 100644
index 000000000..6520eb557
--- /dev/null
+++ b/keyboards/cluecard/config.h
@@ -0,0 +1,167 @@
+/*
+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 0xC1ED
+#define PRODUCT_ID 0x2330
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Clueboard
+#define PRODUCT ATMEGA32U4 Firmware Dev Kit
+#define DESCRIPTION A small board to help you hack on QMK.
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 3
+
+/*
+ * 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, F5, F4, B4 }
+#define MATRIX_COL_PINS { F1, F7, F6 }
+#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 20
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 6
+
+/* 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
+
+/* Underlight configuration
+ */
+#define RGB_DI_PIN E6
+//#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 4 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/cluecard/keymaps/default/Makefile b/keyboards/cluecard/keymaps/default/Makefile
new file mode 100644
index 000000000..8ee841da0
--- /dev/null
+++ b/keyboards/cluecard/keymaps/default/Makefile
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = yes # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/cluecard/keymaps/default/config.h b/keyboards/cluecard/keymaps/default/config.h
new file mode 100644
index 000000000..8893d122e
--- /dev/null
+++ b/keyboards/cluecard/keymaps/default/config.h
@@ -0,0 +1,8 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+
+#endif
diff --git a/keyboards/cluecard/keymaps/default/keymap.c b/keyboards/cluecard/keymaps/default/keymap.c
new file mode 100644
index 000000000..517afe867
--- /dev/null
+++ b/keyboards/cluecard/keymaps/default/keymap.c
@@ -0,0 +1,63 @@
+#include "cluecard.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = KEYMAP(
+ RGB_TOG, RGB_SAI, RGB_VAI, \
+ RGB_HUD, RGB_HUI, \
+ RGB_MOD, RGB_SAD, RGB_VAD, \
+ BL_STEP, \
+ F(0), F(1), F(2) \
+ )
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_FUNCTION(0),
+ [1] = ACTION_FUNCTION(1),
+ [2] = ACTION_FUNCTION(2)
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ if (record->event.pressed) {
+ switch (id) {
+ case 0:
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+ break;
+ case 1:
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+ break;
+ case 2:
+ PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+ break;
+ }
+ }
+};
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+}
diff --git a/keyboards/cluecard/keymaps/default/readme.md b/keyboards/cluecard/keymaps/default/readme.md
new file mode 100644
index 000000000..fa4e8ccad
--- /dev/null
+++ b/keyboards/cluecard/keymaps/default/readme.md
@@ -0,0 +1,5 @@
+# The default keymap for cluecard
+
+Note that this keymap has audio enabled, so the RGB mode button does not go through the different effects.
+So the LEDs will still show a static light, that is configurable with the hue, staturation and brightness
+buttons. You can of course also turn them on and off with the on/off button.
diff --git a/keyboards/cluecard/keymaps/rgb_effects/Makefile b/keyboards/cluecard/keymaps/rgb_effects/Makefile
new file mode 100644
index 000000000..00670c0cf
--- /dev/null
+++ b/keyboards/cluecard/keymaps/rgb_effects/Makefile
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # 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 = yes # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/cluecard/keymaps/rgb_effects/config.h b/keyboards/cluecard/keymaps/rgb_effects/config.h
new file mode 100644
index 000000000..c6c9342c8
--- /dev/null
+++ b/keyboards/cluecard/keymaps/rgb_effects/config.h
@@ -0,0 +1,12 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_EFFECT_SNAKE_LENGTH 3
+#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
+#define RGBLIGHT_EFFECT_KNIGHT_OFFSET 2
+
+#endif
diff --git a/keyboards/cluecard/keymaps/rgb_effects/keymap.c b/keyboards/cluecard/keymaps/rgb_effects/keymap.c
new file mode 100644
index 000000000..74c95ce8a
--- /dev/null
+++ b/keyboards/cluecard/keymaps/rgb_effects/keymap.c
@@ -0,0 +1,28 @@
+#include "cluecard.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = KEYMAP(
+ RGB_TOG, RGB_SAI, RGB_VAI, \
+ RGB_HUD, RGB_HUI, \
+ RGB_MOD, RGB_SAD, RGB_VAD, \
+ BL_STEP, \
+ KC_NO, KC_NO, KC_NO \
+ )
+};
+
+const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {255, 170, 85};
+const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {255, 170, 85};
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+}
diff --git a/keyboards/cluecard/keymaps/rgb_effects/readme.md b/keyboards/cluecard/keymaps/rgb_effects/readme.md
new file mode 100644
index 000000000..949cac394
--- /dev/null
+++ b/keyboards/cluecard/keymaps/rgb_effects/readme.md
@@ -0,0 +1,7 @@
+# RGB effect test keymap for cluecard
+
+This keymap is made for testing the RGB effects. Audio is disabled and the mode buttons goes through each
+effect. If you run HID-listen you will be able to see which effect is active. For a list of effects, check
+the `rgblight.c` file.
+
+The hue, saturation and brightness buttons will work depending on which effect is active.
diff --git a/keyboards/cluecard/readme.md b/keyboards/cluecard/readme.md
new file mode 100644
index 000000000..be13fc017
--- /dev/null
+++ b/keyboards/cluecard/readme.md
@@ -0,0 +1,28 @@
+cluecard keyboard firmware
+======================
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/cluecard 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 default`.
+
+### Other Keymaps
+
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
+```
+$ make [default|jack|<name>]
+```
+
+Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
diff --git a/keyboards/cluecard/rules.mk b/keyboards/cluecard/rules.mk
new file mode 100644
index 000000000..454235877
--- /dev/null
+++ b/keyboards/cluecard/rules.mk
@@ -0,0 +1,70 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+# 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 ?= no # USB Nkey Rollover
+RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870)
+BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality by default
+MIDI_ENABLE ?= no # MIDI controls
+UNICODE_ENABLE ?= no # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE ?= yes # Audio output on port C6
diff --git a/keyboards/cluepad/Makefile b/keyboards/cluepad/Makefile
index a331ff4dc..4e2a6f00f 100644
--- a/keyboards/cluepad/Makefile
+++ b/keyboards/cluepad/Makefile
@@ -1,70 +1,3 @@
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-# 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 - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE ?= yes # Enable numpad's backlight functionality
-RGBLIGHT_ENABLE ?= yes
-# MIDI_ENABLE ?= YES # MIDI controls
-# UNICODE_ENABLE ?= YES # Unicode
-# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
-
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../Makefile
-endif
+endif \ No newline at end of file
diff --git a/keyboards/cluepad/config.h b/keyboards/cluepad/config.h
index bae05fade..bd64dfd27 100644
--- a/keyboards/cluepad/config.h
+++ b/keyboards/cluepad/config.h
@@ -70,7 +70,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Underlight configuration
*/
#define RGB_DI_PIN F6
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 4 // Number of LEDs
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
diff --git a/keyboards/cluepad/readme.md b/keyboards/cluepad/readme.md
new file mode 100644
index 000000000..8450340f2
--- /dev/null
+++ b/keyboards/cluepad/readme.md
@@ -0,0 +1,4 @@
+Cluepad number pad firmware
+======================
+
+TODO: to be updated.
diff --git a/keyboards/cluepad/rules.mk b/keyboards/cluepad/rules.mk
new file mode 100644
index 000000000..19b16b95a
--- /dev/null
+++ b/keyboards/cluepad/rules.mk
@@ -0,0 +1,65 @@
+
+# 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 - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= yes # Enable numpad's backlight functionality
+RGBLIGHT_ENABLE ?= yes
+# MIDI_ENABLE ?= YES # MIDI controls
+# UNICODE_ENABLE ?= YES # Unicode
+# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID \ No newline at end of file
diff --git a/keyboards/ergodox/Makefile b/keyboards/ergodox/Makefile
new file mode 100644
index 000000000..716535005
--- /dev/null
+++ b/keyboards/ergodox/Makefile
@@ -0,0 +1,5 @@
+SUBPROJECT_DEFAULT = ez
+
+ifndef MAKEFILE_INCLUDED
+ include ../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/ergodox/config.h b/keyboards/ergodox/config.h
new file mode 100644
index 000000000..994a8c643
--- /dev/null
+++ b/keyboards/ergodox/config.h
@@ -0,0 +1,37 @@
+#ifndef KEYBOARDS_ERGODOX_CONFIG_H_
+#define KEYBOARDS_ERGODOX_CONFIG_H_
+
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_TIME_TO_MAX 5
+#define MOUSEKEY_MAX_SPEED 2
+#define MOUSEKEY_WHEEL_DELAY 0
+
+#define TAPPING_TOGGLE 1
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+#define TAPPING_TERM 200
+#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \
+ keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
+)
+
+#ifdef SUBPROJECT_ez
+ #include "ez/config.h"
+#endif
+#ifdef SUBPROJECT_infinity
+ #include "infinity/config.h"
+#endif
+
+
+#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */
diff --git a/keyboards/ergodox/ergodox.c b/keyboards/ergodox/ergodox.c
new file mode 100644
index 000000000..648ec8ad2
--- /dev/null
+++ b/keyboards/ergodox/ergodox.c
@@ -0,0 +1,4 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
diff --git a/keyboards/ergodox/ergodox.h b/keyboards/ergodox/ergodox.h
new file mode 100644
index 000000000..f8ec8b5bf
--- /dev/null
+++ b/keyboards/ergodox/ergodox.h
@@ -0,0 +1,10 @@
+#ifndef KEYBOARDS_ERGODOX_ERGODOX_H_
+#define KEYBOARDS_ERGODOX_ERGODOX_H_
+#ifdef SUBPROJECT_ez
+ #include "ez.h"
+#endif
+#ifdef SUBPROJECT_infinity
+ #include "infinity.h"
+#endif
+
+#endif /* KEYBOARDS_ERGODOX_ERGODOX_H_ */
diff --git a/keyboards/ergodox_ez/190hotfix.sh b/keyboards/ergodox/ez/190hotfix.sh
index bdc3adce2..bdc3adce2 100755
--- a/keyboards/ergodox_ez/190hotfix.sh
+++ b/keyboards/ergodox/ez/190hotfix.sh
diff --git a/keyboards/ergodox/ez/Makefile b/keyboards/ergodox/ez/Makefile
new file mode 100644
index 000000000..9b6121e2c
--- /dev/null
+++ b/keyboards/ergodox/ez/Makefile
@@ -0,0 +1,8 @@
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+COMMAND_ENABLE = no # Commands for debug and configuration
+RGBLIGHT_ENABLE ?= yes
+MIDI_ENABLE ?= yes
+
+ifndef MAKEFILE_INCLUDED
+ include ../../../Makefile
+endif
diff --git a/keyboards/ergodox/ez/config.h b/keyboards/ergodox/ez/config.h
new file mode 100644
index 000000000..c2750a321
--- /dev/null
+++ b/keyboards/ergodox/ez/config.h
@@ -0,0 +1,78 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2013 Oleg Kostyuk <cub.uanic@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 ERGODOX_EZ_CONFIG_H
+#define ERGODOX_EZ_CONFIG_H
+
+#include "../config.h"
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x1307
+#define DEVICE_VER 0x0001
+#define MANUFACTURER ErgoDox EZ
+#define PRODUCT ErgoDox EZ
+#define DESCRIPTION QMK keyboard firmware for Ergodox EZ
+
+/* key matrix size */
+#define MATRIX_ROWS 14
+#define MATRIX_COLS 6
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+#define LED_BRIGHTNESS_LO 15
+#define LED_BRIGHTNESS_HI 255
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D7
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 15 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 12
+#define RGBLIGHT_SAT_STEP 255
+#define RGBLIGHT_VAL_STEP 12
+
+#define RGB_MIDI
+#define RGBW_BB_TWI
+
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/*
+ * 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
+//#define DEBUG_MATRIX_SCAN_RATE
+
+#endif
diff --git a/keyboards/ergodox_ez/ergodox_ez.c b/keyboards/ergodox/ez/ez.c
index f0558d9f2..039e4c6bb 100644
--- a/keyboards/ergodox_ez/ergodox_ez.c
+++ b/keyboards/ergodox/ez/ez.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ez.h"
#include "i2cmaster.h"
bool i2c_initialized = 0;
@@ -16,10 +16,10 @@ void matrix_init_kb(void) {
// unused pins - C7, D4, D5, D7, E6
// set as input with internal pull-ip enabled
DDRC &= ~(1<<7);
- DDRD &= ~(1<<7 | 1<<5 | 1<<4);
+ DDRD &= ~(1<<5 | 1<<4);
DDRE &= ~(1<<6);
PORTC |= (1<<7);
- PORTD |= (1<<7 | 1<<5 | 1<<4);
+ PORTD |= (1<<5 | 1<<4);
PORTE |= (1<<6);
ergodox_blink_all_leds();
@@ -51,6 +51,10 @@ uint8_t init_mcp23018(void) {
mcp23018_status = 0x20;
// I2C subsystem
+
+ uint8_t sreg_prev;
+ sreg_prev=SREG;
+ cli();
if (i2c_initialized == 0) {
i2c_init(); // on pins D(1,0)
i2c_initialized++;
@@ -79,7 +83,30 @@ uint8_t init_mcp23018(void) {
out:
i2c_stop();
+ SREG=sreg_prev;
+
return mcp23018_status;
}
-
+#ifdef ONEHAND_ENABLE
+__attribute__ ((weak))
+// swap-hands action needs a matrix to define the swap
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ /* Left hand, matrix positions */
+ {{0,13}, {1,13}, {2,13}, {3,13}, {4,13}, {5,13}},
+ {{0,12}, {1,12}, {2,12}, {3,12}, {4,12}, {5,12}},
+ {{0,11}, {1,11}, {2,11}, {3,11}, {4,11}, {5,11}},
+ {{0,10}, {1,10}, {2,10}, {3,10}, {4,10}, {5,10}},
+ {{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}},
+ {{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}},
+ {{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}},
+ /* Right hand, matrix positions */
+ {{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}},
+ {{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}},
+ {{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}},
+ {{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}},
+ {{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}},
+ {{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}},
+ {{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}},
+};
+#endif
diff --git a/keyboards/ergodox_ez/ergodox_ez.h b/keyboards/ergodox/ez/ez.h
index db4ec867b..124bf850e 100644
--- a/keyboards/ergodox_ez/ergodox_ez.h
+++ b/keyboards/ergodox/ez/ez.h
@@ -119,4 +119,45 @@ inline void ergodox_led_all_set(uint8_t n)
{ k0D, k1D, k2D, k3D, k4D, KC_NO } \
}
+#define KEYMAP_80( \
+ \
+ /* left hand, spatial positions */ \
+ k00,k01,k02,k03,k04,k05,k06, \
+ k10,k11,k12,k13,k14,k15,k16, \
+ k20,k21,k22,k23,k24,k25, \
+ k30,k31,k32,k33,k34,k35,k36, \
+ k40,k41,k42,k43,k44, \
+ k55,k56, \
+ k45,k46,k54, \
+ k53,k52,k51, \
+ \
+ /* right hand, spatial positions */ \
+ k07,k08,k09,k0A,k0B,k0C,k0D, \
+ k17,k18,k19,k1A,k1B,k1C,k1D, \
+ k28,k29,k2A,k2B,k2C,k2D, \
+ k37,k38,k39,k3A,k3B,k3C,k3D, \
+ k49,k4A,k4B,k4C,k4D, \
+ k57,k58, \
+ k59,k47,k48, \
+ k5C,k5B,k5A ) \
+ \
+ /* matrix positions */ \
+ { \
+ { k00, k10, k20, k30, k40, KC_NO }, \
+ { k01, k11, k21, k31, k41, k51 }, \
+ { k02, k12, k22, k32, k42, k52 }, \
+ { k03, k13, k23, k33, k43, k53 }, \
+ { k04, k14, k24, k34, k44, k54 }, \
+ { k05, k15, k25, k35, k45, k55 }, \
+ { k06, k16, KC_NO, k36, k46, k56 }, \
+ \
+ { k07, k17, KC_NO, k37, k47, k57 }, \
+ { k08, k18, k28, k38, k48, k58 }, \
+ { k09, k19, k29, k39, k49, k59 }, \
+ { k0A, k1A, k2A, k3A, k4A, k5A }, \
+ { k0B, k1B, k2B, k3B, k4B, k5B }, \
+ { k0C, k1C, k2C, k3C, k4C, k5C }, \
+ { k0D, k1D, k2D, k3D, k4D, KC_NO } \
+ }
+
#endif
diff --git a/keyboards/ergodox_ez/i2cmaster.h b/keyboards/ergodox/ez/i2cmaster.h
index 3917b9e6c..3917b9e6c 100644
--- a/keyboards/ergodox_ez/i2cmaster.h
+++ b/keyboards/ergodox/ez/i2cmaster.h
diff --git a/keyboards/ergodox/ez/keymaps/profet_80/ergodox80.png b/keyboards/ergodox/ez/keymaps/profet_80/ergodox80.png
new file mode 100644
index 000000000..66b9752eb
--- /dev/null
+++ b/keyboards/ergodox/ez/keymaps/profet_80/ergodox80.png
Binary files differ
diff --git a/keyboards/ergodox/ez/keymaps/profet_80/keymap.c b/keyboards/ergodox/ez/keymaps/profet_80/keymap.c
new file mode 100644
index 000000000..505ff2972
--- /dev/null
+++ b/keyboards/ergodox/ez/keymaps/profet_80/keymap.c
@@ -0,0 +1,183 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd |
+ * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | App | LGui | | Alt |Ctrl/Esc|
+ * ,------|------|------| |------+--------+------.
+ * | 1 | 2 | Home | | PgUp | 3 | 4 |
+ * |------|------|------| |------|--------|------|
+ * | Space| BkSp | End | | PgDn | Tab |Enter |
+ * `--------------------' `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = KEYMAP_80( // layer 0 : default
+ // left hand
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
+ KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
+ KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
+ LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
+ ALT_T(KC_APP), KC_LGUI,
+ KC_1, KC_2, KC_HOME,
+ KC_SPC,KC_BSPC,KC_END,
+ // right hand
+ KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
+ MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
+ KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
+ KC_LALT, CTL_T(KC_ESC),
+ KC_PGUP,KC_3, KC_4,
+ KC_PGDN,KC_TAB, KC_ENT
+ ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | . | 0 | = | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * |------|------|------| |------|------|------|
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP_80(
+ // left hand
+ M(0), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+ KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+ KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
+ KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
+ KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | MsUp | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Prev | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+----------.
+ * | | | | | | | |
+ * |------|------|------| |------|------|----------|
+ * | | | | | | |BrwserBack|
+ * `--------------------' `------------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP_80(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ 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) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboards/ergodox/ez/keymaps/profet_80/readme.md b/keyboards/ergodox/ez/keymaps/profet_80/readme.md
new file mode 100644
index 000000000..b6bbb86d2
--- /dev/null
+++ b/keyboards/ergodox/ez/keymaps/profet_80/readme.md
@@ -0,0 +1,10 @@
+# ErgoDox 80 Default Configuration
+
+This is based on the default Ergodox EZ keymap.
+The difference is that this keymap supports 80 key layouts.
+If you own an 80 key Ergodox, use this as an example to get your desired keymap.
+
+**NOTE:** This layout is not physically supported by the Ergodox EZ.
+
+
+![Default80](ergodox80.png)
diff --git a/keyboards/ergodox/ez/keymaps/steno/Makefile b/keyboards/ergodox/ez/keymaps/steno/Makefile
new file mode 100644
index 000000000..b6fb9b1a8
--- /dev/null
+++ b/keyboards/ergodox/ez/keymaps/steno/Makefile
@@ -0,0 +1,3 @@
+VIRTSER_ENABLE = yes
+# Not enough interupts, so something has to go
+MOUSEKEY_ENABLE = no
diff --git a/keyboards/ergodox/ez/keymaps/steno/keymap.c b/keyboards/ergodox/ez/keymaps/steno/keymap.c
new file mode 100644
index 000000000..3e9830905
--- /dev/null
+++ b/keyboards/ergodox/ez/keymaps/steno/keymap.c
@@ -0,0 +1,324 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "sendchar.h"
+#include "virtser.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+#define TXBOLT 3 // TxBolt Steno Virtual Serial
+#define TXBOLT2 4 // TxBolt Steno Virtual Serial Alternative Layout
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Del | Q | W | E | R | T | L1 | | TX | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | | BOLT |------+------+------+------+------+--------|
+ * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd |
+ * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | App | LGui | | Alt |Ctrl/Esc|
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * | Space|Backsp|------| |------| Tab |Enter |
+ * | |ace | End | | PgDn | | |
+ * `--------------------' `----------------------'
+ */
+// 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_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
+ KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
+ KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
+ LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
+ ALT_T(KC_APP), KC_LGUI,
+ KC_HOME,
+ KC_SPC,KC_BSPC,KC_END,
+ // right hand
+ KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ TG(TXBOLT), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
+ MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
+ KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
+ KC_LALT, CTL_T(KC_ESC),
+ KC_PGUP,
+ KC_PGDN,KC_TAB, KC_ENT
+ ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | . | 0 | = | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+ // left hand
+ M(0), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+ KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+ KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
+ KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
+ KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | RESET | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | MsUp | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Prev | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | |Brwser|
+ * | | |------| |------| |Back |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+ RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_WBAK
+),
+// TxBolt Codes
+#define Sl 0b00000001
+#define Tl 0b00000010
+#define Kl 0b00000100
+#define Pl 0b00001000
+#define Wl 0b00010000
+#define Hl 0b00100000
+#define Rl 0b01000001
+#define Al 0b01000010
+#define Ol 0b01000100
+#define X 0b01001000
+#define Er 0b01010000
+#define Ur 0b01100000
+#define Fr 0b10000001
+#define Rr 0b10000010
+#define Pr 0b10000100
+#define Br 0b10001000
+#define Lr 0b10010000
+#define Gr 0b10100000
+#define Tr 0b11000001
+#define Sr 0b11000010
+#define Dr 0b11000100
+#define Zr 0b11001000
+#define NM 0b11010000
+#define GRPMASK 0b11000000
+#define GRP0 0b00000000
+#define GRP1 0b01000000
+#define GRP2 0b10000000
+#define GRP3 0b11000000
+/* Keymap 3: TxBolt (Serial)
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | BKSPC | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | # | # | # | # | # | | | | # | # | # | # | # | # |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | S | T | P | H | * |------| |------| * | F | P | L | T | D |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | S | K | W | R | * | | | | * | R | B | G | S | Z |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | A | O |------| |------| E | U |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// TxBolt over Serial
+[TXBOLT] = KEYMAP(
+ KC_BSPC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, M(NM), M(NM), M(NM), M(NM), M(NM), KC_NO,
+ KC_NO, M(Sl), M(Tl), M(Pl), M(Hl), M(X),
+ KC_NO, M(Sl), M(Kl), M(Wl), M(Rl), M(X), KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO,
+ KC_NO,
+ M(Al), M(Ol), KC_NO,
+ // right hand
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, M(NM), M(NM), M(NM), M(NM), M(NM), M(NM),
+ M(X), M(Fr), M(Pr), M(Lr), M(Tr), M(Dr),
+ KC_NO, M(X), M(Rr), M(Br), M(Gr), M(Sr), M(Zr),
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO,
+ KC_NO,
+ KC_NO, M(Er), M(Ur)
+),
+/* Keymap 4: TxBolt (Serial) Alternative
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | # | # | # | # | # | | | | # | # | # | # | # | # |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | S | T | P | H | * | | | | * | F | P | L | T | D |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | S | K | W | R | * |------| |------| * | R | B | G | S | Z |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | A | O | | E | U | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// TxBolt over Serial
+[TXBOLT2] = KEYMAP(
+ KC_NO, M(NM), M(NM), M(NM), M(NM), M(NM), KC_NO,
+ KC_NO, M(Sl), M(Tl), M(Pl), M(Hl), M(X), KC_NO,
+ KC_NO, M(Sl), M(Kl), M(Wl), M(Rl), M(X),
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, M(Al), M(Ol),
+ KC_NO, KC_NO,
+ KC_NO,
+ KC_NO, KC_NO, KC_NO,
+ // right hand
+ KC_NO, M(NM), M(NM), M(NM), M(NM), M(NM), M(NM),
+ KC_TRNS, M(X), M(Fr), M(Pr), M(Lr), M(Tr), M(Dr),
+ M(X), M(Rr), M(Br), M(Gr), M(Sr), M(Zr),
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ M(Er), M(Ur), KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO,
+ KC_NO,
+ KC_NO, KC_NO, KC_NO
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
+};
+
+uint8_t chord[4] = {0,0,0,0};
+uint8_t pressed_count = 0;
+
+void send_chord(void)
+{
+ for(uint8_t i = 0; i < 4; i++)
+ {
+ if(chord[i])
+ virtser_send(chord[i]);
+ }
+ virtser_send(0);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record)
+{
+ // We need to track keypresses in all modes, in case the user
+ // changes mode whilst pressing other keys.
+ if (record->event.pressed)
+ pressed_count++;
+ else
+ pressed_count--;
+ return true;
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+
+ if (record->event.pressed) {
+ uint8_t grp = (id & GRPMASK) >> 6;
+ chord[grp] |= id;
+ }
+ else {
+ if (pressed_count == 0) {
+ send_chord();
+ chord[0] = chord[1] = chord[2] = chord[3] = 0;
+ }
+ }
+ 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) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboards/ergodox/ez/keymaps/steno/readme.md b/keyboards/ergodox/ez/keymaps/steno/readme.md
new file mode 100644
index 000000000..d67cde2a3
--- /dev/null
+++ b/keyboards/ergodox/ez/keymaps/steno/readme.md
@@ -0,0 +1,92 @@
+# ErgoDox EZ Steno Configuration
+
+This layout has a layer that uses the TxBolt Stenograph protocol over a Virtual Serial port. It requires something like Plover in order to function.
+
+In Plover, you can select TX Bolt as the Stenotype Machine, and find the COM port that was assigned. In this way, your regular keyboard will still function normally, and you can switch back and forth between the Steno and Keyboard layers.
+
+<pre><code>
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Del | Q | W | E | R | T | L1 | | TX | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | | BOLT |------+------+------+------+------+--------|
+ * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd |
+ * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | App | LGui | | Alt |Ctrl/Esc|
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * | Space|Backsp|------| |------| Tab |Enter |
+ * | |ace | End | | PgDn | | |
+ * `--------------------' `----------------------'
+ */
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | . | 0 | = | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+/* Keymap 2: Media keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | RESET | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | |------| |------| | | | | | Play |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Prev | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | |VolUp |VolDn | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | |Brwser|
+ * | | |------| |------| |Back |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+/* Keymap 3: TxBolt (Serial)
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | BKSPC | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | # | # | # | # | # | | | | # | # | # | # | # | # |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | S | T | P | H | * |------| |------| * | F | P | L | T | D |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | S | K | W | R | * | | | | * | R | B | G | S | Z |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | A | O |------| |------| E | U |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+</code></pre>
diff --git a/keyboards/ergodox_ez/matrix.c b/keyboards/ergodox/ez/matrix.c
index dc29cf5cd..43f515259 100644
--- a/keyboards/ergodox_ez/matrix.c
+++ b/keyboards/ergodox/ez/matrix.c
@@ -33,7 +33,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "debug.h"
#include "util.h"
#include "matrix.h"
-#include "ergodox_ez.h"
+#include "ez.h"
#include "i2cmaster.h"
#ifdef DEBUG_MATRIX_SCAN_RATE
#include "timer.h"
@@ -121,7 +121,7 @@ void matrix_init(void)
matrix_scan_count = 0;
#endif
- matrix_init_kb();
+ matrix_init_quantum();
}
diff --git a/keyboards/ergodox_ez/Makefile b/keyboards/ergodox/ez/rules.mk
index 54edaed6d..893cfa7a8 100644
--- a/keyboards/ergodox_ez/Makefile
+++ b/keyboards/ergodox/ez/rules.mk
@@ -70,17 +70,11 @@ OPT_DEFS += -DBOOTLOADER_SIZE=512
# Build Options
# comment out to disable the options.
#
-BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= no # Console for debug(+400)
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
-CUSTOM_MATRIX ?= yes # Custom matrix file for the ErgoDox EZ
-SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
-NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-MIDI_ENABLE ?= no # MIDI controls
-UNICODE_ENABLE ?= yes # Unicode
+
+SLEEP_LED_ENABLE = no
+API_SYSEX_ENABLE ?= yes
+RGBLIGHT_ENABLE ?= yes
ifndef QUANTUM_DIR
- include ../../Makefile
+ include ../../../Makefile
endif
diff --git a/keyboards/ergodox_ez/twimaster.c b/keyboards/ergodox/ez/twimaster.c
index f91c08e6e..f91c08e6e 100644
--- a/keyboards/ergodox_ez/twimaster.c
+++ b/keyboards/ergodox/ez/twimaster.c
diff --git a/keyboards/ergodox_ez/keymaps/german-manuneo/compile_keymap.py b/keyboards/ergodox/ez/util/compile_keymap.py
index 7076a6ecb..7076a6ecb 100644
--- a/keyboards/ergodox_ez/keymaps/german-manuneo/compile_keymap.py
+++ b/keyboards/ergodox/ez/util/compile_keymap.py
diff --git a/keyboards/ergodox_ez/util/readme.md b/keyboards/ergodox/ez/util/readme.md
index 26c5e5d99..26c5e5d99 100644
--- a/keyboards/ergodox_ez/util/readme.md
+++ b/keyboards/ergodox/ez/util/readme.md
diff --git a/keyboards/infinity_chibios/MEMO.txt b/keyboards/ergodox/infinity/MEMO.txt
index e2886aa00..e2886aa00 100644
--- a/keyboards/infinity_chibios/MEMO.txt
+++ b/keyboards/ergodox/infinity/MEMO.txt
diff --git a/keyboards/ergodox/infinity/Makefile b/keyboards/ergodox/infinity/Makefile
new file mode 100644
index 000000000..191c6bb66
--- /dev/null
+++ b/keyboards/ergodox/infinity/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/infinity_chibios/bootloader_defs.h b/keyboards/ergodox/infinity/bootloader_defs.h
index c67153be6..c67153be6 100644
--- a/keyboards/infinity_chibios/bootloader_defs.h
+++ b/keyboards/ergodox/infinity/bootloader_defs.h
diff --git a/keyboards/infinity_ergodox/chconf.h b/keyboards/ergodox/infinity/chconf.h
index d59c35eb6..d59c35eb6 100644
--- a/keyboards/infinity_ergodox/chconf.h
+++ b/keyboards/ergodox/infinity/chconf.h
diff --git a/keyboards/infinity_ergodox/config.h b/keyboards/ergodox/infinity/config.h
index d24ee0f05..9e264083b 100644
--- a/keyboards/infinity_ergodox/config.h
+++ b/keyboards/ergodox/infinity/config.h
@@ -15,8 +15,10 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#ifndef INFINITY_ERGODOX_CONFIG_H
+#define INFINITY_ERGODOX_CONFIG_H
+
+#include "../config.h"
/* USB Device descriptor parameter */
@@ -35,25 +37,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_COLS 5
#define LOCAL_MATRIX_ROWS 9
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+#define LED_BRIGHTNESS_LO 15
+#define LED_BRIGHTNESS_HI 255
+
/* define if matrix has ghost */
//#define MATRIX_HAS_GHOST
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-//#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-//#define LOCKING_RESYNC_ENABLE
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/* Keymap for Infiity prototype */
-#define INFINITY_PROTOTYPE
-
#define SERIAL_LINK_BAUD 562500
#define SERIAL_LINK_THREAD_PRIORITY (NORMALPRIO - 1)
// The visualizer needs gfx thread priorities
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h
index 2ea73f1fb..2ea73f1fb 100644
--- a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h
+++ b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/board_IS31FL3731C.h
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/driver.mk b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/driver.mk
index f32d0d868..f32d0d868 100644
--- a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/driver.mk
+++ b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/driver.mk
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c
index 1d21f0c49..1d21f0c49 100644
--- a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c
+++ b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_IS31FL3731C.c
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h
index bb28ad775..bb28ad775 100644
--- a/keyboards/infinity_ergodox/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h
+++ b/keyboards/ergodox/infinity/drivers/gdisp/IS31FL3731C/gdisp_lld_config.h
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/driver.mk b/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/driver.mk
index 16c3f80f5..16c3f80f5 100644
--- a/keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/driver.mk
+++ b/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/driver.mk
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c b/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/emulator_lcd.c
index babfe2b36..babfe2b36 100644
--- a/keyboards/infinity_ergodox/drivers/gdisp/emulator_lcd/emulator_lcd.c
+++ b/keyboards/ergodox/infinity/drivers/gdisp/emulator_lcd/emulator_lcd.c
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/emulator_led/driver.mk b/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/driver.mk
index 255434432..255434432 100644
--- a/keyboards/infinity_ergodox/drivers/gdisp/emulator_led/driver.mk
+++ b/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/driver.mk
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/emulator_led/emulator_led.c b/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/emulator_led.c
index b0ebcdc47..b0ebcdc47 100644
--- a/keyboards/infinity_ergodox/drivers/gdisp/emulator_led/emulator_led.c
+++ b/keyboards/ergodox/infinity/drivers/gdisp/emulator_led/emulator_led.c
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/board_ST7565.h
index 290571ce5..290571ce5 100644
--- a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/board_ST7565.h
+++ b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/board_ST7565.h
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/driver.mk b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/driver.mk
index 889a1a031..889a1a031 100644
--- a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/driver.mk
+++ b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/driver.mk
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c
index c33aea81a..c33aea81a 100644
--- a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c
+++ b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_ST7565.c
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_config.h
index 48587b9e1..48587b9e1 100644
--- a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/gdisp_lld_config.h
+++ b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/gdisp_lld_config.h
diff --git a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/st7565.h b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/st7565.h
index 48636b33d..48636b33d 100644
--- a/keyboards/infinity_ergodox/drivers/gdisp/st7565ergodox/st7565.h
+++ b/keyboards/ergodox/infinity/drivers/gdisp/st7565ergodox/st7565.h
diff --git a/keyboards/infinity_ergodox/gfxconf.h b/keyboards/ergodox/infinity/gfxconf.h
index 8caa577b7..8caa577b7 100644
--- a/keyboards/infinity_ergodox/gfxconf.h
+++ b/keyboards/ergodox/infinity/gfxconf.h
diff --git a/keyboards/infinity_ergodox/halconf.h b/keyboards/ergodox/infinity/halconf.h
index 55dd5e88d..55dd5e88d 100644
--- a/keyboards/infinity_ergodox/halconf.h
+++ b/keyboards/ergodox/infinity/halconf.h
diff --git a/keyboards/infinity_ergodox/infinity_ergodox.c b/keyboards/ergodox/infinity/infinity.c
index 87ed40fab..02db67eaf 100644
--- a/keyboards/infinity_ergodox/infinity_ergodox.c
+++ b/keyboards/ergodox/infinity/infinity.c
@@ -1,8 +1,10 @@
-#include "infinity_ergodox.h"
+#include "infinity.h"
#include "ch.h"
#include "hal.h"
#include "serial_link/system/serial_link.h"
+#ifdef VISUALIZER_ENABLE
#include "lcd_backlight.h"
+#endif
void init_serial_link_hal(void) {
PORTA->PCR[1] = PORTx_PCRn_PE | PORTx_PCRn_PS | PORTx_PCRn_PFE | PORTx_PCRn_MUX(2);
@@ -36,7 +38,6 @@ void init_serial_link_hal(void) {
// Using a higher pre-scalar without flicker is possible but FTM0_MOD will need to be reduced
// Which will reduce the brightness range
#define PRESCALAR_DEFINE 0
-
void lcd_backlight_hal_init(void) {
// Setup Backlight
SIM->SCGC6 |= SIM_SCGC6_FTM0;
@@ -74,3 +75,84 @@ void lcd_backlight_hal_color(uint16_t r, uint16_t g, uint16_t b) {
CHANNEL_GREEN.CnV = g;
CHANNEL_BLUE.CnV = b;
}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+ // The backlight always has to be initialized, otherwise it will stay lit
+#ifndef VISUALIZER_ENABLE
+ lcd_backlight_hal_init();
+#endif
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+void ergodox_board_led_on(void){
+}
+
+void ergodox_right_led_1_on(void){
+}
+
+void ergodox_right_led_2_on(void){
+}
+
+void ergodox_right_led_3_on(void){
+}
+
+void ergodox_right_led_on(uint8_t led){
+}
+
+void ergodox_board_led_off(void){
+}
+
+void ergodox_right_led_1_off(void){
+}
+
+void ergodox_right_led_2_off(void){
+}
+
+void ergodox_right_led_3_off(void){
+}
+
+void ergodox_right_led_off(uint8_t led){
+}
+
+#ifdef ONEHAND_ENABLE
+__attribute__ ((weak))
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{0, 9}, {1, 9}, {2, 9}, {3, 9}, {4, 9}},
+ {{0, 10}, {1, 10}, {2, 10}, {3, 10}, {4, 10}},
+ {{0, 11}, {1, 11}, {2, 11}, {3, 11}, {4, 11}},
+ {{0, 12}, {1, 12}, {2, 12}, {3, 12}, {4, 12}},
+ {{0, 13}, {1, 13}, {2, 13}, {3, 13}, {4, 13}},
+ {{0, 14}, {1, 14}, {2, 14}, {3, 14}, {4, 14}},
+ {{0, 15}, {1, 15}, {2, 15}, {3, 15}, {4, 15}},
+ {{0, 16}, {1, 16}, {2, 16}, {3, 16}, {4, 16}},
+ {{0, 17}, {1, 17}, {2, 17}, {3, 17}, {4, 17}},
+ {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}},
+ {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}},
+ {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}},
+ {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}},
+ {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}},
+ {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}},
+ {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}},
+ {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}},
+ {{0, 8}, {1, 8}, {2, 8}, {3, 8}, {4, 8}},
+};
+#endif
diff --git a/keyboards/ergodox/infinity/infinity.h b/keyboards/ergodox/infinity/infinity.h
new file mode 100644
index 000000000..fec9e565c
--- /dev/null
+++ b/keyboards/ergodox/infinity/infinity.h
@@ -0,0 +1,110 @@
+#ifndef KEYBOARDS_ERGODOX_INFINITY_INFINITY_H_
+#define KEYBOARDS_ERGODOX_INFINITY_INFINITY_H_
+
+#include "quantum.h"
+
+void ergodox_board_led_on(void);
+void ergodox_right_led_1_on(void);
+void ergodox_right_led_2_on(void);
+void ergodox_right_led_3_on(void);
+void ergodox_right_led_on(uint8_t led);
+
+void ergodox_board_led_off(void);
+void ergodox_right_led_1_off(void);
+void ergodox_right_led_2_off(void);
+void ergodox_right_led_3_off(void);
+void ergodox_right_led_off(uint8_t led);
+
+inline void ergodox_led_all_on(void)
+{
+ ergodox_board_led_on();
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+}
+
+inline void ergodox_led_all_off(void)
+{
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+}
+
+inline void ergodox_right_led_1_set(uint8_t n){
+ if (n) {
+ ergodox_right_led_1_on();
+ } else {
+ ergodox_right_led_1_off();
+ }
+}
+
+inline void ergodox_right_led_2_set(uint8_t n){
+ if (n) {
+ ergodox_right_led_2_on();
+ } else {
+ ergodox_right_led_2_off();
+ }
+}
+
+inline void ergodox_right_led_3_set(uint8_t n){
+ if (n) {
+ ergodox_right_led_3_on();
+ } else {
+ ergodox_right_led_3_off();
+ }
+}
+
+inline void ergodox_right_led_set(uint8_t led, uint8_t n){
+ if (n) {
+ ergodox_right_led_on(led);
+ } else {
+ ergodox_right_led_off(led);
+ }
+}
+
+inline void ergodox_led_all_set(uint8_t n) {
+ ergodox_right_led_1_set(n);
+ ergodox_right_led_2_set(n);
+ ergodox_right_led_3_set(n);
+}
+
+#define KEYMAP( \
+ A80, A70, A60, A50, A40, A30, A20, \
+ A81, A71, A61, A51, A41, A31, A21, \
+ A82, A72, A62, A52, A42, A32, \
+ A83, A73, A63, A53, A43, A33, A23, \
+ A84, A74, A64, A54, A44, \
+ A13, A03, \
+ A04, \
+ A34, A24, A14, \
+ B20, B30, B40, B50, B60, B70, B80, \
+ B21, B31, B41, B51, B61, B71, B81, \
+ B32, B42, B52, B62, B72, B82, \
+ B23, B33, B43, B53, B63, B73, B83, \
+ B44, B54, B64, B74, B84, \
+ B03, B13, \
+ B04, \
+ B14, B24, B34 \
+) { \
+ { KC_NO, KC_NO, KC_NO, A03, A04 }, \
+ { KC_NO, KC_NO, KC_NO, A13, A14 }, \
+ { A20, A21, KC_NO, A23, A24 }, \
+ { A30, A31, A32, A33, A34 }, \
+ { A40, A41, A42, A43, A44 }, \
+ { A50, A51, A52, A53, A54 }, \
+ { A60, A61, A62, A63, A64 }, \
+ { A70, A71, A72, A73, A74 }, \
+ { A80, A81, A82, A83, A84 }, \
+ { KC_NO, KC_NO, KC_NO, B03, B04 }, \
+ { KC_NO, KC_NO, KC_NO, B13, B14 }, \
+ { B20, B21, KC_NO, B23, B24 }, \
+ { B30, B31, B32, B33, B34 }, \
+ { B40, B41, B42, B43, B44 }, \
+ { B50, B51, B52, B53, B54 }, \
+ { B60, B61, B62, B63, B64 }, \
+ { B70, B71, B72, B73, B74 }, \
+ { B80, B81, B82, B83, B84 } \
+}
+
+#endif /* KEYBOARDS_ERGODOX_INFINITY_INFINITY_H_ */
diff --git a/keyboards/ergodox/infinity/led.c b/keyboards/ergodox/infinity/led.c
new file mode 100644
index 000000000..8175c1c5c
--- /dev/null
+++ b/keyboards/ergodox/infinity/led.c
@@ -0,0 +1,26 @@
+/*
+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 "hal.h"
+
+#include "led.h"
+
+
+void led_set(uint8_t usb_led) {
+ //TODO: Add led emulation if there's no customized visualization
+ (void)usb_led;
+}
diff --git a/keyboards/infinity_ergodox/matrix.c b/keyboards/ergodox/infinity/matrix.c
index 2b806cd64..1fda90484 100644
--- a/keyboards/infinity_ergodox/matrix.c
+++ b/keyboards/ergodox/infinity/matrix.c
@@ -63,6 +63,8 @@ void matrix_init(void)
memset(matrix, 0, MATRIX_ROWS);
memset(matrix_debouncing, 0, LOCAL_MATRIX_ROWS);
+
+ matrix_init_quantum();
}
uint8_t matrix_scan(void)
@@ -127,6 +129,7 @@ uint8_t matrix_scan(void)
}
debouncing = false;
}
+ matrix_scan_quantum();
return 1;
}
diff --git a/keyboards/infinity_ergodox/mcuconf.h b/keyboards/ergodox/infinity/mcuconf.h
index f6730b99c..f6730b99c 100644
--- a/keyboards/infinity_ergodox/mcuconf.h
+++ b/keyboards/ergodox/infinity/mcuconf.h
diff --git a/keyboards/infinity_ergodox/Makefile b/keyboards/ergodox/infinity/rules.mk
index 7edc03d8c..473a6dfec 100644
--- a/keyboards/infinity_ergodox/Makefile
+++ b/keyboards/ergodox/infinity/rules.mk
@@ -52,34 +52,28 @@ ARMV = 7
# Vector table for application
# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
-OPT_DEFS = -DCORTEX_VTOR_INIT=0x00002000
+OPT_DEFS += -DCORTEX_VTOR_INIT=0x00002000
# Build Options
# comment out to disable the options.
#
-BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration
-## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
-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
-SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
-NKRO_ENABLE ?= yes # USB Nkey Rollover
CUSTOM_MATRIX ?= yes # Custom matrix file
SERIAL_LINK_ENABLE = yes
-VISUALIZER_ENABLE ?= yes
+VISUALIZER_ENABLE ?= no #temporarily disabled to make everything compile
LCD_ENABLE ?= yes
LED_ENABLE ?= yes
LCD_BACKLIGHT_ENABLE ?= yes
+MIDI_ENABLE = no
+RGBLIGHT_ENABLE = no
+
+ifndef QUANTUM_DIR
+ include ../../../Makefile
+endif
ifdef LCD_ENABLE
-include drivers/gdisp/st7565ergodox/driver.mk
+include $(SUBPROJECT_PATH)/drivers/gdisp/st7565ergodox/driver.mk
endif
ifdef LED_ENABLE
-include drivers/gdisp/IS31FL3731C/driver.mk
+include $(SUBPROJECT_PATH)/drivers/gdisp/IS31FL3731C/driver.mk
endif
-
-ifndef QUANTUM_DIR
- include ../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/ergodox_ez/keymaps/ab/Makefile b/keyboards/ergodox/keymaps/ab/Makefile
index b673c5ce5..b673c5ce5 100644
--- a/keyboards/ergodox_ez/keymaps/ab/Makefile
+++ b/keyboards/ergodox/keymaps/ab/Makefile
diff --git a/keyboards/ergodox_ez/keymaps/ab/keyboard-layout.json b/keyboards/ergodox/keymaps/ab/keyboard-layout.json
index e2badad4d..e2badad4d 100644
--- a/keyboards/ergodox_ez/keymaps/ab/keyboard-layout.json
+++ b/keyboards/ergodox/keymaps/ab/keyboard-layout.json
diff --git a/keyboards/ergodox_ez/keymaps/ab/keyboard-layout.png b/keyboards/ergodox/keymaps/ab/keyboard-layout.png
index 740684461..740684461 100644
--- a/keyboards/ergodox_ez/keymaps/ab/keyboard-layout.png
+++ b/keyboards/ergodox/keymaps/ab/keyboard-layout.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/ab/keymap.c b/keyboards/ergodox/keymaps/ab/keymap.c
index df6f33460..7938c9da3 100644
--- a/keyboards/ergodox_ez/keymaps/ab/keymap.c
+++ b/keyboards/ergodox/keymaps/ab/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/ab/readme.md b/keyboards/ergodox/keymaps/ab/readme.md
index 6b1ac2be3..6b1ac2be3 100644
--- a/keyboards/ergodox_ez/keymaps/ab/readme.md
+++ b/keyboards/ergodox/keymaps/ab/readme.md
diff --git a/keyboards/ergodox/keymaps/absenth/absenth_highres.png b/keyboards/ergodox/keymaps/absenth/absenth_highres.png
new file mode 100644
index 000000000..c07aa8803
--- /dev/null
+++ b/keyboards/ergodox/keymaps/absenth/absenth_highres.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/default/keymap.c b/keyboards/ergodox/keymaps/absenth/keymap.c
index b48a54a43..ded668e13 100644
--- a/keyboards/ergodox_ez/keymaps/default/keymap.c
+++ b/keyboards/ergodox/keymaps/absenth/keymap.c
@@ -1,6 +1,7 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
+#include "version.h"
#define BASE 0 // default layer
#define SYMB 1 // symbols
@@ -14,9 +15,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd |
+ * | BkSp | A/L2 | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd |
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
- * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
+ * | LS/PO |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RS/PC |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
* `----------------------------------' `----------------------------------'
@@ -34,8 +35,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// left hand
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
- KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
- KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
+ KC_BSPC, LT(MDIA, KC_A), KC_S, KC_D, KC_F, KC_G,
+ KC_LSPO, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
ALT_T(KC_APP), KC_LGUI,
KC_HOME,
@@ -44,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
- MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
+ MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSPC,
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
KC_LALT, CTL_T(KC_ESC),
KC_PGUP,
@@ -99,7 +100,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | MsUp | | | | | | | | | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
+ * | | |MsLeft|MsDown|MsRght| |------| |------| left | down | up | down | | Play |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | | Prev | Next | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
@@ -109,7 +110,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | |Brwser|
- * | | |------| |------| |Back |
+ * | Lclk | Rclk |------| |------| |Back |
* | | | | | | | |
* `--------------------' `--------------------'
*/
@@ -122,11 +123,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
KC_TRNS, KC_TRNS,
KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_BTN1, KC_BTN2, KC_TRNS,
// right hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,KC_TRNS, KC_MPLY,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
diff --git a/keyboards/ergodox/keymaps/absenth/readme.md b/keyboards/ergodox/keymaps/absenth/readme.md
new file mode 100644
index 000000000..0c04bf417
--- /dev/null
+++ b/keyboards/ergodox/keymaps/absenth/readme.md
@@ -0,0 +1,11 @@
+# ErgoDox EZ Absenth Configuration
+
+## Changelog
+
+
+* Sept. 14, 2016 (V0.2):
+ * Added Space Cadet to Left and Right Shift. Pressing Left shift with no other key adds an "(" and pressing Right shift with no other key adds an ")"
+* Sept. 8, 2016 (V0.1):
+ * Made A key double as MEDIA Layer change when you hold it. Added mouse buttons to the large thumb buttons on the left side on the Media Layer. Added vi/vim style arrow keys on HJKL on media layer.
+
+![Absenth](absenth_highres.png)
diff --git a/keyboards/ergodox_ez/keymaps/adnw_k_o_y/keymap.c b/keyboards/ergodox/keymaps/adnw_k_o_y/keymap.c
index 052517d70..31ae4262b 100644
--- a/keyboards/ergodox_ez/keymaps/adnw_k_o_y/keymap.c
+++ b/keyboards/ergodox/keymaps/adnw_k_o_y/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
#include "keymap_german.h"
diff --git a/keyboards/ergodox_ez/keymaps/adnw_k_o_y/readme.md b/keyboards/ergodox/keymaps/adnw_k_o_y/readme.md
index f0dd3815c..f0dd3815c 100644
--- a/keyboards/ergodox_ez/keymaps/adnw_k_o_y/readme.md
+++ b/keyboards/ergodox/keymaps/adnw_k_o_y/readme.md
diff --git a/keyboards/ergodox_ez/keymaps/alexjj/keymap.c b/keyboards/ergodox/keymaps/alexjj/keymap.c
index 448f62da0..ac954ba5b 100644
--- a/keyboards/ergodox_ez/keymaps/alexjj/keymap.c
+++ b/keyboards/ergodox/keymaps/alexjj/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/alexjj/readme.md b/keyboards/ergodox/keymaps/alexjj/readme.md
index 239e32d39..239e32d39 100644
--- a/keyboards/ergodox_ez/keymaps/alexjj/readme.md
+++ b/keyboards/ergodox/keymaps/alexjj/readme.md
diff --git a/keyboards/ergodox_ez/keymaps/alexjj/rl-layout.jpg b/keyboards/ergodox/keymaps/alexjj/rl-layout.jpg
index e4e92bf46..e4e92bf46 100644
--- a/keyboards/ergodox_ez/keymaps/alexjj/rl-layout.jpg
+++ b/keyboards/ergodox/keymaps/alexjj/rl-layout.jpg
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/algernon/COPYING b/keyboards/ergodox/keymaps/algernon/COPYING
index 94a9ed024..94a9ed024 100644
--- a/keyboards/ergodox_ez/keymaps/algernon/COPYING
+++ b/keyboards/ergodox/keymaps/algernon/COPYING
diff --git a/keyboards/ergodox_ez/keymaps/algernon/Makefile b/keyboards/ergodox/keymaps/algernon/Makefile
index cd7e9e9d2..699add3dd 100644
--- a/keyboards/ergodox_ez/keymaps/algernon/Makefile
+++ b/keyboards/ergodox/keymaps/algernon/Makefile
@@ -1,13 +1,32 @@
BOOTMAGIC_ENABLE=no
COMMAND_ENABLE=no
SLEEP_LED_ENABLE=no
-UNICODE_ENABLE=no
FORCE_NKRO ?= yes
+DEBUG_ENABLE = no
+CONSOLE_ENABLE = no
+TAP_DANCE_ENABLE = yes
+KEYLOGGER_ENABLE ?= yes
+UCIS_ENABLE = yes
+MOUSEKEY_ENABLE = no
+
+AUTOLOG_ENABLE ?= no
ifeq (${FORCE_NKRO},yes)
OPT_DEFS += -DFORCE_NKRO
endif
+ifeq (${AUTOLOG_ENABLE},yes)
+KEYLOGGER_ENABLE = yes
+OPT_DEFS += -DAUTOLOG_ENABLE
+endif
+
+ifeq (${KEYLOGGER_ENABLE},yes)
+OPT_DEFS += -DKEYLOGGER_ENABLE
+CONSOLE_ENABLE = yes
+endif
+
+OPT_DEFS += -DUSER_PRINT
+
KEYMAP_VERSION = $(shell \
if [ -d "${KEYMAP_PATH}/.git" ]; then \
cd "${KEYMAP_PATH}" && git describe --abbrev=6 --dirty --always --tags --match 'v*' 2>/dev/null; \
diff --git a/keyboards/ergodox/keymaps/algernon/NEWS.md b/keyboards/ergodox/keymaps/algernon/NEWS.md
new file mode 100644
index 000000000..e11998998
--- /dev/null
+++ b/keyboards/ergodox/keymaps/algernon/NEWS.md
@@ -0,0 +1,175 @@
+<!-- -*- mode: markdown; fill-column: 8192 -*- -->
+
+## v1.9
+
+*2016-10-16*
+
+### Overall changes
+
+* `F12` was replaced by an `Fx` key, that activate the **Media** layer as a one-shot layer, and also `Alt` as a one-shot modifier.
+
+### Base layer changes
+
+* The `Media Stop` key is now a tap-dance key, and resets the device for programming on the fourth tap.
+
+### Miscellaneous
+
+* `Ï€` can now be entered with UCIS.
+* `ðŸ` can now be entered with UCIS.
+
+### Tools
+
+* The `tools/layer-notify` tool was removed, it was an example, which I don't use.
+
+#### `tools/hid-commands`
+
+* Now looks at the `DISABLE_APPSEL_START` environment value, and does not display an AppSel notification if it is non-empty.
+* Will attempt to re-program the keyboard when receiving a `reflash` command.
+* No longer tries to select Emacs 24 on `APPSEL_EMACS`, rather, it goes for any Emacs.
+* The `APPSEL_MUSIC` command now includes Kodi in the list too, as the last choice.
+
+## v1.8
+
+*2016-10-03*
+
+### ADORE
+
+* Major rearrangements were made, to reduce pinky use, and to balance out the hand usage.
+
+### Tools
+
+* The `hid-commands` tool will now display a notification when the **AppSel** layer is triggered.
+* The `log-to-heatmap.py` tool now treats the innermost keys on the bottom row as thumb keys, as far as statistics are concerned.
+
+### Miscellaneous
+
+* Fixed the **Steno** toggle key.
+
+## v1.7
+
+*2016-09-18*
+
+### Overall changes
+
+* The number row has been completely rearranged on both the **Base** and the **ADORE** layers.
+* The number/function key behavior was changed: function keys are now on the **Media**.
+* The `:`/`;` and `-`/`_` keys were put back to their thumb position on the bottom row, on both the **Base** and **ADORE** layers.
+* The bottom large keys on the inner side of each half now function as [tmux](http://tmux.github.io/) keys: the left to send the prefix, the right to send the `display-panes` key. The left also doubles as a GNU screen prefix key, and sends `C-a` when double tapped.
+* A number of functions, such as the **AppSel** layer, now require the `hid-commands` tool to be running, with the output of `hid_listen` being piped to it.
+
+### ADORE
+
+* `Y` and `X` have been swapped again.
+
+### Media/Navigation layer
+
+* The function keys are now on this layer.
+* Mouse keys have been removed.
+* Media start/stop/prev/next have been removed.
+* `Print screen` has been removed.
+* There is only one screen lock key now.
+
+### Heatmap
+
+* Fixed a few issues in the finger-stats calculation.
+* The tool now also timestamps and saves all input lines to a logfile, which it loads on start, allowing one to continue the collection after upgrading the tool.
+* The heatmap tool will now colorize the stats by default.
+* The periodic stats are now printed in a more compact format.
+
+### Tools
+
+* Added a new tool, `tools/layer-notify` that listens to layer change events on the HID console, and pops up a notification on layer changes.
+* Another new tool, `tools/text-to-log.py` has been added that converts arbitrary text to a keylogger output, which can be fed to the heatmap generator.
+* A number of features have been moved to the `tools/hid-commands` utility. These generally are OS dependent, and are easier to implement on the software side.
+
+## v1.6
+
+*2016-08-24*
+
+### Base layer changes
+
+* The parentheses & bracket keys have been merged: tapping them results in `[` or `{` (if it was shifted), double tapping leads to `(`.
+* The `:;` and `-_` keys are now available on the base layer, on their **ADORE** location, too, just below `[{(`/`]})`.
+* The `Apps` key has been replaced by `F12`.
+* The `-`/`_` is no longer a tap-dance key.
+
+### ADORE layer changes
+
+* Adjustments were made to the **ADORE** layer, to separate some inconvenient combinations.
+
+### Miscellaneous changes
+
+* `LEAD u` now starts the symbolic unicode input system, instead of the OS-one.
+* The mouse acceleration keys on the **Navigation/Media** layer have been turned into toggles: tap them once to turn them on, until tapped again. Tapping an accelerator button will turn all the others off.
+* When the **ARROW** layer is on, the *red* and *blue* LEDs light up now.
+
+### Heatmap
+
+* The built-in keylogger has been greatly enhanced, it now outputs the pressed state, and the layer (Dvorak or ADORE). As such, the `ADORE_AUTOLOG` option has been removed, instead there is `AUTOLOG_ENABLE` now, which when enabled, makes the keylogger start when the keyboard boots. It defaults to off.
+* The heatmap generator received a lot of updates.
+
+## v1.5
+
+*2016-08-12*
+
+* The **1HAND** layer has been removed.
+* A `Delete` key is now available on the right thumb cluster.
+* The **ADORE** layer received a major update, see the layout image above.
+* It is now possible to enable automatic logging for the **ADORE** layer, by setting the `ADORE_AUTOLOG` makefile variable to `yes` when compiling the keymap. It is off by default.
+* The `~` key and the `Media Next/Prev` key have been swapped on the **Base** layer.
+* On the **ARROW** layer, `Backspace` has been replaced by `Enter`.
+* There is some experimental support for entering Unicode symbols.
+
+## v1.4
+
+*2016-07-29*
+
+* When toggling the key logging on or off, the LEDs will do a little dance.
+* The keylogger is now optional, but enabled by default. Use `KEYLOGGER_ENABLE=no` on the `make` command line to disable it.
+* The `TAB`/`ARRW` key was turned into a tap-dance key, allowing one to toggle the **ARROW** layer on by double-tapping, and as such, avoid the need to hold the key.
+* The `-`/`_` key was turned into a tap-dance key too.
+* There is now a way to travel time with the keyboard, toggle the feature on by hitting `LEAD t`.
+
+## v1.3
+
+*2016-07-06*
+
+* Added support for logging keys, by pressing `LEAD d`. Also included is a tool to generate a *heatmap* out of the logs.
+* The arrow and navigation keys were rearranged again, and now require an additional key being held to activate. See the **Base** layer for an image that shows where arrows are.
+* The **experimental** layer has been redone, and is now called **ADORE**, and as such, can be enabled by `LEAD a` now.
+* Switching between Dvorak and ADORE is now persisted into EEPROM, and survives a reboot.
+
+## v1.2
+
+*2016-06-22*
+
+* The forced NKRO mode can be easily toggled off at compile-time, to make the firmware compatible with certain operating systems.
+* The `:;` key has changed behaviour: to access the `;` symbol, the key needs to be double-tapped, instead of shifted.
+* The `=` and `\` keys were swapped, `=` moved to the home row, on both the **Base** and the **experimental** layers.
+* The arrow and navigation keys were redone, they are now more accessible, but the navigation keys require an extra tap to access.
+* The **Emacs** layer is gone, replaced by a simplified **navigation and media** layer.
+* `LEAD v` types the firmware version, and the keymap version.
+* On the **experimental** layer, the `L` and `Q`, and the `K` and `G` keys were swapped.
+* The **Steno** layer gained a few more `#` and `*` keys, to make it easier on my fingers.
+
+## v1.1
+
+*2016-06-14*
+
+* The keyboard starts in NKRO mode, bootmagic and other things are disabled.
+* A **Steno** layer was added, to be used with Plover.
+* An **experimental** layer was added, something halfway between Dvorak and Capewell-Dvorak. A work in progress.
+* `LEAD y` types `\o/`.
+* Some keys on the **Base** layer have been moved around:
+ - `?` moved to the left pinky, left of `Q`.
+ - `=` shifted one row down, but `F11` stayed where it was.
+ - `-` on the left half was replaced by `Tab`.
+ - `Tab`'s original position is taken by a `Media Next`/`Media Prev` key.
+ - `:` now inputs `;` when shifted.
+* `ESC` cancels the **Hungarian** layer too, not just modifiers.
+
+## v1.0
+
+*2016-05-26*
+
+Initial version.
diff --git a/keyboards/ergodox_ez/keymaps/algernon/config.h b/keyboards/ergodox/keymaps/algernon/config.h
index 9bb1025be..9bb1025be 100644
--- a/keyboards/ergodox_ez/keymaps/algernon/config.h
+++ b/keyboards/ergodox/keymaps/algernon/config.h
diff --git a/keyboards/ergodox/keymaps/algernon/images/adore-layer.png b/keyboards/ergodox/keymaps/algernon/images/adore-layer.png
new file mode 100644
index 000000000..f6c64ca64
--- /dev/null
+++ b/keyboards/ergodox/keymaps/algernon/images/adore-layer.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/algernon/images/base-layer.png b/keyboards/ergodox/keymaps/algernon/images/base-layer.png
new file mode 100644
index 000000000..5bd0611f6
--- /dev/null
+++ b/keyboards/ergodox/keymaps/algernon/images/base-layer.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/algernon/images/heatmap.png b/keyboards/ergodox/keymaps/algernon/images/heatmap.png
new file mode 100644
index 000000000..4f55c5adf
--- /dev/null
+++ b/keyboards/ergodox/keymaps/algernon/images/heatmap.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/hun-layer.png b/keyboards/ergodox/keymaps/algernon/images/hun-layer.png
index 104a9544d..104a9544d 100644
--- a/keyboards/ergodox_ez/keymaps/algernon/images/hun-layer.png
+++ b/keyboards/ergodox/keymaps/algernon/images/hun-layer.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/nav-n-media-layer.png b/keyboards/ergodox/keymaps/algernon/images/nav-n-media-layer.png
index 16d29e124..16d29e124 100644
--- a/keyboards/ergodox_ez/keymaps/algernon/images/nav-n-media-layer.png
+++ b/keyboards/ergodox/keymaps/algernon/images/nav-n-media-layer.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/algernon/images/steno-layer.png b/keyboards/ergodox/keymaps/algernon/images/steno-layer.png
new file mode 100644
index 000000000..9a2ba55ef
--- /dev/null
+++ b/keyboards/ergodox/keymaps/algernon/images/steno-layer.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/algernon/keymap.c b/keyboards/ergodox/keymaps/algernon/keymap.c
index 2af3d5f8c..bad240337 100644
--- a/keyboards/ergodox_ez/keymaps/algernon/keymap.c
+++ b/keyboards/ergodox/keymaps/algernon/keymap.c
@@ -2,26 +2,27 @@
* algernon's ErgoDox EZ layout, please see the readme.md file!
*/
-#include "ergodox_ez.h"
+#include <stdarg.h>
+#include "ergodox.h"
#include "led.h"
#include "debug.h"
#include "action_layer.h"
#include "action_util.h"
-#include "mousekey.h"
#include "timer.h"
#include "keymap_plover.h"
+#include "eeconfig.h"
+#include "wait.h"
+#include "version.h"
/* Layers */
enum {
BASE = 0,
- EXPRM,
+ ADORE,
ARRW,
APPSEL,
HUN,
NMDIA,
- OHLFT,
- OHRGT,
PLVR,
};
@@ -32,22 +33,8 @@ enum {
// Buttons that do extra stuff
A_GUI,
A_PLVR,
- A_ESC,
A_MPN,
- // Function / number keys
- KF_1, // 1, F1
- KF_2, // 2, F2
- KF_3, // ...
- KF_4,
- KF_5,
- KF_6,
- KF_7,
- KF_8,
- KF_9,
- KF_10,
- KF_11, // =, F11
-
// Application select keys
APP_SLK, // Slack
APP_EMCS, // Emacs
@@ -55,12 +42,6 @@ enum {
APP_CHRM, // Chrome
APP_MSIC, // Music
- // Diagonal mouse movement
- A_MUL,
- A_MUR,
- A_MDL,
- A_MDR,
-
// Hungarian layer keys
HU_AA, // Ã
HU_OO, // Ó
@@ -72,12 +53,20 @@ enum {
HU_OEE, // Å
HU_UEE, // Å°
- // One-handed layout specials
- OH_BSSPC,
- OH_ENTSFT,
- OH_BASE,
- OH_LEFT,
- OH_RIGHT,
+ // number/symbol keys
+ A_1, // 1
+ A_2, // 2
+ A_3, // ...
+ A_4,
+ A_5,
+ A_6,
+ A_7,
+ A_8,
+ A_9,
+ A_0,
+
+ // Fx
+ Fx,
};
/* Fn keys */
@@ -94,7 +83,13 @@ enum {
/* Custom keycodes */
enum {
- CT_CLN = 0x7101
+ CT_CLN = 0,
+ CT_TA,
+ CT_LBP,
+ CT_RBP,
+ CT_TMUX,
+ CT_TPS,
+ CT_SR,
};
/* States & timers */
@@ -103,19 +98,18 @@ uint16_t gui_timer = 0;
uint16_t kf_timers[12];
-uint16_t oh_base_timer = 0;
-uint16_t oh_bsspc_timer = 0;
-uint16_t oh_entsft_timer = 0;
+#if KEYLOGGER_ENABLE
+# ifdef AUTOLOG_ENABLE
+bool log_enable = true;
+# else
+bool log_enable = false;
+# endif
+#endif
-#define OH_BLINK_INTERVAL 500
+bool time_travel = false;
+bool skip_leds = false;
-uint8_t oh_left_blink = 0;
-uint16_t oh_left_blink_timer = 0;
-uint8_t oh_right_blink = 0;
-uint16_t oh_right_blink_timer = 0;
-
-uint8_t ct_cln_count = 0;
-uint16_t ct_cln_timer = 0;
+static uint8_t is_adore = 0;
/* The Keymap */
@@ -124,18 +118,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Base Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
- * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | 1HND | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 |
+ * | Next/Prev | 9 | 7 @ | 5 * | 3 ^ | 1 $ | F11 | | Fx | 0 % | 2 ! | 4 # | 6 & | 8 | Plover |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
- * | Next/Prev | ' | , | . | P | Y | [ | | ] | F | G | C | R | L | \ |
- * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | Tab | A | O | E | U | I |------| |------| D | H | T | N | S | = |
- * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------|
- * | Play/Pause| / | Q | J | K | X | | | | B | M | W | V | Z | Stop |
+ * | ~ | ' | , | . | P | Y | ( | | ) | F | G | C | R | L | \ |
+ * |-----------+------+------+------+------+------| [ | | ] |------+------+------+------+------+-----------|
+ * | Tab/ARROW | A | O | E | U | I |------| |------| D | H | T | N | S | = / Arrow |
+ * |-----------+------+------+------+------+------| tmux | | tmux |------+------+------+------+------+-----------|
+ * | Play/Pause| / | Q | J | K | X | | | Pane | B | M | W | V | Z | Stop/Reset|
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
- * | | | Left | Up | : | | - | Down | Rght | | |
+ * | | | | | : | | - | | | | |
* `-----------------------------------' `-----------------------------------'
* ,-------------. ,-------------.
- * | LAlt | GUI | | MDIA | ARRW |
+ * | LAlt | GUI | | MDIA | Del |
* ,------|------|------| |------+------+------.
* | | | Ctrl | | LEAD | | |
* |Backsp|LShift|------| |------| Enter| Space|
@@ -144,71 +138,71 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[BASE] = KEYMAP(
// left hand
- KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
-,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC
-,KC_TAB ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
-,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN
-,KC_NO ,KC_NO ,KC_LEFT ,KC_UP ,CT_CLN
+ M(A_MPN) ,M(A_9) ,M(A_7) ,M(A_5) ,M(A_3) ,M(A_1) ,KC_F11
+,KC_GRV ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,TD(CT_LBP)
+,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
+,KC_MPLY ,KC_SLSH ,KC_Q ,KC_J ,KC_K ,KC_X ,TD(CT_TMUX)
+,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
,F(F_ALT),F(F_GUI)
,F(F_CTRL)
- ,KC_BSPC,F(F_SFT),M(A_ESC)
+ ,KC_BSPC,F(F_SFT),KC_ESC
// right hand
- ,M(OH_LEFT),M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
- ,KC_RBRC ,KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS
- ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL
- ,KC_RPRN ,KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,KC_MSTP
- ,KC_MINS,KC_DOWN,KC_RGHT ,KC_NO ,KC_NO
+ ,M(Fx) ,M(A_0) ,M(A_2) ,M(A_4) ,M(A_6) ,M(A_8) ,M(A_PLVR)
+ ,TD(CT_RBP),KC_F ,KC_G ,KC_C ,KC_R ,KC_L ,KC_BSLS
+ ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL
+ ,TD(CT_TPS),KC_B ,KC_M ,KC_W ,KC_V ,KC_Z ,TD(CT_SR)
+ ,KC_MINS ,KC_NO ,KC_NO ,KC_NO ,KC_NO
- ,OSL(NMDIA),OSL(ARRW)
+ ,OSL(NMDIA),KC_DEL
,KC_LEAD
,F(F_HUN) ,KC_ENT ,KC_SPC
),
-/* Keymap 1: Experimental layer
+/* Keymap 1: Adore layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
- * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 | Plvr | | 1HND | 6 F6 | 7 F7 | 8 F8 | 9 F9 | 0 F10| F11 |
+ * | Play/Pause| 9 | 7 @ | 5 * | 3 ^ | 1 $ | F11 | | Fx | 0 % | 2 ! | 4 # | 6 & | 8 | Plover |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
- * | Next/Prev | ' | , | . | P | Y | [ | | ] | L | F | C | R | J | = |
- * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | Tab | A | O | E | U | I |------| |------| D | H | T | N | S | \ |
- * |-----------+------+------+------+------+------| ( | | ) |------+------+------+------+------+-----------|
- * | Play/Pause| Z | G | V | K | X | | | | Q | M | W | B | / | Stop |
+ * | \ | X | W | C | H | F | ( | | ) | M | G | L | P | / | `~ |
+ * |-----------+------+------+------+------+------| [ | | ] |------+------+------+------+------+-----------|
+ * | Tab/Arrow | A | O | E | I | U |------| |------| D | R | T | N | S | = |
+ * |-----------+------+------+------+------+------| tmux | | tmux |------+------+------+------+------+-----------|
+ * | | Z | Q | ' | , | . | | | pane | B | K | V | Y | J | |
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
- * | | | Left | Up | : | | - | Down | Rght | | |
+ * | | | | | : | | - | | | | |
* `-----------------------------------' `-----------------------------------'
* ,-------------. ,-------------.
- * | LAlt | GUI | | MDIA | ARRW |
+ * | LAlt | GUI | | MDIA | Del |
* ,------|------|------| |------+------+------.
- * | | | Ctrl | | LEAD | | |
+ * | | | Ctrl | | HUN | | |
* |Backsp|LShift|------| |------| Enter| Space|
- * | | | ESC | | HUN | | |
+ * | | | ESC | | LEAD | | |
* `--------------------' `--------------------'
*/
-[EXPRM] = KEYMAP(
+[ADORE] = KEYMAP(
// left hand
- KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3),M(KF_4),M(KF_5),M(A_PLVR)
-,M(A_MPN) ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC
-,KC_TAB ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
-,KC_MPLY ,KC_Z ,KC_G ,KC_V ,KC_K ,KC_X ,KC_LPRN
-,KC_NO ,KC_NO ,KC_LEFT ,KC_UP ,CT_CLN
+ KC_MPLY ,M(A_9) ,M(A_7) ,M(A_5) ,M(A_3) ,M(A_1) ,KC_F11
+,KC_BSLS ,KC_X ,KC_W ,KC_C ,KC_H ,KC_F ,TD(CT_LBP)
+,TD(CT_TA) ,KC_A ,KC_O ,KC_E ,KC_I ,KC_U
+,KC_NO ,KC_Z ,KC_Q ,KC_QUOT ,KC_COMM ,KC_DOT ,TD(CT_TMUX)
+,KC_NO ,KC_NO ,KC_NO ,KC_NO ,TD(CT_CLN)
,F(F_ALT),F(F_GUI)
,F(F_CTRL)
- ,KC_BSPC,F(F_SFT),M(A_ESC)
+ ,KC_BSPC,F(F_SFT),KC_ESC
// right hand
- ,M(OH_LEFT),M(KF_6),M(KF_7),M(KF_8),M(KF_9) ,M(KF_10) ,KC_F11
- ,KC_RBRC ,KC_L ,KC_F ,KC_C ,KC_R ,KC_J ,KC_BSLS
- ,KC_D ,KC_H ,KC_T ,KC_N ,KC_S ,KC_EQL
- ,KC_RPRN ,KC_Q ,KC_M ,KC_W ,KC_B ,KC_SLSH ,KC_MSTP
- ,KC_MINS,KC_DOWN,KC_RGHT ,KC_NO ,KC_NO
-
- ,OSL(NMDIA),OSL(ARRW)
- ,KC_LEAD
- ,F(F_HUN) ,KC_ENT ,KC_SPC
+ ,M(Fx) ,M(A_0) ,M(A_2) ,M(A_4) ,M(A_6) ,M(A_8) ,M(A_PLVR)
+ ,TD(CT_RBP),KC_M ,KC_G ,KC_L ,KC_P ,KC_SLSH ,KC_GRV
+ ,KC_D ,KC_R ,KC_T ,KC_N ,KC_S ,KC_EQL
+ ,TD(CT_TPS),KC_B ,KC_K ,KC_V ,KC_Y ,KC_J ,KC_NO
+ ,KC_MINS ,KC_NO ,KC_NO ,KC_NO ,KC_NO
+
+ ,OSL(NMDIA),KC_DEL
+ ,F(F_HUN)
+ ,KC_LEAD ,KC_ENT ,KC_SPC
),
/* Keymap 2: Arrow layer
@@ -216,19 +210,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
- * | | | | | | | | | | | | | | | |
+ * | | | | | | | | | | | Home | Up | End | | |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
- * | | | | | | |------| |------| | | | | | |
+ * | | | | | | |------| |------| | Left | Down | Rght | | |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | | | | | | | | | | | | | | | |
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
- * | | | Home | PgUp | | | | PgDn | End | | |
+ * | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
- * | | |------| |------| | |
+ * | Enter| |------| |------| PgUp | PgDn |
* | | | | | | | |
* `--------------------' `--------------------'
*/
@@ -239,22 +233,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
-,KC_TRNS ,KC_TRNS ,KC_HOME ,KC_PGUP ,KC_TRNS
+,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS
,KC_TRNS
- ,KC_TRNS ,KC_TRNS ,KC_TRNS
+ ,KC_ENT ,KC_TRNS ,KC_TRNS
// right hand
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_HOME ,KC_UP ,KC_END ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS ,KC_LEFT ,KC_DOWN ,KC_RGHT ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
- ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
- ,KC_TRNS ,KC_PGDN ,KC_END ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS
,KC_TRNS
- ,KC_TRNS ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS ,KC_PGUP ,KC_PGDN
),
/* Keymap 3: Application select layer
@@ -353,141 +347,51 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 5: Navigation & Media layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
- * | MS Slow | | | | | |ScrLCK| |ScrLCK| | | | | | |
+ * | | F9 | F7 | F5 | F3 | F1 |ScrLCK| | | F10 | F2 | F4 | F6 | F8 | |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
- * | MS Normal | | Home | Up | PgUp | | | |Scroll| |MsUpL | MsUp |MsUpR | |PrintScreen|
- * |-----------+------+------+------+------+------| | | Up |------+------+------+------+------+-----------|
- * | MS Fast | | Left | Down | Right| |------| |------| |MsLeft| MsDn |MsRght| | |
- * |-----------+------+------+------+------+------| | |Scroll|------+------+------+------+------+-----------|
- * | Play/Pause| | End | Down | PgDn | | | | Down | |MsDnL | MsDn |MsDnR | | Stop |
+ * | | | | | | | | | | | | | | | |
+ * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
+ * | | | | | | |------| |------| | | | | | |
+ * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
+ * | | | | | | | | | | | | | | | |
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
- * | Mute | VlUp | | BASE | MClk |
+ * | Mute | VlUp | | BASE | |
* ,------|------|------| |------+------+------.
- * | | | VlDn | | Prev |Left |Right |
- * | SPC | Enter|------| |------| Click| Click|
- * | | | ESC | | Next | | |
+ * | | | VlDn | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
* `--------------------' `--------------------'
*/
[NMDIA] = KEYMAP(
// left hand
- KC_ACL0 ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,LGUI(KC_L)
-,KC_ACL1 ,KC_NO ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_NO
-,KC_ACL2 ,KC_NO ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO
-,KC_MPLY ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_NO
+ KC_NO ,KC_F9 ,KC_F7 ,KC_F5 ,KC_F3 ,KC_F1 ,LGUI(KC_L)
+,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_MUTE ,KC_VOLU
,KC_VOLD
- ,KC_SPC,KC_ENTER,M(A_ESC)
+ ,KC_NO ,KC_NO ,KC_TRNS
// right hand
- ,LGUI(KC_L),KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
- ,KC_WH_U ,KC_NO ,M(A_MUL),KC_MS_U ,M(A_MUR),KC_NO ,KC_PSCR
- ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_NO ,KC_NO
- ,KC_WH_D ,KC_NO ,M(A_MDL),KC_MS_D ,M(A_MDR),KC_NO ,KC_MSTP
+ ,KC_TRNS ,KC_F10 ,KC_F2 ,KC_F4 ,KC_F6 ,KC_F8 ,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_MS_BTN3
- ,KC_MPRV
- ,KC_MNXT ,KC_BTN1 ,KC_BTN2
+ ,KC_TRNS ,KC_NO
+ ,KC_NO
+ ,KC_NO ,KC_NO ,KC_NO
),
-/* Keymap 6: One-handed, left side
- *
- * ,-----------------------------------------------------.
- * | `~ | 1 F1 | 2 F2 | 3 F3 | 4 F4 | 5 F5 |A BSE|
- * |-----------+------+------+------+------+-------------|
- * | Tab | ' | , | . | P | Y | [ |
- * |-----------+------+------+------+------+------| |
- * | - | A | O | E | U | I |------|
- * |-----------+------+------+------+------+------| ( |
- * | Play/Pause| ; | Q | J | K | X | |
- * `-----------+------+------+------+------+-------------'
- * | Home | End | Down | Up | ESC |
- * `-----------------------------------'
- * ,-------------.
- * | LAlt | GUI |
- * ,------|------|------|
- * |BackSp|LShift| Ctrl |
- * | | |------|
- * |Space |Enter |OTHER |
- * `--------------------'
- */
-[OHLFT] = KEYMAP(
-// left hand
- KC_GRV ,M(KF_1) ,M(KF_2) ,M(KF_3) ,M(KF_4) ,M(KF_5) ,M(OH_BASE)
-,KC_TAB ,KC_QUOT ,KC_COMM ,KC_DOT ,KC_P ,KC_Y ,KC_LBRC
-,KC_MINS ,KC_A ,KC_O ,KC_E ,KC_U ,KC_I
-,KC_MPLY ,KC_SCLN ,KC_Q ,KC_J ,KC_K ,KC_X ,KC_LPRN
-,KC_HOME ,KC_END ,KC_DOWN ,KC_UP ,M(A_ESC)
-
- ,KC_TRNS ,KC_TRNS
- ,KC_TRNS
- ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_RIGHT)
-
- // right 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_NO ,KC_NO ,KC_NO
-
- ,KC_NO ,KC_NO
- ,KC_NO
- ,KC_NO ,KC_NO ,KC_NO
- ),
-
-/* Keymap 7: One-handed, right side
- *
- * ,-----------------------------------------------------.
- * | = F11 | 0 F10| 9 F9 | 8 F8 | 7 F7 | 6 F6 |A BSE|
- * |-----------+------+------+------+------+-------------|
- * | / | L | R | C | G | F | ] |
- * |-----------+------+------+------+------+------| |
- * | \ | S | N | T | H | D |------|
- * |-----------+------+------+------+------+------| ) |
- * | Stop | Z | V | W | M | B | |
- * `-----------+------+------+------+------+-------------'
- * | PgDn | PgUp | Right| Left | ESC |
- * `-----------------------------------'
- * ,-------------.
- * | LAlt | GUI |
- * ,------|------|------|
- * |BackSp|LShift| Ctrl |
- * | | |------|
- * |Space |Enter |OTHER |
- * `--------------------'
- */
-[OHRGT] = KEYMAP(
-// left hand
- M(KF_11) ,M(KF_10) ,M(KF_9) ,M(KF_8) ,M(KF_7) ,M(KF_6) ,M(OH_BASE)
-,KC_SLSH ,KC_L ,KC_R ,KC_C ,KC_G ,KC_F ,KC_RBRC
-,KC_BSLS ,KC_S ,KC_N ,KC_T ,KC_H ,KC_D
-,KC_MSTP ,KC_Z ,KC_V ,KC_W ,KC_M ,KC_B ,KC_RPRN
-,KC_PGDN ,KC_PGUP ,KC_RGHT ,KC_LEFT ,M(A_ESC)
-
- ,KC_TRNS ,KC_TRNS
- ,KC_TRNS
- ,M(OH_BSSPC),M(OH_ENTSFT),M(OH_LEFT)
-
- // right 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_NO ,KC_NO ,KC_NO
-
- ,KC_NO ,KC_NO
- ,KC_NO
- ,KC_NO ,KC_NO ,KC_NO
- ),
-
-/* Keymap 8: Steno for Plover
+/* Keymap 6: Steno for Plover
*
* ,--------------------------------------------------. ,--------------------------------------------------.
- * | | | | | | | BASE | | | | | | | | |
+ * | | | | | | | | | | | | | | | BASE |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | # | # | # | # | # | # | | # | # | # | # | # | # | # |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
@@ -508,7 +412,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[PLVR] = KEYMAP(
// left hand
-KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, M(A_PLVR),
+KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
KC_NO, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR,
KC_NO, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR,
@@ -518,7 +422,7 @@ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
PV_A, PV_O, KC_NO,
// right 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, M(A_PLVR),
PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD,
PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ,
@@ -539,7 +443,7 @@ const uint16_t PROGMEM fn_actions[] = {
,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL)
};
-void toggle_steno(int pressed)
+static void toggle_steno(int pressed)
{
uint8_t layer = biton32(layer_state);
@@ -562,7 +466,7 @@ void toggle_steno(int pressed)
}
}
-macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char)
+static macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char)
{
uint8_t need_shift = 0;
uint8_t hold_shift = 0;
@@ -607,46 +511,65 @@ macro_t *ang_do_hun (keyrecord_t *record, uint16_t accent, uint16_t hun_char)
return MACRO_NONE;
}
-void ang_handle_kf (keyrecord_t *record, uint8_t id)
-{
- uint8_t code = id - KF_1;
+static void ang_handle_num_row(uint8_t id, keyrecord_t *record) {
+ uint8_t idx = id - A_1;
+ uint8_t kc;
+ static bool shifted[10];
- if (record->event.pressed) {
- kf_timers[code] = timer_read ();
- } else {
- uint8_t kc;
+ if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
+ ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
+ if (record->event.pressed)
+ shifted[idx] = true;
+ }
- if (timer_elapsed (kf_timers[code]) > TAPPING_TERM) {
- // Long press
- kc = KC_F1 + code;
- } else {
- if (id == KF_11)
- kc = KC_EQL;
- else
- kc = KC_1 + code;
+ if (!shifted[idx]) {
+ kc = idx + KC_1;
+ } else {
+ switch (id) {
+ case A_8:
+ case A_9:
+ shifted[idx] = false;
+ return;
+
+ case A_7:
+ kc = KC_2;
+ break;
+ case A_5:
+ kc = KC_8;
+ break;
+ case A_3:
+ kc = KC_6;
+ break;
+ case A_1:
+ kc = KC_4;
+ break;
+
+ case A_0:
+ kc = KC_5;
+ break;
+ case A_2:
+ kc = KC_1;
+ break;
+ case A_4:
+ kc = KC_3;
+ break;
+ case A_6:
+ kc = KC_7;
+ break;
}
+ }
+ if (record->event.pressed) {
register_code (kc);
+ } else {
unregister_code (kc);
+ shifted[idx] = false;
}
}
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch(id) {
- case A_ESC:
- if (record->event.pressed) {
- if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) {
- clear_oneshot_mods ();
- } else {
- register_code (KC_ESC);
- }
- layer_off (HUN);
- } else {
- unregister_code (KC_ESC);
- }
- break;
-
case A_MPN:
if (record->event.pressed) {
if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
@@ -688,54 +611,20 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
case HU_UEE:
return ang_do_hun (record, KC_EQL, KC_U);
- /* Mouse movement */
- case A_MUL:
- if (record->event.pressed) {
- mousekey_on(KC_MS_UP);
- mousekey_on(KC_MS_LEFT);
- } else {
- mousekey_off(KC_MS_UP);
- mousekey_off(KC_MS_LEFT);
- }
- mousekey_send();
- break;
-
- case A_MUR:
- if (record->event.pressed) {
- mousekey_on(KC_MS_UP);
- mousekey_on(KC_MS_RIGHT);
- } else {
- mousekey_off(KC_MS_UP);
- mousekey_off(KC_MS_RIGHT);
- }
- mousekey_send();
- break;
-
- case A_MDL:
- if (record->event.pressed) {
- mousekey_on(KC_MS_DOWN);
- mousekey_on(KC_MS_LEFT);
- } else {
- mousekey_off(KC_MS_DOWN);
- mousekey_off(KC_MS_LEFT);
- }
- mousekey_send();
+ /* Plover base */
+ case A_PLVR:
+ toggle_steno(record->event.pressed);
break;
- case A_MDR:
+ /* Fx */
+ case Fx:
if (record->event.pressed) {
- mousekey_on(KC_MS_DOWN);
- mousekey_on(KC_MS_RIGHT);
+ set_oneshot_mods (MOD_LALT);
+ layer_on (NMDIA);
+ set_oneshot_layer (NMDIA, ONESHOT_START);
} else {
- mousekey_off(KC_MS_DOWN);
- mousekey_off(KC_MS_RIGHT);
+ clear_oneshot_layer_state (ONESHOT_PRESSED);
}
- mousekey_send();
- break;
-
- /* Plover base */
- case A_PLVR:
- toggle_steno(record->event.pressed);
break;
/* GUI & AppSel */
@@ -744,7 +633,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
register_code (KC_LGUI);
if (record->tap.count && !record->tap.interrupted) {
if (record->tap.count >= 2) {
- register_code (KC_W);
+ uprintf("CMD:appsel_start\n");
layer_on (APPSEL);
set_oneshot_layer (APPSEL, ONESHOT_START);
}
@@ -755,7 +644,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
} else {
if (record->tap.count >= 2)
{
- unregister_code (KC_W);
clear_oneshot_layer_state (ONESHOT_PRESSED);
}
gui_timer = timer_read ();
@@ -763,234 +651,312 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
break;
case APP_SLK:
- return MACRODOWN(T(S), T(L), T(A), T(C), T(K), T(ENT), END);
-
- case APP_EMCS:
- return MACRODOWN(T(E), T(M), T(A), T(C), T(S), T(ENT), END);
-
- case APP_TERM:
- return MACRODOWN(T(T), T(E), T(R), T(M), T(ENT), END);
-
- case APP_CHRM:
- return MACRODOWN(T(C), T(H), T(R), T(O), T(M), T(ENT), END);
-
- case APP_MSIC:
- return MACRODOWN(T(R), T(H), T(Y), T(T), T(H), T(M), T(B), T(O), T(X), T(ENT), END);
-
- /* Function keys */
- case KF_1 ... KF_11:
- ang_handle_kf (record, id);
+ if (record->event.pressed)
+ uprintf("CMD:appsel_slack\n");
break;
- /* 1HAND layout */
- case OH_BASE:
- if (record->event.pressed) {
- oh_base_timer = timer_read ();
- } else {
- if (timer_elapsed (oh_base_timer) > TAPPING_TERM) {
- layer_clear ();
- } else {
- return MACRO (T(APP), END);
- }
- }
+ case APP_EMCS:
+ if (record->event.pressed)
+ uprintf("CMD:appsel_emacs\n");
break;
- case OH_BSSPC:
- if (record->event.pressed) {
- oh_bsspc_timer = timer_read ();
- } else {
- if (timer_elapsed (oh_bsspc_timer) > TAPPING_TERM) {
- return MACRO (T(BSPC), END);
- } else {
- return MACRO (T(SPC), END);
- }
- }
+ case APP_TERM:
+ if (record->event.pressed)
+ uprintf("CMD:appsel_term\n");
break;
- case OH_ENTSFT:
- if (record->event.pressed) {
- oh_entsft_timer = timer_read ();
- } else {
- if (timer_elapsed (oh_entsft_timer) > TAPPING_TERM) {
- if (keyboard_report->mods & MOD_BIT(KC_LSFT))
- unregister_code (KC_LSFT);
- else
- register_code (KC_LSFT);
- } else {
- return MACRO (T(ENT), END);
- }
- }
+ case APP_CHRM:
+ if (record->event.pressed)
+ uprintf("CMD:appsel_chrome\n");
break;
- case OH_LEFT:
- if (record->event.pressed) {
- layer_move (OHLFT);
- oh_left_blink = 1;
- oh_left_blink_timer = timer_read ();
- ergodox_right_led_1_on ();
- }
+ case APP_MSIC:
+ if (record->event.pressed)
+ uprintf("CMD:appsel_music\n");
break;
- case OH_RIGHT:
- if (record->event.pressed) {
- layer_move (OHRGT);
- oh_right_blink = 1;
- oh_right_blink_timer = timer_read ();
- ergodox_right_led_3_on ();
- }
+ // number row and symbols
+ case A_1 ... A_0:
+ ang_handle_num_row(id, record);
break;
}
+
return MACRO_NONE;
};
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
+ uint8_t dl;
+
+ set_unicode_input_mode(UC_LNX);
+
ergodox_led_all_on();
for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) {
ergodox_led_all_set (i);
- _delay_ms (5);
+ wait_ms (5);
}
- _delay_ms(1000);
+ wait_ms(1000);
for (int i = LED_BRIGHTNESS_LO; i > 0; i--) {
ergodox_led_all_set (i);
- _delay_ms (10);
+ wait_ms (10);
}
ergodox_led_all_off();
+
+ if (!eeconfig_is_enabled())
+ eeconfig_init();
+ dl = eeconfig_read_default_layer ();
+ if (dl == (1UL << ADORE)) {
+ is_adore = 1;
+ }
};
LEADER_EXTERNS();
-void ang_do_unicode (void) {
- register_code (KC_RCTL);
- register_code (KC_RSFT);
- register_code (KC_U);
- unregister_code (KC_U);
- unregister_code (KC_RSFT);
- unregister_code (KC_RCTL);
- _delay_ms (100);
-}
+static void ang_tap (uint16_t code, ...) {
+ uint16_t kc = code;
+ va_list ap;
-void ang_tap (uint16_t codes[]) {
- for (int i = 0; codes[i] != 0; i++) {
- register_code (codes[i]);
- unregister_code (codes[i]);
- _delay_ms (50);
- }
+ va_start(ap, code);
+
+ do {
+ register_code16(kc);
+ unregister_code16(kc);
+ wait_ms(50);
+ kc = va_arg(ap, int);
+ } while (kc != 0);
+ va_end(ap);
}
-#define TAP_ONCE(code) \
+#define TAP_ONCE(code) \
register_code (code); \
unregister_code (code)
-uint8_t is_exp = 0;
+typedef struct {
+ bool layer_toggle;
+ bool sticky;
+} td_ta_state_t;
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
- uint8_t layer = biton32(layer_state);
+static void ang_tap_dance_ta_finished (qk_tap_dance_state_t *state, void *user_data) {
+ td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
- if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM)
- unregister_code (KC_LGUI);
+ if (td_ta->sticky) {
+ td_ta->sticky = false;
+ td_ta->layer_toggle = false;
+ layer_off (ARRW);
+ return;
+ }
- if (ct_cln_timer && timer_elapsed (ct_cln_timer) > TAPPING_TERM) {
- if (ct_cln_count == 1) {
- register_code (KC_RSFT);
- register_code (KC_SCLN);
- unregister_code (KC_SCLN);
- unregister_code (KC_RSFT);
- } else if (ct_cln_count == 2) {
- register_code (KC_SCLN);
- unregister_code (KC_SCLN);
- }
+ if (state->count == 1 && !state->pressed) {
+ register_code (KC_TAB);
+ td_ta->sticky = false;
+ td_ta->layer_toggle = false;
+ } else {
+ td_ta->layer_toggle = true;
+ layer_on (ARRW);
+ td_ta->sticky = (state->count == 2);
+ }
+}
+
+static void ang_tap_dance_ta_reset (qk_tap_dance_state_t *state, void *user_data) {
+ td_ta_state_t *td_ta = (td_ta_state_t *) user_data;
+
+ if (!td_ta->layer_toggle)
+ unregister_code (KC_TAB);
+ if (!td_ta->sticky)
+ layer_off (ARRW);
+}
- ct_cln_count = 0;
- ct_cln_timer = 0;
+static void ang_tap_dance_tmux_finished (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ register_code(KC_LALT);
+ register_code(KC_SPC);
+ unregister_code(KC_SPC);
+ unregister_code(KC_LALT);
+ } else {
+ register_code(KC_LCTL);
+ register_code(KC_A);
+ unregister_code(KC_A);
+ unregister_code(KC_LCTL);
}
+}
- if (layer != OHLFT)
- oh_left_blink = 0;
- if (layer != OHRGT)
- oh_right_blink = 0;
-
- if (layer == HUN) {
- ergodox_right_led_2_on();
- ergodox_right_led_3_on();
- } else if (layer == NMDIA) {
- ergodox_right_led_1_on();
- ergodox_right_led_2_on();
- } else if (layer == PLVR) {
- ergodox_right_led_1_on ();
- ergodox_right_led_2_on ();
+static void ang_tap_dance_tmux_pane_select (qk_tap_dance_state_t *state, void *user_data) {
+ uint8_t kc = KC_P;
+
+ if (state->count >= 2) {
+ kc = KC_Z;
+ }
+
+ register_code(KC_LALT);
+ register_code(KC_SPC);
+ unregister_code(KC_SPC);
+ unregister_code(KC_LALT);
+
+ register_code(kc);
+ unregister_code(kc);
+}
+
+static void
+_td_sr_each (qk_tap_dance_state_t *state, void *user_data) {
+ skip_leds = true;
+
+ switch (state->count) {
+ case 1:
ergodox_right_led_3_on ();
- } else if (layer == EXPRM) {
- ergodox_right_led_1_on ();
+ break;
+ case 2:
ergodox_right_led_2_on ();
- ergodox_right_led_3_on ();
+ break;
+ case 3:
+ ergodox_right_led_1_on ();
+ break;
+ case 4:
+ ergodox_right_led_3_off ();
+ wait_ms (50);
+ ergodox_right_led_2_off ();
+ wait_ms (50);
+ ergodox_right_led_1_off ();
+ break;
+ }
+}
- ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
+static void
+_td_sr_finished (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ register_code (KC_MSTP);
}
+ if (state->count >= 4) {
+ uprintf("CMD:reflash\n");
+ wait_ms (1000);
+ reset_keyboard ();
+ reset_tap_dance (state);
+ }
+}
- if (layer == OHLFT || layer == OHRGT) {
- ergodox_right_led_2_on();
+static void
+_td_sr_reset (qk_tap_dance_state_t *state, void *user_data) {
+ ergodox_right_led_1_off ();
+ wait_ms (50);
+ ergodox_right_led_2_off ();
+ wait_ms (50);
+ ergodox_right_led_3_off ();
- if (oh_left_blink) {
- if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL) {
- if ((keyboard_report->mods & MOD_BIT(KC_LSFT)) == 0)
- ergodox_right_led_1_off ();
- }
- if (timer_elapsed (oh_left_blink_timer) > OH_BLINK_INTERVAL * 2) {
- ergodox_right_led_1_on ();
- oh_left_blink_timer = timer_read ();
- }
- }
+ if (state->count == 1) {
+ unregister_code (KC_MSTP);
+ }
+}
- if (oh_right_blink) {
- if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL) {
- if ((keyboard_report->mods & MOD_BIT(KC_LCTRL)) == 0)
- ergodox_right_led_3_off ();
- }
- if (timer_elapsed (oh_right_blink_timer) > OH_BLINK_INTERVAL * 2) {
- ergodox_right_led_3_on ();
- oh_right_blink_timer = timer_read ();
- }
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [CT_CLN] = ACTION_TAP_DANCE_DOUBLE (KC_COLN, KC_SCLN)
+ ,[CT_TA] = {
+ .fn = { NULL, ang_tap_dance_ta_finished, ang_tap_dance_ta_reset },
+ .user_data = (void *)&((td_ta_state_t) { false, false })
+ }
+ ,[CT_LBP] = ACTION_TAP_DANCE_DOUBLE (KC_LBRC, KC_LPRN)
+ ,[CT_RBP] = ACTION_TAP_DANCE_DOUBLE (KC_RBRC, KC_RPRN)
+ ,[CT_TMUX]= ACTION_TAP_DANCE_FN (ang_tap_dance_tmux_finished)
+ ,[CT_TPS] = ACTION_TAP_DANCE_FN (ang_tap_dance_tmux_pane_select)
+ ,[CT_SR] = ACTION_TAP_DANCE_FN_ADVANCED (_td_sr_each, _td_sr_finished, _td_sr_reset)
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+ uint8_t layer = biton32(layer_state);
+ bool is_arrow = false;
+
+ if (gui_timer && timer_elapsed (gui_timer) > TAPPING_TERM)
+ unregister_code (KC_LGUI);
+
+ if (!skip_leds) {
+ if (layer == HUN) {
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+ } else if (layer == NMDIA) {
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ } else if (layer == PLVR) {
+ ergodox_right_led_1_on ();
+ ergodox_right_led_2_on ();
+ ergodox_right_led_3_on ();
+ } else if (layer == ADORE) {
+ ergodox_right_led_1_on ();
+ ergodox_right_led_2_on ();
+ ergodox_right_led_3_on ();
+
+ ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
}
}
- if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
- ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
- ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
- ergodox_right_led_1_on ();
- } else {
- ergodox_right_led_1_set (LED_BRIGHTNESS_LO);
- if (layer != OHLFT && layer != NMDIA && layer != PLVR && layer != EXPRM)
- ergodox_right_led_1_off ();
+ if (layer_state & (1UL << ARRW)) {
+ if (!skip_leds) {
+ ergodox_right_led_1_on ();
+ ergodox_right_led_3_on ();
+ }
+ is_arrow = true;
}
- if (keyboard_report->mods & MOD_BIT(KC_LALT) ||
- ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) {
- ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
- ergodox_right_led_2_on ();
- } else {
- ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
- if (layer != OHRGT && layer != HUN && layer != OHLFT && layer != NMDIA && layer != PLVR && layer != EXPRM)
- ergodox_right_led_2_off ();
- }
+ if (!skip_leds) {
+ if (keyboard_report->mods & MOD_BIT(KC_LSFT) ||
+ ((get_oneshot_mods() & MOD_BIT(KC_LSFT)) && !has_oneshot_mods_timed_out())) {
+ ergodox_right_led_1_set (LED_BRIGHTNESS_HI);
+ ergodox_right_led_1_on ();
+ } else {
+ ergodox_right_led_1_set (LED_BRIGHTNESS_LO);
+ if (layer != NMDIA && layer != PLVR && layer != ADORE && !is_arrow)
+ ergodox_right_led_1_off ();
+ }
- if (keyboard_report->mods & MOD_BIT(KC_LCTRL) ||
- ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) {
- ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
- ergodox_right_led_3_on ();
- } else {
- ergodox_right_led_3_set (LED_BRIGHTNESS_LO);
- if (layer != OHRGT && layer != HUN && layer != PLVR && layer != EXPRM)
- ergodox_right_led_3_off ();
+ if (keyboard_report->mods & MOD_BIT(KC_LALT) ||
+ ((get_oneshot_mods() & MOD_BIT(KC_LALT)) && !has_oneshot_mods_timed_out())) {
+ ergodox_right_led_2_set (LED_BRIGHTNESS_HI);
+ ergodox_right_led_2_on ();
+ } else {
+ ergodox_right_led_2_set (LED_BRIGHTNESS_LO);
+ if (layer != HUN && layer != NMDIA && layer != PLVR && layer != ADORE)
+ ergodox_right_led_2_off ();
+ }
+
+ if (keyboard_report->mods & MOD_BIT(KC_LCTRL) ||
+ ((get_oneshot_mods() & MOD_BIT(KC_LCTRL)) && !has_oneshot_mods_timed_out())) {
+ ergodox_right_led_3_set (LED_BRIGHTNESS_HI);
+ ergodox_right_led_3_on ();
+ } else {
+ ergodox_right_led_3_set (LED_BRIGHTNESS_LO);
+ if (layer != HUN && layer != PLVR && layer != ADORE && !is_arrow)
+ ergodox_right_led_3_off ();
+ }
}
LEADER_DICTIONARY() {
leading = false;
leader_end ();
+ SEQ_ONE_KEY (KC_C) {
+ ang_tap (LSFT(KC_C), KC_S, KC_I, KC_L, KC_L, KC_RALT, KC_QUOT, KC_A, KC_M, KC_A, KC_S,
+ KC_S, KC_Z, KC_O, KC_N, KC_Y, KC_K, KC_RALT, KC_QUOT, KC_A, KC_M, 0);
+ }
+
+ SEQ_ONE_KEY (KC_G) {
+ ang_tap (LSFT(KC_G), KC_E, KC_J, KC_G, KC_RALT, KC_EQL, KC_O,
+ KC_RALT, KC_EQL, KC_O,
+ KC_RALT, KC_EQL, KC_O, 0);
+ }
+
+#if KEYLOGGER_ENABLE
+ SEQ_ONE_KEY (KC_D) {
+ ergodox_led_all_on();
+ wait_ms(100);
+ ergodox_led_all_off();
+ log_enable = !log_enable;
+ }
+#endif
+
+ SEQ_ONE_KEY (KC_T) {
+ time_travel = !time_travel;
+ }
+
SEQ_ONE_KEY (KC_U) {
- ang_do_unicode ();
+ qk_ucis_start();
}
SEQ_ONE_KEY (KC_V) {
@@ -999,106 +965,144 @@ void matrix_scan_user(void) {
SEQ_ONE_KEY (KC_L) {
/* λ */
- ang_do_unicode ();
-
- uint16_t codes[] = {KC_0, KC_3, KC_B, KC_B, KC_ENT, 0};
- ang_tap (codes);
+ unicode_input_start();
+ register_hex(0x03bb);
+ unicode_input_finish();
}
SEQ_ONE_KEY (KC_Y) {
- uint16_t codes[] = {KC_BSLS, KC_O, KC_SLSH, 0};
- ang_tap (codes);
+ ang_tap (KC_BSLS, KC_O, KC_SLSH, 0);
}
SEQ_ONE_KEY (KC_S) {
- ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC);
+ unicode_input_start(); register_hex(0xaf); unicode_input_finish();
TAP_ONCE (KC_BSLS);
register_code (KC_RSFT); TAP_ONCE (KC_MINS); TAP_ONCE (KC_9); unregister_code (KC_RSFT);
- ang_do_unicode (); TAP_ONCE (KC_3); TAP_ONCE (KC_0); TAP_ONCE (KC_C); TAP_ONCE (KC_4); TAP_ONCE (KC_SPC);
+ unicode_input_start (); register_hex(0x30c4); unicode_input_finish();
register_code (KC_RSFT); TAP_ONCE (KC_0); TAP_ONCE (KC_MINS); unregister_code (KC_RSFT);
TAP_ONCE (KC_SLSH);
- ang_do_unicode (); TAP_ONCE (KC_A); TAP_ONCE (KC_F); TAP_ONCE (KC_SPC);
+ unicode_input_start (); register_hex(0xaf); unicode_input_finish();
}
SEQ_TWO_KEYS (KC_W, KC_M) {
- register_code (KC_LALT);
- register_code (KC_F2);
- unregister_code (KC_F2);
- unregister_code (KC_LALT);
-
- _delay_ms (1000);
-
- uint16_t codes[] = {KC_M, KC_A, KC_X, KC_MINS, KC_F, KC_O, KC_C, KC_U, KC_S, KC_E, KC_D, KC_ENT, 0};
- ang_tap (codes);
- register_code (KC_LGUI);
- register_code (KC_UP);
- unregister_code (KC_UP);
- unregister_code (KC_LGUI);
+ uprintf("CMD:wm\n");
}
- SEQ_ONE_KEY (KC_E) {
- if (is_exp == 0) {
+ SEQ_ONE_KEY (KC_A) {
+ if (is_adore == 0) {
default_layer_and (0);
- default_layer_or ((1 << EXPRM));
- is_exp = 1;
+ default_layer_or ((1UL << ADORE));
+ eeconfig_update_default_layer ((1UL << ADORE));
+ is_adore = 1;
ergodox_led_all_off ();
ergodox_right_led_3_on ();
- _delay_ms (100);
+ wait_ms (100);
ergodox_right_led_2_on ();
- _delay_ms (100);
+ wait_ms (100);
ergodox_right_led_3_off ();
ergodox_right_led_1_on ();
- _delay_ms (100);
+ wait_ms (100);
ergodox_right_led_2_off ();
- _delay_ms (100);
+ wait_ms (100);
ergodox_right_led_1_off ();
} else {
- is_exp = 0;
+ is_adore = 0;
default_layer_and (0);
- default_layer_or (1 << BASE);
+ default_layer_or (1UL << BASE);
+ eeconfig_update_default_layer ((1UL << BASE));
ergodox_led_all_off ();
ergodox_right_led_1_on ();
- _delay_ms (100);
+ wait_ms (100);
ergodox_right_led_2_on ();
- _delay_ms (100);
+ wait_ms (100);
ergodox_right_led_1_off ();
ergodox_right_led_3_on ();
- _delay_ms (100);
+ wait_ms (100);
ergodox_right_led_2_off ();
- _delay_ms (100);
+ wait_ms (100);
ergodox_right_led_3_off ();
}
}
}
}
+static uint16_t last4[4];
+
+const qk_ucis_symbol_t ucis_symbol_table[] = UCIS_TABLE
+(
+ UCIS_SYM("poop", 0x1f4a9),
+ UCIS_SYM("rofl", 0x1f923),
+ UCIS_SYM("kiss", 0x1f619),
+ UCIS_SYM("snowman", 0x2603),
+ UCIS_SYM("coffee", 0x2615),
+ UCIS_SYM("heart", 0x2764),
+ UCIS_SYM("bolt", 0x26a1),
+ UCIS_SYM("pi", 0x03c0),
+ UCIS_SYM("mouse", 0x1f401)
+);
+
bool process_record_user (uint16_t keycode, keyrecord_t *record) {
- switch(keycode) {
- case CT_CLN:
- if (record->event.pressed) {
- ct_cln_count++;
- ct_cln_timer = timer_read ();
- } else {
+#if KEYLOGGER_ENABLE
+ if (log_enable) {
+ uint8_t layer = biton32(layer_state);
+
+ if ((layer == ADORE) || (layer == BASE))
+ uprintf ("KL: col=%02d, row=%02d, pressed=%d, layer=%s\n", record->event.key.col,
+ record->event.key.row, record->event.pressed, (is_adore) ? "ADORE" : "Dvorak");
+ }
+#endif
+
+ if (keycode == KC_ESC && record->event.pressed) {
+ bool queue = true;
+
+ if ((get_oneshot_mods ()) && !has_oneshot_mods_timed_out ()) {
+ clear_oneshot_mods ();
+ queue = false;
}
- return false;
- break;
+ if (layer_state & (1UL<<HUN)) {
+ layer_off (HUN);
+ queue = false;
+ }
+ return queue;
+ }
+
+ if (time_travel && !record->event.pressed) {
+ uint8_t p;
+
+ // shift cache one to the left
+ for (p = 0; p < 3; p++) {
+ last4[p] = last4[p + 1];
+ }
+ last4[3] = keycode;
- default:
- if (ct_cln_count == 1) {
+ if (last4[0] == KC_D && last4[1] == KC_A && last4[2] == KC_T && last4[3] == KC_E) {
+ ang_tap (KC_E, KC_SPC, KC_MINS, KC_D, KC_SPC, KC_QUOT, 0);
register_code (KC_RSFT);
- register_code (KC_SCLN);
- unregister_code (KC_SCLN);
+ register_code (KC_EQL);
+ unregister_code (KC_EQL);
unregister_code (KC_RSFT);
- } else if (ct_cln_count == 2) {
- register_code (KC_SCLN);
- unregister_code (KC_SCLN);
+
+ ang_tap (KC_4, KC_SPC, KC_D, KC_A, KC_Y, KC_S, KC_QUOT, 0);
+
+ return false;
}
- ct_cln_count = 0;
- ct_cln_timer = 0;
- break;
}
return true;
}
+
+void qk_ucis_symbol_fallback (void) {
+ for (uint8_t i = 0; i < qk_ucis_state.count - 1; i++) {
+ uint8_t code;
+
+ if ((qk_ucis_state.codes[i] >= M(A_1)) && (qk_ucis_state.codes[i] <= M(A_0)))
+ code = qk_ucis_state.codes[i] - M(A_1) + KC_1;
+ else
+ code = qk_ucis_state.codes[i];
+ register_code(code);
+ unregister_code(code);
+ wait_ms (10);
+ }
+}
diff --git a/keyboards/ergodox/keymaps/algernon/readme.md b/keyboards/ergodox/keymaps/algernon/readme.md
new file mode 100644
index 000000000..015bd7cd3
--- /dev/null
+++ b/keyboards/ergodox/keymaps/algernon/readme.md
@@ -0,0 +1,146 @@
+<!-- -*- mode: markdown; fill-column: 8192 -*- -->
+
+algernon's layout
+=======================
+
+This is an unconventional layout for the [ErgoDox EZ][ez]. For more details about the history of the layout, see my [blog posts about my ErgoDox journey][blog-ergodox].
+
+ [ez]: https://ergodox-ez.com/
+ [blog-ergodox]: https://asylum.madhouse-project.org/blog/tags/ergodox/
+
+Some of the things in the layout only work when one uses [Spacemacs][spacemacs] and [GNOME][gnome] under Linux. Your mileage may vary.
+
+ [spacemacs]: http://spacemacs.org/
+ [gnome]: https://www.gnome.org/
+
+## Table of Contents
+
+* [Layouts](#layouts)
+ - [Base layer](#base-layer)
+ - [ADORE layer](#adore-layer)
+ - [Steno layer](#steno-layer)
+ - [LED states](#led-states)
+* [Tools](#tools)
+ - [Heatmap](#heatmap)
+ - [Layer notification](#layer-notification)
+* [Special features](#special-features)
+ - [Unicode Symbol Input](#unicode-symbol-input)
+* [Building](#building)
+ - [Using on Windows](#using-on-windows)
+* [Changelog](https://github.com/algernon/ergodox-layout/blob/master/NEWS.md#readme)
+* [License](#license)
+
+# Layouts
+
+## Base layer
+
+[![Base layer](images/base-layer.png)](http://www.keyboard-layout-editor.com/#/gists/28f7eb305fdbff943613e1dc7aa9e82b)
+
+At its core, this is a Dvorak layout, with some minor changes. The more interesting parts are how certain keys behave:
+
+* The number row is the same as in the [ADORE](#adore-layer) layer. The function keys are on the **Media** layer.
+* The `Shift`, `Alt`, and `Control` modifiers are one-shot. When tapped, they are considered active for the next key press only. When double tapped, they toggle on, until a third, single tap sometime later. When held, they act as expected. My usual pattern is that I use these for the next keypress only, so this behaviour is perfect. If I need them held, I'll just double-tap.
+* The `GUI` key is special, because when I double-tap it, it sends `GUI + w`, which pops up an application selector. It also switches to a one-shot layer, where the number row on the left half turns into app selector macros, for the most common things I usually want to switch to. Otherwise it behaves as on a normal layout.
+* The `ESC` key also doubles as a one-shot cancel key: if tapped while any of the one-shot modifiers are in-flight (as in, single-tapped, and not expired yet), it cancels all one-shot modifiers. It also cancels the **Hun** layer, if active. Otherwise it sends the usual keycode.
+* The **Media** and **Hun** layer keys are one-shot, the **STENO** key is a toggle.
+* The **Fx** key is one-shot, and activates the **Media** layer, along with a one-shot `Alt`.
+* When holding the `Tab`/**Arrow** key, the arrow layer activates while the key is held. Tapping the key produces the normal, `Tab` key. Double-tapping it toggles the **Arrow** layer on until a third tap.
+* Tapping the `:` key once yields `:`, tapping it twice yields `;`.
+* Tapping the `[{(`/`)}]` keys once yields `[` (or `{` when shifted), tapping them twice yields `(`.
+* The **Lead** key allows me to type in a sequence of keys, and trigger some actions:
+ - `LEAD l` uses the unicode input method to enter a `λ`.
+ - `LEAD s` does a lot of magic to type in a shruggie: `¯\_(ツ)_/¯`
+ - `LEAD y` types `\o/`.
+ - `LEAD w m` maximises the currently focused window.
+ - `LEAD a` makes the [ADORE layer](#adore-layer) the default.
+ - `LEAD v` prints the firmware version, the keyboard and the keymap.
+ - `LEAD d` toggles logging keypress positions to the HID console.
+ - `LEAD t` toggles time travel. Figuring out the current `date` is left as an exercise to the reader.
+ - `LEAD u` enters the [Unicode symbol input](#unicode-symbol-input) mode.
+
+The symbols on the front in the image above have the same color as the key that activates them, with the exception of the **Arrow** layer, which is just black on the front.
+
+## ADORE layer
+
+[![ADORE layer](images/adore-layer.png)](http://www.keyboard-layout-editor.com/#/gists/45681a17453d235925b6028dd83bf12a)
+
+My experimental layout, that I keep tweaking. No full description here, because things are very much in flux.
+
+Note that the **HUN** layer does not work well with ADORE: it still has the same layout as on the [Base](#base-layer) layer. This will remain until ADORE becomes the default.
+
+## Steno layer
+
+[![Steno layer for Plover](images/steno-layer.png)](http://www.keyboard-layout-editor.com/#/gists/401ef9a84369e47c57f9aedcf0a0d667)
+
+This is to be used with [Plover](http://www.openstenoproject.org/plover/), nothing really fancy here. The **STENO** key toggles the layer on and off, and sends the toggle command to Plover too.
+
+## LED states
+
+The primary purpose of the LEDs is to show the modifier status, a secondary, to show which layer is active. Each modifier, `Shift`, `Alt` and `Control` each have their designated LEDs: the *red*, *green* and *blue*, respectively. When a modifier is in a one-shot state, the respective LED will turn on with a dimmer light. If the modifier is toggled on, the brightness of the LED turns full.
+
+For the layers, the following rules apply:
+
+* When the [ADORE layer](#adore-layer) is toggled on, LEDs will light up from left to right in a sequence, then turn off. When the layer is toggled off, the LEDs light up and turn off in the other direction. No LEDs are on while the layer is active.
+* When the **Hungarian** layer is active, the *green* and *blue* LEDs are on.
+* When the **Media** layer is active, the *red* and *green* ones are on.
+* When the **ARROW** layer is active, the *red* and *blue* ones are on.
+* For the [Steno layer](#steno-layer), all LEDs will be turned on.
+
+Unless noted otherwise, the layers use a dim light for the LEDs, while modifiers use a stronger one, and modifiers override any layer preferences. For example, when on the one-handed layer, with the left side active (*red* light blinking), if `Shift` is on, the *red* light will be constantly on.
+
+# Special features
+
+## Unicode Symbol Input
+
+Once in the Unicode Symbol Input mode, one is able to type in symbol names, press `Enter` or `Space`, and get the Unicode symbol itself back. When in the mode, a capital `U` is printed first. Once the sequence is finished, all of it is erased by sending enough `Backspace` taps, and the firmware starts the OS-specific unicode input sequence. Then, it looks up the symbol name, and enters the associated code. If it is not found, it will just replay the pressed keycodes.
+
+For the list of supported symbols, please see the source.
+
+This is an experimental feature, and may or may not work reliably.
+
+# Tools
+
+## Heatmap
+
+When the keypress logging functionality is enabled (by `LEAD d`), the keyboard will output a line every time a key is pressed, containing the position of the key in the matrix. This allows one to collect this information, and build analytics over it, such as a heat map, including dead keys too.
+
+Included with the firmware is a small tool that can parse these logs, and create a heatmap that one can import into [KLE][kle]. To use it, either pipe the output of `hid_listen` into it, or pipe it an already saved log, and it will save the results into files in an output directory (given on the command-line). See the output of `tools/log-to-heatmap.py --help` for more information.
+
+ [kle]: http://www.keyboard-layout-editor.com/
+
+The generated heatmap looks somewhat like this:
+
+ ![Heatmap](images/heatmap.png)
+
+## Layer notification
+
+There is a very small tool in `tools/layer-notify`, that listens to the HID console, looking for layer change events, and pops up a notification for every detected change. It is a very simple tool, mainly serving as an example.
+
+# Building
+
+To make my workflow easier, this layout is maintained in [its own repository][algernon:ez-layout]. To build it, you will need the [QMK][qmk] firmware checked out, and this repo either checked out to something like `keyboards/ergodox_ez/algernon-master`. One way to achieve that is this:
+
+ [algernon:ez-layout]: https://github.com/algernon/ergodox-layout
+ [qmk]: https://github.com/jackhumbert/qmk_firmware
+
+```
+$ git clone https://github.com/jackhumbert/qmk_firmware.git
+$ cd qmk_firmware
+$ git clone https://github.com/algernon/ergodox-layout.git \
+ keyboards/ergodox/keymaps/algernon-master
+$ make keyboard=ergodox keymap=algernon-master
+```
+
+From time to time, updates may be submitted back to the QMK repository. If you are reading it there, you can build the firmware like any other firmware included with it (assuming you are in the root directory of the firmware):
+
+```
+$ make keyboard=ergodox keymap=algernon
+```
+
+## Using on Windows
+
+The keymap default to forcing NKRO, which seems to upset Windows, and except the modifiers, none of them work. If you experience this problem, recompile the firmware with `FORCE_NKRO=no` added to the `make` command line.
+
+# License
+
+The layout, being a derivative of the original TMK firmware which is under the GPL-2+, this layout is under the GPL as well, but GPL-3+, rather than the older version.
diff --git a/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json
new file mode 100644
index 000000000..e09efecc4
--- /dev/null
+++ b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.ADORE.json
@@ -0,0 +1,486 @@
+[
+ {
+ "backcolor": "#ffffff",
+ "name": "ErgoDox - algernon's layout: Heatmap",
+ "author": "Gergely Nagy <kbd@gergo.csillger.hu>",
+ "notes": "See [here](https://github.com/algernon/ergodox-layout#readme) for the QMK keymap source.",
+ "switchMount": "cherry",
+ "switchBrand": "gateron",
+ "switchType": "KS-3-Tea",
+ "pcb": true,
+ "css": ".keyborder { -webkit-filter: blur(5px); filter: blur(5px); } .keytop { -webkit-filter: blur(10px); } .keylabels { border: 1px solid black; }"
+ },
+ [
+ {
+ "x": 3.5,
+ "fa": [
+ 0,
+ 0,
+ 2
+ ]
+ },
+ "*\n5\nF5",
+ {
+ "x": 10.5,
+ "a": 4,
+ "fa": [
+ 0,
+ 0,
+ 2
+ ]
+ },
+ "#\n4\nF4"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5
+ },
+ "@\n7\nF7",
+ {
+ "x": 1
+ },
+ "^\n3\nF3",
+ {
+ "x": 8.5
+ },
+ "!\n2\nF2",
+ {
+ "x": 1
+ },
+ "&\n6\nF6"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5
+ },
+ "$\n1\nF1",
+ {
+ "a": 7,
+ "f": 3
+ },
+ "F11",
+ {
+ "x": 4.5,
+ "f": 3
+ },
+ "Fx",
+ {
+ "a": 4,
+ "f": 3,
+ "fa": [
+ 0,
+ 0,
+ 2
+ ]
+ },
+ "%\n0\nF10"
+ ],
+ [
+ {
+ "y": -0.875,
+ "f": 9,
+ "a": 6,
+ "w": 1.5
+ },
+ "\n\n<i class='kb kb-Multimedia-Play-Pause'></i>",
+ {
+ "f": 3,
+ "a": 4,
+ "fa": [
+ 0,
+ 0,
+ 2
+ ]
+ },
+ " \n9\nF9",
+ {
+ "x": 14.5
+ },
+ " \n8\nF8",
+ {
+ "a": 7,
+ "w": 1.5
+ },
+ "STENO"
+ ],
+ [
+ {
+ "y": -0.375,
+ "x": 3.5,
+ "a": 6
+ },
+ "C",
+ {
+ "x": 10.5
+ },
+ "L"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5,
+ "a": 6
+ },
+ "W",
+ {
+ "x": 1,
+ "a": 6
+ },
+ "H",
+ {
+ "x": 8.5
+ },
+ "G",
+ {
+ "x": 1
+ },
+ "P"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5
+ },
+ "F",
+ {
+ "a": 4,
+ "fa": [0, 0, 0],
+ "h": 1.5
+ },
+ "{\n(\n[",
+ {
+ "x": 4.5,
+ "h": 1.5
+ },
+ "}\n)\n]",
+ {
+ "a": 6
+ },
+ "M"
+ ],
+ [
+ {
+ "y": -0.875,
+ "f": 3,
+ "a": 4,
+ "w": 1.5
+ },
+ "\n\n|\n\\",
+ {
+ "a": 6,
+ "f": 3
+ },
+ "X",
+ {
+ "x": 14.5,
+ "a": 4
+ },
+ "/\n?",
+ {
+ "a": 4,
+ "w": 1.5
+ },
+ "~\n`"
+ ],
+ [
+ {
+ "y": -0.375,
+ "x": 3.5,
+ "a": 6
+ },
+ "E",
+ {
+ "x": 10.5
+ },
+ "T"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5
+ },
+ "O",
+ {
+ "x": 1,
+ "n": true
+ },
+ "I",
+ {
+ "x": 8.5,
+ "n": true
+ },
+ "R",
+ {
+ "x": 1
+ },
+ "N"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5
+ },
+ "U",
+ {
+ "x": 6.5
+ },
+ "D"
+ ],
+ [
+ {
+ "y": -0.875,
+ "fa": [
+ 6
+ ],
+ "w": 1.5
+ },
+ "<i class='fa fa-arrows'></i>\n\nTab",
+ {
+ "f": 3
+ },
+ "A",
+ {
+ "x": 14.5,
+ "f": 3
+ },
+ "S",
+ {
+ "a": 4,
+ "fa": [
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 6
+ ],
+ "w": 1.5
+ },
+ "+\n="
+ ],
+ [
+ {
+ "y": -0.625,
+ "x": 6.5,
+ "a": 7,
+ "f": 9,
+ "h": 1.5
+ },
+ "<i class='fa fa-columns'></i>",
+ {
+ "x": 4.5,
+ "h": 1.5
+ },
+ "<i class='fa fa-table'></i>"
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 3.5,
+ "a": 4,
+ "f": 3
+ },
+ "\"\n'",
+ {
+ "x": 10.5,
+ "a": 6,
+ "f": 3
+ },
+ "V"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5,
+ "a": 6
+ },
+ "Q",
+ {
+ "x": 1,
+ "a": 4
+ },
+ "<\n,",
+ {
+ "x": 8.5,
+ "a": 6
+ },
+ "K",
+ {
+ "x": 1
+ },
+ "Y"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5,
+ "a": 4
+ },
+ ">\n.",
+ {
+ "x": 6.5,
+ "a": 6
+ },
+ "B"
+ ],
+ [
+ {
+ "y": -0.875,
+ "f": 9,
+ "w": 1.5,
+ "g": true
+ },
+ "",
+ {
+ "a": 6,
+ "f": 3,
+ "g": false
+ },
+ "Z",
+ {
+ "x": 14.5
+ },
+ "J",
+ {
+ "f": 9,
+ "g": true,
+ "w": 1.5,
+ "a": 4
+ },
+ ""
+ ],
+ [
+ {
+ "y": -0.375,
+ "x": 3.5,
+ "g": true,
+ "a": 7,
+ "f": 3
+ },
+ "",
+ {
+ "x": 10.5
+ },
+ ""
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5
+ },
+ "",
+ {
+ "x": 1,
+ "g": false,
+ "a": 5
+ },
+ ";\n:",
+ {
+ "x": 8.5
+ },
+ "_\n-",
+ {
+ "x": 1,
+ "g": true,
+ "a": 7
+ },
+ ""
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 0.5
+ },
+ "",
+ {},
+ "",
+ {
+ "x": 14.5
+ },
+ "",
+ {},
+ ""
+ ],
+ [
+ {
+ "r": 30,
+ "rx": 6.5,
+ "ry": 4.25,
+ "y": -1,
+ "x": 1,
+ "g": false
+ },
+ "Alt",
+ {
+ "a": 4,
+ "fa": [
+ 0,
+ 0,
+ 0,
+ 9
+ ]
+ },
+ "\n\n\n<i class='kb kb-logo-linux-debian fa-large'></i>"
+ ],
+ [
+ {
+ "a": 7,
+ "f": 9,
+ "h": 2
+ },
+ "<i class='kb kb-Unicode-BackSpace-DeleteLeft-Big'></i>",
+ {
+ "h": 2
+ },
+ "<i class='fa fa-angle-double-up'></i>",
+ {
+ "f": 3
+ },
+ "Ctrl"
+ ],
+ [
+ {
+ "x": 2
+ },
+ "ESC"
+ ],
+ [
+ {
+ "r": -30,
+ "rx": 13,
+ "y": -1,
+ "x": -3,
+ "f": 2
+ },
+ "MEDIA",
+ {},
+ "DEL"
+ ],
+ [
+ {
+ "x": -3
+ },
+ "HUN",
+ {
+ "f": 9,
+ "h": 2
+ },
+ "<i class='kb kb-Return-2'></i>",
+ {
+ "f": 3,
+ "h": 2
+ },
+ "SPC"
+ ],
+ [
+ {
+ "x": -3,
+ "f": 2
+ },
+ "LEAD"
+ ]
+]
diff --git a/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json
new file mode 100644
index 000000000..1e53281c5
--- /dev/null
+++ b/keyboards/ergodox/keymaps/algernon/tools/heatmap-layout.Dvorak.json
@@ -0,0 +1,477 @@
+[
+ {
+ "backcolor": "#ffffff",
+ "name": "ErgoDox - algernon's layout: Heatmap",
+ "author": "Gergely Nagy <kbd@gergo.csillger.hu>",
+ "notes": "See [here](https://github.com/algernon/ergodox-layout#readme) for the QMK keymap source.",
+ "switchMount": "cherry",
+ "switchBrand": "gateron",
+ "switchType": "KS-3-Tea",
+ "pcb": true,
+ "css": ".keyborder { -webkit-filter: blur(5px); filter: blur(5px); } .keytop { -webkit-filter: blur(10px); } .keylabels { border: 1px solid black; }"
+ },
+ [
+ {
+ "x": 3.5,
+ "fa": [
+ 0,
+ 0,
+ 2
+ ]
+ },
+ "*\n5\nF5",
+ {
+ "x": 10.5,
+ "a": 4,
+ "fa": [
+ 0,
+ 0,
+ 2
+ ]
+ },
+ "#\n4\nF4"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5
+ },
+ "@\n7\nF7",
+ {
+ "x": 1
+ },
+ "^\n3\nF3",
+ {
+ "x": 8.5
+ },
+ "!\n2\nF2",
+ {
+ "x": 1
+ },
+ "&\n6\nF6"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5
+ },
+ "$\n1\nF1",
+ {
+ "a": 7,
+ "f": 3
+ },
+ "F11",
+ {
+ "x": 4.5,
+ "f": 3
+ },
+ "Fx",
+ {
+ "a": 4,
+ "f": 3,
+ "fa": [
+ 0,
+ 0,
+ 2
+ ]
+ },
+ "%\n0\nF10"
+ ],
+ [
+ {
+ "y": -0.875,
+ "f": 6,
+ "a": 6,
+ "w": 1.5
+ },
+ "<i class='fa fa-fast-backward'></i>\n\n<i class='fa fa-fast-forward'></i>",
+ {
+ "f": 3,
+ "a": 4,
+ "fa": [
+ 0,
+ 0,
+ 2
+ ]
+
+ },
+ " \n9\nF9",
+ {
+ "x": 14.5
+ },
+ " \n8\nF8",
+ {
+ "a": 7,
+ "w": 1.5
+ },
+ "STENO"
+ ],
+ [
+ {
+ "y": -0.375,
+ "x": 3.5,
+ "a": 4
+ },
+ ">\n.",
+ {
+ "x": 10.5,
+ "a": 6
+ },
+ "C"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5,
+ "a": 4
+ },
+ "<\n,",
+ {
+ "x": 1,
+ "a": 6
+ },
+ "P",
+ {
+ "x": 8.5
+ },
+ "G",
+ {
+ "x": 1
+ },
+ "R"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5
+ },
+ "Y",
+ {
+ "a": 4,
+ "h": 1.5
+ },
+ "{\n(\n[",
+ {
+ "x": 4.5,
+ "h": 1.5
+ },
+ "}\n)\n]",
+ {
+ "a": 6
+ },
+ "F"
+ ],
+ [
+ {
+ "y": -0.875,
+ "f": 3,
+ "a": 4,
+ "w": 1.5
+ },
+ "\n\n~\n`",
+ {
+ "a": 4,
+ "f": 3
+ },
+ "\"\n'",
+ {
+ "x": 14.5,
+ "a": 6
+ },
+ "L",
+ {
+ "a": 4,
+ "w": 1.5
+ },
+ "|\n\\"
+ ],
+ [
+ {
+ "y": -0.375,
+ "x": 3.5,
+ "a": 6
+ },
+ "E",
+ {
+ "x": 10.5
+ },
+ "T"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5
+ },
+ "O",
+ {
+ "x": 1,
+ "n": true
+ },
+ "U",
+ {
+ "x": 8.5,
+ "n": true
+ },
+ "H",
+ {
+ "x": 1
+ },
+ "N"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5
+ },
+ "I",
+ {
+ "x": 6.5
+ },
+ "D"
+ ],
+ [
+ {
+ "y": -0.875,
+ "fa": [
+ 6
+ ],
+ "w": 1.5
+ },
+ "<i class='fa fa-arrows'></i>\n\nTab",
+ {
+ "f": 3
+ },
+ "A",
+ {
+ "x": 14.5,
+ "f": 3
+ },
+ "S",
+ {
+ "a": 4,
+ "fa": [
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 6
+ ],
+ "w": 1.5
+ },
+ "+\n="
+ ],
+ [
+ {
+ "y": -0.625,
+ "x": 6.5,
+ "a": 7,
+ "f": 9,
+ "h": 1.5
+ },
+ "<i class='fa fa-columns'></i>",
+ {
+ "x": 4.5,
+ "h": 1.5
+ },
+ "<i class='fa fa-table'></i>"
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 3.5,
+ "f": 3,
+ "a": 6
+ },
+ "J",
+ {
+ "x": 10.5
+ },
+ "W"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5
+ },
+ "Q",
+ {
+ "x": 1
+ },
+ "K",
+ {
+ "x": 8.5
+ },
+ "M",
+ {
+ "x": 1
+ },
+ "V"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5
+ },
+ "X",
+ {
+ "x": 6.5
+ },
+ "B"
+ ],
+ [
+ {
+ "y": -0.875,
+ "f": 9,
+ "w": 1.5
+ },
+ "\n\n<i class='kb kb-Multimedia-Play-Pause'></i>",
+ {
+ "a": 4,
+ "f": 3
+ },
+ "?\n/",
+ {
+ "x": 14.5,
+ "a": 6
+ },
+ "Z",
+ {
+ "f": 9,
+ "w": 1.5
+ },
+ "<i class='kb kb-Multimedia-Stop'></i>"
+ ],
+ [
+ {
+ "y": -0.375,
+ "x": 3.5,
+ "g": true,
+ "a": 7,
+ "f": 3
+ },
+ "",
+ {
+ "x": 10.5
+ },
+ ""
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5
+ },
+ "",
+ {
+ "x": 1,
+ "g": false,
+ "a": 5
+ },
+ ";\n:",
+ {
+ "x": 8.5
+ },
+ "_\n-",
+ {
+ "x": 1,
+ "g": true,
+ "a": 7
+ },
+ ""
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 0.5
+ },
+ "",
+ {},
+ "",
+ {
+ "x": 14.5
+ },
+ "",
+ {},
+ ""
+ ],
+ [
+ {
+ "r": 30,
+ "rx": 6.5,
+ "ry": 4.25,
+ "y": -1,
+ "x": 1,
+ "g": false
+ },
+ "Alt",
+ {
+ "a": 4,
+ "fa": [
+ 0,
+ 0,
+ 0,
+ 9
+ ]
+ },
+ "\n\n\n<i class='kb kb-logo-linux-debian fa-large'></i>"
+ ],
+ [
+ {
+ "a": 7,
+ "f": 9,
+ "h": 2
+ },
+ "<i class='kb kb-Unicode-BackSpace-DeleteLeft-Big'></i>",
+ {
+ "h": 2
+ },
+ "<i class='fa fa-angle-double-up'></i>",
+ {
+ "f": 3
+ },
+ "Ctrl"
+ ],
+ [
+ {
+ "x": 2
+ },
+ "ESC"
+ ],
+ [
+ {
+ "r": -30,
+ "rx": 13,
+ "y": -1,
+ "x": -3,
+ "f": 2
+ },
+ "MEDIA",
+ {},
+ "DEL"
+ ],
+ [
+ {
+ "x": -3
+ },
+ "LEAD",
+ {
+ "f": 9,
+ "h": 2
+ },
+ "<i class='kb kb-Return-2'></i>",
+ {
+ "f": 3,
+ "h": 2
+ },
+ "SPC"
+ ],
+ [
+ {
+ "x": -3,
+ "f": 2
+ },
+ "HUN"
+ ]
+]
diff --git a/keyboards/ergodox/keymaps/algernon/tools/hid-commands b/keyboards/ergodox/keymaps/algernon/tools/hid-commands
new file mode 100755
index 000000000..a29d38f41
--- /dev/null
+++ b/keyboards/ergodox/keymaps/algernon/tools/hid-commands
@@ -0,0 +1,79 @@
+#!/bin/bash
+set -e
+
+LAST_APPSEL_START=0
+
+cmd_wm () {
+ WIN="$(xdotool getactivewindow)"
+ wmctrl -i -r ${WIN} -b remove,maximized_vert,maximized_horz
+ xdotool windowsize ${WIN} 100% 100%
+ wmctrl -i -r ${WIN} -b add,maximized_vert,maximized_horz
+}
+
+_cmd_appsel () {
+ wmctrl -x -a $1 || true
+ xdotool key Escape
+}
+
+cmd_appsel_music () {
+ wmctrl -x -a rhythmbox || wmctrl -x -a spotify || wmctrl -x -a kodi || true
+ xdotool key Escape
+}
+
+cmd_appsel_slack () {
+ _cmd_appsel slack
+}
+
+cmd_appsel_emacs () {
+ _cmd_appsel emacs
+}
+
+cmd_appsel_term () {
+ _cmd_appsel gnome-terminal
+}
+
+cmd_appsel_chrome () {
+ _cmd_appsel chromium
+}
+
+cmd_appsel_start () {
+ if [ ! -z "${DISABLE_APPSEL_START}" ]; then
+ return
+ fi
+
+ APPSEL_START=$(date +%s)
+ if [ $APPSEL_START -lt $(expr $LAST_APPSEL_START + 10) ]; then
+ return
+ fi
+ LAST_APPSEL_START=$APPSEL_START
+ notify-send -t 1000 "Please select an application!" -c device -u low \
+ -i /usr/share/icons/Adwaita/24x24/devices/video-display.png
+}
+
+cmd_reflash () {
+ teensy_loader_cli -v -w ~/src/ext/qmk_firmware/algernon.hex --mcu atmega32u4 || true
+}
+
+cmd_help () {
+ cat <<EOF
+Use the source, Luke!
+EOF
+}
+
+while read l; do
+ case "$l" in
+ "CMD:"*)
+ ;;
+ *)
+ continue
+ ;;
+ esac
+
+ cmd="$(echo $l | cut -d: -f2-)"
+
+ echo "Got command: ${cmd}"
+
+ if type cmd_${cmd} >/dev/null 2>&1; then
+ cmd_${cmd}
+ fi
+done
diff --git a/keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py b/keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py
new file mode 100755
index 000000000..e927e0e39
--- /dev/null
+++ b/keyboards/ergodox/keymaps/algernon/tools/log-to-heatmap.py
@@ -0,0 +1,344 @@
+#! /usr/bin/env python3
+import json
+import os
+import sys
+import re
+import argparse
+import time
+
+from math import floor
+from os.path import dirname
+from subprocess import Popen, PIPE, STDOUT
+from blessings import Terminal
+
+class Heatmap(object):
+ coords = [
+ [
+ # Row 0
+ [ 4, 0], [ 4, 2], [ 2, 0], [ 1, 0], [ 2, 2], [ 3, 0], [ 3, 2],
+ [ 3, 4], [ 3, 6], [ 2, 4], [ 1, 2], [ 2, 6], [ 4, 4], [ 4, 6],
+ ],
+ [
+ # Row 1
+ [ 8, 0], [ 8, 2], [ 6, 0], [ 5, 0], [ 6, 2], [ 7, 0], [ 7, 2],
+ [ 7, 4], [ 7, 6], [ 6, 4], [ 5, 2], [ 6, 6], [ 8, 4], [ 8, 6],
+ ],
+ [
+ # Row 2
+ [12, 0], [12, 2], [10, 0], [ 9, 0], [10, 2], [11, 0], [ ],
+ [ ], [11, 2], [10, 4], [ 9, 2], [10, 6], [12, 4], [12, 6],
+ ],
+ [
+ # Row 3
+ [17, 0], [17, 2], [15, 0], [14, 0], [15, 2], [16, 0], [13, 0],
+ [13, 2], [16, 2], [15, 4], [14, 2], [15, 6], [17, 4], [17, 6],
+ ],
+ [
+ # Row 4
+ [20, 0], [20, 2], [19, 0], [18, 0], [19, 2], [], [], [], [],
+ [19, 4], [18, 2], [19, 6], [20, 4], [20, 6], [], [], [], []
+ ],
+ [
+ # Row 5
+ [ ], [23, 0], [22, 2], [22, 0], [22, 4], [21, 0], [21, 2],
+ [24, 0], [24, 2], [25, 0], [25, 4], [25, 2], [26, 0], [ ],
+ ],
+ ]
+
+ def set_attr_at(self, block, n, attr, fn, val):
+ blk = self.heatmap[block][n]
+ if attr in blk:
+ blk[attr] = fn(blk[attr], val)
+ else:
+ blk[attr] = fn(None, val)
+
+ def coord(self, col, row):
+ return self.coords[row][col]
+
+ @staticmethod
+ def set_attr(orig, new):
+ return new
+
+ def set_bg(self, coords, color):
+ (block, n) = coords
+ self.set_attr_at(block, n, "c", self.set_attr, color)
+ #self.set_attr_at(block, n, "g", self.set_attr, False)
+
+ def set_tap_info(self, coords, count, cap):
+ (block, n) = coords
+ def _set_tap_info(o, _count, _cap):
+ ns = 4 - o.count ("\n")
+ return o + "\n" * ns + "%.02f%%" % (float(_count) / float(_cap) * 100)
+
+ if not cap:
+ cap = 1
+ self.heatmap[block][n + 1] = _set_tap_info (self.heatmap[block][n + 1], count, cap)
+
+ @staticmethod
+ def heatmap_color (v):
+ colors = [ [0.3, 0.3, 1], [0.3, 1, 0.3], [1, 1, 0.3], [1, 0.3, 0.3]]
+ fb = 0
+ if v <= 0:
+ idx1, idx2 = 0, 0
+ elif v >= 1:
+ idx1, idx2 = len(colors) - 1, len(colors) - 1
+ else:
+ val = v * (len(colors) - 1)
+ idx1 = int(floor(val))
+ idx2 = idx1 + 1
+ fb = val - float(idx1)
+
+ r = (colors[idx2][0] - colors[idx1][0]) * fb + colors[idx1][0]
+ g = (colors[idx2][1] - colors[idx1][1]) * fb + colors[idx1][1]
+ b = (colors[idx2][2] - colors[idx1][2]) * fb + colors[idx1][2]
+
+ r, g, b = [x * 255 for x in (r, g, b)]
+ return "#%02x%02x%02x" % (int(r), int(g), int(b))
+
+ def __init__(self, layout):
+ self.log = {}
+ self.total = 0
+ self.max_cnt = 0
+ self.layout = layout
+
+ def update_log(self, coords):
+ (c, r) = coords
+ if not (c, r) in self.log:
+ self.log[(c, r)] = 0
+ self.log[(c, r)] = self.log[(c, r)] + 1
+ self.total = self.total + 1
+ if self.max_cnt < self.log[(c, r)]:
+ self.max_cnt = self.log[(c, r)]
+
+ def get_heatmap(self):
+ with open("%s/heatmap-layout.%s.json" % (dirname(sys.argv[0]), self.layout), "r") as f:
+ self.heatmap = json.load (f)
+
+ ## Reset colors
+ for row in self.coords:
+ for coord in row:
+ if coord != []:
+ self.set_bg (coord, "#d9dae0")
+
+ for (c, r) in self.log:
+ coords = self.coord(c, r)
+ b, n = coords
+ cap = self.max_cnt
+ if cap == 0:
+ cap = 1
+ v = float(self.log[(c, r)]) / cap
+ self.set_bg (coords, self.heatmap_color (v))
+ self.set_tap_info (coords, self.log[(c, r)], self.total)
+ return self.heatmap
+
+ def get_stats(self):
+ usage = [
+ # left hand
+ [0, 0, 0, 0, 0],
+ # right hand
+ [0, 0, 0, 0, 0]
+ ]
+ finger_map = [0, 0, 1, 2, 3, 3, 3, 1, 1, 1, 2, 3, 4, 4]
+ for (c, r) in self.log:
+ if r == 5: # thumb cluster
+ if c <= 6: # left side
+ usage[0][4] = usage[0][4] + self.log[(c, r)]
+ else:
+ usage[1][0] = usage[1][0] + self.log[(c, r)]
+ elif r == 4 and (c == 4 or c == 9): # bottom row thumb keys
+ if c <= 6: # left side
+ usage[0][4] = usage[0][4] + self.log[(c, r)]
+ else:
+ usage[1][0] = usage[1][0] + self.log[(c, r)]
+ else:
+ fc = c
+ hand = 0
+ if fc >= 7:
+ hand = 1
+ fm = finger_map[fc]
+ usage[hand][fm] = usage[hand][fm] + self.log[(c, r)]
+ hand_usage = [0, 0]
+ for f in usage[0]:
+ hand_usage[0] = hand_usage[0] + f
+ for f in usage[1]:
+ hand_usage[1] = hand_usage[1] + f
+
+ total = self.total
+ if total == 0:
+ total = 1
+ stats = {
+ "total-keys": total,
+ "hands": {
+ "left": {
+ "usage": round(float(hand_usage[0]) / total * 100, 2),
+ "fingers": {
+ "pinky": 0,
+ "ring": 0,
+ "middle": 0,
+ "index": 0,
+ "thumb": 0,
+ }
+ },
+ "right": {
+ "usage": round(float(hand_usage[1]) / total * 100, 2),
+ "fingers": {
+ "thumb": 0,
+ "index": 0,
+ "middle": 0,
+ "ring": 0,
+ "pinky": 0,
+ }
+ },
+ }
+ }
+
+ hmap = ['left', 'right']
+ fmap = ['pinky', 'ring', 'middle', 'index', 'thumb',
+ 'thumb', 'index', 'middle', 'ring', 'pinky']
+ for hand_idx in range(len(usage)):
+ hand = usage[hand_idx]
+ for finger_idx in range(len(hand)):
+ stats['hands'][hmap[hand_idx]]['fingers'][fmap[finger_idx + hand_idx * 5]] = round(float(hand[finger_idx]) / total * 100, 2)
+ return stats
+
+def dump_all(out_dir, heatmaps):
+ stats = {}
+ t = Terminal()
+ t.clear()
+ sys.stdout.write("\x1b[2J\x1b[H")
+
+ print ('{t.underline}{outdir}{t.normal}\n'.format(t=t, outdir=out_dir))
+
+ keys = list(heatmaps.keys())
+ keys.sort()
+
+ for layer in keys:
+ if len(heatmaps[layer].log) == 0:
+ continue
+
+ with open ("%s/%s.json" % (out_dir, layer), "w") as f:
+ json.dump(heatmaps[layer].get_heatmap(), f)
+ stats[layer] = heatmaps[layer].get_stats()
+
+ left = stats[layer]['hands']['left']
+ right = stats[layer]['hands']['right']
+
+ print ('{t.bold}{layer}{t.normal} ({total:,} taps):'.format(t=t, layer=layer,
+ total=int(stats[layer]['total-keys'] / 2)))
+ print (('{t.underline} | ' + \
+ 'left ({l[usage]:6.2f}%) | ' + \
+ 'right ({r[usage]:6.2f}%) |{t.normal}').format(t=t, l=left, r=right))
+ print ((' {t.bright_magenta}pinky{t.white} | {left[pinky]:6.2f}% | {right[pinky]:6.2f}% |\n' + \
+ ' {t.bright_cyan}ring{t.white} | {left[ring]:6.2f}% | {right[ring]:6.2f}% |\n' + \
+ ' {t.bright_blue}middle{t.white} | {left[middle]:6.2f}% | {right[middle]:6.2f}% |\n' + \
+ ' {t.bright_green}index{t.white} | {left[index]:6.2f}% | {right[index]:6.2f}% |\n' + \
+ ' {t.bright_red}thumb{t.white} | {left[thumb]:6.2f}% | {right[thumb]:6.2f}% |\n' + \
+ '').format(left=left['fingers'], right=right['fingers'], t=t))
+
+def process_line(line, heatmaps, opts, stamped_log = None):
+ m = re.search ('KL: col=(\d+), row=(\d+), pressed=(\d+), layer=(.*)', line)
+ if not m:
+ return False
+ if stamped_log is not None:
+ if line.startswith("KL:"):
+ print ("%10.10f %s" % (time.time(), line),
+ file = stamped_log, end = '')
+ else:
+ print (line,
+ file = stamped_log, end = '')
+ stamped_log.flush()
+
+ (c, r, l) = (int(m.group (2)), int(m.group (1)), m.group (4))
+ if (c, r) not in opts.allowed_keys:
+ return False
+
+ heatmaps[l].update_log ((c, r))
+
+ return True
+
+def setup_allowed_keys(opts):
+ if len(opts.only_key):
+ incmap={}
+ for v in opts.only_key:
+ m = re.search ('(\d+),(\d+)', v)
+ if not m:
+ continue
+ (c, r) = (int(m.group(1)), int(m.group(2)))
+ incmap[(c, r)] = True
+ else:
+ incmap={}
+ for r in range(0, 6):
+ for c in range(0, 14):
+ incmap[(c, r)] = True
+
+ for v in opts.ignore_key:
+ m = re.search ('(\d+),(\d+)', v)
+ if not m:
+ continue
+ (c, r) = (int(m.group(1)), int(m.group(2)))
+ del(incmap[(c, r)])
+
+ return incmap
+
+def main(opts):
+ heatmaps = {"Dvorak": Heatmap("Dvorak"),
+ "ADORE": Heatmap("ADORE")
+ }
+ cnt = 0
+ out_dir = opts.outdir
+
+ if not os.path.exists(out_dir):
+ os.makedirs(out_dir)
+
+ opts.allowed_keys = setup_allowed_keys(opts)
+
+ if not opts.one_shot:
+
+ try:
+ with open("%s/stamped-log" % out_dir, "r") as f:
+ while True:
+ line = f.readline()
+ if not line:
+ break
+ if not process_line(line, heatmaps, opts):
+ continue
+ except:
+ pass
+
+ stamped_log = open ("%s/stamped-log" % (out_dir), "a+")
+ else:
+ stamped_log = None
+
+ while True:
+ line = sys.stdin.readline()
+ if not line:
+ break
+ if not process_line(line, heatmaps, opts, stamped_log):
+ continue
+
+ cnt = cnt + 1
+
+ if opts.dump_interval != -1 and cnt >= opts.dump_interval and not opts.one_shot:
+ cnt = 0
+ dump_all(out_dir, heatmaps)
+
+ dump_all (out_dir, heatmaps)
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser (description = "keylog to heatmap processor")
+ parser.add_argument ('outdir', action = 'store',
+ help = 'Output directory')
+ parser.add_argument ('--dump-interval', dest = 'dump_interval', action = 'store', type = int,
+ default = 100, help = 'Dump stats and heatmap at every Nth event, -1 for dumping at EOF only')
+ parser.add_argument ('--ignore-key', dest = 'ignore_key', action = 'append', type = str,
+ default = [], help = 'Ignore the key at position (x, y)')
+ parser.add_argument ('--only-key', dest = 'only_key', action = 'append', type = str,
+ default = [], help = 'Only include key at position (x, y)')
+ parser.add_argument ('--one-shot', dest = 'one_shot', action = 'store_true',
+ help = 'Do not load previous data, and do not update it, either.')
+ args = parser.parse_args()
+ if len(args.ignore_key) and len(args.only_key):
+ print ("--ignore-key and --only-key are mutually exclusive, please only use one of them!",
+ file = sys.stderr)
+ sys.exit(1)
+ main(args)
diff --git a/keyboards/ergodox/keymaps/algernon/tools/text-to-log.py b/keyboards/ergodox/keymaps/algernon/tools/text-to-log.py
new file mode 100755
index 000000000..f080c32cd
--- /dev/null
+++ b/keyboards/ergodox/keymaps/algernon/tools/text-to-log.py
@@ -0,0 +1,107 @@
+#!/usr/bin/env python3
+
+import os
+import sys
+
+charmap = {
+ '9': [[1, 0]],
+ '7': [[2, 0]], '@': [[2, 5], [2, 0]],
+ '5': [[3, 0]], '*': [[2, 5], [3, 0]],
+ '3': [[4, 0]], '^': [[2, 5], [4, 0]],
+ '1': [[5, 0]], '$': [[2, 5], [5, 0]],
+ '0': [[8, 0]], '%': [[2, 5], [8, 0]],
+ '2': [[9, 0]], '!': [[2, 5], [9, 0]],
+ '4': [[10, 0]], '#': [[2, 5], [10, 0]],
+ '6': [[11, 0]], '&': [[2, 5], [11, 0]],
+ '8': [[12, 0]],
+
+ '\\': [[0, 1]], '|': [[2, 5], [0, 1]],
+ 'x': [[1, 1]], 'X': [[2, 5], [1, 1]],
+ 'w': [[2, 1]], 'W': [[2, 5], [2, 1]],
+ 'c': [[3, 1]], 'C': [[2, 5], [3, 1]],
+ 'h': [[4, 1]], 'H': [[2, 5], [4, 1]],
+ 'f': [[5, 1]], 'F': [[2, 5], [5, 1]],
+ '[': [[6, 1]], '{': [[2, 5], [6, 1]], '(': [[6, 1], [6, 1]],
+ ']': [[7, 1]], '}': [[2, 5], [7, 1]], ')': [[7, 1], [7, 1]],
+ 'm': [[8, 1]], 'M': [[2, 5], [8, 1]],
+ 'g': [[9, 1]], 'G': [[2, 5], [9, 1]],
+ 'l': [[10, 1]], 'L': [[2, 5], [10, 1]],
+ 'p': [[11, 1]], 'P': [[2, 5], [11, 1]],
+ '/': [[12, 1]], '?': [[2, 5], [12, 1]],
+ '`': [[13, 1]], '~': [[2, 5], [13, 1]],
+
+ '\t': [[0, 2]],
+ 'a': [[1, 2]], 'A': [[2, 5], [1, 2]],
+ 'o': [[2, 2]], 'O': [[2, 5], [2, 2]],
+ 'e': [[3, 2]], 'E': [[2, 5], [3, 2]],
+ 'i': [[4, 2]], 'I': [[2, 5], [4, 2]],
+ 'u': [[5, 2]], 'U': [[2, 5], [5, 2]],
+ 'd': [[8, 2]], 'D': [[2, 5], [8, 2]],
+ 'r': [[9, 2]], 'R': [[2, 5], [9, 2]],
+ 't': [[10, 2]], 'T': [[2, 5], [10, 2]],
+ 'n': [[11, 2]], 'N': [[2, 5], [11, 2]],
+ 's': [[12, 2]], 'S': [[2, 5], [12, 2]],
+ '=': [[13, 2]], '+': [[2, 5], [13, 2]],
+
+ 'z': [[1, 3]], 'Z': [[2, 5], [1, 3]],
+ 'q': [[2, 3]], 'Q': [[2, 5], [2, 3]],
+ '\'': [[3, 3]], '"': [[2, 5], [3, 3]],
+ ',': [[4, 3]], '<': [[2, 5], [4, 3]],
+ '.': [[5, 3]], '>': [[2, 5], [5, 3]],
+ 'b': [[8, 3]], 'B': [[2, 5], [8, 3]],
+ 'k': [[9, 3]], 'K': [[2, 5], [9, 3]],
+ 'v': [[10, 3]], 'V': [[2, 5], [10, 3]],
+ 'y': [[11, 3]], 'Y': [[2, 5], [11, 3]],
+ 'j': [[12, 3]], 'J': [[2, 5], [12, 3]],
+
+ ':': [[4, 4]], ';': [[4, 4], [4, 4]],
+ '-': [[9, 4]], '_': [[2, 5], [9, 4]],
+
+ ' ': [[10, 5]],
+ '\n': [[11, 5]],
+
+ ## Layered things
+ # Hungarian
+ 'á': [[9, 5], [1, 2]], 'Ã': [[2, 5], [9, 5], [1, 2]],
+ 'ó': [[9, 5], [2, 2]], 'Ó': [[2, 5], [9, 5], [2, 2]],
+ 'Å‘': [[9, 5], [2, 1]], 'Å': [[2, 5], [9, 5], [2, 1]],
+ 'ö': [[9, 5], [2, 3]], 'Ö': [[2, 5], [9, 5], [2, 3]],
+ 'é': [[9, 5], [3, 2]], 'É': [[2, 5], [9, 5], [3, 2]],
+ 'ú': [[9, 5], [4, 2]], 'Ú': [[2, 5], [9, 5], [4, 2]],
+ 'ű': [[9, 5], [4, 1]], 'Ű': [[2, 5], [9, 5], [4, 1]],
+ 'ü': [[9, 5], [4, 3]], 'Ü': [[2, 5], [9, 5], [4, 3]],
+ 'í': [[9, 5], [5, 2]], 'Ã': [[2, 5], [9, 5], [5, 2]],
+}
+
+def lookup_char(layer, ch):
+ if ch in charmap:
+ return charmap[ch]
+ return None
+
+def process_char(layer, ch, out=sys.stdout):
+ keys = lookup_char(layer, ch)
+ if not keys:
+ print ("Unknown char: %s" % ch, file=sys.stderr)
+ else:
+ for (c, r) in keys:
+ print ("KL: col=%d, row=%d, pressed=1, layer=%s" % (r, c, layer), file=out)
+ print ("KL: col=%d, row=%d, pressed=0, layer=%s" % (r, c, layer), file=out)
+
+def process_file(fn, layer, out=sys.stdout):
+ with open(fn, "r") as f:
+ ch = f.read(1)
+ while ch:
+ process_char(layer, ch, out)
+ ch = f.read(1)
+
+if sys.argv[1] == '-':
+ out='/dev/stdin'
+else:
+ out=sys.argv[1]
+
+if len(sys.argv) >= 2:
+ layer = 'ADORE'
+else:
+ layer = sys.argv[2]
+
+process_file(out, layer = layer)
diff --git a/keyboards/ergodox/keymaps/alphadox/Makefile b/keyboards/ergodox/keymaps/alphadox/Makefile
new file mode 100644
index 000000000..633499d00
--- /dev/null
+++ b/keyboards/ergodox/keymaps/alphadox/Makefile
@@ -0,0 +1,17 @@
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ # nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = 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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/ergodox/keymaps/alphadox/config.h b/keyboards/ergodox/keymaps/alphadox/config.h
new file mode 100644
index 000000000..deb218dc0
--- /dev/null
+++ b/keyboards/ergodox/keymaps/alphadox/config.h
@@ -0,0 +1,12 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+#define FORCE_NKRO
+#define PREVENT_STUCK_MODIFIERS
+
+#undef TAPPING_TERM
+#undef IGNORE_MOD_TAP_INTERRUPT
+
+#endif
diff --git a/keyboards/ergodox/keymaps/alphadox/keymap.c b/keyboards/ergodox/keymaps/alphadox/keymap.c
new file mode 100644
index 000000000..731e62c0c
--- /dev/null
+++ b/keyboards/ergodox/keymaps/alphadox/keymap.c
@@ -0,0 +1,107 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define ETC 2 // etc
+
+enum macro_id {
+ TEENSY,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[BASE] = KEYMAP(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TAB, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_PGUP,
+ CTL_T(KC_ESC), LT(ETC,KC_A), KC_S, KC_E, KC_T, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_PGDN,
+ KC_GRV, KC_DEL, KC_DEL, KC_LALT, GUI_T(KC_TAB),
+ KC_NO, KC_NO,
+ KC_NO,
+ LT(SYMB,KC_BSPC), CTL_T(KC_ESC), KC_NO,
+
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_VOLU, KC_J, KC_U, KC_R, KC_L, KC_SCLN, KC_BSLS,
+ KC_Y, KC_N, KC_I, KC_O, KC_H, KC_QUOT,
+ KC_VOLD, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ GUI_T(KC_TAB), KC_LEFT, KC_DOWN, KC_UP, LCAG_T(KC_RGHT),
+ KC_NO, KC_NO,
+ KC_NO,
+ KC_NO, SFT_T(KC_ENT), LT(SYMB,KC_SPC)
+),
+
+[SYMB] = KEYMAP(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
+ KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_BSLS,
+ KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_ASTR, KC_TRNS,
+ KC_TILD, KC_AMPR, KC_AMPR, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_EQL, KC_7, KC_8, KC_9, KC_PLUS, KC_NO,
+ KC_MINS, KC_4, KC_5, KC_6, KC_QUOT, KC_NO,
+ KC_TRNS, KC_UNDS, KC_1, KC_2, KC_3, KC_DQUO, KC_TRNS,
+ KC_0, KC_NO, KC_DOT, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+[ETC] = KEYMAP(
+ RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_TRNS,
+ KC_TRNS, LT(ETC,KC_A), KC_NO, KC_NO, KC_NO, KC_PGDN,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_VOLU, KC_F7, KC_F8, KC_F9, KC_HOME, KC_NO,
+ KC_VOLD, KC_F4, KC_F5, KC_F6, KC_END, KC_NO,
+ KC_TRNS, KC_MUTE, KC_F1, KC_F2, KC_F3, KC_INS, KC_TRNS,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ switch(id) {
+ case TEENSY:
+ break;
+ }
+ return MACRO_NONE;
+};
+
+void matrix_init_user(void) {
+};
+
+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_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ break;
+ }
+};
diff --git a/keyboards/ergodox_ez/keymaps/andrew_osx/keymap.c b/keyboards/ergodox/keymaps/andrew_osx/keymap.c
index 48257d23a..750155d98 100644
--- a/keyboards/ergodox_ez/keymaps/andrew_osx/keymap.c
+++ b/keyboards/ergodox/keymaps/andrew_osx/keymap.c
@@ -1,7 +1,7 @@
// Netable differences vs. the default firmware for the ErgoDox EZ:
// 1. The Cmd key is now on the right side, making Cmd+Space easier.
// 2. The media keys work on OSX (But not on Windows).
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/erez_experimental/Makefile b/keyboards/ergodox/keymaps/bepo/Makefile
index b673c5ce5..b673c5ce5 100644
--- a/keyboards/ergodox_ez/keymaps/erez_experimental/Makefile
+++ b/keyboards/ergodox/keymaps/bepo/Makefile
diff --git a/keyboards/ergodox/keymaps/bepo/bepo.png b/keyboards/ergodox/keymaps/bepo/bepo.png
new file mode 100644
index 000000000..54992f5ae
--- /dev/null
+++ b/keyboards/ergodox/keymaps/bepo/bepo.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/bepo/keymap.c b/keyboards/ergodox/keymaps/bepo/keymap.c
index 921a94d63..05250ee6a 100644
--- a/keyboards/ergodox_ez/keymaps/bepo/keymap.c
+++ b/keyboards/ergodox/keymaps/bepo/keymap.c
@@ -1,21 +1,23 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
+#include "ergodox.h"
#include "keymap_bepo.h"
+#include "keymap_french.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
+// keymaps
+#define BEPO 0 // default layer, for bepo compatible systems
+#define QW_B 1 // bepo to qwerty base compat layer, for qwerty systems
+#define QW_A 2 // bepo with altgr key to qwerty compat layer
+#define QW_S 3 // bepo with shift key to qwerty compat layer
+#define AZ_B 4 // bepo to azerty base compat layer, for azerty systems
+#define AZ_A 5 // bepo with altgr key to azerty compat layer
+#define AZ_S 6 // bepo with shift key to azerty compat layer
+#define FNAV 7 // function / navigation / mouse layer
+#define NUMK 8 // numeric keypad layer
-#define KP_00 0
-#define CA_Fx 1
+// macros
+#define KP_00 0 // keypad "double 0"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Keymap 0: Base layer
+/* Keymap 0: default layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | $ | " | < | > | ( | ) |Delete| |ScroLo| @ | + | - | / | * | = |
@@ -26,22 +28,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+------+------+------+------+------| 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|
+ * |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause|
* `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
- * | | | L_Num| | CA_Fx| | |
+ * | | |L_NumK| |L_NumK| | |
* | Space|LShift|------| |------|RShift|Enter |
* | | |L_FNav| |L_FNav| | |
* `--------------------' `--------------------'
*/
-[BASE] = KEYMAP(
+[BEPO] = 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_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT,
+ DF(BEPO), DF(QW_B),
+ MO(NUMK),
KC_SPC, KC_LSHIFT, MO(FNAV),
// Right hand
KC_SLCK, BP_AT, BP_PLUS, BP_MINUS, BP_SLASH, BP_ASTR, BP_EQUAL,
@@ -49,10 +51,10 @@ TG(QWER), KC_NO, KC_LGUI, KC_LCTL, KC_LALT,
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),
+DF(AZ_B), DF(BEPO),
+MO(NUMK),
MO(FNAV), KC_RSHIFT, KC_ENTER),
-/* Keymap 1: QWERTY system compatibility layer
+/* Keymap 1: bepo to qwerty base compat layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | $ | " | < | > | ( | ) |Delete| |ScroLo| @ | + | - | / | * | = |
@@ -63,33 +65,70 @@ MO(FNAV), KC_RSHIFT, KC_ENTER),
* |--------+------+------+------+------+------| 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|
+ * |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause|
* `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
- * | | | L_Num| | | | |
+ * | | |L_NumK| |L_NumK| | |
* | Space|LShift|------| |------|RShift|Enter |
* | | |L_FNav| |L_FNav| | |
* `--------------------' `--------------------'
*/
-[QWER] = KEYMAP(
+[QW_B] = 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),
+KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_SPC, MO(QW_S), KC_TRNS,
// 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,
+ MO(QW_A), KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE,
+KC_TRNS, KC_TRNS,
+KC_TRNS,
+KC_TRNS, MO(QW_S), KC_ENTER),
+/* Keymap 2: bepo with altgr key to qwerty compat 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 |
+ * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
+ * |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause|
+ * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
+ * | | |L_NumK| |L_NumK| | |
+ * | _ |LShift|------| |------|RShift|Enter |
+ * | | |L_FNav| |L_FNav| | |
+ * `--------------------' `--------------------'
+ */
+[QW_A] = 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_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_UNDS, MO(QW_S), KC_TRNS,
+// 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_TRNS, KC_TRNS,
KC_TRNS,
-MO(FNAV), MO(SQWER), KC_ENTER),
-/* Keymap 2: QWERTY shifted system compatibility layer
+KC_TRNS, MO(QW_S), KC_ENTER),
+/* Keymap 3: bepo with shift key to qwerty compat layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | # | 1 | 2 | 3 | 4 | 5 |Delete| |ScroLo| 6 | 7 | 8 | 9 | 0 | = |
@@ -100,20 +139,20 @@ MO(FNAV), MO(SQWER), KC_ENTER),
* |--------+------+------+------+------+------| 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|
+ * |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause|
* `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
- * | | | L_Num| | | | |
+ * | | |L_NumK| |L_NumK| | |
* | Space|LShift|------| |------|RShift|Enter |
* | | |L_FNav| |L_FNav| | |
* `--------------------' `--------------------'
*/
-[SQWER] = KEYMAP(
+[QW_S] = 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),
+S(KC_ESC), S(KC_INS), S(KC_LGUI), S(KC_LCTL), S(KC_LALT),
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
@@ -126,51 +165,125 @@ 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),
-/* Keymap 3: QWERTY alted system compatibility layer
+/* Keymap 4: bepo to azerty base compat 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 |a_grav| y | x | . | k | | | | ' | q | g | h | f | c_cedil|
+ * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
+ * |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause|
+ * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
+ * | | |L_NumK| |L_NumK| | |
+ * | Space|LShift|------| |------|RShift|Enter |
+ * | | |L_FNav| |L_FNav| | |
+ * `--------------------' `--------------------'
+ */
+[AZ_B] = KEYMAP(
+// Left hand
+FR_DLR, FR_QUOT, FR_LESS, FR_GRTR, FR_LPRN, FR_RPRN, KC_DEL,
+FR_PERC, KC_B, FR_EACU, KC_P, KC_O, FR_EGRV, KC_BSPC,
+FR_W, FR_A, KC_U, KC_I, KC_E, FR_COMM,
+KC_E, FR_AGRV, KC_Y, KC_X, FR_DOT, KC_K, KC_TAB,
+KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_SPC, MO(AZ_S), KC_TRNS,
+// Right hand
+ KC_SLCK, FR_AT, FR_PLUS, FR_MINS, FR_SLSH, FR_ASTR, FR_EQL,
+ KC_CAPSLOCK, KC_LBRC, KC_V, KC_D, KC_L, KC_J, FR_Z,
+ KC_C, KC_T, KC_S, KC_R, KC_N, FR_M,
+ KC_NUMLOCK, FR_APOS, FR_Q, KC_G, KC_H, KC_F, FR_CCED,
+ MO(AZ_A), KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE,
+KC_TRNS, KC_TRNS,
+KC_TRNS,
+KC_TRNS, MO(AZ_S), KC_ENTER),
+/* Keymap 5: bepo with altgr key to azerty compat layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | $ | " | < | > | [ | ] |Delete| |ScroLo| @ | + | - | / | * | = |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | % | | | e | & | o | e |Backsp| |CapsLo| ^ | v | d | l | j | z |
* |--------+------+------+------+------+------| ace | | |------+------+------+------+------+--------|
- * | w | a | u | i | € | , |------| |------| c | t | s | r | n | m |
+ * | w | a |u_grav| trem | € | , |------| |------| c | t | s | r | n | m |
* |--------+------+------+------+------+------| Tab | | NumLo|------+------+------+------+------+--------|
- * | e | \ | { | } | . | ~ | | | | ' | q | g | h | f | c |
+ * | / | \ | { | } | . | ~ | | | | ' | q | g | h | f | c |
* `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
- * | BEPO | |LSuper| LCtrl| LAlt| |Escape| L_Mse| | |Insert| | AltGr| RCtrl|RSuper|PrntSc| Pause|
+ * |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause|
* `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
- * | | | L_Num| | | | |
+ * | | |L_NumK| |L_NumK| | |
* | _ |LShift|------| |------|RShift|Enter |
* | | |L_FNav| |L_FNav| | |
* `--------------------' `--------------------'
*/
-[AQWER] = KEYMAP(
+[AZ_A] = 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),
+FR_DLR, FR_QUOT, FR_LESS, FR_GRTR, FR_LBRC, FR_RBRC, KC_DEL,
+FR_PERC, FR_PIPE, FR_EACU, FR_AMP, KC_O, FR_EGRV, KC_BSPC,
+FR_W, FR_A, FR_UGRV, S(KC_LBRC), FR_EURO, FR_COMM,
+FR_SLSH, FR_BSLS, FR_LCBR, FR_RCBR, FR_DOT, FR_TILD, KC_TAB,
+KC_ESC, KC_INS, KC_LGUI, KC_LCTL, KC_LALT,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ FR_UNDS, MO(AZ_S), KC_TRNS,
// 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_SLCK, FR_AT, FR_PLUS, FR_MINS, FR_SLSH, FR_ASTR, FR_EQL,
+ KC_CAPSLOCK, KC_LBRC, KC_V, KC_D, KC_L, KC_J, FR_Z,
+ KC_C, KC_T, KC_S, KC_R, KC_N, FR_M,
+ KC_NUMLOCK, FR_APOS, FR_Q, KC_G, KC_H, KC_F, FR_CCED,
KC_TRNS, KC_RCTL, KC_RGUI, KC_PSCREEN, KC_PAUSE,
-KC_NO, KC_INS,
+KC_TRNS, KC_TRNS,
KC_TRNS,
-MO(FNAV), MO(SQWER), KC_ENTER),
-/* Keymap 4: function / navigation layer
+KC_TRNS, MO(AZ_S), KC_ENTER),
+/* Keymap 6: bepo with shift key to azerty compat 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 |
+ * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
+ * |Escape|Insert|LSuper| LCtrl| LAlt| | BEPO |QWERTY| |AZERTY| BEPO | | AltGr| RCtrl|RSuper|PrntSc| Pause|
+ * `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
+ * | | |L_NumK| |L_NumK| | |
+ * | Space|LShift|------| |------|RShift|Enter |
+ * | | |L_FNav| |L_FNav| | |
+ * `--------------------' `--------------------'
+ */
+[AZ_S] = KEYMAP(
+// Left hand
+FR_HASH, FR_1, FR_2, FR_3, FR_4, FR_5, KC_TRNS,
+FR_GRV, S(KC_B), S(KC_E), S(KC_P), S(KC_O), S(KC_E), KC_TRNS,
+S(FR_W), S(FR_A), S(KC_U), S(KC_I), S(KC_E), FR_SCLN,
+S(KC_E), S(FR_A), S(KC_Y), S(KC_X), FR_COLN, S(KC_K), S(KC_TAB),
+S(KC_ESC), S(KC_INS), 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, FR_6, FR_7, FR_8, FR_9, FR_0, FR_OVRR,
+ KC_TRNS, FR_EXLM, S(KC_V), S(KC_D), S(KC_L), S(KC_J), S(FR_Z),
+ S(KC_C), S(KC_T), S(KC_S), S(KC_R), S(KC_N), S(FR_M),
+ KC_TRNS, FR_QUES, S(FR_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 7: function / navigation / mouse layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 |VolMut| | | F6 | F7 | F8 | F9 | F10 | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
- * | | | | | | |VolDwn| | | PgUp | Home | Up | End | F11 | |
+ * | | Next |LClick| Up |RClick| WhUp |VolDwn| | | PgUp | Home | Up | End | F11 | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | | | | | | |------| |------| PgDn | Left | Down | Right| F12 | |
+ * | | Prev | Left | Down | Right|WhDown|------| |------| PgDn | Left | Down | Right| F12 | |
* |--------+------+------+------+------+------| VolUp| | |------+------+------+------+------+--------|
* | | Undo | Cut | Copy | Paste| | | | | | | | | | |
* `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
@@ -184,12 +297,12 @@ MO(FNAV), MO(SQWER), KC_ENTER),
[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_MS_BTN5, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_MS_WH_UP, KC_VOLU,
+KC_NO, KC_MS_BTN4, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_DOWN,
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_TRNS, KC_TRNS,
+ KC_TRNS,
KC_NO, KC_TRNS, KC_TRNS,
// Right hand
KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NO,
@@ -197,91 +310,52 @@ KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS,
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_TRNS, KC_TRNS, KC_NO),
-/* Keymap 5: numeric layer, sends keypad codes
+/* Keymap 8: numeric keypad layer, sends keypad codes
*
* ,--------------------------------------------------. ,--------------------------------------------------.
- * | | | | | | | | | | | + | - | / | * | |
+ * | | | | | | | | | | | NumLo| / | * | - | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
- * | | | | | | | | | | | 7 | 8 | 9 | | |
+ * | | | | | | | | | | | 7 | 8 | 9 | + | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | | | | | | |------| |------| | 4 | 5 | 6 | | |
+ * | | | | | | |------| |------| | 4 | 5 | 6 | + | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | | | | | | | | | | | 1 | 2 | 3 | | |
+ * | | | | | | | | | | | 1 | 2 | 3 | Enter| |
* `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
- * | | | | | | | | | | | | | 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| |
- * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | | | | | | | | | | | | | | | |
- * `--------+------+------+------+------+-------------,-------------. ,-------------`-------------+------+------+------+------+--------'
- * | | | | | | | | | | | | | | | | | |
+ * | | | | | | | | | | | | | 0 | 00 | . | Enter| |
* `----------------------------------' ,------|------|------| |------+------+------. `----------------------------------'
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
-[MSE] = KEYMAP(
+[NUMK] = 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,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_NO, KC_TRNS, KC_TRNS,
// 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[] = {
+ KC_NO, KC_NO, KC_NUMLOCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, KC_NO,
+ KC_NO, KC_NO, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, KC_NO,
+ KC_NO, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, KC_NO,
+ KC_NO, KC_NO, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, KC_NO,
+ KC_KP_0, M(KP_00), KC_KP_COMMA, KC_KP_ENTER, KC_NO,
+KC_TRNS, KC_TRNS,
+KC_TRNS,
+KC_TRNS, KC_TRNS, KC_NO)
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch(id) {
+ // keypad "double 0"
case KP_00:
if (record->event.pressed) {
return MACRO( T(KP_0), D(KP_0), END );
@@ -289,23 +363,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
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/keyboards/ergodox_ez/keymaps/bepo/readme.md b/keyboards/ergodox/keymaps/bepo/readme.md
index 4a18cd80f..2959ac829 100644
--- a/keyboards/ergodox_ez/keymaps/bepo/readme.md
+++ b/keyboards/ergodox/keymaps/bepo/readme.md
@@ -23,12 +23,12 @@ 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 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 et d'effectuer des actions souris avec uniquement la main gauche. 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.
+Touche permettant 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 et pour des accès BIOS ou console en QWERTY.
-TODO : couche de compatibilité pour utiliser la disposition BÉPO sur un système configuré pour un clavier AZERTY.
+Touche permettant de basculer en mode BEPO sur un système configuré pour un clavier AZERTY. Cette compatibilité n'est pas parfaite (pas de gestion des caractères non présents sur le clavier AZERTY, 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 et pour faire du bureau à distance vers un système Windows sans BEPO.
> Olivier Smedts <olivier@gid0.org>
diff --git a/keyboards/ergodox/keymaps/bepo_csa/keymap.c b/keyboards/ergodox/keymaps/bepo_csa/keymap.c
new file mode 100644
index 000000000..495242adb
--- /dev/null
+++ b/keyboards/ergodox/keymaps/bepo_csa/keymap.c
@@ -0,0 +1,527 @@
+/* TypeMatrix-2030-like keymap */
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "action_util.h"
+#include "led.h"
+#include "keymap_extras/keymap_bepo.h"
+#include "keymap_extras/keymap_canadian_multilingual.h"
+
+enum layers {
+ LR_BASE, // default layer
+ LR_CSA, // BÉPO over Canadian Multilingual (CSA)
+ LR_CSA_SFT, // shifted BÉPO over CSA
+ LR_CSA_AGR, // altgr-ed BÉPO over CSA
+ LR_CSA_AGR_SFT, // altgr-shifted BÉPO over CSA
+ LR_NUMR, // numeric layer
+ LR_FN, // fn layer
+};
+
+#define IS_CA_MULT_ENABLED() (layer_state & (1 << LR_CSA))
+
+enum macros {
+ // Characters that do not exist in CSA and must be implemented based on unicode support
+ // Note: these are intentionally declared first to be used as indexes in spec_chars below
+ UC_NDSH, // –
+ UC_MDSH, // —
+ UC_ELPS, // …
+ END_UC, // indicates the last unicode character macro
+ // other macros
+ M_CSA_SFT, // toggle shift on CSA
+ M_CSA_AGR_SFT, // toggle shift on LR_CSA_AGR (goes to LR_CSA_AGR_SFT)
+ M_CSA_SFT_AGR, // toggle AltGr on LR_CSA_SFT (goes to LR_CSA_AGR_SFT)
+ // macros for characters that need to be un-shifted in LR_CA_MULT_SHIFT
+ M_1,
+ M_2,
+ M_3,
+ M_4,
+ M_5,
+ M_6,
+ M_7,
+ M_8,
+ M_9,
+ M_0,
+ M_DEGR,
+ M_SCLN,
+ M_GRV,
+ M_NBSP,
+ // macros for characters that don't have a simple key combination in LR_CA_MULT_ALTGR
+ M_CRC,
+ // other layer macros
+ M_DBL0, // double 0
+ M_FNLR, // fn layer
+ M_NMAL, // num+alt
+};
+
+#define CSA(name) M(M_CSA_##name) // calls a CSA macro
+
+const uint16_t unicode_chars[] = {
+ [UC_NDSH] = L'–',
+ [UC_MDSH] = L'—',
+ [UC_ELPS] = L'…',
+};
+
+/* shortcut for unicode character macros */
+#define MUC(name) M(UC_##name) // calls a unicode macro
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | $ | " | « | » | ( | ) | Del | | Del | @ | + | - | / | * | W |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | B | É | P | O | È |Backsp| |Backsp| ^ | V | D | L | J | Z |
+ * |--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------|
+ * | = | A | U | I | E | , |------| |------| C | T | S | R | N | M |
+ * |--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------|
+ * | LShift | À | Y | X | . | K | | | | ' | Q | G | H | F | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |LCtrl | fn | LGui |numAlt| LAlt | |Alt Gr| % | App | Ç | RCtrl|
+ * `----------------------------------' `----------------------------------'
+ * ,--------------. ,-------------.
+ * | Esc | num | | Left |Right |
+ * ,------+-------+------| |------+------+------.
+ * | | | PgUp | | Up | | |
+ * |Space | Home |------| |------| End |Space |
+ * | | | PgDn | | Down | | |
+ * `---------------------' `--------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[LR_BASE] = KEYMAP( // layer 0 : default
+ // left hand
+ BP_DLR, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DELT,
+ KC_TAB, BP_B, BP_ECUT, BP_P, BP_O, BP_EGRV, KC_BSPC,
+ BP_EQL, BP_A, BP_U, BP_I, BP_E, BP_COMM,
+ KC_LSFT, BP_AGRV, BP_Y, BP_X, BP_DOT, BP_K, KC_ENT,
+ KC_LCTL, M(M_FNLR), KC_LGUI, M(M_NMAL), KC_LALT,
+
+ KC_ESC, TG(LR_NUMR),
+ KC_PGUP,
+ KC_SPC, KC_HOME, KC_PGDN,
+
+ // right hand
+ KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, BP_W,
+ KC_BSPC, 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_ENT, BP_APOS, BP_Q, BP_G, BP_H, BP_F, KC_RSFT,
+ BP_ALGR, BP_PERC, KC_APP, BP_CCED, KC_RCTL,
+
+ KC_LEFT, KC_RGHT,
+ KC_UP,
+ KC_DOWN, KC_END, KC_SPC
+ ),
+/**
+ * Same as default but for use with Canadian Multilingual on OS side
+ */
+[LR_CSA] = KEYMAP(
+ // left hand
+ KC_DLR, CSA_DQOT, CSA_LGIL, CSA_RGIL, KC_LPRN, KC_RPRN, KC_TRNS,
+ KC_TRNS, KC_B, CSA_ECUT, KC_P, KC_O, CSA_EGRV, KC_TRNS,
+ KC_EQL, KC_A, KC_U, KC_I, KC_E, KC_COMM,
+ CSA(SFT), CSA_AGRV, KC_Y, KC_X, KC_DOT, KC_K, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+
+ // right hand
+ KC_TRNS, KC_AT, KC_PLUS, KC_MINS, CSA_SLSH, KC_ASTR, KC_W,
+ KC_TRNS, CSA_DCRC, KC_V, KC_D, KC_L, KC_J, KC_Z,
+ KC_C, KC_T, KC_S, KC_R, KC_N, KC_M,
+ KC_TRNS, CSA_APOS, KC_Q, KC_G, KC_H, KC_F, CSA(SFT),
+ MO(LR_CSA_AGR), KC_PERC, KC_TRNS, CSA_CCED, KC_LCTL, // RCTL has a special behaviour in CSA so use LCTL
+
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+/* Shifted BÉPO over Canadian Multilingual
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | # | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | | | | ! | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | ° | | | | | ; |------| |------| | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | : | | | | | ? | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | ` | | | |
+ * `----------------------------------' `-----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[LR_CSA_SFT] = KEYMAP(
+ // left hand
+ KC_HASH, M(M_1), M(M_2), M(M_3), M(M_4), M(M_5), KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ M(M_DEGR),KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(M_SCLN),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_COLN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ M(M_NBSP), KC_TRNS, KC_TRNS,
+
+ // right hand
+ KC_TRNS, M(M_6), M(M_7), M(M_8), M(M_9), M(M_0), KC_TRNS,
+ KC_TRNS, KC_EXLM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, CSA_QEST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ CSA(SFT_AGR), M(M_GRV), KC_TRNS, KC_TRNS, KC_TRNS,
+
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, M(M_NBSP)
+ ),
+/* AltGr-ed BÉPO over Canadian Multilingual
+ * "////" indicates that the key is disabled (unsupported bépo character)
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | – | — | < | > | [ | ] | | | | ^ | ± | //// | ÷ | × | dead ˘ |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | |dead '| & | œ |dead `| | | | ¡ |dead ˇ| ð | //// | ij | ////// |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | ////// | æ | ù |dead "| € | ̛’ |------| |------| © | þ | ß | ® |dead ~| dead ¯ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | \ | { | } | … | ~ | | | | ¿ |dead °| μ | //// |dead ˛| |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | //// | |dead ¸| |
+ * `----------------------------------' `-----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | _ | |------| |------| | _ |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[LR_CSA_AGR] = KEYMAP(
+ // left hand
+ MUC(NDSH), MUC(MDSH), CSA_LESS, CSA_GRTR, CSA_LBRC, CSA_RBRC, KC_TRNS,
+ KC_TRNS, CSA_PIPE, CSA_DACT, KC_AMPR, CSA_OE, CSA_DGRV, KC_TRNS,
+ KC_NO, CSA_AE, CSA_UGRV, CSA_DTRM, CSA_EURO, CSA_RQOT,
+ CSA(AGR_SFT), CSA_BSLS, CSA_LCBR, CSA_RCBR, MUC(ELPS), CSA_TILD, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_UNDS, CSA(AGR_SFT), KC_TRNS,
+
+ // right hand
+ KC_TRNS, M(M_CRC), CSA_PSMS, KC_NO, CSA_DVSN, CSA_TIMS, CSA_DBRV,
+ KC_TRNS, CSA_IXLM, CSA_DCAR, CSA_ETH, KC_NO, CSA_IJ, KC_NO,
+ CSA_CPRT, CSA_THRN, CSA_SRPS, CSA_RTM, CSA_DTLD, CSA_DMCR,
+ KC_TRNS, CSA_IQST, CSA_DRNG, CSA_MU, KC_NO, CSA_DOGO, CSA(AGR_SFT),
+ KC_TRNS, KC_NO, KC_TRNS, CSA_DCED, KC_TRNS,
+
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, CSA(AGR_SFT), KC_UNDS
+ ),
+/* AltGr-shifted BÉPO over Canadian Multilingual
+ * "////" indicates that the key is disabled (unsupported bépo character or unused in bépo)
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | ¶ | //// | “ | †| //// | //// | | | | //// | ¬ | ¼ | ½ | ¾ | ////// |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | ¦ | Ë | § | Å’ | ` | | | | //// | //// | à | //// | IJ | ////// |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | ////// | Æ | Ù |dead-˙| //// | //// |------| |------| //// | Þ | ẞ | ™ | //// | º |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | //// | ‘ | ’ | //// | //// | | | | //// | //// | //// | //// | ª | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[LR_CSA_AGR_SFT] = KEYMAP(
+ // left hand
+ CSA_PARG, KC_NO, CSA_LDQT, CSA_RDQT, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, CSA_BPIP, CSA_DDCT, CSA_SECT, S(CSA_OE), M(M_GRV), KC_TRNS,
+ KC_NO, S(CSA_AE), S(CSA_UGRV), CSA_DDTA, KC_NO, KC_NO,
+ CSA(AGR_SFT), KC_NO, CSA_LQOT, CSA_RQOT, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, CSA(AGR_SFT), KC_TRNS,
+
+ // right hand
+ KC_TRNS, KC_NO, CSA_NEGT, CSA_1QRT, CSA_1HLF, CSA_3QRT, KC_NO,
+ KC_TRNS, KC_NO, KC_NO, S(CSA_ETH), KC_NO, S(CSA_IJ), KC_NO,
+ KC_NO, S(CSA_THRN), S(CSA_SRPS), CSA_TM, KC_NO, CSA_ORDO,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, CSA_ORDA, CSA(AGR_SFT),
+ CSA(SFT_AGR), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, CSA(AGR_SFT), KC_TRNS
+ ),
+/* Numeric Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | | | | | | Tab | / | * | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | F6 | F7 | F8 | F9 | F10 | | | | | Home | 7 | 8 | 9 | + |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | F11 | F12 | | | |------| |------| Up | End | 4 | 5 | 6 | + |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | Left | Down | Right| 1 | 2 | 3 |KpEnter |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | 0 | 00 | . |Etr/Ctl|
+ * `----------------------------------' `-----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | |n.lock|c.lock|
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[LR_NUMR] = KEYMAP(
+ // left hand
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
+ KC_TRNS, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS,KC_TRNS,
+
+ // right hand
+ KC_TRNS, KC_F6, KC_F7, KC_TAB, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TRNS, KC_TRNS, KC_HOME, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_UP, KC_END, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LEFT, KC_DOWN, KC_RGHT, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_TRNS, KC_P0, M(M_DBL0),KC_PDOT, CTL_T(KC_PENT),
+
+ KC_NLCK, KC_CAPS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* fn layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * |~CA-mult| | | | | |Insert| |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk|
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | |VolUp | | | | | | | | Pause |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | RESET | | | Calc | Mail |Browsr|------| |------| | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | App | cut | copy |paste | Mute |VolDn | | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | Next | | | | |
+ * | Mute | play |------| |------| | |
+ * | | | Prev | | | | |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[LR_FN] = KEYMAP(
+ TG(LR_CSA), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
+ RESET, KC_TRNS, KC_TRNS, KC_CALC, KC_MAIL, KC_WHOM,
+ KC_TRNS, KC_APP, S(KC_DELT), LCTL(KC_INS),S(KC_INS), KC_MUTE, KC_VOLD,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+
+ KC_TRNS, KC_TRNS,
+ KC_MPRV,
+ KC_MUTE, KC_MPLY, KC_MNXT,
+
+ // right hand
+ KC_INS, KC_EJCT, KC_PWR, KC_SLEP, KC_WAKE, KC_PSCR, KC_SLCK,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+void hold_shift(void) {
+ register_code(KC_LSHIFT);
+}
+
+void release_shift(void) {
+ unregister_code(KC_LSHIFT);
+}
+
+uint16_t hextokeycode(int hex) {
+ if (hex == 0x0) {
+ return KC_P0;
+ } else if (hex < 0xA) {
+ return KC_P1 + (hex - 0x1);
+ } else {
+ return KC_A + (hex - 0xA);
+ }
+}
+
+void send_unicode(uint16_t unicode)
+{
+ // For more info on how this works per OS, see here: https://en.wikipedia.org/wiki/Unicode_input#Hexadecimal_code_input
+ // Implemented for Windows:
+ // Pressing ALT followed by + followed by the unicode code point in hex.
+ // Requires registry key HKEY_CURRENT_USER\Control Panel\Input Method\EnableHexNumpad set to String 1
+ register_code(KC_LALT);
+ register_code(KC_PPLS);
+ unregister_code(KC_PPLS);
+
+ for (int i = 12; i >= 0; i -= 4) {
+ register_code(hextokeycode((unicode >> i) & 0xF));
+ unregister_code(hextokeycode((unicode >> i) & 0xF));
+ }
+
+ unregister_code(KC_LALT);
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0 ... END_UC:
+ if (record->event.pressed) {
+ send_unicode(unicode_chars[id]);
+ }
+ break;
+ case M_CSA_SFT:
+ // BÉPO over CSA: toggle shift layer
+ layer_invert(LR_CSA_SFT);
+ if (record->event.pressed) {
+ hold_shift();
+ } else {
+ release_shift();
+ }
+ break;
+ case M_CSA_SFT_AGR:
+ // BÉPO over CSA: from shift layer, momentary altgr+shift layer
+ layer_invert(LR_CSA_AGR);
+ layer_invert(LR_CSA_AGR_SFT);
+ if (record->event.pressed) {
+ // shift not needed for LR_CSA_AGR_SFT
+ release_shift();
+ } else {
+ // back to shift layer
+ hold_shift();
+ }
+ break;
+ case M_CSA_AGR_SFT:
+ // BÉPO over CSA: from altgr layer, momentary altgr+shift layer
+ layer_invert(LR_CSA_SFT);
+ layer_invert(LR_CSA_AGR_SFT);
+ break;
+ case M_1 ... M_0:
+ case M_DEGR:
+ case M_SCLN:
+ case M_GRV:
+ case M_NBSP:
+ // macros of the shift layer that require to release shift
+ if (record->event.pressed) {
+ release_shift();
+ switch (id) {
+ case M_1 ... M_0:
+ register_code(KC_1 + (id - M_1));
+ break;
+ case M_DEGR:
+ return MACRO(DOWN(CSA_ALTGR), D(SCLN), END);
+ case M_SCLN:
+ return MACRO(D(SCLN), END);
+ case M_GRV:
+ return MACRO(I(75), DOWN(CSA_ALTGR), TYPE(CSA_DCRC), UP(CSA_ALTGR), T(SPACE), END);
+ case M_NBSP:
+ // use weak mod such that pressing another key will not be affected
+ add_weak_mods(MOD_BIT(CSA_ALTGR));
+ return MACRO(D(SPACE), END);
+ }
+ } else {
+ hold_shift();
+ switch (id) {
+ case M_1 ... M_0:
+ unregister_code(KC_1 + (id - M_1));
+ break;
+ case M_DEGR:
+ return MACRO(UP(CSA_ALTGR), U(SCLN), END);
+ case M_SCLN:
+ return MACRO(U(SCLN), END);
+ case M_NBSP:
+ del_weak_mods(MOD_BIT(CSA_ALTGR));
+ return MACRO(U(SPACE), END);
+ }
+ }
+ break;
+ case M_CRC:
+ if (record->event.pressed) {
+ return MACRO(I(75), TYPE(CSA_DCRC), T(SPACE), END);
+ }
+ break;
+ case M_DBL0:
+ if (record->event.pressed) {
+ return MACRO( I(25), T(P0), T(P0), END );
+ }
+ break;
+ case M_FNLR:
+ layer_invert(LR_NUMR);
+ layer_invert(LR_FN);
+ break;
+ case M_NMAL:
+ layer_invert(LR_NUMR);
+ if (record->event.pressed) {
+ register_code(KC_LALT);
+ } else {
+ unregister_code(KC_LALT);
+ }
+ 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) {
+
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ // led 1: numeric layer
+ if (layer_state & (1 << LR_NUMR)) {
+ ergodox_right_led_1_on();
+ }
+ // led 2: BÉPO over Canadian Multilingual
+ if (IS_CA_MULT_ENABLED()) {
+ ergodox_right_led_2_on();
+ }
+ // led 3: caps lock
+ if (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
+ ergodox_right_led_3_on();
+ }
+};
diff --git a/keyboards/ergodox/keymaps/bepo_csa/readme.md b/keyboards/ergodox/keymaps/bepo_csa/readme.md
new file mode 100644
index 000000000..d4975b226
--- /dev/null
+++ b/keyboards/ergodox/keymaps/bepo_csa/readme.md
@@ -0,0 +1,162 @@
+# BÉPO Keymap with firmware-remapping for software CSA layout
+
+This is a keymap intended to be used with the [BÉPO layout](http://bepo.fr), a French ergonomic layout designed by following Dvorak's principles.
+
+The particularity of this keymap is that it supports using the [Canadian Multilingual Standard layout](https://en.wikipedia.org/wiki/QWERTY#Canadian_Multilingual_Standard) (also known as _ACNOR keyboard_ or _CSA keyboard_, see also the [French page](https://fr.wikipedia.org/wiki/QWERTY#Clavier_canadien_multilingue_standard) which contains more details) on the OS side, by enabling the _CSA_ layer. This is especially useful for operating systems that natively provide CSA, but not BÉPO, like Windows. The CSA layout was chosen because it is probably the standard layout that provides the best character set coverage.
+
+This keymap is based on the [tm2030](../tm2030/) keymap, whose goal was to have a [TypeMatrixâ„¢ 2030](http://typematrix.com/2030/features.php) inspired layout for the ErgoDox EZ.
+
+As this keyboard is intended for French people, the rest of this page will be in French.
+
+# Keymap BÉPO avec support en firmware pour utilisation avec la disposition CSA en software
+
+Cette keymap a été conçue pour être utilisée avec la [disposition BÉPO](http://bepo.fr), la disposition francophone, ergonomique et libre basée sure les principes de Dvorak.
+
+La particularité de cette keymap est qu'elle supporte l'utilisation du [clavier canadien multilingue standard](https://fr.wikipedia.org/wiki/QWERTY#Clavier_canadien_multilingue_standard) (aussi appelé _clavier ACNOR_ ou _clavier CSA_) du côté du système d'exploitation, en activant la couche _CSA_. Ceci s'avère particulièrement utile pour les systèmes d'exploitations qui fournissent nativement le CSA, mais pas le BÉPO, comme Windows. Le clavier CSA a été choisi comme base car c'est probablement la disposition standard qui fournit la meilleure couverture en termes de caractères disponibles.
+
+Cette keymap est basée sur la keymap [tm2030](../tm2030/), dont le but est de fournir une disposition inspirée du [TypeMatrix™ 2030](http://typematrix.com/2030/features.php) pour l'ErgoDox EZ.
+
+## Couche de base
+C'est la couche par défaut, proche du TypeMatrix, avec les différences suivantes:
+- La ligne du haut (les touches `F`) et la colonne de droite sont retirées, les touches correspondantes étant déplacées ailleurs.
+- Les touches situés en bas à gauche sont redisposées dans cet ordre: `Ctrl`, `fn`, `Gui`, `num+Alt`, `Alt`
+- Les touches `shuffle` (`Alt+Tab`) et `desktop` ne sont pas supportés
+- `W` est déplacé à la place de `=`
+- `=` est déplacé sous `Tab` (au lieu d'avoir un grand `Shift`)
+- `%` et `Ç` sont déplacés à la place de `Home` et `End` respectivement
+- Les flèches ainsi que `PgUp`/`PgDown`/`Home`/`End` sont déplacées sur les pouces
+
+À noter que pour `W` et `Ç`, le but a été de ne pas les déplacer trop par rapport à la disposition BÉPO _standard_, afin de pouvoir repasser facilement sur un TypeMatrix ou un clavier traditionnel.
+
+
+```
+,--------------------------------------------------. ,--------------------------------------------------.
+| $ | " | « | » | ( | ) | Del | | Del | @ | + | - | / | * | W |
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| Tab | B | É | P | O | È |Backsp| |Backsp| ^ | V | D | L | J | Z |
+|--------+------+------+------+------+------|ace | |ace |------+------+------+------+------+--------|
+| = | A | U | I | E | , |------| |------| C | T | S | R | N | M |
+|--------+------+------+------+------+------|Enter | |Enter |------+------+------+------+------+--------|
+| LShift | À | Y | X | . | K | | | | ' | Q | G | H | F | RShift |
+`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ |LCtrl | fn | LGui |numAlt| LAlt | |Alt Gr| % | App | Ç | RCtrl|
+ `----------------------------------' `----------------------------------'
+ ,--------------. ,-------------.
+ | Esc | num | | Left |Right |
+ ,------+-------+------| |------+------+------.
+ | | | PgUp | | Up | | |
+ |Space | Home |------| |------| End |Space |
+ | | | PgDn | | Down | | |
+ `---------------------' `--------------------'
+```
+
+### Changer de couche
+
+- Utilisez `num` pour activer/désactiver [la couche numérique](#couche-numérique)
+- Maintenez `fn` pour activer temporairement [les couches numériques et Fn](#couche-fn)
+- Maintenez `numAlt` pour activer temporairement la couche numérique combinée avec `Alt` (facilite l'utilisation des raccourcis tels que `Alt`+`F4`)
+
+### Diodes
+Les diodes de l'ErgoDox EZ (côté droit) sont utilisées de la façon suivante :
+
+- diode de gauche (rouge) : indique l'activation de [la couche numérique](#couche-numérique)
+- diode du milieu (verte) : indique l'activation du [mode CSA](#couche-csa)
+- diode de droite (bleue) : indique le verrouillage majuscules
+
+## Couche CSA
+La couche _CSA_ est la même que la couche de base, pour une utilisation avec un clavier Canadien Multilingue configuré dans le système d'exploitation.
+
+Pour l'activer, appuyez sur `fn`+`$`. La [diode](#diodes) verte indique que la couche CSA est activée.
+
+### Limitations
+Seuls les caractères présents dans le clavier CSA sont parfaitement supportés. De manière générale, il s'agit des caractères suivants :
+
+- toute la couche de base
+- tous les caractères accessibles en `Shift`
+- tous les caractères de la main gauche accessibles en `AltGr` à l'exception du `≠`
+- environ la moitié des caractères de la main droite accessibles en `AltGr` et la moitié des caractères accessibles en `AltGr`+`Shift` (consultez [le fichier source](keymap.c) pour voir les caractères supportés)
+
+En particulier, les caractères suivants sont émulés via le support Unicode (Windows seulement):
+
+- le tiret cadratin (tiret long) : —
+- le tiret demi-cadratin (demi tiret) : –
+- les points de suspension : …
+
+L'implémentation actuelle ne fonctionne pas dans toutes les applications, en particulier les applications MS Office.
+
+Il est probable que l'utilisation de la couche CSA ne fonctionne pas correctement dans certains jeux vidéos.
+
+Cette fonctionnalité a été conçue et testée essentiellment pour Windows (7).
+
+### Détails techniques
+Techniquement, la couche CSA est en réalité composée de 4 couches servant à émuler la couche de base, les appuis sur `Shift` ou `Alt` et la combinaison des deux.
+
+Le changement de couches se fait par des macros afin d'activer ou désactiver plusieurs couches et la touche `Shift` en même temps.
+
+Certains caractères sont également implémentés par des macros, notamment ceux de la couche `Shift` qui n'ont pas besoin de cette touche en CSA, comme les chiffres.
+
+Les caractères Unicode se basent sur une implémentation spécifique et non celle fournie dans QMK — il faudrait sans doute migrer le code. Notez la façon dont ces caractères sont déclarés tels quels dans [le code source](keymap.c) (tableau `unicode_char`).
+
+## Couche numérique
+Couche numérique proche du TM lorsqu'on active `num`, avec les différences suivantes :
+
+- Le clavier numérique est déplacés de 1 vers le haut et vers la droite.
+- Les flèches sont décalées de 1 vers la gauche.
+- Fournit l'accès aux touches `F1` à `F12`, `caps-lock` et `num-lock`.
+
+La couche numérique est indiquée par la [diode](#diodes) de gauche (rouge). Caps-lock est indiqué par la diode de droite (bleue).
+
+La touche `numAlt` de [la couche de base](#couche-de-base) permet d'activer la couche numérique et la touche `Alt` simultanément, afin de faciliter les raccourcis claviers comme `Alt`+`F4`.
+
+```
+,--------------------------------------------------. ,--------------------------------------------------.
+| | F1 | F2 | F3 | F4 | F5 | | | | | | Tab | / | * | - |
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| | F6 | F7 | F8 | F9 | F10 | | | | | Home | 7 | 8 | 9 | + |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| | F11 | F12 | | | |------| |------| Up | End | 4 | 5 | 6 | + |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| | | | | | | | | Left | Down | Right| 1 | 2 | 3 |KpEnter |
+`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ | | | | | | | | 0 | 00 | . |Etr/Ctl|
+ `----------------------------------' `-----------------------------------'
+ ,-------------. ,-------------.
+ | | | |n.lock|c.lock|
+ ,------|------|------| |------+------+------.
+ | | | | | | | |
+ | | |------| |------| | |
+ | | | | | | | |
+ `--------------------' `--------------------'
+```
+
+## Couche Fn
+Activée simultanément avec la couche numérique lorsque l'on maintient la touche `fn`. Comme sur le TM, elle fournit l'accès aux fonctionnalités suivantes :
+
+- `couper`, `copier` et `coller` — attention: ne pas utiliser dans l'explorateur de fichiers.
+- monter/baisser/couper le volume — seulement accessible en main gauche, contrairement au TM.
+- piste précédente/suivante
+- calculatrice, e-mail et page d'accueil du navigateur web
+- `insert`, `power`, `sleep`, `wake`, `print screen`, `scroll-lock` et `pause`
+- ~CSA: (dés)activation de [la couche CSA](#couche-csa) sur `$`
+- RESET: rechargement du firmware avec Teensy-Loader (pour les développeurs)
+
+```
+,--------------------------------------------------. ,--------------------------------------------------.
+| ~CSA | | | | | |Insert| |Insert|Eject |Power |Sleep | Wake |PrtScr|ScrollLk|
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| | | | | | |VolUp | | | | | | | | Pause |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| RESET | | | Calc | Mail |Browsr|------| |------| | | | | | |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| | App | cut | copy |paste | Mute |VolDn | | | | | | | | |
+`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ | | | | | | | | | | | |
+ `----------------------------------' `----------------------------------'
+ ,-------------. ,-------------.
+ | | | | | |
+ ,------|------|------| |------+------+------.
+ | | | Next | | | | |
+ | Mute | play |------| |------| | |
+ | | | Prev | | | | |
+ `--------------------' `--------------------'
+``` \ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/coderkun_neo2/Makefile b/keyboards/ergodox/keymaps/coderkun_neo2/Makefile
new file mode 100644
index 000000000..b0fe90ab1
--- /dev/null
+++ b/keyboards/ergodox/keymaps/coderkun_neo2/Makefile
@@ -0,0 +1,3 @@
+SLEEP_LED_ENABLE = no
+UNICODE_ENABLE = yes
+COMMAND_ENABLE = no
diff --git a/keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c
index d25e2b995..b62b14449 100644
--- a/keyboards/ergodox_ez/keymaps/coderkun_neo2/keymap.c
+++ b/keyboards/ergodox/keymaps/coderkun_neo2/keymap.c
@@ -1,7 +1,7 @@
-#include "ergodox_ez.h"
-#include "debug.h"
+#include "ergodox.h"
#include "action_layer.h"
-#include "keymap_neo2.h"
+#include "led.h"
+#include "keymap_extras/keymap_neo2.h"
// Layer names
#define BASE 0 // default layer
@@ -33,7 +33,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[BASE] = KEYMAP(
// left hand
- KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL,
+ KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, NEO_GRV,
NEO_Y, NEO_X, NEO_V, NEO_L, NEO_C, NEO_W, KC_HOME,
NEO_L1_L, NEO_U, NEO_I, NEO_A, NEO_E, NEO_O,
KC_LSFT, NEO_UE, NEO_OE, NEO_AE, NEO_P, NEO_Z, TG(PMQ),
@@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_MINS,
KC_SPC, KC_ENT, ALL_T(KC_NO),
// right hand
- DE_ACUT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ NEO_ACUT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_END, NEO_K, NEO_H, NEO_G, NEO_F, NEO_Q, NEO_SS,
NEO_S, NEO_N, NEO_R, NEO_T, NEO_D, NEO_L1_R,
TG(PMN), NEO_B, NEO_M, KC_COMM,KC_DOT, NEO_J, KC_RSFT,
@@ -137,13 +137,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ┌───────┬─────┬─────┬─────┬─────┬─────┬─────┠┌─────┬─────┬─────┬─────┬─────┬─────┬───────â”
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
* ├───────┼─────┼─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┼─────┼───────┤
- * │ │ │ │ │ ✕ │ │ │ │ │ │ F9 │ F10 │ F11 │ F12 │ │
+ * │ │ ┌ │ ┬ │ ┠│ ─ │ │ │ │ │ │ │ F9 │ F10 │ F11 │ F12 │ │
* ├───────┼─────┼─────┼─────╆─────╅─────┤ │ │ ├─────╆─────╅─────┼─────┼─────┼───────┤
- * │ │ │ │ │ ✓ │ ├─────┤ ├─────┤ │ F5 │ F6 │ F7 │ F8 │ │
- * ├───────┼─────┼─────┼─────╄─────╃─────┤ │ │ ├─────╄─────╃─────┼─────┼─────┼───────┤
- * │ │ │ │ │ │ │ │ │ │ │ F1 │ F2 │ F3 │ F4 │ │
+ * │ │ ├ │ ┼ │ ┤ │ ✓ │ ✕ ├─────┤ ├─────┤ │ F5 │ F6 │ F7 │ F8 │ │
+ * ├───────┼─────┼─────┼─────╄─────╃─────┤(TL2)│ │(TL3)├─────╄─────╃─────┼─────┼─────┼───────┤
+ * │ │ └ │ ┴ │ ┘ │ ↔ │ ⇔ │ │ │ │ │ F1 │ F2 │ F3 │ F4 │ │
* └─┬─────┼─────┼─────┼─────┼─────┼─────┴─────┘ └─────┴─────┼─────┼─────┼─────┼─────┼─────┬─┘
- * │ │ │(MO1)│ │ │ │ │ │(MO1)│ │ │
+ * │ │ │(MO1)│ │(MO4)│ │(MO4)│ │(MO1)│ │ │
* └─────┴─────┴─────┴─────┴─────┘ ┌─────┬─────┠┌─────┬─────┠└─────┴─────┴─────┴─────┴─────┘
* │ Ms↠│ Ms↑ │ │ Ms↓ │ Ms→ │
* ┌─────┼─────┼─────┤ ├─────┼─────┼─────â”
@@ -155,9 +155,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[FMU] = KEYMAP(
// left hand
KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,UC(0x2713),KC_TRNS,KC_TRNS,
- KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,UC(0x2715),KC_TRNS,
- KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS, UC(0x250C),UC(0x252C),UC(0x2510),UC(0x2500),UC(0x2502),KC_TRNS,
+ KC_TRNS, UC(0x251C),UC(0x253C),UC(0x2524),UC(0x2713),UC(0x2715),
+ KC_TRNS, UC(0x2514),UC(0x2534),UC(0x2518),UC(0x2194),UC(0x21D4),KC_TRNS,
KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_MS_L, KC_MS_U,
KC_BTN1,
@@ -244,6 +244,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
+ set_unicode_input_mode(UC_LNX);
};
@@ -267,8 +268,50 @@ void matrix_scan_user(void)
ergodox_right_led_3_on();
break;
default:
- ergodox_board_led_off();
+ if(host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) {
+ ergodox_led_all_set(LED_BRIGHTNESS_HI);
+ ergodox_right_led_1_on();
+ }
+ else {
+ ergodox_board_led_off();
+ }
break;
}
};
+
+
+// Override Unicode start method to use NEO_U instead of KC_U
+void unicode_input_start (void) {
+ register_code(KC_LCTL);
+ register_code(KC_LSFT);
+ register_code(NEO_U);
+ unregister_code(NEO_U);
+ unregister_code(KC_LSFT);
+ unregister_code(KC_LCTL);
+};
+
+// Override method to use NEO_A instead of KC_A
+uint16_t hex_to_keycode(uint8_t hex)
+{
+ if (hex == 0x0) {
+ return KC_0;
+ } else if (hex < 0xA) {
+ return KC_1 + (hex - 0x1);
+ } else {
+ switch(hex) {
+ case 0xA:
+ return NEO_A;
+ case 0xB:
+ return NEO_B;
+ case 0xC:
+ return NEO_C;
+ case 0xD:
+ return NEO_D;
+ case 0xE:
+ return NEO_E;
+ case 0xF:
+ return NEO_F;
+ }
+ }
+}
diff --git a/keyboards/ergodox_ez/keymaps/coderkun_neo2/readme.md b/keyboards/ergodox/keymaps/coderkun_neo2/readme.md
index 2a4d3a535..2a4d3a535 100644
--- a/keyboards/ergodox_ez/keymaps/coderkun_neo2/readme.md
+++ b/keyboards/ergodox/keymaps/coderkun_neo2/readme.md
diff --git a/keyboards/ergodox_ez/keymaps/colemak/keymap.c b/keyboards/ergodox/keymaps/colemak/keymap.c
index 9601726f7..7ef81ab4b 100644
--- a/keyboards/ergodox_ez/keymaps/colemak/keymap.c
+++ b/keyboards/ergodox/keymaps/colemak/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/colemak/readme.md b/keyboards/ergodox/keymaps/colemak/readme.md
index e28b2f085..e28b2f085 100644
--- a/keyboards/ergodox_ez/keymaps/colemak/readme.md
+++ b/keyboards/ergodox/keymaps/colemak/readme.md
diff --git a/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keyboard-layout.png b/keyboards/ergodox/keymaps/colemak_osx_pc_no/keyboard-layout.png
index 57df5a1f9..57df5a1f9 100644
--- a/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keyboard-layout.png
+++ b/keyboards/ergodox/keymaps/colemak_osx_pc_no/keyboard-layout.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keymap.c b/keyboards/ergodox/keymaps/colemak_osx_pc_no/keymap.c
index 3b74d266f..eb0156c45 100644
--- a/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/keymap.c
+++ b/keyboards/ergodox/keymaps/colemak_osx_pc_no/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
#include "keymap_norwegian.h"
@@ -39,7 +39,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
NO_COLN, KC_A, KC_R, KC_S, KC_T, KC_D,
KC_EXLM, KC_Z, KC_X, KC_C, KC_V, KC_B, NO_SCLN,
MO(4), KC_BTN1, KC_BTN2, KC_TAB,GUI_T(KC_COMMA),
- NO_AMP, NO_PIPE,
+ NO_AMPR, NO_PIPE,
NO_PLUS,
KC_FN1,CTL_T(KC_DOT),ALT_T(NO_MINS),
// right hand
diff --git a/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/readme.md b/keyboards/ergodox/keymaps/colemak_osx_pc_no/readme.md
index 48f095cae..48f095cae 100644
--- a/keyboards/ergodox_ez/keymaps/colemak_osx_pc_no/readme.md
+++ b/keyboards/ergodox/keymaps/colemak_osx_pc_no/readme.md
diff --git a/keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev.png b/keyboards/ergodox/keymaps/csharp_dev/csharp_dev.png
index 6fba568fc..6fba568fc 100644
--- a/keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev.png
+++ b/keyboards/ergodox/keymaps/csharp_dev/csharp_dev.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev_legend.png b/keyboards/ergodox/keymaps/csharp_dev/csharp_dev_legend.png
index b0a1c513c..b0a1c513c 100644
--- a/keyboards/ergodox_ez/keymaps/csharp_dev/csharp_dev_legend.png
+++ b/keyboards/ergodox/keymaps/csharp_dev/csharp_dev_legend.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/csharp_dev/keymap.c b/keyboards/ergodox/keymaps/csharp_dev/keymap.c
index e9648ede7..e0c66f487 100644
--- a/keyboards/ergodox_ez/keymaps/csharp_dev/keymap.c
+++ b/keyboards/ergodox/keymaps/csharp_dev/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/csharp_dev/readme.md b/keyboards/ergodox/keymaps/csharp_dev/readme.md
index 96af077ad..96af077ad 100644
--- a/keyboards/ergodox_ez/keymaps/csharp_dev/readme.md
+++ b/keyboards/ergodox/keymaps/csharp_dev/readme.md
diff --git a/keyboards/ergodox_ez/keymaps/dave/keymap.c b/keyboards/ergodox/keymaps/dave/keymap.c
index e9480af3e..23c4e0490 100644
--- a/keyboards/ergodox_ez/keymaps/dave/keymap.c
+++ b/keyboards/ergodox/keymaps/dave/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
@@ -38,7 +38,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_PSCREEN,
- TO(PROG, ON_PRESS),
+ TO(PROG),
KC_SPC, MO(NAVI), KC_LGUI,
// right hand
KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_BSPC,
@@ -47,7 +47,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
KC_RALT,KC_LBRC,KC_RBRC,KC_NO, CTL_T(KC_QUOT),
MT(0x5, KC_NO), MT(0x5, KC_NO),
- TO(PROG, ON_PRESS),
+ TO(PROG),
KC_RGUI, MO(PROG), KC_SPC
),
@@ -81,7 +81,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
- TO(NAVI, ON_PRESS),
+ TO(NAVI),
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
KC_TRNS, KC_TRNS, KC_NO, KC_PSLS, KC_PAST, KC_PMNS, KC_EQUAL,
@@ -90,7 +90,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PENT, KC_TRNS,
KC_P0, KC_P0, KC_PDOT, KC_PENT, KC_TRNS,
KC_TRNS, KC_TRNS,
- TO(NAVI, ON_PRESS),
+ TO(NAVI),
KC_TRNS, KC_TRNS, KC_TRNS
),
@@ -123,7 +123,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_TRNS, KC_TRNS,
- TO(BASE, ON_PRESS),
+ TO(BASE),
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
@@ -132,7 +132,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS,
KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
- TO(BASE, ON_PRESS),
+ TO(BASE),
KC_TRNS, KC_TRNS, KC_TRNS
),
};
diff --git a/keyboards/ergodox_ez/keymaps/dave/readme.md b/keyboards/ergodox/keymaps/dave/readme.md
index aa0f9bd19..aa0f9bd19 100644
--- a/keyboards/ergodox_ez/keymaps/dave/readme.md
+++ b/keyboards/ergodox/keymaps/dave/readme.md
diff --git a/keyboards/ergodox_ez/keymaps/default/default.png b/keyboards/ergodox/keymaps/default/default.png
index 6575f7b5e..6575f7b5e 100644
--- a/keyboards/ergodox_ez/keymaps/default/default.png
+++ b/keyboards/ergodox/keymaps/default/default.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/default/default_highres.png b/keyboards/ergodox/keymaps/default/default_highres.png
index 7d9f045f4..7d9f045f4 100644
--- a/keyboards/ergodox_ez/keymaps/default/default_highres.png
+++ b/keyboards/ergodox/keymaps/default/default_highres.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/default/keymap.c b/keyboards/ergodox/keymaps/default/keymap.c
new file mode 100644
index 000000000..4eff28085
--- /dev/null
+++ b/keyboards/ergodox/keymaps/default/keymap.c
@@ -0,0 +1,223 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // can always be here
+ EPRM,
+ VRSN,
+ RGB_SLD
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | BkSp | A | S | D | F | G |------| |------| H |J/Alt | K | L |; / L2|' / Cmd |
+ * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | App | LGui | | Alt |Ctrl/Esc|
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * | Space|Backsp|------| |------| Tab |Enter |
+ * | |ace | End | | PgDn | | |
+ * `--------------------' `----------------------'
+ */
+// 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_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
+ KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
+ KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
+ LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
+ ALT_T(KC_APP), KC_LGUI,
+ KC_HOME,
+ KC_SPC,KC_BSPC,KC_END,
+ // right hand
+ KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, ALT_T(KC_J), KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
+ MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
+ KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
+ KC_LALT, CTL_T(KC_ESC),
+ KC_PGUP,
+ KC_PGDN,KC_TAB, KC_ENT
+ ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,---------------------------------------------------. ,--------------------------------------------------.
+ * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+ * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | EPRM | | | | | | | . | 0 | = | |
+ * `-----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * |Animat| | |Toggle|Solid |
+ * ,------|------|------| |------+------+------.
+ * |Bright|Bright| | | |Hue- |Hue+ |
+ * |ness- |ness+ |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+ // left hand
+ VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+ KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+ KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+ EPRM,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ RGB_MOD,KC_TRNS,
+ KC_TRNS,
+ RGB_VAD,RGB_VAI,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
+ KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
+ KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
+ RGB_TOG, RGB_SLD,
+ KC_TRNS,
+ KC_TRNS, RGB_HUD, RGB_HUI
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | MsUp | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Prev | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | |Brwser|
+ * | | |------| |------| |Back |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ break;
+ case 1:
+ if (record->event.pressed) { // For resetting EEPROM
+ eeconfig_init();
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ // dynamically generate these.
+ case EPRM:
+ if (record->event.pressed) {
+ eeconfig_init();
+ }
+ return false;
+ break;
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+ break;
+ case RGB_SLD:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode(1);
+ #endif
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+// 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) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboards/ergodox_ez/keymaps/default/readme.md b/keyboards/ergodox/keymaps/default/readme.md
index 8f6dba45e..f68138ed6 100644
--- a/keyboards/ergodox_ez/keymaps/default/readme.md
+++ b/keyboards/ergodox/keymaps/default/readme.md
@@ -2,6 +2,8 @@
## Changelog
+* Sep 22, 2016:
+ * Created a new key in layer 1 (bottom-corner key) that resets the EEPROM.
* Feb 2, 2016 (V1.1):
* Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows).
diff --git a/keyboards/ergodox_ez/keymaps/default_osx/default_osx_highres.png b/keyboards/ergodox/keymaps/default_osx/default_osx_highres.png
index 04f46bbd5..04f46bbd5 100644
--- a/keyboards/ergodox_ez/keymaps/default_osx/default_osx_highres.png
+++ b/keyboards/ergodox/keymaps/default_osx/default_osx_highres.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/default_osx/keymap.c b/keyboards/ergodox/keymaps/default_osx/keymap.c
index c57ffbb88..e9a242e07 100644
--- a/keyboards/ergodox_ez/keymaps/default_osx/keymap.c
+++ b/keyboards/ergodox/keymaps/default_osx/keymap.c
@@ -1,7 +1,7 @@
// Netable differences vs. the default firmware for the ErgoDox EZ:
// 1. The Cmd key is now on the right side, making Cmd+Space easier.
// 2. The media keys work on OSX (But not on Windows).
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/default_osx/readme.md b/keyboards/ergodox/keymaps/default_osx/readme.md
index aa749aac9..aa749aac9 100644
--- a/keyboards/ergodox_ez/keymaps/default_osx/readme.md
+++ b/keyboards/ergodox/keymaps/default_osx/readme.md
diff --git a/keyboards/ergodox_ez/keymaps/dragon788/keymap.c b/keyboards/ergodox/keymaps/dragon788/keymap.c
index 3aec8c6cf..d33bc6a25 100644
--- a/keyboards/ergodox_ez/keymaps/dragon788/keymap.c
+++ b/keyboards/ergodox/keymaps/dragon788/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/dvorak/dvorak.png b/keyboards/ergodox/keymaps/dvorak/dvorak.png
index cb8316309..cb8316309 100644
--- a/keyboards/ergodox_ez/keymaps/dvorak/dvorak.png
+++ b/keyboards/ergodox/keymaps/dvorak/dvorak.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/dvorak/keymap.c b/keyboards/ergodox/keymaps/dvorak/keymap.c
index 22947327d..d3609c673 100644
--- a/keyboards/ergodox_ez/keymaps/dvorak/keymap.c
+++ b/keyboards/ergodox/keymaps/dvorak/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox/keymaps/dvorak_emacs/keymap.c b/keyboards/ergodox/keymaps/dvorak_emacs/keymap.c
new file mode 100755
index 000000000..d33c6e527
--- /dev/null
+++ b/keyboards/ergodox/keymaps/dvorak_emacs/keymap.c
@@ -0,0 +1,165 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+/******************************************************************************************
+ * DVORAK LAYOUT (see http://djelibeibi.unex.es/dvorak/)
+ * Layer 1: auxiliary keys
+ * Layer 2: full qwerty layout
+ *****************************************************************************************/
+
+// LAYERS
+#define BASE 0 // dvorak layout (default)
+#define AUX 1 // auxiliary keys
+
+// 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 | Esc | | Esc | 6 | 7 | 8 | 9 | 0 | = / + |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | ~ |" / ' |, / < |. / > | P | Y | [ | | ] | F | G | C | H | L | / / ? |
+ * |--------+------+------+------+------+------| { | | } |------+------+------+------+------+--------|
+ * | Tab | A | O | E |U/LSft| I/L1 |------| |------| D/L1|R/RSft| T | N | S | - / _ |
+ * |--------+------+------+------+------+------| LGUI | | LGUI |------+------+------+------+------+--------|
+ * | {/LSft |; / : | Q | J | K | X | | | | B | M | W | V | Z | }/RSft |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | ~L1 | | ~L1 | | | \ / || |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | HOME | END | | LEFT | RIGHT|
+ * ,------|------|------| |------+--------+------.
+ * | BSPC | DEL | PGUP | | UP | SPACE |RETURN|
+ * | / | / |------| |------| / | / |
+ * | LCTL | LALT |PGDWN | | DOWN | LALT | LCTL |
+ * `--------------------' `----------------------'
+ *
+ */
+[BASE] = KEYMAP(
+ // left hand
+ KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
+ KC_TILD, KC_QUOTE, KC_COMM,KC_DOT, KC_P, KC_Y, KC_LBRACKET,
+ KC_TAB, KC_A, KC_O, KC_E, SFT_T(KC_U), LT(AUX, KC_I),
+ SFT_T(KC_LBRC), KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_LGUI,
+ KC_NO, KC_NO, KC_NO, KC_NO, MO(AUX),
+ KC_HOME, KC_END,
+ KC_PGUP,
+ CTL_T(KC_BSPC), ALT_T(KC_DEL), KC_PGDN,
+ // right hand
+ KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
+ KC_RBRACKET, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLASH,
+ LT(AUX, KC_D), SFT_T(KC_H), KC_T, KC_N, KC_S, KC_MINUS,
+ KC_LGUI, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_T(KC_RBRC),
+ MO(AUX), KC_NO, KC_NO, KC_BSLASH, KC_NO,
+ KC_LEFT, KC_RIGHT,
+ KC_UP,
+ KC_DOWN, ALT_T(KC_ENT), CTL_T(KC_SPC)
+ ),
+/* Keymap 1: Aux layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | VolUp | | | | | | SLEEP | PWR | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | VolDn | F1 | F2 | F3 | F4 | | | | | | 7 | 8 | 9 | * | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | F5 | F6 | F7 | F8 | TRANS|------| |------|TRANS | 4 | 5 | 6 | + | |
+ * |--------+------+------+------+------+------| | |PSCR |------+------+------+------+------+--------|
+ * | TRANS | F9 | F10 | F11 | F12 | | | | | | 1 | 2 | 3 | / | TRANS |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |CTRL-S|CTRL-Z|CTRL-X|CTRL-C| TRANS| | TRANS| . | 0 | = | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | TRANS| TRANS| | TRANS| TRANS|
+ * ,------|------|------| |------+------+------.
+ * | | | TRANS| | TRANS| | |
+ * |TRANS |TRANS |------| |------| TRANS| TRANS|
+ * | | | TRANS| | TRANS| | |
+ * `--------------------' `--------------------'
+ */
+[AUX] = KEYMAP(
+ // left hand
+ KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_SLEP,
+ KC_VOLD, KC_F1, KC_F2, KC_F3, KC_F4, KC_NO, KC_NO,
+ KC_NO , KC_F5, KC_F6, KC_F7, KC_F8, KC_TRNS,
+ KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO,
+ LCTL(KC_S), LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), KC_TRNS,
+ KC_TRNS , KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_PWR, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_7, KC_8, KC_9, KC_PAST, KC_NO,
+ KC_TRNS, KC_4, KC_5, KC_6, KC_PPLS, KC_NO,
+ KC_PSCR, KC_NO, KC_1, KC_2, KC_3, KC_PSLS, KC_TRNS,
+ KC_TRNS,KC_DOT, KC_0, KC_PEQL, KC_NO,
+ KC_TRNS , KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(AUX) // FN1 - Momentary Layer 1 (Aux)
+};
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ 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_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+}
diff --git a/keyboards/ergodox/keymaps/dvorak_emacs/readme.md b/keyboards/ergodox/keymaps/dvorak_emacs/readme.md
new file mode 100644
index 000000000..a3fc34afe
--- /dev/null
+++ b/keyboards/ergodox/keymaps/dvorak_emacs/readme.md
@@ -0,0 +1,70 @@
+# Ergodox Dvorak Layout with emacs binding in mind
+ * Control & Alt key on the thumbs (activated if pressed with another key).
+ * In the same way, "U" and "R" are the shift modifier if pressed with another key.
+ * "I" and "D" set the layer 1 for the auxiliary keys if pressed with another key.
+ * Software layout set to english.
+
+## Keymap Layers
+ - L0: dvorak with some customizations (see layout below)
+ - L1: auxiliary keys (includes function keys, numpad...)
+
+
+### Keymap 0: Base layer
+Keys with double values (like U/LSft) correspond to the 'tapped' key and the 'held' key, respectively
+
+<pre><code>
+
+,--------------------------------------------------. ,--------------------------------------------------.
+| | 1 | 2 | 3 | 4 | 5 | Esc | | Esc | 6 | 7 | 8 | 9 | 0 | = |
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| ~ | ' | , | . | P | Y | [ | | ] | F | G | C | H | L | / |
+|--------+------+------+------+------+------| { | | } |------+------+------+------+------+--------|
+| Tab | A | O | E |U/LSft| I/L1 |------| |------| D/L1|R/RSft| T | N | S | - |
+|--------+------+------+------+------+------| LGUI | | LGUI |------+------+------+------+------+--------|
+| {/LSft | ; | Q | J | K | X | | | | B | M | W | V | Z | }/RSft |
+`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ | | | | | ~L1 | | ~L1 | | | \ | |
+ `----------------------------------' `----------------------------------'
+ ,-------------. ,-------------.
+ | HOME | END | | LEFT | RIGHT|
+ ,------|------|------| |------+--------+------.
+ | BSPC | DEL | PGUP | | UP | SPACE |RETURN|
+ | / | / |------| |------| / | / |
+ | LCTL | LALT |PGDWN | | DOWN | LALT | LCTL |
+ `--------------------' `----------------------'
+
+</pre></code>
+
+### Keymap 1: Aux layer
+
+<pre><code>
+
+,--------------------------------------------------. ,--------------------------------------------------.
+| VolUp | | | | | | SLEEP | PWR | | | | | | |
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| VolDn | F1 | F2 | F3 | F4 | | | | | | 7 | 8 | 9 | * | |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| | F5 | F6 | F7 | F8 | TRANS|------| |------|TRANS | 4 | 5 | 6 | + | |
+|--------+------+------+------+------+------| | |PSCR |------+------+------+------+------+--------|
+| TRANS | F9 | F10 | F11 | F12 | | | | | | 1 | 2 | 3 | / | TRANS |
+`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ |CTRL-S|CTRL-Z|CTRL-X|CTRL-C| TRANS| | TRANS| . | 0 | = | |
+ `----------------------------------' `----------------------------------'
+ ,-------------. ,-------------.
+ | TRANS| TRANS| | TRANS| TRANS|
+ ,------|------|------| |------+------+------.
+ | | | TRANS| | TRANS| | |
+ |TRANS |TRANS |------| |------| TRANS| TRANS|
+ | | | TRANS| | TRANS| | |
+ `--------------------' `--------------------'
+
+</pre></code>
+
+
+
+## Generation of .hex file
+> In the "qmk_firmware/keyboards/ergodox" directory.
+
+> Execute "make dvorak_emacs". Then the hex file "ergodox_ez_dvorak_emacs.hex" is in the root directory : "qmk_firmware".
+
+> Flash with `teensy_loader` binary
diff --git a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout0.png b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout0.png
index 6a36f9bfa..6a36f9bfa 100644
--- a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout0.png
+++ b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout0.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout1.png b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout1.png
index c6e6d913c..c6e6d913c 100644
--- a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout1.png
+++ b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout1.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout2.png b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout2.png
index 23f56ff4c..23f56ff4c 100644
--- a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keyboard-layout2.png
+++ b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keyboard-layout2.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keymap.c b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keymap.c
index 82f55b4bc..89eae5208 100644
--- a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/keymap.c
+++ b/keyboards/ergodox/keymaps/dvorak_intl_squisher/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/readme.md b/keyboards/ergodox/keymaps/dvorak_intl_squisher/readme.md
index 984106ff4..984106ff4 100644
--- a/keyboards/ergodox_ez/keymaps/dvorak_intl_squisher/readme.md
+++ b/keyboards/ergodox/keymaps/dvorak_intl_squisher/readme.md
diff --git a/keyboards/ergodox/keymaps/dvorak_plover/README.md b/keyboards/ergodox/keymaps/dvorak_plover/README.md
new file mode 100644
index 000000000..c8287b019
--- /dev/null
+++ b/keyboards/ergodox/keymaps/dvorak_plover/README.md
@@ -0,0 +1,14 @@
+Dvorak support, plover support, gaming support
+
+I'm used to the Kinesis, so originally I was just going to patch up
+the thumb keys to be more familiar. But the ergodox is really well
+suited to NKRO support in Plover, so I added a layer for that, and
+then I remembered that dvorak can be really annoying for video
+games (try to reach WASD), so I added a layer for that.
+
+The result is probably a bit idiosyncratic, but it works for me.
+
+(I also don't have any press/hold distinction keys, because that
+confuses my fuzzy little brain.)
+
+Contributed by seebs (seebs@seebs.net)
diff --git a/keyboards/ergodox/keymaps/dvorak_plover/keymap.c b/keyboards/ergodox/keymaps/dvorak_plover/keymap.c
new file mode 100644
index 000000000..d0505609d
--- /dev/null
+++ b/keyboards/ergodox/keymaps/dvorak_plover/keymap.c
@@ -0,0 +1,230 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define PLVR 2 // media keys
+#define QWRT 3 // qwerty layer for gaming
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | = | 1 | 2 | 3 | 4 | 5 | Esc | | Esc | 6 | 7 | 8 | 9 | 0 | \ |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | ' | , | . | P | Y | L1 | | L2 | F | G | C | R | L | / |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | LGui | A | O | E | U | I |------| |------| D | H | T | N | S | - |
+ * |--------+------+------+------+------+------| Esc | | L3 |------+------+------+------+------+--------|
+ * | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |Lalt | Grv | | Left | Right| | Up | Down | [ | ] | RAlt |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,---------------.
+ * | LCtrl| Alt | | LGui | RCtrl |
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * |Backsp|Delete|------| |------| Enter |Space |
+ * | ace| | End | | PgDn | | |
+ * `--------------------' `----------------------'
+ */
+// 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_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, MO(SYMB),
+ KC_LGUI, KC_A, KC_O, KC_E, KC_U, KC_I,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_ESC,
+ KC_LALT, KC_GRV, KC_ESC, KC_LEFT,KC_RGHT,
+ KC_LCTL, KC_LALT,
+ KC_HOME,
+ KC_BSPC,KC_DEL,KC_END,
+ // right hand
+ KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
+ TG(PLVR), KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
+ KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
+ TG(QWRT),KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
+ KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_RALT,
+ KC_LGUI, KC_RCTL,
+ KC_PGUP,
+ KC_PGDN,KC_ENT, KC_SPC
+ ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | | | Up | KP7 | KP8 | KP9 | KP* | F12 |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` |------| |------| Down | KP4 | KP5 | KP6 | KP+ | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | KP1 | KP2 | KP3 | KP/ | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | KP. | KP0 | KP= | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+ // left hand
+ KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+ KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+ KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_UP, KC_P7, KC_P8, KC_P9, KC_PAST, KC_F12,
+ KC_DOWN, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS,
+ KC_TRNS, KC_AMPR, KC_P1, KC_P2, KC_P3, KC_PSLS, KC_TRNS,
+ KC_TRNS,KC_PDOT, KC_P0, KC_PEQL, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Steno for Plover from https://github.com/shayneholmes/tmk_keyboard/commit/11290f8489013018f778627db725160c745e75bd
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | 1 | 2 | 3 | 4 | 5 | | | L2 | 6 | 7 | 8 | 9 | 0 | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | q | w | e | r | t |------| |------| y | u | i | o | p | [ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | a | s | d | f | g | | | | h | j | k | l | ; | ' |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | c | v |------| |------| n | m |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+
+[PLVR] = KEYMAP( // layout: layer 2: Steno for Plover
+ // left hand
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS,
+ KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T,
+ KC_NO, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_FN4, KC_NO,
+ KC_NO,
+ KC_C, KC_V, KC_NO,
+ // right hand
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ TG(2), KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
+ KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
+ KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_NO, KC_N, KC_M
+),
+/* Keymap 3: qwerty-ish
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | = | 1 | 2 | 3 | 4 | 5 | Esc | | Esc | 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | LGui | A | S | D | F | G |------| |------| H | J | K | L | ; | LGui |
+ * |--------+------+------+------+------+------| Spc | | L3 |------+------+------+------+------+--------|
+ * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | Lalt | Grv | '" | Left | Right| | Up | Down | [ | ] | RAlt |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,---------------.
+ * | LCtrl| LAlt | | LGui | RCtrl |
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * |Backsp|Delete|------| |------| Enter |Space |
+ * | ace| | End | | PgDn | | |
+ * `--------------------' `----------------------'
+ */
+[QWRT] = KEYMAP( // layer 3: qwerty for gaming
+ // left hand
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
+ KC_LGUI, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPACE,
+ KC_LALT, KC_GRV, KC_QUOT, KC_LEFT,KC_RGHT,
+ KC_LCTL, KC_LALT,
+ KC_HOME,
+ KC_BSPC,KC_DEL,KC_END,
+ // right hand
+ KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ TG(QWRT), KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
+ KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_RALT,
+ KC_LGUI, KC_RCTL,
+ KC_PGUP,
+ KC_PGDN,KC_ENT, KC_SPC
+ ),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ 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) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ case 3:
+ ergodox_right_led_3_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/Makefile b/keyboards/ergodox/keymaps/dvorak_programmer/Makefile
new file mode 100644
index 000000000..3c65e25e1
--- /dev/null
+++ b/keyboards/ergodox/keymaps/dvorak_programmer/Makefile
@@ -0,0 +1,8 @@
+BOOTMAGIC_ENABLE=no
+COMMAND_ENABLE=no
+SLEEP_LED_ENABLE=no
+FORCE_NKRO ?= yes
+DEBUG_ENABLE = no
+CONSOLE_ENABLE = no
+TAP_DANCE_ENABLE = yes
+MOUSEKEY_ENABLE = yes
diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/README.md b/keyboards/ergodox/keymaps/dvorak_programmer/README.md
new file mode 100644
index 000000000..3e4a2545b
--- /dev/null
+++ b/keyboards/ergodox/keymaps/dvorak_programmer/README.md
@@ -0,0 +1,29 @@
+Dvorak Programmer Layout
+========================
+
+This is a dvorak-only layout. The overall philosophy is that the left hand contains a number of layer-switching shortcuts, and the right hand key codes vary based on the layer selected.
+
+Layers
+------
+
+* BASE: this is where you type.
+* SHELL_NAV: hold down the Tab key to access shell/terminal navigation shorcuts such as forward/backward word, history, Ctrl+C, screen tab movement.
+* KEY_NAV: arrow key movement with backward/forward word support, and copy/paste.
+* KEY_SEL: same as above, but every movement shift-selects.
+* NUMBER: keypad layer.
+* SYMBOL: all the symbols.
+* BRACKET: special brackets-only layer for programming
+* SHORTCUTS: sends Hyper keys for Autohotkey to interpret. I use this to switch between specific apps.
+* MOUSE: use mouse keys
+
+Updates
+-------
+
+2016/12/10:
+* toggle for brackets layer is now on left thumb cluster.
+
+2016/11/05:
+* removed brackets anywhere but in brackets layer
+* added mouse layer back in
+* put semicolon-newline and end-newline on symbol layer
+* replaced all HYPR with MEH, added more shortcut keys \ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c
new file mode 100644
index 000000000..f3d02f688
--- /dev/null
+++ b/keyboards/ergodox/keymaps/dvorak_programmer/keymap.c
@@ -0,0 +1,424 @@
+
+#include "ergodox.h"
+#include "led.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "action_code.h"
+
+#define BASE 0 // default layer
+#define SHELL_NAV 1
+#define KEY_NAV 3 // key navigation layer
+#define KEY_SEL 4 // key selection layer
+#define NUMBER 5 // number layer
+#define SYMBOL 6
+#define BRACKETS 7
+#define SHORTCUTS 8
+#define MOUSE 9
+
+// macros
+#define MC_COPY_LINE 0
+#define MC_CUT_LINE 1
+#define MC_PASTE_LINE 2
+#define MC_NEW_SEARCH_TAB 3
+#define SCREEN_TAB_LEFT 4
+#define SCREEN_TAB_RIGHT 5
+#define SCREEN_NEW_TAB 6
+#define SWITCH_NDS 7
+#define SCREEN_COPY_MODE 8
+#define SCREEN_PASTE 9
+#define OPEN_CLOSE_PAREN 10
+#define OPEN_CLOSE_BRACKET 11
+#define OPEN_CLOSE_CURLY 12
+#define OPEN_CLOSE_SINGLE_QUOTE 13
+#define OPEN_CLOSE_DOUBLE_QUOTE 14
+#define SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND 15
+#define SEMICOLON_NEWLINE 16
+#define END_NEWLINE 17
+
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(KEY_NAV), // FN1 - keynav layer
+ [2] = ACTION_LAYER_TAP_TOGGLE(NUMBER), // FN2 - number layer
+ [3] = ACTION_MODS_ONESHOT(MOD_LSFT), // FN3 - shift modifier / oneshot
+ [4] = ACTION_MODS_ONESHOT(MOD_LCTL), // FN4 - ctrl modifier / oneshot
+ [5] = ACTION_MODS_ONESHOT(MOD_LALT), // FN5 - alt modifier / oneshot
+};
+
+//Tap Dance Declarations
+enum {
+ TD_SHIFT_CAPSLOCK = 0,
+ TD_BRK_LEFT = 1,
+ TD_BRK_RIGHT = 2
+};
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// base layer
+[BASE] = KEYMAP( // layer 0 : default
+ // left hand
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ LT(MOUSE,KC_TAB), KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, MO(KEY_SEL),
+ MO(SHELL_NAV), KC_A, KC_O, KC_E, KC_U, KC_I,
+ KC_FN3, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, MO(KEY_NAV),
+ OSL(SHORTCUTS),KC_FN4, KC_FN5,OSL(SYMBOL),MO(NUMBER),
+ // thumb cluster
+ MO(BRACKETS), RCTL(KC_S),
+ RCTL(KC_DEL),
+ KC_BSPC,RCTL(KC_BSPC),KC_DEL,
+ // right hand
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSLS,
+ KC_PGUP, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
+ KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
+ KC_PGDN, KC_B, KC_M, KC_W, KC_V, KC_Z, TD(TD_SHIFT_CAPSLOCK),
+ // lower keys - browser tab control
+ RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), RCTL(KC_T), LALT(KC_LEFT), RCTL(KC_W),
+ // thumb cluster
+ KC_HOME,KC_END,
+ KC_UP,
+ KC_DOWN,KC_ENT, KC_SPC
+ ),
+
+
+// shell navigation layer
+[SHELL_NAV] = KEYMAP(
+ // left hand
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ // bottom row
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ // thumb cluster
+ KC_TRNS,KC_TRNS,
+ LALT(KC_D),
+ KC_TRNS,RCTL(KC_W),KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ RCTL(KC_L), RCTL(KC_W), KC_HOME, KC_UP, KC_END, LALT(KC_D), RCTL(KC_R),
+ LALT(KC_B), KC_LEFT, KC_DOWN, KC_RIGHT, LALT(KC_F), LALT(KC_DOT),
+ RCTL(KC_C), RCTL(KC_U), M(SCREEN_COPY_MODE), M(SCREEN_PASTE), MEH(KC_V), RCTL(KC_K), M(SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND),
+ // bottom row
+ M(SCREEN_TAB_LEFT), M(SCREEN_TAB_RIGHT), M(SCREEN_NEW_TAB), KC_TRNS, KC_TRNS,
+ // thumb cluster
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+
+// key navigation layer
+[KEY_NAV] = KEYMAP(
+ // left hand
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ // bottom row
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ // thumb cluster
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_PGDN, KC_HOME, KC_UP, KC_END, KC_PGUP, M(MC_COPY_LINE),
+ RCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, RCTL(KC_RIGHT), M(MC_CUT_LINE),
+ KC_TRNS, KC_TRNS, RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), KC_TRNS, M(MC_PASTE_LINE),
+ // bottom row
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ // thumb cluster
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+// key selection layer
+[KEY_SEL] = KEYMAP(
+ // left hand
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ // bottom row
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ // thumb cluster
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ RSFT(KC_PGUP), RSFT(KC_PGDN), RSFT(KC_HOME), RSFT(KC_UP), RSFT(KC_END), RSFT(KC_PGUP), M(MC_COPY_LINE),
+ RSFT(RCTL(KC_LEFT)), RSFT(KC_LEFT), RSFT(KC_DOWN), RSFT(KC_RIGHT), RSFT(RCTL(KC_RIGHT)), M(MC_CUT_LINE),
+ RSFT(KC_PGDN), KC_TRNS, RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), KC_TRNS, M(MC_PASTE_LINE),
+ // bottom row
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ // thumb cluster
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+// number layer
+[NUMBER] = KEYMAP(
+ // left hand
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ // bottom row
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ // thumb cluster
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_PLUS, KC_7, KC_8, KC_9, KC_ASTR, KC_TRNS,
+ KC_MINS, KC_4, KC_5, KC_6, KC_SLSH, KC_TRNS,
+ KC_TRNS, KC_EQUAL, KC_1, KC_2, KC_3, KC_COLN, KC_TRNS,
+ // bottom row
+ KC_0, KC_DOT, KC_COMMA, KC_TRNS, KC_TRNS,
+ // thumb cluster
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+
+[SYMBOL] = KEYMAP(
+ // left hand
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_PLUS, KC_AMPR, KC_ASTR, KC_GRAVE,KC_TILD, KC_TRNS,
+ KC_MINS, KC_DLR, KC_PERC, KC_CIRC, KC_PIPE, KC_TRNS,
+ KC_TRNS, KC_EQUAL,KC_EXLM, KC_AT, KC_HASH, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ M(SEMICOLON_NEWLINE), M(END_NEWLINE),
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+[BRACKETS] = KEYMAP(
+ // left hand
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // right hand
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS, KC_TRNS, M(OPEN_CLOSE_BRACKET),M(OPEN_CLOSE_PAREN),M(OPEN_CLOSE_CURLY),KC_TRNS,KC_TRNS,
+ KC_TRNS, KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_LCBR, KC_RCBR, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+[SHORTCUTS] = KEYMAP(
+ // left hand
+ KC_NO, MEH(KC_F1), MEH(KC_F2), MEH(KC_F3), MEH(KC_F4), MEH(KC_F5), MEH(KC_F6),
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ MEH(KC_0),MEH(KC_1),
+ MEH(KC_2),
+ MEH(KC_3),MEH(KC_4),MEH(KC_5),
+ // right hand
+ MEH(KC_F7), MEH(KC_F8), MEH(KC_F9), MEH(KC_F10), MEH(KC_F11), MEH(KC_F12), M(SWITCH_NDS),
+ KC_TRNS, MEH(KC_A), MEH(KC_B), MEH(KC_C), MEH(KC_D), MEH(KC_E), MEH(KC_F),
+ MEH(KC_G), MEH(KC_H), MEH(KC_I), MEH(KC_J), MEH(KC_K), MEH(KC_L),
+ KC_TRNS, MEH(KC_M), MEH(KC_N), MEH(KC_O), MEH(KC_P), MEH(KC_Q), MEH(KC_R),
+ MEH(KC_S), MEH(KC_T), MEH(KC_U), MEH(KC_V), MEH(KC_X),
+ MEH(KC_6), MEH(KC_7),
+ MEH(KC_8),
+ MEH(KC_9), MEH(KC_Y), MEH(KC_Z)
+),
+
+
+[MOUSE] = KEYMAP(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_BTN1, KC_BTN2
+),
+
+};
+
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case MC_COPY_LINE:
+ if (record->event.pressed) {
+ return MACRO( T(HOME), D(LSFT), T(END), U(LSFT), D(LCTL), T(C), U(LCTL), END);
+ }
+ break;
+ case MC_CUT_LINE:
+ if (record->event.pressed) {
+ return MACRO( T(HOME), D(LSFT), T(END), U(LSFT), D(LCTL), T(X), U(LCTL), END);
+ }
+ break;
+ case MC_PASTE_LINE:
+ if (record->event.pressed) {
+ return MACRO( T(END), T(ENTER), D(LCTL), T(V), U(LCTL), END);
+ }
+ break;
+ case MC_NEW_SEARCH_TAB:
+ if (record->event.pressed) {
+ return MACRO( D(LCTL), T(T), T(K), U(LCTL), END);
+ }
+ break;
+ case SCREEN_TAB_LEFT:
+ if (record->event.pressed) {
+ return MACRO( D(LCTL), T(A), U(LCTL), T(P), END);
+ }
+ break;
+ case SCREEN_TAB_RIGHT:
+ if (record->event.pressed) {
+ return MACRO( D(LCTL), T(A), U(LCTL), T(N), END);
+ }
+ break;
+ case SCREEN_NEW_TAB:
+ if (record->event.pressed) {
+ return MACRO( D(LCTL), T(A), U(LCTL), T(C), END);
+ }
+ break;
+ case SCREEN_COPY_MODE:
+ if (record->event.pressed) {
+ return MACRO( D(LCTL), T(A), U(LCTL), T(ESC), END);
+ }
+ break;
+ case SCREEN_PASTE:
+ if (record->event.pressed) {
+ return MACRO( D(LCTL), T(A), U(LCTL), T(RBRC), END);
+ }
+ break;
+ case SWITCH_NDS:
+ if (record->event.pressed) {
+ return MACRO( D(LSFT), T(F11), U(LSFT), W(500), D(LALT), T(TAB), U(LALT), END);
+ }
+ break;
+ case OPEN_CLOSE_PAREN:
+ if (record->event.pressed) {
+ return MACRO( D(LSFT), T(LPRN), T(RPRN), U(LSFT), T(LEFT), END);
+ }
+ break;
+ case OPEN_CLOSE_BRACKET:
+ if (record->event.pressed) {
+ return MACRO( T(LBRC), T(RBRC), T(LEFT), END);
+ }
+ break;
+ case OPEN_CLOSE_CURLY:
+ if (record->event.pressed) {
+ return MACRO( D(LSFT), T(LCBR), T(RCBR), U(LSFT), T(LEFT), END);
+ }
+ break;
+ case OPEN_CLOSE_SINGLE_QUOTE:
+ if (record->event.pressed) {
+ return MACRO( T(QUOT), T(QUOT), T(LEFT), END);
+ }
+ break;
+ case OPEN_CLOSE_DOUBLE_QUOTE:
+ if (record->event.pressed) {
+ return MACRO( D(LSFT), T(QUOT), T(QUOT), U(LSFT), T(LEFT), END);
+ }
+ break;
+ case SHELL_RECALL_LAST_ARG_REMOVE_FIRST_COMMAND:
+ if (record->event.pressed) {
+ return MACRO( T(UP), T(HOME), D(LALT), T(D), U(LALT), END);
+ }
+ break;
+ case SEMICOLON_NEWLINE:
+ if (record->event.pressed) {
+ return MACRO( T(END), T(SCLN), T(ENTER), END);
+ }
+ break;
+ case END_NEWLINE:
+ if (record->event.pressed) {
+ return MACRO( T(END), T(ENTER), END);
+ }
+ break;
+
+ }
+ return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+ return;
+};
+
+void led_set_user(uint8_t usb_led) {
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ ergodox_right_led_1_on();
+ } else {
+ ergodox_right_led_1_off();
+ }
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_SHIFT_CAPSLOCK] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPSLOCK),
+ [TD_BRK_LEFT] = ACTION_TAP_DANCE_DOUBLE (KC_LPRN, KC_LCBR),
+ [TD_BRK_RIGHT] = ACTION_TAP_DANCE_DOUBLE (KC_RPRN, KC_RCBR)
+
+};
+
+
+// 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_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ case NUMBER:
+ case SYMBOL:
+ ergodox_right_led_2_on();
+ break;
+ case KEY_NAV:
+ case KEY_SEL:
+ ergodox_right_led_3_on();
+ break;
+ case SHORTCUTS:
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+ break;
+ default:
+ // none
+ break;
+ }
+ return;
+};
diff --git a/keyboards/ergodox_ez/keymaps/dvorak_spanish/keymap.c b/keyboards/ergodox/keymaps/dvorak_spanish/keymap.c
index 6eb864b44..6d7adf907 100755
--- a/keyboards/ergodox_ez/keymaps/dvorak_spanish/keymap.c
+++ b/keyboards/ergodox/keymaps/dvorak_spanish/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/dvorak_spanish/readme.md b/keyboards/ergodox/keymaps/dvorak_spanish/readme.md
index e075e3cd7..e075e3cd7 100644
--- a/keyboards/ergodox_ez/keymaps/dvorak_spanish/readme.md
+++ b/keyboards/ergodox/keymaps/dvorak_spanish/readme.md
diff --git a/keyboards/ergodox_ez/keymaps/emacs_osx_dk/default_highres.png b/keyboards/ergodox/keymaps/emacs_osx_dk/default_highres.png
index 1d2583740..1d2583740 100644
--- a/keyboards/ergodox_ez/keymaps/emacs_osx_dk/default_highres.png
+++ b/keyboards/ergodox/keymaps/emacs_osx_dk/default_highres.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/emacs_osx_dk/keymap.c b/keyboards/ergodox/keymaps/emacs_osx_dk/keymap.c
index 1d8e66a08..e80f08d73 100644
--- a/keyboards/ergodox_ez/keymaps/emacs_osx_dk/keymap.c
+++ b/keyboards/ergodox/keymaps/emacs_osx_dk/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/emacs_osx_dk/readme.md b/keyboards/ergodox/keymaps/emacs_osx_dk/readme.md
index 4839988d9..4839988d9 100644
--- a/keyboards/ergodox_ez/keymaps/emacs_osx_dk/readme.md
+++ b/keyboards/ergodox/keymaps/emacs_osx_dk/readme.md
diff --git a/keyboards/ergodox/keymaps/erez_experimental/Makefile b/keyboards/ergodox/keymaps/erez_experimental/Makefile
new file mode 100644
index 000000000..51a0c74c5
--- /dev/null
+++ b/keyboards/ergodox/keymaps/erez_experimental/Makefile
@@ -0,0 +1,11 @@
+# Having a file like this allows you to override Makefile definitions
+# for your own particular keymap
+
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+COMMAND_ENABLE = no # Commands for debug and configuration
+RGBLIGHT_ENABLE ?= yes
+MIDI_ENABLE ?= yes
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/ergodox_ez/keymaps/erez_experimental/config.h b/keyboards/ergodox/keymaps/erez_experimental/config.h
index e5d7fe188..4da18c65a 100644
--- a/keyboards/ergodox_ez/keymaps/erez_experimental/config.h
+++ b/keyboards/ergodox/keymaps/erez_experimental/config.h
@@ -8,5 +8,6 @@
#undef LEADER_TIMEOUT
#define LEADER_TIMEOUT 300
+
#endif
diff --git a/keyboards/ergodox_ez/keymaps/erez_experimental/keymap.c b/keyboards/ergodox/keymaps/erez_experimental/keymap.c
index 04ad2a816..13b8240ce 100644
--- a/keyboards/ergodox_ez/keymaps/erez_experimental/keymap.c
+++ b/keyboards/ergodox/keymaps/erez_experimental/keymap.c
@@ -1,5 +1,5 @@
#include <keymap_extras/keymap_colemak.h>
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
@@ -7,11 +7,17 @@
#define SYMB 1 // symbols
#define MDIA 2 // media keys
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // can always be here
+ RGB_FF00BB // always start with RGB_
+};
+
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
- * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
+ * | = | 1 | 2 | 3 | 4 | 5 |Ctrl- | | Ctrl+| 6 | 7 | 8 | 9 | 0 | - |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
@@ -33,7 +39,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Otherwise, it needs KC_*
[BASE] = KEYMAP( // layer 0 : default
// left hand
- KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, LCTL(KC_MINS),
KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSPO, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_LBRC),
@@ -42,7 +48,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_HOME,
KC_SPC,KC_LEAD,KC_END,
// right hand
- KC_RGHT, KC_6,KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ LCTL(KC_EQL), KC_6,KC_7, KC_8, KC_9, KC_0, KC_MINS,
TG(SYMB), KC_Y,KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_H,ALT_T(KC_J),KC_K, KC_L, LT(MDIA,KC_SCLN),GUI_T(KC_QUOT),
MEH_T(KC_RBRC),KC_N,KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSPC,
@@ -65,33 +71,33 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | |NxtTab|PrvTab| | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
- * | | | | | |
+ * | | | |TOG |
* ,------|------|------| |------+------+------.
- * | | | | | | | |
+ * |VAI |VAD |HUI | |SAI | |MOD |
* | | |------| |------| | |
- * | | | | | | | |
+ * | | |HUD | |SAD | | |
* `--------------------' `--------------------'
*/
// SYMBOLS
[SYMB] = KEYMAP(
// left hand
- KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ RGB_FF00BB, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5,
KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
KC_TRNS, KC_TRNS,KC_TRNS,LCTL(KC_PGUP), LCTL(KC_PGDN),
KC_TRNS,KC_TRNS,
- KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,
+ RGB_HUI,
+ RGB_VAI,RGB_VAD,RGB_HUD,
// right hand
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12,
KC_AMPR, KC_UNDS, KC_MINS, CM_SCLN, KC_PLUS, KC_TRNS,
KC_TRNS, KC_PIPE, KC_AT, KC_EQL, KC_PERC, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS
+ RGB_TOG, KC_TRNS,
+ RGB_SAI,
+ RGB_SAD, KC_TRNS, RGB_MOD
),
/* Keymap 2: Media and mouse keys
*
@@ -152,6 +158,24 @@ void matrix_init_user(void) {
};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ // dynamically generate these.
+ case RGB_FF00BB:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_enable();
+ rgblight_mode(1);
+ rgblight_setrgb(0xff,0x00,0xbb);
+ #endif
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
LEADER_EXTERNS();
// Runs constantly in the background, in a loop.
diff --git a/keyboards/ergodox_ez/keymaps/erez_experimental/readme.md b/keyboards/ergodox/keymaps/erez_experimental/readme.md
index 66acfa187..f0738d9a7 100644
--- a/keyboards/ergodox_ez/keymaps/erez_experimental/readme.md
+++ b/keyboards/ergodox/keymaps/erez_experimental/readme.md
@@ -4,6 +4,10 @@ This is my personal layout which I use to test out ideas which may or may not ma
Changelog:
+## Nov 1, 2016:
+
+* Adds dedicated text zooming keys in inner corners
+
## May 24, 2016:
* Implements Leader key example
diff --git a/keyboards/ergodox/keymaps/galson/Makefile b/keyboards/ergodox/keymaps/galson/Makefile
new file mode 100644
index 000000000..f008f5079
--- /dev/null
+++ b/keyboards/ergodox/keymaps/galson/Makefile
@@ -0,0 +1,2 @@
+COMMAND_ENABLE = no # Commands for debug and configuration
+
diff --git a/keyboards/ergodox/keymaps/galson/keymap.c b/keyboards/ergodox/keymaps/galson/keymap.c
new file mode 100644
index 000000000..0d3e7560d
--- /dev/null
+++ b/keyboards/ergodox/keymaps/galson/keymap.c
@@ -0,0 +1,183 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | + | 1 | 2 | 3 | 4 | 5 | rclk | | lclk | 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | = | Q | W | E | R |cmd/T |shift | |shift |cmd/Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| ( | | ) |------+------+------+------+------+--------|
+ * | " | A | S | D | F | G |------| |------| H | J | K | L |; / L2| ' |
+ * |--------+------+------+------+------+------| ctrl | | ctrl |------+------+------+------+------+--------|
+ * | { | Z | X | C | V | B | [ | | ] | N | M | , | . | / | } |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | _ | ` | $ | Left | Right| | Up | Down | : | * | ! |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | < | | | | & | > |
+ * ,------|------|------| |------+--------+------.
+ * | | | # | | @ | | |
+ * | Space|Backsp|------| |------| Tab |Enter |
+ * | |ace | % | | ESC | | |
+ * `--------------------' `----------------------'
+ */
+// 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_PLUS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_BTN2,
+ KC_EQL, KC_Q, KC_W, KC_E, KC_R, GUI_T(KC_T), KC_LSPO,
+ KC_DQUO, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LCBR, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, CTL_T(KC_LBRC),
+ KC_UNDS, KC_GRV, KC_DLR, KC_LEFT,KC_RGHT,
+ KC_LABK, KC_PIPE,
+ KC_HASH,
+ KC_SPC, KC_BSPC,KC_PERC,
+ // right hand
+ KC_BTN1, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ KC_RSPC, GUI_T(KC_Y), KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), KC_QUOT,
+ CTL_T(KC_RBRC), KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RCBR,
+ KC_UP, KC_DOWN,KC_COLN,KC_ASTR, KC_EXLM,
+ KC_AMPR, KC_RABK,
+ KC_AT,
+ KC_ESC, KC_TAB, KC_ENT
+ ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------.
+ * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | . | 0 | = | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+ // left hand
+ M(0), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+ KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+ KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
+ KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
+ KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | MsUp | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Prev | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | |Brwser|
+ * | | |------| |------| |Back |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ 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) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboards/ergodox/keymaps/galson/readme.md b/keyboards/ergodox/keymaps/galson/readme.md
new file mode 100644
index 000000000..ebc916725
--- /dev/null
+++ b/keyboards/ergodox/keymaps/galson/readme.md
@@ -0,0 +1,11 @@
+# Galson keymap
+
+
+Sep 26, 2016.
+
+This is an ergonomic layout for programming for those with typing-related injuries. Key features:
+
+- As many symbol keys as possible are accessible without shifting. These should be accessed by moving the entire hand and pressing with a strong finger.
+- Arrow keys and left and right mouse clicks for mouse-free navigation when combined with head mouse or eyetracker.
+- Modifier keys are dual role and relocated to positions convenient for the index finger.
+- Positions are more convenient when the keyboard is vertically mounted (as it should be!) \ No newline at end of file
diff --git a/keyboards/ergodox_ez/keymaps/german-kinergo/keymap.c b/keyboards/ergodox/keymaps/german-kinergo/keymap.c
index b1cecf0dd..971318d87 100644
--- a/keyboards/ergodox_ez/keymaps/german-kinergo/keymap.c
+++ b/keyboards/ergodox/keymaps/german-kinergo/keymap.c
@@ -1,7 +1,7 @@
// German keymap derived from "german", but more closely resembling the German layout of the Kinesis Ergo Elan.
//
// chschmitz, 2016-01-27
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
#include "keymap_german.h"
diff --git a/keyboards/ergodox_ez/keymaps/german-kinergo/layout-code.png b/keyboards/ergodox/keymaps/german-kinergo/layout-code.png
index a0ef551e1..a0ef551e1 100644
--- a/keyboards/ergodox_ez/keymaps/german-kinergo/layout-code.png
+++ b/keyboards/ergodox/keymaps/german-kinergo/layout-code.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/german-kinergo/layout-media.png b/keyboards/ergodox/keymaps/german-kinergo/layout-media.png
index 56aea1dca..56aea1dca 100644
--- a/keyboards/ergodox_ez/keymaps/german-kinergo/layout-media.png
+++ b/keyboards/ergodox/keymaps/german-kinergo/layout-media.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/german-kinergo/layout.png b/keyboards/ergodox/keymaps/german-kinergo/layout.png
index 76a1aa5d7..76a1aa5d7 100644
--- a/keyboards/ergodox_ez/keymaps/german-kinergo/layout.png
+++ b/keyboards/ergodox/keymaps/german-kinergo/layout.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/german-kinergo/readme.md b/keyboards/ergodox/keymaps/german-kinergo/readme.md
index 557d85a8a..557d85a8a 100644
--- a/keyboards/ergodox_ez/keymaps/german-kinergo/readme.md
+++ b/keyboards/ergodox/keymaps/german-kinergo/readme.md
diff --git a/keyboards/ergodox_ez/util/compile_keymap.py b/keyboards/ergodox/keymaps/german-manuneo/compile_keymap.py
index 7076a6ecb..7076a6ecb 100644
--- a/keyboards/ergodox_ez/util/compile_keymap.py
+++ b/keyboards/ergodox/keymaps/german-manuneo/compile_keymap.py
diff --git a/keyboards/ergodox_ez/keymaps/german-manuneo/keymap.c b/keyboards/ergodox/keymaps/german-manuneo/keymap.c
index 5fcc14d51..16e92bc23 100644
--- a/keyboards/ergodox_ez/keymaps/german-manuneo/keymap.c
+++ b/keyboards/ergodox/keymaps/german-manuneo/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "action_layer.h"
#include "keymap.h"
#include "keymap_german.h"
diff --git a/keyboards/ergodox_ez/keymaps/german-manuneo/keymap.md b/keyboards/ergodox/keymaps/german-manuneo/keymap.md
index 2c9e0a837..837b25446 100644
--- a/keyboards/ergodox_ez/keymaps/german-manuneo/keymap.md
+++ b/keyboards/ergodox/keymaps/german-manuneo/keymap.md
@@ -12,7 +12,7 @@ Tested with python 2.7 and python 3.4
{
"layout": "ergodox_ez",
"keymaps_includes": [
- "ergodox_ez.h",
+ "ergodox.h",
"action_layer.h",
"keymap_common.h",
"keymap_extras/keymap_german.h",
diff --git a/keyboards/ergodox_ez/keymaps/german/keymap.c b/keyboards/ergodox/keymaps/german/keymap.c
index 3eab51f0e..9b2f6ffa2 100644
--- a/keyboards/ergodox_ez/keymaps/german/keymap.c
+++ b/keyboards/ergodox/keymaps/german/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
#include "keymap_german.h"
diff --git a/keyboards/ergodox_ez/keymaps/j3rn/keymap.c b/keyboards/ergodox/keymaps/j3rn/keymap.c
index 6e271321d..2069f26ae 100644
--- a/keyboards/ergodox_ez/keymaps/j3rn/keymap.c
+++ b/keyboards/ergodox/keymaps/j3rn/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
@@ -14,18 +14,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Tab | Q | W | E | R | T | - | | = | Y | U | I | O | P | \ |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * |Ctrl/Esc|A / L2| S | D | F | G |------| |------| H | J | K | L | ; | ' |
+ * |Ctrl/Esc| A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
- * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
+ * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
- * | ~L1 | ~L2 |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
+ * | ~L1 | Alt |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | App | Home | | PgUp |Ctrl/Esc|
* ,------|------|------| |------+--------+------.
* | | | End | | PgDn | | |
* |Space | LGui |------| |------| Tab |Enter |
- * | | |Shift | | Alt | | |
+ * | | | ~L2 | | ~L1 | | |
* `--------------------' `----------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
@@ -34,36 +34,36 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// left hand
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LBRC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS,
- CTL_T(KC_ESC), LT(MDIA, KC_A),KC_S, KC_D, KC_F, KC_G,
- KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
- KC_FN1, KC_FN2, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
+ CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
+ MO(SYMB), KC_LALT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
ALT_T(KC_APP), KC_HOME,
KC_END,
- KC_SPC, KC_LGUI, KC_LSHIFT,
+ KC_SPC,KC_LGUI,MO(MDIA),
// right hand
KC_RBRC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_EQL, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
- KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
+ MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
+ KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, MO(SYMB),
- KC_PGUP, CTL_T(KC_ESC),
+ KC_PGUP, CTL_T(KC_ESC),
KC_PGDN,
- KC_LALT, KC_TAB, KC_ENT
+ MO(SYMB),KC_TAB, KC_ENT
),
/* Keymap 1: Symbol Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
- * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
- * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
- * | | | | | | | | . | 0 | = | |
+ * | | | | | | | 0 | 0 | . | = | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
@@ -76,20 +76,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// SYMBOLS
[SYMB] = KEYMAP(
// left hand
- KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+
KC_TRNS,KC_TRNS,
KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,
// right hand
- KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
- KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_TRNS,
KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
- KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
+ KC_0, KC_0, KC_DOT, KC_EQL, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
@@ -97,9 +98,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 2: Media and mouse keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
- * | | | | | | | | | | | | | | | |
+ * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
- * | | | | | | | | | | | | Lclk | Rclk | | |
+ * | | | | | | | | | | | | Lclk | Rclk | | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | |------| |------|MsLeft|MsDown| MsUp |MsRght| | Play |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
@@ -117,7 +118,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
// MEDIA AND MOUSE
[MDIA] = KEYMAP(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -126,8 +127,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, KC_F12,
KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_TRNS, KC_MPLY,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
diff --git a/keyboards/ergodox_ez/keymaps/j3rn/readme.md b/keyboards/ergodox/keymaps/j3rn/readme.md
index fc4b64042..178aba773 100644
--- a/keyboards/ergodox_ez/keymaps/j3rn/readme.md
+++ b/keyboards/ergodox/keymaps/j3rn/readme.md
@@ -1,4 +1,4 @@
-# J3RN's Mac-centric ErgoDox EZ keymap
+# J3RN's Mac-Centric ErgoDox EZ keymap
## Motivation
@@ -14,6 +14,7 @@ This layout more closely resembles that of the Mac keyboard, and has some other
- **The key to the right of "0" is Backspace instead of "-"** (misleadingly labeled "delete" on the Mac's keyboard). There was no room to fit in "-" and "=" between "0" and Backspace, unfortunately.
- **The key to the left of "Q" is Tab instead of Delete.**
- **The rightmost big key on the left thumb is CMD (LGui) instead of Backspace.**
+- **The key to the left of Alt-Shift is an Alt key**. This is close to it's position on the Mac keyboard, though slightly further left.
### Other changes
@@ -23,7 +24,9 @@ This layout more closely resembles that of the Mac keyboard, and has some other
- **The Toggle L1 keys have been replaced by the otherwise displaced "-" and "=".** They are laid out, left-to-right, in the same order as on the Mac keyboard. Honestly, they are not terribly conveniently placed, and their placement might change in a later version. I found that I did not toggle L1 frequently at all, and found using the momentary keys to access L1 to fit my workflow better.
- **The "~"/L1 key in the bottom-left is now just momentary L1.** The "~" key was moved to the top-left as mentioned before, and I like to keep my multi-use keys to a minimum due to the latency for them to switch from "press" to "hold."
- **The Home and End buttons have been shifted up on the left thumb, and Shift inserted below them.** This makes doing Shift-5 and other such combinations less painful.
-- **The Page Up and Page Down buttons have been shifted up on the right thumb, and Alt was moved from above them to below them.** I use Alt more than Page Up or Page Down (mostly in terminal applications), and thought that it deserved a more accessible location.
-
+- **The Page Up and Page Down buttons have been shifted up on the right thumb.** I don't use either of these keys often, and wanted to free up some real estate.
+- **The bottommost-inner keys on the left and right thumb are momentary L2 and momentary L1, respectively**. I have found that both modes are useful, and this seemed like a reasonably accessible place to put these.
+- **Traditional numpad layout.** The base of most numpads is a double-wide "0" key to the left of a "." key. This is reflected in my layout by having two "0" keys to the left of a "." key.
+- **The function keys (F1-F12) have been moved to L2.** They were in the way in L1.
**I'm always open to feedback and/or suggestions!**
diff --git a/keyboards/ergodox/keymaps/jack/Makefile b/keyboards/ergodox/keymaps/jack/Makefile
new file mode 100644
index 000000000..3ca69bb92
--- /dev/null
+++ b/keyboards/ergodox/keymaps/jack/Makefile
@@ -0,0 +1,6 @@
+RGBLIGHT_ENABLE ?= yes
+MIDI_ENABLE ?= yes
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/ergodox/keymaps/jack/config.h b/keyboards/ergodox/keymaps/jack/config.h
new file mode 100644
index 000000000..5c1165226
--- /dev/null
+++ b/keyboards/ergodox/keymaps/jack/config.h
@@ -0,0 +1,17 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D7
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 15 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 12
+#define RGBLIGHT_SAT_STEP 255
+#define RGBLIGHT_VAL_STEP 12
+
+#define RGB_MIDI
+#define RGBW_BB_TWI
+
+#endif \ No newline at end of file
diff --git a/keyboards/ergodox_ez/keymaps/jack/keymap.c b/keyboards/ergodox/keymaps/jack/keymap.c
index 80bf9d535..9cb80c59d 100644
--- a/keyboards/ergodox_ez/keymaps/jack/keymap.c
+++ b/keyboards/ergodox/keymaps/jack/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
@@ -19,14 +19,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_HOME,
KC_SPC,KC_SPC,KC_END,
// right hand
- KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO,
- KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_NO, M(1), KC_7, KC_8, KC_9, KC_0, KC_NO,
+ KC_NO, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, KC_P, KC_BSPC,
+ RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_SCLN, KC_QUOT,
KC_NO, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_ENT,
MO(1), KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,
- KC_NO, KC_NO,
- KC_PGUP,
- KC_PGDN, KC_SPC,KC_SPC
+ RGB_TOG, RGB_HUI,
+ RGB_MOD,
+ M(2), KC_SPC,KC_SPC
),
[SYMB] = KEYMAP(
// left hand
@@ -84,6 +84,16 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
unregister_code(KC_RSFT);
}
break;
+ case 1:
+ if (record->event.pressed) { // For resetting EEPROM
+ eeconfig_init();
+ }
+ break;
+ case 2:
+ if (record->event.pressed) { // For resetting EEPROM
+ api_send_unicode(0x0CA0);
+ }
+ break;
}
return MACRO_NONE;
};
diff --git a/keyboards/ergodox_ez/keymaps/jacobono/img/colemak-default-layer.png b/keyboards/ergodox/keymaps/jacobono/img/colemak-default-layer.png
index 06f63c496..06f63c496 100644
--- a/keyboards/ergodox_ez/keymaps/jacobono/img/colemak-default-layer.png
+++ b/keyboards/ergodox/keymaps/jacobono/img/colemak-default-layer.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/jacobono/img/number-dpad-layer.png b/keyboards/ergodox/keymaps/jacobono/img/number-dpad-layer.png
index 4dd718278..4dd718278 100644
--- a/keyboards/ergodox_ez/keymaps/jacobono/img/number-dpad-layer.png
+++ b/keyboards/ergodox/keymaps/jacobono/img/number-dpad-layer.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/jacobono/img/symbol-layer.png b/keyboards/ergodox/keymaps/jacobono/img/symbol-layer.png
index ee224cf0c..ee224cf0c 100644
--- a/keyboards/ergodox_ez/keymaps/jacobono/img/symbol-layer.png
+++ b/keyboards/ergodox/keymaps/jacobono/img/symbol-layer.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/jacobono/keymap.c b/keyboards/ergodox/keymaps/jacobono/keymap.c
index 6b19800af..dc7382bfe 100644
--- a/keyboards/ergodox_ez/keymaps/jacobono/keymap.c
+++ b/keyboards/ergodox/keymaps/jacobono/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/jacobono/readme.md b/keyboards/ergodox/keymaps/jacobono/readme.md
index 48de0509f..48de0509f 100644
--- a/keyboards/ergodox_ez/keymaps/jacobono/readme.md
+++ b/keyboards/ergodox/keymaps/jacobono/readme.md
diff --git a/keyboards/ergodox/keymaps/jafo/jafo-Notes b/keyboards/ergodox/keymaps/jafo/jafo-Notes
new file mode 100644
index 000000000..9376125e9
--- /dev/null
+++ b/keyboards/ergodox/keymaps/jafo/jafo-Notes
@@ -0,0 +1,10 @@
+These are notes on how to build and deploy the firmware to Ez, but they are
+from before the qmk restructuring.
+
+cd qmk_firmware/keyboard/ergodox_ez
+make KEYMAP=jafo
+cp ergodox_ez.hex keymaps/jafo/
+/tmp/teensy.64bit
+Open hex keymap file
+Program
+Upload
diff --git a/keyboards/ergodox/keymaps/jafo/jafo-layout.pdf b/keyboards/ergodox/keymaps/jafo/jafo-layout.pdf
new file mode 100644
index 000000000..189b49b12
--- /dev/null
+++ b/keyboards/ergodox/keymaps/jafo/jafo-layout.pdf
Binary files differ
diff --git a/keyboards/ergodox/keymaps/jafo/jafo_highres.png b/keyboards/ergodox/keymaps/jafo/jafo_highres.png
new file mode 100644
index 000000000..e3d7cef85
--- /dev/null
+++ b/keyboards/ergodox/keymaps/jafo/jafo_highres.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/jafo/keymap.c b/keyboards/ergodox/keymaps/jafo/keymap.c
new file mode 100644
index 000000000..4f1428f2b
--- /dev/null
+++ b/keyboards/ergodox/keymaps/jafo/keymap.c
@@ -0,0 +1,183 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | Grv | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | = | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | Esc/Cmd| A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd |
+ * |--------+------+------+------+------+------| L2 | | L2 |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |Grv/L1| '" | Del | Left | Right| | Up | Down | [ | ] | ~L1 |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * |Ctrl/Esc| Alt| | Alt |Ctrl/Esc|
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * | Space|Backsp|------| |------| Tab |Enter |
+ * | |ace | End | | PgDn | | |
+ * `--------------------' `----------------------'
+ */
+// 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
+ KC_EQL, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
+ GUI_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, TG(MDIA),
+ LT(SYMB,KC_GRV),KC_QUOT, KC_DELT, KC_LEFT,KC_RGHT,
+ CTL_T(KC_ESC), KC_LALT,
+ KC_HOME,
+ KC_SPC,KC_BSPC,KC_END,
+ // right hand
+ KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
+ TG(MDIA), KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
+ KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
+ KC_LALT, CTL_T(KC_ESC),
+ KC_PGUP,
+ KC_PGDN,KC_TAB, KC_ENT
+ ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | . | 0 | = | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+ // left hand
+ KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+ KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+ KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
+ KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
+ KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | MsUp | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght| |------| |------| LEFT | DOWN | UP | RIGHT| | Play |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Prev | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | Lclk | Mclk | Rclk | |VolUp |VolDn | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | |Brwser|
+ * | | |------| |------| |Back |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN3, KC_BTN2,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ 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) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboards/ergodox/keymaps/jafo/readme.md b/keyboards/ergodox/keymaps/jafo/readme.md
new file mode 100644
index 000000000..c870dfd05
--- /dev/null
+++ b/keyboards/ergodox/keymaps/jafo/readme.md
@@ -0,0 +1,20 @@
+# ErgoDox EZ "jafo" Configuration
+
+This is a layout based on the ErgoDox Ez default layout, but with some
+customizations I made for my use-case. I use Linux, vi and the i3 window
+manager, so I made these changes:
+
+- Arrow keys laid out in vi positions in media layer.
+
+- Esc (tap) and Win (held) to the left of A. i3 uses Win key for navigation
+ and having that be symmetric on the left and right makes it easier.
+
+- Grave accent below equals, I was having a hard time using ~
+
+- Layer 2 switch below the L1 switch, so I can go into a mode where I get
+ arrow keys under my vi motion fingers.
+
+- Making the Ctrl (held) and Esc (tap) on my thumbs symmetric. Not sure I
+ need that with the Esc left of A and Ctrl on the Z and / keys when held...
+
+![Jafo](jafo_highres.png)
diff --git a/keyboards/ergodox_ez/keymaps/jgarr/keymap.c b/keyboards/ergodox/keymaps/jgarr/keymap.c
index a3ad2040f..42d58421d 100644
--- a/keyboards/ergodox_ez/keymaps/jgarr/keymap.c
+++ b/keyboards/ergodox/keymaps/jgarr/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/josh/keymap.c b/keyboards/ergodox/keymaps/josh/keymap.c
index de5664a25..b5463873a 100644
--- a/keyboards/ergodox_ez/keymaps/josh/keymap.c
+++ b/keyboards/ergodox/keymaps/josh/keymap.c
@@ -1,6 +1,7 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
+#include "version.h"
#define BASE 0 // default layer
#define SYMB 1 // symbols
diff --git a/keyboards/ergodox_ez/keymaps/josh/readme.md b/keyboards/ergodox/keymaps/josh/readme.md
index cee19d47e..cee19d47e 100644
--- a/keyboards/ergodox_ez/keymaps/josh/readme.md
+++ b/keyboards/ergodox/keymaps/josh/readme.md
diff --git a/keyboards/ergodox_ez/keymaps/kastyle/keymap.c b/keyboards/ergodox/keymaps/kastyle/keymap.c
index 3982e0a19..467996686 100644
--- a/keyboards/ergodox_ez/keymaps/kastyle/keymap.c
+++ b/keyboards/ergodox/keymaps/kastyle/keymap.c
@@ -1,4 +1,7 @@
-#include "ergodox_ez.h"
+/* Setup to approximate a Kinesis Advantage with an eye to use in a
+ * Mac/OSX environment
+ * This version adds a hand swap feature to flip the keyboard */
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
@@ -18,10 +21,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
* | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
- * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
+ * |Grv/L1| \ |AltShf| Left | Right| | Up | Down | [ | ] |Grv/L1|
* `----------------------------------' `----------------------------------'
* ,---------------. ,---------------.
- * |Ctrl/Esc| Alt | | Alt |Ctrl/Esc|
+ * | LGUI |Al/Esc| |Al/Esc| RGUI |
* ,------|--------|------| |------+--------+------.
* | | | Home | | PgUp | | |
* |Backsp| Del |------| |------| Enter | Space|
@@ -31,33 +34,34 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// 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_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LGUI,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1),
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,
- KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
- LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
- CTL_T(KC_ESC), ALT_T(KC_APP),
- KC_HOME,
- KC_BSPC,KC_DEL,KC_END,
- // right hand
- KC_APP, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
- TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
- KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_QUOT,
- MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
- KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
- KC_LALT, CTL_T(KC_ESC),
- KC_PGUP,
- KC_PGDN,KC_ENT, KC_SPC
- ),
+ // left hand
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LGUI,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(1),
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
+ KC_FN1, KC_BSLS, LALT(KC_LSFT), KC_LEFT, KC_RGHT,
+ KC_LGUI, ALT_T(KC_ESC),
+ KC_HOME,
+ KC_BSPC, KC_DEL, KC_END,
+ // right hand
+ KC_APP, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ TG(1), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), KC_QUOT,
+ MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
+ KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, KC_FN1,
+ ALT_T(KC_ESC), KC_RGUI,
+ KC_PGUP,
+ KC_PGDN, KC_ENT, KC_SPC
+),
+
/* Keymap 1: Symbol Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
- * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * | PrScr | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
- * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ * | ScrLk | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
+ * | Pause | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
@@ -74,14 +78,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// SYMBOLS
[SYMB] = KEYMAP(
// left hand
- KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
- KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
- KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
- KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- KC_TRNS,KC_TRNS,
- KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_PSCR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_SLCK, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
+ KC_PAUS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV,
+ KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
@@ -92,6 +96,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
+
/* Keymap 2: Media and mouse keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
@@ -135,10 +140,6 @@ KEYMAP(
),
};
-const uint16_t PROGMEM fn_actions[] = {
- [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
@@ -154,6 +155,10 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
return MACRO_NONE;
};
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_SWAP_HANDS_TAP_KEY(KC_GRV) // FN1 - Tap = Grave/Tilde - Hold Momentary swap hands
+};
+
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
diff --git a/keyboards/ergodox/keymaps/kastyle/readme.md b/keyboards/ergodox/keymaps/kastyle/readme.md
new file mode 100644
index 000000000..944286a81
--- /dev/null
+++ b/keyboards/ergodox/keymaps/kastyle/readme.md
@@ -0,0 +1,14 @@
+The kastyle keymap was originally intended to remap the ErgoDox EZ to more
+closely approximate the layout of a Kinesis Advantage. Notable changes
+over the stock ErgoDox layout include:
+
+ * Re-arragnement of tab, enter, space, and delete to match the Kinesis
+ * Addition of print screen, pause, etc. keys following the kines-ish keymap
+ on L1
+ * GUI keys have replaced Ctrl on the thumb keys (for Mac use), and Alt keys
+ are mapped to allow Esc on tap (good for Vi users)
+ * Most notably, the addition of a momentary one-handed mode for quick and
+ easy access to keys on the other half of the keyboard, e.g. while using a
+ mouse in one hand, one may add text to a dialogue box with the other without
+ having to reach across the keyboard or remove one's hand from the mouse.
+
diff --git a/keyboards/ergodox_ez/keymaps/kines-ish/keymap.c b/keyboards/ergodox/keymaps/kines-ish/keymap.c
index 5063c99f2..83f5b0e2b 100644
--- a/keyboards/ergodox_ez/keymaps/kines-ish/keymap.c
+++ b/keyboards/ergodox/keymaps/kines-ish/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/kines-ish/readme.md b/keyboards/ergodox/keymaps/kines-ish/readme.md
index 5d39a0590..5d39a0590 100644
--- a/keyboards/ergodox_ez/keymaps/kines-ish/readme.md
+++ b/keyboards/ergodox/keymaps/kines-ish/readme.md
diff --git a/keyboards/ergodox/keymaps/kristian/keymap.c b/keyboards/ergodox/keymaps/kristian/keymap.c
new file mode 100644
index 000000000..e7e424325
--- /dev/null
+++ b/keyboards/ergodox/keymaps/kristian/keymap.c
@@ -0,0 +1,79 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+#include "keymap_fr_ch.h"
+#include "keymap_french.h"
+#include "keymap_german.h"
+#include "keymap_german_ch.h"
+#include "keymap_nordic.h"
+#include "keymap_norwegian.h"
+#include "keymap_spanish.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+[0] = KEYMAP(NO_LESS,KC_1,KC_2,KC_3,KC_4,KC_5,KC_BSPACE,KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,TG(1),KC_BSPACE,KC_A,KC_S,KC_D,KC_F,KC_G,SFT_T(NO_APOS),CTL_T(KC_Z),KC_X,KC_C,KC_V,KC_B,SFT_T(KC_EQUAL),MO(1),CTL_T(KC_GRAVE),KC_LGUI,KC_LEFT,KC_RIGHT,KC_ESCAPE,KC_CAPSLOCK,KC_HOME,KC_SPACE,KC_LGUI,KC_LALT,KC_DELETE,KC_6,KC_7,KC_8,KC_9,KC_0,NO_PLUS,TG(1),KC_Y,KC_U,KC_I,KC_O,KC_P,NO_AM,KC_H,KC_J,KC_K,KC_L,LT(2,NO_OSLH),NO_AE,SFT_T(KC_RBRC),KC_N,KC_M,KC_COMMA,KC_DOT,CTL_T(KC_SLASH),SFT_T(NO_APOS),KC_DOWN,KC_UP,NO_LPRN,NO_RPRN,MO(1),NO_QUOT,CTL_T(KC_ESCAPE),NO_APOS,KC_LALT,KC_LGUI,KC_ENTER),
+
+[1] = KEYMAP(M(0),KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_BSPACE,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_BSPACE,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_LSHIFT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_LCTL,KC_LGUI,KC_LEFT,KC_RIGHT,KC_ESCAPE,KC_TRANSPARENT,KC_HOME,KC_SPACE,KC_LGUI,KC_LALT,KC_DELETE,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11,KC_TRANSPARENT,KC_7,KC_8,KC_9,KC_TRANSPARENT,KC_TRANSPARENT,KC_F12,KC_4,KC_5,KC_6,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_0,KC_1,KC_2,KC_3,NO_LBRC,NO_RBRC,KC_LSHIFT,KC_COMMA,KC_DOT,LSFT(NO_LBRC),LSFT(NO_RBRC),KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_LALT,KC_LGUI,KC_ENTER),
+
+[2] = KEYMAP(KC_ESCAPE,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_MS_UP,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_MS_LEFT,KC_MS_DOWN,KC_MS_RIGHT,KC_TRANSPARENT,KC_LSHIFT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_LCTL,KC_LALT,KC_LGUI,KC_MS_BTN1,KC_MS_BTN2,KC_ESCAPE,KC_TRANSPARENT,KC_TRANSPARENT,KC_SPACE,KC_LGUI,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_MEDIA_PREV_TRACK,KC_MEDIA_PLAY_PAUSE,KC_MEDIA_NEXT_TRACK,KC_TRANSPARENT,KC_TRANSPARENT,KC_AUDIO_VOL_UP,KC_AUDIO_VOL_DOWN,KC_AUDIO_MUTE,KC_TRANSPARENT,KC_TRANSPARENT,KC_TRANSPARENT,KC_ESCAPE,KC_MS_WH_UP,KC_MS_WH_DOWN,KC_MS_ACCEL0,KC_MS_ACCEL1),
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(1)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+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_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ case 3:
+ ergodox_right_led_3_on();
+ break;
+ case 4:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ break;
+ case 5:
+ ergodox_right_led_1_on();
+ ergodox_right_led_3_on();
+ break;
+ case 6:
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+ break;
+ case 7:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+ break;
+ default:
+ break;
+ }
+
+};
diff --git a/keyboards/ergodox/keymaps/maz/keymap.c b/keyboards/ergodox/keymaps/maz/keymap.c
new file mode 100644
index 000000000..6378f874b
--- /dev/null
+++ b/keyboards/ergodox/keymaps/maz/keymap.c
@@ -0,0 +1,229 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define ARRW 2 // arrow keys
+#define MDIA 3 // media keys, including mouse
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | = | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | E | R | T | L1 | | CAPS | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | ESC | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
+ * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
+ * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | Grv | |*SYMB*|*ARRW*| |*MDIA*|*SYMB*| [ | ] | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+--------+------.
+ * | | | | | | | |
+ * | Space| Bksp |------| |------| Tab |Enter |
+ * | ctrl | gui | Alt | | Alt | gui | ctrl |
+ * `--------------------' `----------------------'
+ */
+ // TODO: maybe look into changing the delay or whatever for the holding macros... not sure which way you would go with this. if the macro automatically kicks in if you hold it and press another button (no matter how long you held it for), then it wouldn't hurt to have a longer period i think... although if you hold a button and then decide not to, then you;ll register a space/bksp/etc. on accident. on the other hand, if it's too short of a delay, then you might be able to register spc/bksp/etc quickly enough, although i don't see this as big of an issue
+ // not sure if gui is meta key or super... it says meta on the basic keycodes page, and i think that's consitent with other shit, but you should really figure out how to program the keyboard to have meta and super separately instead of hacking your init.el to recognize alt as meta... because shit will get fucked up beteween awesome and emacs and other shit i'm guessing
+// 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_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
+ KC_TRNS, KC_GRV, KC_TRNS,MO(SYMB),MO(ARRW),
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ CTL_T(KC_SPC),GUI_T(KC_BSPC),KC_LALT,
+ // right hand
+ KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ KC_CAPSLOCK, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ MO(MDIA), MO(SYMB), KC_LBRC,KC_RBRC, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_RALT,GUI_T(KC_TAB), CTL_T(KC_ENT)
+ ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | . |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | 0 | = | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+ // left hand
+ KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+ KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+ KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_DOT,
+ KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
+ KC_TRNS,KC_TRNS, KC_0, KC_EQL, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Arrow keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | | | | |PGDOWN| PGUP | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | |------| |------| LEFT | DOWN | UP |RIGHT | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | HOME | END | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[ARRW] = KEYMAP(
+ // left hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_PGDOWN, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 3: Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | MsUp | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |Mute |VolDn | VolUp| | | | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | Prev | Play | Next | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * |Brwser| | | | | | |
+ * |Back | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_WBAK, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_BTN1, KC_BTN2, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ 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) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboards/ergodox/keymaps/maz/readme.md b/keyboards/ergodox/keymaps/maz/readme.md
new file mode 100644
index 000000000..000a8d000
--- /dev/null
+++ b/keyboards/ergodox/keymaps/maz/readme.md
@@ -0,0 +1,121 @@
+# Introduction
+
+## Motivation
+I created this keymap in an attempt to optimize my typing experience in text editors (vim and emacs) and the command-line.
+
+More specifically, I wanted to have each modifier key controlled by the thumbs, the most powerful of the digits (I think). This cured me of emacs pinky, which had surprisingly grown quite quickly over the first two weeks of using emacs & emacs-like commands on the command-line.
+
+## Changes
+There are some miscellaneous changes that I kind of forgot I made, such as moving the tilde key, but you can check out the visual layouts below, which I **have** kept up to date.
+### Modifier Keys
+The biggest changes from the ergodox ez default keymap are the modifiers on the thumb cluster. You must hold each key down for a certain amount of time (forgot where this is specified) in order for the modifier key to activate.
+
+### Layers
+* an arrow layer (ARRW) has been created because the default arrow keys suck. Beware, these do use vim bindings because they're the best.
+* the keys in the media layer have been moved around for a better experience (imo), especially with respect to the mouse
+* the three layers (SYMB, MDIA, and ARRW) now have their own dedicated keys accessible by the thumbs in the basic layer
+* caps lock has been put in place of the right-side `L1` toggle key because there was really no need to have two keys to toggle one layer, and caps lock is useful when writing queries
+** unfortunatley, caps lock is not indicated by an LED, so be careful. I use caps lock just like I do insert in vim; for a short burst of text. I always turn off caps lock when I change my focus
+
+### Removal Of Keys
+I also removed a bunch of unnecessary keys that I wasn't going to use anyway. You'll see such keys are blank in the basic layer. I will probably add some more keys in place of these, but I'm fine for now; I just didn't want the distraction of extra keys I barely use.
+
+## Caveats
+### Thumb Cluster Range
+I've heard many complaints about the thumb clusters. I agree that the three outter keys are almost impossible to reach. I am going to try to build [Matt Adereth's keyboard](https://github.com/adereth/dactyl-keyboard), which looks to have a better layout. However, I am able to comfortably use the three modifier keys mainly because:
+* I use DCS keycaps with SA Row 3 keycaps where the Alt keys are
+* I have relatively large hands (I guarantee you there's no problem - I guarantee you)
+
+### Dangerous positioning
+I think it's quite dangerous to put something like control on the same key as enter. Alas, this is a risk I'm willing to accept, and so should you if you decide to use this keymap. I tend to avoid putting myself in situtations in which disaster could occur with one fell swoop of a keypress.
+
+# Keymap
+## Keymap 0: Basic layer
+```
+,--------------------------------------------------. ,--------------------------------------------------.
+| = | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | - |
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| Tab | Q | W | E | R | T | L1 | | CAPS | Y | U | I | O | P | \ |
+|--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| ESC | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
+|--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
+| LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
+`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ | | Grv | |*SYMB*|*ARRW*| |*MDIA*|*SYMB*| [ | ] | |
+ `----------------------------------' `----------------------------------'
+ ,-------------. ,-------------.
+ | | | | | |
+ ,------|------|------| |------+--------+------.
+ | | | | | | | |
+ | Space| Bksp |------| |------| Tab |Enter |
+ | ctrl | gui | Alt | | Alt | gui | ctrl |
+ `--------------------' `----------------------'
+
+```
+
+## Keymap 1: Symbol Layer
+The only change here is the *dot* (`.`) character moving from next to `0` next to `+` in order to move the layer keys in the correct position
+```
+ ,--------------------------------------------------. ,--------------------------------------------------.
+ | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | . |
+ |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+ `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ | | | | | | | | | 0 | = | |
+ `----------------------------------' `----------------------------------'
+ ,-------------. ,-------------.
+ | | | | | |
+ ,------|------|------| |------+------+------.
+ | | | | | | | |
+ | | |------| |------| | |
+ | | | | | | | |
+ `--------------------' `--------------------'
+```
+
+## Keymap 2: Arrow Layer
+```
+ ,--------------------------------------------------. ,--------------------------------------------------.
+ | | | | | | | | | | | | | | | |
+ |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ | | | | | | | | | | |PGDOWN| PGUP | | | |
+ |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ | | | | | | |------| |------| LEFT | DOWN | UP |RIGHT | | |
+ |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ | | | | | | | | | | | HOME | END | | | |
+ `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ | | | | | | | | | | | |
+ `----------------------------------' `----------------------------------'
+ ,-------------. ,-------------.
+ | | | | | |
+ ,------|------|------| |------+------+------.
+ | | | | | | | |
+ | | |------| |------| | |
+ | | | | | | | |
+ `--------------------' `--------------------'
+```
+
+## Keymap 3: Media and mouse keys
+```
+ ,--------------------------------------------------. ,--------------------------------------------------.
+ | | | | | | | | | | | | | | | |
+ |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ | | | | MsUp | | | | | | | | | | | |
+ |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ | | |MsLeft|MsDown|MsRght| |------| |------| | Lclk | Rclk | | | |
+ |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ | | |Mute |VolDn | VolUp| | | | | | | | | | |
+ `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ | | | Prev | Play | Next | | | | | | |
+ `----------------------------------' `----------------------------------'
+ ,-------------. ,-------------.
+ | | | | | |
+ ,------|------|------| |------+------+------.
+ |Brwser| | | | | | |
+ |Back | |------| |------| | |
+ | | | | | | | |
+ `--------------------' `--------------------'
+```
diff --git a/keyboards/ergodox/keymaps/mclennon_osx/README.md b/keyboards/ergodox/keymaps/mclennon_osx/README.md
new file mode 100644
index 000000000..60980d043
--- /dev/null
+++ b/keyboards/ergodox/keymaps/mclennon_osx/README.md
@@ -0,0 +1,5 @@
+# Ergodox EZ for OS X
+
+This keymapping is designed to be reasonably familiar to an ordinary Mac keyboard while taking advantage of the Ergodox EZ's features. Caps lock instead enables a layer which allows a user to use HJKL as arrow keys and to control media. Shift and control have additional mappings on S and D to provide easier access while holding down caps lock.
+
+If you choose to compile this yourself, be sure to compile with `#define PREVENT_STUCK_MODIFIERS` in your `config.h`. Firmware built using [qmk_firmware](https://github.com/jackhumbert/qmk_firmware/).
diff --git a/keyboards/ergodox/keymaps/mclennon_osx/keymap.c b/keyboards/ergodox/keymaps/mclennon_osx/keymap.c
new file mode 100644
index 000000000..627ff01e4
--- /dev/null
+++ b/keyboards/ergodox/keymaps/mclennon_osx/keymap.c
@@ -0,0 +1,144 @@
+// Media keys work on OSX, but not on Windows.
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // Default layer
+#define AUXI 1 // Auxiliary layer
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | ~` | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | -_ | += | Bkspc |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | E | R | T | L1 | | Del | Y | U | I | O | P | |\ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | L1 | A | S | D | F | G |------| |------| H | J | K | L | ;: | Enter |
+ * |--------+------+------+------+------+------| {[ | | }] |------+------+------+------+------+--------|
+ * | LShift | Z | X | C | V | B | | | | N | M | <, | >. | ?/ | "' |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |LCtrl | | | | Esc | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | |Power | |
+ * ,------|------|------| |------+--------+------.
+ * | | | | | | | |
+ * | LGui | LAlt |------| |------| Bkspc |Space |
+ * | | | | | Del | | |
+ * `--------------------' `----------------------'
+ */
+// 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(1),
+ MO(1), KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC,
+ KC_LCTL, KC_TRNS,KC_TRNS,KC_TRNS,KC_ESC,
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_LGUI,KC_LALT,KC_TRNS,
+
+ // right hand
+ KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC,
+ KC_DELETE, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH,
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_ENT,
+ KC_RBRC, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_QUOT,
+ KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_PWR, KC_TRNS,
+ KC_TRNS,
+ KC_DELETE, KC_BSPC, KC_SPC
+ ),
+/* Keymap 1: Auxiliary Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | TRNS | | | Mute | VolDn| VolUp| Play | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | TRNS | |LShift| LCtrl| | |------| |------| LEFT | DOWN | UP |RIGHT | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | LShift | | | | | | | | | MPrv | MNxt | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |LCtrl | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | LGui | LAlt |------| |------| Bkspc| Space|
+ * | | | | | Del | | |
+ * `--------------------' `--------------------'
+ */
+// AUXILIARY
+[AUXI] = KEYMAP(
+ // left hand
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_LSHIFT,KC_LCTL, KC_TRNS, KC_TRNS,
+ KC_LSHIFT,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_LGUI, KC_LALT, KC_TRNS,
+ // right hand
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
+ KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_TRNS, KC_TRNS,
+ KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_PWR, KC_TRNS,
+ KC_TRNS,
+ KC_DELETE, KC_BSPC, KC_SPC
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(AUXI) // FN1 - Momentary Layer 1 (Auxiliary)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ 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) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboards/ergodox_ez/keymaps/mpiechotka/keymap.c b/keyboards/ergodox/keymaps/mpiechotka/keymap.c
index 5bfef5995..67aca4479 100644
--- a/keyboards/ergodox_ez/keymaps/mpiechotka/keymap.c
+++ b/keyboards/ergodox/keymaps/mpiechotka/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
#include "keymap_colemak.h"
diff --git a/keyboards/ergodox_ez/keymaps/mpiechotka/readme.md b/keyboards/ergodox/keymaps/mpiechotka/readme.md
index 785400d1d..785400d1d 100644
--- a/keyboards/ergodox_ez/keymaps/mpiechotka/readme.md
+++ b/keyboards/ergodox/keymaps/mpiechotka/readme.md
diff --git a/keyboards/ergodox_ez/keymaps/msc/img/code_layer.png b/keyboards/ergodox/keymaps/msc/img/code_layer.png
index 7b5efaae7..7b5efaae7 100644
--- a/keyboards/ergodox_ez/keymaps/msc/img/code_layer.png
+++ b/keyboards/ergodox/keymaps/msc/img/code_layer.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/msc/img/main_layer.png b/keyboards/ergodox/keymaps/msc/img/main_layer.png
index 65f92dda1..65f92dda1 100644
--- a/keyboards/ergodox_ez/keymaps/msc/img/main_layer.png
+++ b/keyboards/ergodox/keymaps/msc/img/main_layer.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/msc/img/media_layer.png b/keyboards/ergodox/keymaps/msc/img/media_layer.png
index a69799b07..a69799b07 100644
--- a/keyboards/ergodox_ez/keymaps/msc/img/media_layer.png
+++ b/keyboards/ergodox/keymaps/msc/img/media_layer.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/msc/keymap.c b/keyboards/ergodox/keymaps/msc/keymap.c
index e567e513f..c43aecf6b 100644
--- a/keyboards/ergodox_ez/keymaps/msc/keymap.c
+++ b/keyboards/ergodox/keymaps/msc/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/msc/readme.md b/keyboards/ergodox/keymaps/msc/readme.md
index 0d14fcbd2..0d14fcbd2 100644
--- a/keyboards/ergodox_ez/keymaps/msc/readme.md
+++ b/keyboards/ergodox/keymaps/msc/readme.md
diff --git a/keyboards/ergodox_ez/keymaps/naps62/keymap.c b/keyboards/ergodox/keymaps/naps62/keymap.c
index d8c28423c..9064053fc 100644
--- a/keyboards/ergodox_ez/keymaps/naps62/keymap.c
+++ b/keyboards/ergodox/keymaps/naps62/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/naps62/readme.md b/keyboards/ergodox/keymaps/naps62/readme.md
index 14728e4cc..14728e4cc 100644
--- a/keyboards/ergodox_ez/keymaps/naps62/readme.md
+++ b/keyboards/ergodox/keymaps/naps62/readme.md
diff --git a/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keyboard-layout.png b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keyboard-layout.png
new file mode 100644
index 000000000..544b5658e
--- /dev/null
+++ b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keyboard-layout.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keymap.c b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keymap.c
new file mode 100644
index 000000000..1d505f8e3
--- /dev/null
+++ b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/keymap.c
@@ -0,0 +1,180 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "keymap_norwegian.h"
+
+#define BASE 0 // default layer
+#define BASE_MAC 1 // default layer mac
+#define NUMB_FUNC 2 // numbers and function keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Keymap 0: Basic layer PC
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | * | [ | ] | { | } | ~ |Mac/PC| | ^ | $ | ( | ) | < | > | @ |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | + | Q | W | E | R | T | " | | ' | Y | U | I | O | P | Ã… |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | / | A | S | D | F | G |------| |------| H | J | K | L | Ø | Æ |
+ * |--------+------+------+------+------+------| ; | | = |------+------+------+------+------+--------|
+ * | - | Z | X | C | V | B | | | | N | M | RIGHT| DOWN | UP | _ |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |Alt/esc| ! | ? | : | TAB | | LEFT | _ | & | | |Num/fn|
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,--------------.
+ * | # | ` | |Insert| % |
+ * ,------|------|------| |------+-------+------.
+ * | | | ´ | | Del | | |
+ * | Shift|Ctrl/.|------| |------| Enter |Space |
+ * | | |GUI/, | | Bspc | | |
+ * `--------------------' `---------------------'
+ */
+[BASE] = KEYMAP(
+ // left hand
+ KC_PAST, NO_LBRC, NO_RBRC, NO_LCBR, NO_RCBR, KC_FN2, TG(1),
+ KC_PPLS, KC_Q, KC_W, KC_E, KC_R, KC_T, NO_QUO2,
+ KC_PSLS, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_PMNS, KC_Z, KC_X, KC_C, KC_V, KC_B, NO_SCLN,
+ ALT_T(KC_ESC), KC_EXLM , NO_QUES, NO_COLN, KC_TAB,
+ KC_HASH, KC_FN7,
+ KC_FN6,
+ KC_FN1,CTL_T(KC_DOT),GUI_T(KC_COMMA),
+ // right hand
+ KC_FN5, NO_DLR, NO_LPRN, NO_RPRN ,KC_FN3, KC_FN4,NO_AT,
+ NO_APOS, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AA ,
+ KC_H, KC_J, KC_K, KC_L, NO_OSLH, NO_AE,
+ NO_EQL, KC_N, KC_M, KC_RIGHT, KC_DOWN, KC_UP, NO_BSLS,
+ KC_LEFT, NO_UNDS, NO_AMPR, NO_PIPE, OSL(2),
+ KC_INSERT, KC_PERC,
+ KC_DELT,
+ KC_BSPC,KC_ENT,KC_SPC
+ ),
+/* Keymap 1: Basic layer MACS (Same as pc, except for cmd/ctrl, which are swapped)
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | \ | | | { | } | | | | | $ | | | < | > | @ |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | ' |------+------+------+------+------+--------|
+ * | | | | | | |------| |------| | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | |,/Ctrl| | | | ` | |Num/fn|
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | ` | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | ´ | | | | |
+ * | |GUI/. |------| |------| | |
+ * | | |crtl/,| | | | |
+ * `--------------------' `--------------------'
+ */
+[BASE_MAC] = KEYMAP(
+ KC_TRNS, KC_TRNS,KC_TRNS, NO_LCBR_MAC,NO_RCBR_MAC, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS , KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, NO_GRV_MAC,
+ KC_FN10,
+ KC_TRNS,GUI_T(KC_DOT) , CTL_T(KC_COMMA),
+ // right hand
+ KC_TRNS, NO_DLR_MAC, KC_TRNS,KC_TRNS,KC_FN8, KC_FN9,NO_AT_MAC,
+ NO_APOS_MAC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NO_BSLS_MAC,
+ KC_TRNS, KC_TRNS, KC_TRNS, NO_PIPE_MAC, OSL(2),
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+/* Keymap 2: Number ++´ánd Fn layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | F9 | F10 | F11 | F12 | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | 8 | 7 | 6 | 5 | 9 | | | | | F5 | F6 | F7 | F8 | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | 4 | 3 | 2 | 1 | 0 |------| |------| | F1 | F2 | F3 | F4 | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | END | PGDWN| PGUP | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | HOME | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[NUMB_FUNC] = KEYMAP(
+ NO_ASTR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ NO_PLUS, KC_8, KC_7,KC_6,KC_5, KC_9 , KC_TRNS,
+ NO_SLSH , KC_4 , KC_3 , KC_2 , KC_1 , KC_0,
+ NO_MINS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_F5, KC_F6 , KC_F7, KC_F8, KC_TRNS,
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_TRNS,
+ KC_TRNS, KC_HOME, KC_TRNS, KC_END, KC_PGDN, KC_PGUP, KC_TRNS,
+ KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+)
+};
+
+enum macro_id {
+ TILDE_NO, LESS_NO, GRTR_NO, CIRC_NO, ACUT_NO, GRV_NO, LESS_NO_MAC, GRTR_NO_MAC, ACUT_NO_MAC
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_MODS_ONESHOT(MOD_LSFT), // Sticky shift light. Tap for the next keypress to be shifted. Hold for regular shift.
+ [2] = ACTION_MACRO(TILDE_NO), // Completed ~ character(pc and mac), no space needed.
+ [3] = ACTION_MACRO(LESS_NO), // < completed on keypress down, to avoid shifting the next character if it is not released first.
+ [4] = ACTION_MACRO(GRTR_NO), // > completed on keypress down, to avoid shifting the next character if it is not released first.
+ [5] = ACTION_MACRO(CIRC_NO), // Completed ^ character, no space needed.
+ [6] = ACTION_MACRO(ACUT_NO), // Completed ´ character, no space needed.
+ [7] = ACTION_MACRO(GRV_NO), // Completed ` character, no space needed.
+ [8] = ACTION_MACRO(LESS_NO_MAC), // < completed on keypress down, to avoid same button problem when typing <> quickly
+ [9] = ACTION_MACRO(GRTR_NO_MAC), // > completed on keypress down, to avoid same button problem when typing <> quickly
+ [10] = ACTION_MACRO(ACUT_NO_MAC), // Completed ´ character, no space needed
+};
+
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ keyevent_t event = record->event;
+
+ switch (id) {
+ case TILDE_NO:
+ return (event.pressed ? MACRO( D(RALT), T(RBRC), U(RALT), T(SPC), END ) : MACRO_NONE);
+ case LESS_NO:
+ return (event.pressed ? MACRO( T(NUBS), END ) : MACRO_NONE);
+ case GRTR_NO:
+ return (event.pressed ? MACRO( D(LSFT), T(NUBS), U(LSFT), END ) : MACRO_NONE);
+ case CIRC_NO:
+ return (event.pressed ? MACRO( D(LSFT), T(RBRC), U(LSFT), T(SPC), END ) : MACRO_NONE);
+ case ACUT_NO:
+ return (event.pressed ? MACRO( D(RALT), T(EQL), U(RALT), T(SPC), END ) : MACRO_NONE);
+ case GRV_NO:
+ return (event.pressed ? MACRO( D(LSFT), T(EQL), T(SPC), U(LSFT), END ) : MACRO_NONE);
+ case LESS_NO_MAC:
+ return (event.pressed ? MACRO( T(GRV), END ) : MACRO_NONE);
+ case GRTR_NO_MAC:
+ return (event.pressed ? MACRO( D(LSFT), T(GRV), U(LSFT), END ) : MACRO_NONE);
+ case ACUT_NO_MAC:
+ return (event.pressed ? MACRO( T(EQL), T(SPC), END ) : MACRO_NONE);
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/readme.md b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/readme.md
new file mode 100644
index 000000000..f7e8baf56
--- /dev/null
+++ b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc/readme.md
@@ -0,0 +1,30 @@
+# Norwegian setup with osx/pc toggle
+
+## Motivation
+I wanted a Norwegian setup that worked in a similar way on both my Mac and PC. I also wanted the keyboard to translate from a standard Norwegian keyboard OS setup.
+
+## Overview
+The setup is created to be programmer friendly.
+- Most of the symbols used in code can be activated without using layers or shift key.
+- You can reach the IDE/OS shortcut activators(Ctrl, Win/Cmd, Alt, Shift) with the thumb or the wrist.
+- Navigation is prioritized, arrows below the home row.
+
+## PC/Mac toggle
+The default setup is for Norwegian keyboard setting(on a PC(Windows or Linux) or Mac. Use the Mac/PC toggle button to switch between OSX and PC setup. The settings will be reverted to PC setup each time you restart/connect the keyboard.
+
+## Layers
+Since symbols are prioritized in this setup, numbers and function keys are on a new layer. The easiest way to use the layer switch(and also the alt key), is to push your hand right below the little finger, on the key. You will then have all your fingers free to type numbers or press function keys.
+
+## Tap-shift
+Tap for the next character to be shifted, hold down for regular shift.
+
+## Comma dot and escape
+Comma, dot and escape share buttons with modifier keys. Tap to access these keys, hold down to use the keys as modifier keys.
+
+## Numpad symbols
++-/* are implemented with the numpad keycodes. The benefit is that they will work better with shortcuts in certain programs. For some reason, the default setting in the osx terminal is to not accept numpad characters for '/' and '-'. For a solution, see https://discussions.apple.com/thread/6613968?start=0&tstart=0.
+If you really need the norwegian symbols in a program, you can access them using the number toggle button.
+
+## Layout
+
+![keyboard-layout](keyboard-layout.png)
diff --git a/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keyboard-layout.png b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keyboard-layout.png
new file mode 100644
index 000000000..462de5c56
--- /dev/null
+++ b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keyboard-layout.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keymap.c b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keymap.c
new file mode 100644
index 000000000..acf74a47d
--- /dev/null
+++ b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/keymap.c
@@ -0,0 +1,180 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "keymap_norwegian.h"
+
+#define BASE 0 // default layer
+#define BASE_MAC 1 // default layer mac
+#define NUMB_FUNC 2 // numbers and function keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Keymap 0: Basic layer PC
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | * | [ | ] | { | } | ~ |Mac/PC| | ^ | $ | ( | ) | < | > | @ |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | + | Q | W | F | P | G | " | | ' | J | L | U | Y | Å | Æ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | / | A | R | S | T | D |------| |------| H | N | E | I | O | Ø |
+ * |--------+------+------+------+------+------| ; | | = |------+------+------+------+------+--------|
+ * | - | Z | X | C | V | B | | | | K | M | RIGHT| DOWN | UP | _ |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |Alt/esc| ! | ? | : | TAB | | LEFT | _ | & | | |Num/fn|
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,--------------.
+ * | # | ` | |Insert| % |
+ * ,------|------|------| |------+-------+------.
+ * | | | ´ | | Del | | |
+ * | Shift|Ctrl/.|------| |------| Enter |Space |
+ * | | |GUI/, | | Bspc | | |
+ * `--------------------' `---------------------'
+ */
+[BASE] = KEYMAP(
+ // left hand
+ KC_PAST, NO_LBRC, NO_RBRC, NO_LCBR, NO_RCBR, KC_FN2, TG(1),
+ KC_PPLS, KC_Q, KC_W, KC_F, KC_P, KC_G, NO_QUO2,
+ KC_PSLS, KC_A, KC_R, KC_S, KC_T, KC_D,
+ KC_PMNS, KC_Z, KC_X, KC_C, KC_V, KC_B, NO_SCLN,
+ ALT_T(KC_ESC), KC_EXLM , NO_QUES, NO_COLN, KC_TAB,
+ KC_HASH, KC_FN7,
+ KC_FN6,
+ KC_FN1,CTL_T(KC_DOT),GUI_T(KC_COMMA),
+ // right hand
+ KC_FN5, NO_DLR, NO_LPRN, NO_RPRN ,KC_FN3, KC_FN4,NO_AT,
+ NO_APOS, KC_J, KC_L, KC_U, KC_Y, NO_AA, NO_AE ,
+ KC_H, KC_N, KC_E, KC_I, KC_O, NO_OSLH,
+ NO_EQL, KC_K, KC_M, KC_RIGHT, KC_DOWN, KC_UP, NO_BSLS,
+ KC_LEFT, NO_UNDS, NO_AMPR, NO_PIPE, OSL(2),
+ KC_INSERT, KC_PERC,
+ KC_DELT,
+ KC_BSPC,KC_ENT,KC_SPC
+ ),
+/* Keymap 1: Basic layer MAC (Same as pc, except for cmd/ctrl, which are swapped)
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | \ | | | { | } | | | | | $ | | | < | > | @ |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | ' |------+------+------+------+------+--------|
+ * | | | | | | |------| |------| | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | |,/Ctrl| | | | ` | |Num/fn|
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | ` | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | ´ | | | | |
+ * | |GUI/. |------| |------| | |
+ * | | |crtl/,| | | | |
+ * `--------------------' `--------------------'
+ */
+[BASE_MAC] = KEYMAP(
+ KC_TRNS, KC_TRNS,KC_TRNS, NO_LCBR_MAC,NO_RCBR_MAC, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS , KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, NO_GRV_MAC,
+ KC_FN10,
+ KC_TRNS,GUI_T(KC_DOT) , CTL_T(KC_COMMA),
+ // right hand
+ KC_TRNS, NO_DLR_MAC, KC_TRNS,KC_TRNS,KC_FN8, KC_FN9,NO_AT_MAC,
+ NO_APOS_MAC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NO_BSLS_MAC,
+ KC_TRNS, KC_TRNS, KC_TRNS, NO_PIPE_MAC, OSL(2),
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+/* Keymap 2: Number ++´ánd Fn layer pc
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | F9 | F10 | F11 | F12 | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | 8 | 7 | 6 | 5 | 9 | | | | | F5 | F6 | F7 | F8 | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | 4 | 3 | 2 | 1 | 0 |------| |------| | F1 | F2 | F3 | F4 | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | END | PGDWN| PGUP | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | HOME | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[NUMB_FUNC] = KEYMAP(
+ NO_ASTR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ NO_PLUS, KC_8, KC_7,KC_6,KC_5, KC_9 , KC_TRNS,
+ NO_SLSH , KC_4 , KC_3 , KC_2 , KC_1 , KC_0,
+ NO_MINS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_F5, KC_F6 , KC_F7, KC_F8, KC_TRNS,
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_TRNS,
+ KC_TRNS, KC_HOME, KC_TRNS, KC_END, KC_PGDN, KC_PGUP, KC_TRNS,
+ KC_HOME, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+)
+};
+
+enum macro_id {
+ TILDE_NO, LESS_NO, GRTR_NO, CIRC_NO, ACUT_NO, GRV_NO, LESS_NO_MAC, GRTR_NO_MAC, ACUT_NO_MAC
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_MODS_ONESHOT(MOD_LSFT), // Sticky shift light. Tap for the next keypress to be shifted. Hold for regular shift.
+ [2] = ACTION_MACRO(TILDE_NO), // Completed ~ character(pc and mac), no space needed.
+ [3] = ACTION_MACRO(LESS_NO), // < completed on keypress down, to avoid shifting the next character if it is not released first.
+ [4] = ACTION_MACRO(GRTR_NO), // > completed on keypress down, to avoid shifting the next character if it is not released first.
+ [5] = ACTION_MACRO(CIRC_NO), // Completed ^ character, no space needed.
+ [6] = ACTION_MACRO(ACUT_NO), // Completed ´ character, no space needed.
+ [7] = ACTION_MACRO(GRV_NO), // Completed ` character, no space needed.
+ [8] = ACTION_MACRO(LESS_NO_MAC), // < completed on keypress down, to avoid same button problem when typing <> quickly
+ [9] = ACTION_MACRO(GRTR_NO_MAC), // > completed on keypress down, to avoid same button problem when typing <> quickly
+ [10] = ACTION_MACRO(ACUT_NO_MAC), // Completed ´ character, no space needed
+};
+
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ keyevent_t event = record->event;
+
+ switch (id) {
+ case TILDE_NO:
+ return (event.pressed ? MACRO( D(RALT), T(RBRC), U(RALT), T(SPC), END ) : MACRO_NONE);
+ case LESS_NO:
+ return (event.pressed ? MACRO( T(NUBS), END ) : MACRO_NONE);
+ case GRTR_NO:
+ return (event.pressed ? MACRO( D(LSFT), T(NUBS), U(LSFT), END ) : MACRO_NONE);
+ case CIRC_NO:
+ return (event.pressed ? MACRO( D(LSFT), T(RBRC), U(LSFT), T(SPC), END ) : MACRO_NONE);
+ case ACUT_NO:
+ return (event.pressed ? MACRO( D(RALT), T(EQL), U(RALT), T(SPC), END ) : MACRO_NONE);
+ case GRV_NO:
+ return (event.pressed ? MACRO( D(LSFT), T(EQL), T(SPC), U(LSFT), END ) : MACRO_NONE);
+ case LESS_NO_MAC:
+ return (event.pressed ? MACRO( T(GRV), END ) : MACRO_NONE);
+ case GRTR_NO_MAC:
+ return (event.pressed ? MACRO( D(LSFT), T(GRV), U(LSFT), END ) : MACRO_NONE);
+ case ACUT_NO_MAC:
+ return (event.pressed ? MACRO( T(EQL), T(SPC), END ) : MACRO_NONE);
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/readme.md b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/readme.md
new file mode 100644
index 000000000..aaaec3e53
--- /dev/null
+++ b/keyboards/ergodox/keymaps/norwegian_programmer_osx_pc_colemak/readme.md
@@ -0,0 +1,30 @@
+# Norwegian Colemak setup with osx/pc toggle
+
+## Motivation
+I wanted a Norwegian Colemak setup that worked in a similar way on both my Mac and PC. I also wanted the keyboard to translate from a standard Norwegian keyboard OS setup.
+
+## Overview
+The setup is created to be programmer friendly.
+- Most of the symbols used in code can be activated without using layers or shift key.
+- You can reach the IDE/OS shortcut activators(Ctrl, Win/Cmd, Alt, Shift) with the thumb or the wrist.
+- Navigation is prioritized, arrows below the home row.
+
+## PC/Mac toggle
+The default setup is for Norwegian keyboard setting(not colemak software variants) on a PC(Windows or Linux) or Mac. Use the Mac/PC toggle button to switch between OSX and PC setup. The settings will be reverted to PC setup each time you restart/connect the keyboard.
+
+## Layers
+Since symbols are prioritized in this setup, numbers and function keys are on a new layer. The easiest way to use the layer switch(and also the alt key), is to push your hand right below the little finger, on the key. You will then have all your fingers free to type numbers or press function keys.
+
+## Tap-shift
+Tap for the next character to be shifted, hold down for regular shift.
+
+## Comma dot and escape
+Comma, dot and escape share buttons with modifier keys. Tap to access these keys, hold down to use the keys as modifier keys.
+
+## Numpad symbols
++-/* are implemented with the numpad keycodes. The benefit is that they will work better with shortcuts in certain programs. For some reason, the default setting in the osx terminal is to not accept numpad characters for '/' and '-'. For a solution, see https://discussions.apple.com/thread/6613968?start=0&tstart=0.
+If you really need the norwegian symbols in a program, you can access them using the number toggle button.
+
+## Layout
+
+![keyboard-layout](keyboard-layout.png)
diff --git a/keyboards/ergodox/keymaps/ordinary/keymap.c b/keyboards/ergodox/keymaps/ordinary/keymap.c
new file mode 100644
index 000000000..302c41cc8
--- /dev/null
+++ b/keyboards/ergodox/keymaps/ordinary/keymap.c
@@ -0,0 +1,429 @@
+#include "ergodox.h"
+#include "led.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "action_util.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols layer
+#define MDIA 2 // media layer
+#define SPEC 3 // special layer
+
+#define LSymb 10 // left symbol-shift key
+#define LMdia 11 // left media-shift key
+#define LSpec 12 // left special-shift key
+#define RSymb 13 // right symbol-shift key
+#define RMdia 14 // right media-shift key
+#define RSpec 15 // right special-shift key
+
+#define MUL 20 // mouse up left
+#define MUR 21 // mouse up right
+#define MDL 22 // mouse down left
+#define MDR 23 // mouse down right
+
+/*
+ * The Ordinary Layout for the Ergodox EZ keyboard, v4.20
+ *
+ * Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
+ *
+ * No rights reserved. This software is in the public domain.
+ * Credit me if you are friendly but if you're a jerk don't bother.
+ * If you use or modify this layout I would love to hear from you.
+ *
+ * Details: readme.md
+ * https://github.com/nrrkeene/qmk_firmware/tree/master/keyboards/ergodox/keymaps/ordinary
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/******* Base Layer ****************************************************************************************************
+ *
+ * ,------------------------------------------------------. ,------------------------------------------------------.
+ * | Special `~ | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | =+ Special |
+ * |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------|
+ * | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \| Media |
+ * |------------+------+------+------+------+------| | | |------+------+------+------+------+------------|
+ * | Symbol | A | S | D | F | G |------| |------| H | J | K | L | ; | '" Symbol |
+ * |------------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+------------|
+ * | Capitals | Z | X | C | V | B | -Tab | | | N | M | , | . | / | Capitals |
+ * `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------'
+ * | LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh | RCtrl |
+ * `-----------------------------------' `-----------------------------------'
+ * ,-------------. ,-------------.
+ * | Home | End | | Left | Right|
+ * ,------|------|------| |------+------+------.
+ * | | | PgUp | | Up | | |
+ * |Backsp| Del |------| |------| Enter| Space|
+ * | | | PgDn | | Down | | |
+ * `--------------------' `--------------------'
+ */
+[BASE] = KEYMAP(
+// left hand
+ F(LSpec) ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_ESC
+,F(LMdia) ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC
+,M(LSymb) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G
+,KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB)
+,KC_LCTL ,KC_MEH ,KC_HYPR,KC_LALT,KC_LGUI
+ ,KC_HOME,KC_END
+ ,KC_PGUP
+ ,KC_BSPC,KC_DEL ,KC_PGDN
+ // right hand
+ ,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec)
+ ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia)
+ ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,F(RSymb)
+ ,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,KC_RSFT
+ ,KC_RGUI,KC_RALT,KC_HYPR ,KC_MEH ,KC_RCTL
+ ,KC_LEFT ,KC_RGHT
+ ,KC_UP
+ ,KC_DOWN ,KC_ENT ,KC_SPC
+ ),
+
+/******* Symbols Layer *************************************************************************************************
+ *
+ * ,-----------------------------------------------------. ,-----------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | Esc | | - | F6 | F7 | F8 | F9 | F10 | |
+ * |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
+ * | | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | |
+ * |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
+ * | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | |
+ * |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------|
+ * | | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | |
+ * `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
+ * | LCtrl | Meh |Hyper | LAlt | LGui | | 0 | . | = | + | Ent |
+ * `-----------------------------------' `-----------------------------------'
+ * ,-------------. ,-------------.
+ * | Left | Right| | Home | End |
+ * ,------|------|------| |------+------+------.
+ * | | | Up | | PgUp | | |
+ * |Space |Enter |------| |------|BackSp| Del |
+ * | | | Down | | PgDn | | |
+ * `--------------------' `--------------------'
+ */
+[SYMB] = KEYMAP(
+// left hand
+ KC_TRNS ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_ESC
+,KC_TRNS ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
+,KC_TRNS ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV
+,KC_TRNS ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB
+,KC_LCTL ,KC_MEH ,KC_HYPR ,KC_LALT ,KC_LGUI
+ ,KC_LEFT ,KC_RGHT
+ ,KC_UP
+ ,KC_SPC ,KC_ENT ,KC_DOWN
+ // right hand
+ ,KC_MINS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_TRNS
+ ,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,KC_TRNS
+ ,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,KC_TRNS
+ ,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_TRNS
+ ,KC_0 ,KC_DOT ,KC_EQL,KC_PLUS ,KC_ENT
+ ,KC_HOME ,KC_END
+ ,KC_PGUP
+ ,KC_PGDN ,KC_BSPC ,KC_DEL
+),
+
+/******* Media Layer *******************************************************************************************************
+ *
+ * ,---------------------------------------------------------------. ,---------------------------------------------------------------.
+ * | | F11 | F12 | F13 | F14 | F15 | Esc | | | F16 | F17 | F18 | F19 | F20 | |
+ * |------+---------+---------+---------+---------+----------------| |------+---------+---------+---------+---------+---------+------|
+ * | |Shut Down|MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll| |Scroll|PrintScrn| Home | Up | PgUp | Mail | |
+ * |------+---------+---------+---------+---------+---------| Up | | Up |---------+---------+---------+---------+---------+------|
+ * | | Sleep |MouseLeft|MouseDown|MouseRght|Volume Dn|------| |------| Num Lock| Left | Down | Right | MyComp | |
+ * |------+---------+---------+---------+---------+---------|Scroll| |Scroll|---------+---------+---------+---------+---------+------|
+ * | | |MouseDnLf|MouseDown|MouseDnRg| Mute | Down | | Down | | End | Down | PgDn | | |
+ * `------+---------+---------+---------+---------+----------------' `----------------+---------+---------+---------+---------+------'
+ * |LCtrl| Meh | MClick | LClick | R Click| |Cmd/Insrt|Optn/Del | Hyper | Meh |RCtrl|
+ * `---------------------------------------------' `---------------------------------------------'
+ * ,-------------. ,-------------.
+ * | Stop |Refrsh| | Prev | Next |
+ * ,------|------|------| |------+------+------.
+ * |Brwser|Brwser|Search| |VolUp | | |
+ * |Back | Fwd |------| |------| Stop | Play-|
+ * | | | Home | |VolDn | | Pause|
+ * `--------------------' `--------------------'
+ */
+[MDIA] = KEYMAP(
+// left hand
+ KC_TRNS ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_ESC
+,KC_TRNS ,KC_POWER ,M(MUL) ,KC_MS_U ,M(MUR) ,KC_VOLU ,KC_WH_U
+,KC_TRNS ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD
+,KC_TRNS ,KC_NO ,M(MDL) ,KC_MS_D ,M(MDR) ,KC_MUTE ,KC_WH_D
+,KC_LCTL ,KC_MEH ,KC_BTN3 ,KC_BTN1 ,KC_BTN2
+ ,KC_WSTP ,KC_WREF
+ ,KC_WSCH
+ ,KC_WBAK ,KC_NO ,KC_WHOM
+ // right hand
+ ,KC_NO ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_TRNS
+ ,KC_WH_U ,KC_PSCR ,KC_HOME ,KC_UP ,KC_PGUP ,KC_MAIL ,KC_TRNS
+ ,KC_NLCK ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_MYCM ,KC_TRNS
+ ,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_TRNS
+ ,GUI_T(KC_INS),ALT_T(KC_DEL),KC_HYPR ,KC_MEH ,KC_RCTL
+ ,KC_MPRV ,KC_MNXT
+ ,KC_VOLU
+ ,KC_VOLD ,KC_MSTP ,KC_MPLY
+),
+
+/******* Special Layer *****************************************************************************************************
+ *
+ * ,-------------------------------------------------------. ,-------------------------------------------------------.
+ * | | Esc | | | | | | | | | | | - | Bspc | |
+ * |-------------+------+------+------+------+-------------| |------+------+------+------+------+------+-------------|
+ * | Media Lock | | | | | | | | | | | | [ | ] | Media Lock |
+ * |-------------+------+------+------+------+------| | | |------+------+------+------+------+-------------|
+ * | Symbol Lock | | | | | |------| |------| | | | | | Symbol Lock |
+ * |-------------+------+------+------+------+------| | | |------+------+------+------+------+-------------|
+ * | Caps Lock | | | | | | | | | | | | | | Caps Lock |
+ * `-------------+------+------+------+------+-------------' `-------------+------+------+------+------+-------------'
+ * | | | | | | | | | | | |
+ * `------------------------------------' `------------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[SPEC] = KEYMAP(
+// left hand
+ KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_CAPS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS
+ ,KC_TRNS,KC_TRNS ,KC_TRNS
+ // right hand
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_MINS ,KC_BSPC ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_LBRC ,KC_RBRC ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_CAPS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS
+ )
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ // the faux shift keys are implemented as macro taps
+ [LSymb] = ACTION_MACRO_TAP(LSymb)
+ ,[LMdia] = ACTION_MACRO_TAP(LMdia)
+ ,[LSpec] = ACTION_MACRO_TAP(LSpec)
+ ,[RSymb] = ACTION_MACRO_TAP(RSymb)
+ ,[RMdia] = ACTION_MACRO_TAP(RMdia)
+ ,[RSpec] = ACTION_MACRO_TAP(RSpec)
+};
+
+uint16_t symb_shift = 0;
+uint16_t mdia_shift = 0;
+uint16_t spec_shift = 0;
+
+bool mdia_lock = false;
+bool symb_lock = false;
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ // There are two shift keys for each layer so we increment a layer_shift var when one
+ // is pressed and decrement when one is released. If both are pressed at the same time
+ // then the layer is locked (or unlocked). The shift counts are bound between 0 and 2
+ // only because sometimes rapid pressing led to irregular events; this way the states
+ // are self healing during use.
+
+ case LSymb: //
+ if (record->event.pressed) { // when the LSymb button is pressed
+ if(++symb_shift > 2) mdia_shift = 2; // increment the symb shift count, max two
+ if(spec_shift) symb_lock = !symb_lock; // if the Special layer is on, toggle the shift lock
+ layer_on(SYMB); // in any case, turn on the Symbols layer
+ } else { // when the LSymb button is released
+ if(--symb_shift < 0) symb_shift = 0; // decrement the shift count, minimum zero
+ if((!symb_shift) && (!symb_lock)) layer_off(SYMB); // if both shifts are released and the lock is off, turn off the Symbols layer
+ }
+ break;
+
+ case LMdia:
+ if (record->event.pressed) {
+ if (record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) {
+ register_code(KC_TAB);
+ } else {
+ if(spec_shift) mdia_lock = !mdia_lock;
+ if(++mdia_shift > 2) mdia_shift = 2;
+ layer_on(MDIA);
+ }
+ } else {
+ if(record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) {
+ unregister_code(KC_TAB);
+ } else {
+ if(--mdia_shift < 0) mdia_shift = 0;
+ if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA);
+ }
+ }
+ break;
+
+ case LSpec:
+ if (record->event.pressed) { // when the LSpec button is pressed
+ if(symb_shift) symb_lock == !symb_lock; // if another layer button is engaged, then
+ else if(mdia_shift) mdia_lock = !mdia_lock; // lock that layer, be it caps or symb or mdia
+ else if (record->tap.count && !record->tap.interrupted && (!spec_shift)) {
+ register_code(KC_GRV); // otherwise, if it's an uninterrupted tap, emit a char
+ } else {
+ if(++spec_shift > 2) spec_shift = 2;
+ layer_on(SPEC); // otherwise, turn on the Special layer
+ }
+ } else {
+ if(record->tap.count && !record->tap.interrupted && (!spec_shift)) {
+ unregister_code(KC_GRV);
+ } else {
+ if(--spec_shift < 0) spec_shift = 0;
+ if(!spec_shift) layer_off(SPEC);
+ }
+ }
+ break;
+
+ case RSymb:
+ if (record->event.pressed) {
+ if (record->tap.count && (!symb_shift) && (!symb_lock) && (!spec_shift)) {
+ register_code(KC_QUOT);
+ } else {
+ if(++symb_shift > 2) symb_shift = 2;
+ if(spec_shift) symb_lock = !symb_lock;
+ layer_on(SYMB);
+ }
+ } else {
+ if(record->tap.count && (!symb_shift) && (!symb_lock) && (!spec_shift)) {
+ unregister_code(KC_QUOT);
+ } else {
+ if(--symb_shift < 0) symb_shift = 0;
+ if((!symb_shift) && (!symb_lock)) layer_off(SYMB);
+ }
+ }
+ break;
+
+ case RMdia:
+ if (record->event.pressed) {
+ if (record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) {
+ register_code(KC_BSLS);
+ } else {
+ if(++mdia_shift > 2) mdia_shift = 2;
+ if(spec_shift) mdia_lock = !mdia_lock;
+ layer_on(MDIA);
+ }
+ } else {
+ if(record->tap.count && (!mdia_shift) && (!mdia_lock) && (!spec_shift)) {
+ unregister_code(KC_BSLS);
+ } else {
+ if(--mdia_shift < 0) mdia_shift = 0;
+ if((!mdia_shift) && (!mdia_lock)) layer_off(MDIA);
+ }
+ }
+ break;
+
+ case RSpec:
+ if (record->event.pressed) {
+ if(symb_shift) symb_lock = !symb_lock;
+ else if(mdia_shift) mdia_lock = !mdia_lock;
+ else if (record->tap.count && !record->tap.interrupted && (!spec_shift)) {
+ register_code(KC_EQL);
+ } else {
+ if(++spec_shift > 2) spec_shift = 2;
+ layer_on(SPEC);
+ }
+ } else {
+ if(record->tap.count && !record->tap.interrupted && (!spec_shift)) {
+ unregister_code(KC_EQL);
+ } else {
+ if(--spec_shift < 0) spec_shift = 0;
+ if(!spec_shift) layer_off(SPEC);
+ }
+ }
+ break;
+
+ // mouse diagonals
+
+ case MUL: // mouse up left
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_UP);
+ mousekey_on(KC_MS_LEFT);
+ mousekey_send();
+ } else {
+ mousekey_off(KC_MS_UP);
+ mousekey_off(KC_MS_LEFT);
+ mousekey_send();
+ }
+ break;
+
+ case MUR: // mouse up right
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_UP);
+ mousekey_on(KC_MS_RIGHT);
+ mousekey_send();
+ } else {
+ mousekey_off(KC_MS_UP);
+ mousekey_off(KC_MS_RIGHT);
+ mousekey_send();
+ }
+ break;
+
+ case MDL: // mouse down left
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_DOWN);
+ mousekey_on(KC_MS_LEFT);
+ mousekey_send();
+ } else {
+ mousekey_off(KC_MS_DOWN);
+ mousekey_off(KC_MS_LEFT);
+ mousekey_send();
+ }
+ break;
+
+ case MDR: // mouse down right
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_DOWN);
+ mousekey_on(KC_MS_RIGHT);
+ mousekey_send();
+ } else {
+ mousekey_off(KC_MS_DOWN);
+ mousekey_off(KC_MS_RIGHT);
+ mousekey_send();
+ }
+ break;
+
+ default:
+ // none
+ 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) {
+ // shift or caps lock turns on red light
+ if((keyboard_report->mods & MOD_BIT(KC_LSFT))
+ || (keyboard_report->mods & MOD_BIT(KC_RSFT))
+ || (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK))) {
+ ergodox_right_led_1_on();
+ } else {
+ ergodox_right_led_1_off();
+ }
+
+ // Symbol layer turns on green light
+ if(layer_state & (1UL<<SYMB)) {
+ ergodox_right_led_2_on();
+ } else {
+ ergodox_right_led_2_off();
+ }
+
+ // Media layer turns on blue light
+ if(layer_state & (1UL<<MDIA)) {
+ ergodox_right_led_3_on();
+ } else {
+ ergodox_right_led_3_off();
+ }
+};
diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-base.png b/keyboards/ergodox/keymaps/ordinary/ordinary-base.png
new file mode 100644
index 000000000..831db4f5d
--- /dev/null
+++ b/keyboards/ergodox/keymaps/ordinary/ordinary-base.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-base.txt b/keyboards/ergodox/keymaps/ordinary/ordinary-base.txt
index 25731ea2e..7763c3d37 100644
--- a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-base.txt
+++ b/keyboards/ergodox/keymaps/ordinary/ordinary-base.txt
@@ -1,24 +1,24 @@
[{x:3.5},"#\n3",{x:10.5},"*\n8"],
[{y:-0.875,x:2.5},"@\n2",{x:1},"$\n4",{x:8.5},"&\n7",{x:1},"(\n9"],
[{y:-0.875,x:5.5},"%\n5",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc"},"_\n\n\n\n\n\n-","^\n6"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n~\n\n\n\nShift\n`",{c:"#cccccc"},"!\n1",{x:14.5},")\n0",{c:"#2277ff",w:1.5},"+\n\nSpecial\n\n\n\n=\nShift"],
+[{y:-0.875,c:"#c6c600",w:1.5},"Special\n\n~\n\n\n\nShift\n`",{c:"#cccccc"},"!\n1",{x:14.5},")\n0",{c:"#c6c600",w:1.5},"+\n\nSpecial\n\n\n\n=\nShift"],
[{y:-0.375,x:3.5,c:"#cccccc"},"E",{x:10.5},"I"],
[{y:-0.875,x:2.5},"W",{x:1},"R",{x:8.5},"U",{x:1},"O"],
[{y:-0.875,x:5.5},"T",{h:1.5},"{\n\n\n\n\n\n[",{x:4.5,h:1.5},"}\n\n\n\n\n\n]","Y"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Media\n\nTab\n\n\n\nShift",{c:"#cccccc"},"Q",{x:14.5},"P",{c:"#2277ff",w:1.5},"|\n\\\nMedia\n\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#cccccc"},"D",{x:10.5},"K"],
+[{y:-0.875,c:"#c6c600",t:"#002299",w:1.5},"Media\n\nTab\n\n\n\nShift",{c:"#cccccc",t:"#000000"},"Q",{x:14.5},"P",{c:"#c6c600",t:"#002299",w:1.5},"|\n\\\nMedia\n\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000"},"D",{x:10.5},"K"],
[{y:-0.875,x:2.5},"S",{x:1},"F",{x:8.5},"J",{x:1},"L"],
[{y:-0.875,x:5.5},"G",{x:6.5},"H"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#cccccc"},"A",{x:14.5},":\n;",{c:"#2277ff",w:1.5},"\"\n'\nSymbols\n\n\n\n\nShift"],
-[{y:-0.625,x:6.5,c:"#54d6de",fa:[0,0,0,1],h:1.5},"< Tab\n\n\nShift Tab",{x:4.5,h:1.5},"Tab >\n\n\nTab"],
+[{y:-0.875,c:"#c6c600",t:"#007d00",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#cccccc",t:"#000000"},"A",{x:14.5},":\n;",{c:"#c6c600",t:"#007d00",w:1.5},"\"\n'\nSymbols\n\n\n\n\nShift"],
+[{y:-0.625,x:6.5,c:"#ff8500",t:"#000000",fa:[0,0,0,1],h:1.5},"< Tab\n\n\nShift Tab",{x:4.5,h:1.5},"Tab >\n\n\nTab"],
[{y:-0.75,x:3.5,c:"#cccccc"},"C",{x:10.5},"<\n,"],
[{y:-0.875,x:2.5},"X",{x:1},"V",{x:8.5},"M",{x:1},">\n."],
[{y:-0.875,x:5.5},"B",{x:6.5},"N"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#cccccc"},"Z",{x:14.5},"?\n/",{c:"#2277ff",w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5},"Option\n\n\nRAlt"],
+[{y:-0.875,c:"#c6c600",t:"#9e0000",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#cccccc",t:"#000000"},"Z",{x:14.5},"?\n/",{c:"#c6c600",t:"#9e0000",w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#dddd77",t:"#000000"},"Option\n\n\nLAlt",{x:10.5},"Option\n\n\nRAlt"],
[{y:-0.875,x:2.5},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5},"Cmd\n\n\nSuper",{x:1},"Hyper"],
[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Ctrl\n\n\nRCtrl"],
-[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#54d6de"},"Home","End"],
+[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ff8500"},"Home","End"],
[{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete","Page\n\n\n\n\n\nUp"],
[{x:2},"Page\n\n\n\n\n\nDown"],
[{r:-30,rx:13,y:-1,x:-3},"Left","Right"],
diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-media.png b/keyboards/ergodox/keymaps/ordinary/ordinary-media.png
new file mode 100644
index 000000000..5ff3f5338
--- /dev/null
+++ b/keyboards/ergodox/keymaps/ordinary/ordinary-media.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-media.txt b/keyboards/ergodox/keymaps/ordinary/ordinary-media.txt
new file mode 100644
index 000000000..e1467b22e
--- /dev/null
+++ b/keyboards/ergodox/keymaps/ordinary/ordinary-media.txt
@@ -0,0 +1,27 @@
+[{x:3.5,c:"#99de2a"},"F13",{x:10.5},"F18"],
+[{y:-0.875,x:2.5},"F12",{x:1},"F14",{x:8.5},"F17",{x:1},"F19"],
+[{y:-0.875,x:5.5},"F15",{c:"#ff4444"},"Esc",{x:4.5,c:"#737373",a:7},"",{c:"#99de2a",a:4},"F16"],
+[{y:-0.875,c:"#c6c600",w:1.5},"Shift\n\n\n\n\n\nLock",{c:"#99de2a"},"F11",{x:14.5},"F20",{c:"#c6c600",w:1.5},"\n\nShift\n\n\n\n\nLock"],
+[{y:-0.375,x:3.5,c:"#0066cc"},"Mouse\n\n\n\n\n\nUp",{x:10.5},"Cursor\n\n\n\n\n\nUp"],
+[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nUpLeft",{x:1},"Mouse\n\n\n\n\n\nUpRgt",{x:8.5,c:"#1e8fff"},"Home",{x:1},"Page\n\n\n\n\n\nUp"],
+[{y:-0.875,x:5.5,c:"#9977ee"},"Vol\n\n\n\n\n\nUp",{c:"#1e8fff",h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#9977ee"},"Print\n\n\n\n\n\nScreen"],
+[{y:-0.875,c:"#000000",t:"#3f68ff",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#9977ee",t:"#000000"},"Shut\n\n\n\n\n\nDown",{x:14.5},"Mail",{c:"#000000",t:"#3f68ff",w:1.5},"\n\nMedia\n\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#0066cc",t:"#000000"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
+[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nLeft",{x:1},"Mouse\n\n\n\n\n\nRight",{x:8.5},"Cursor\n\n\n\n\n\nLeft",{x:1},"Cursor\n\n\n\n\n\nRight"],
+[{y:-0.875,x:5.5,c:"#9977ee"},"Vol\n\n\n\n\n\nDown",{x:6.5},"Num\n\n\n\n\n\nLock"],
+[{y:-0.875,c:"#c6c600",t:"#007d00",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#9977ee",t:"#000000"},"Sleep",{x:14.5},"My\n\n\n\n\n\nComp",{c:"#c6c600",t:"#007d00",w:1.5},"\n\nSymbols\n\n\n\n\nShift"],
+[{y:-0.625,x:6.5,c:"#1e8fff",t:"#000000",h:1.5},"Scroll\n\n\n\n\n\nDown",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nDown"],
+[{y:-0.75,x:3.5,c:"#0066cc"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
+[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nDnLeft",{x:1},"Mouse\n\n\n\n\n\nDnRgt",{x:8.5,c:"#1e8fff"},"End",{x:1},"Page\n\n\n\n\n\nDown"],
+[{y:-0.875,x:5.5,c:"#9977ee"},"Mute",{x:6.5,c:"#737373",a:7},""],
+[{y:-0.875,c:"#c6c600",t:"#9e0000",a:4,w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#737373",t:"#000000",a:7},"",{x:14.5},"",{c:"#c6c600",t:"#9e0000",a:4,w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#0066cc",t:"#000000"},"Middle\n\n\n\n\n\nClick",{x:10.5,c:"#1e8fff",fa:[0,0,0,1]},"Delete\n\n\nOption"],
+[{y:-0.875,x:2.5,c:"#0066cc"},"Left\n\n\n\n\n\nClick",{x:1},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#1e8fff"},"Insert\n\n\nCmd",{x:1,c:"#dddd77"},"Hyper"],
+[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Crtl\n\n\nRCtrl"],
+[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#6633ee"},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"],
+[{h:2},"< Web\n\n\nBrowser",{h:2},"Web >\n\n\nBrowser","Search\n\n\nBrowser"],
+[{x:2},"Home\n\n\nBrowser"],
+[{r:-30,rx:13,y:-1,x:-3},"Prev\n\n\nAudio\n\n\nTrack","Next\n\n\nAudio\n\n\nTrack"],
+[{x:-3,c:"#9977ee"},"Vol\n\n\n\n\n\nUp",{c:"#6633ee",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"],
+[{x:-3,c:"#9977ee"},"Vol\n\n\n\n\n\nDown"]
+
diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-special.png b/keyboards/ergodox/keymaps/ordinary/ordinary-special.png
new file mode 100644
index 000000000..4fb9d1d16
--- /dev/null
+++ b/keyboards/ergodox/keymaps/ordinary/ordinary-special.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-special.txt b/keyboards/ergodox/keymaps/ordinary/ordinary-special.txt
new file mode 100644
index 000000000..97f40f9db
--- /dev/null
+++ b/keyboards/ergodox/keymaps/ordinary/ordinary-special.txt
@@ -0,0 +1,27 @@
+[{x:3.5,a:7},"",{x:10.5},""],
+[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1,a:4},"_\n\n\n\n\n\n-"],
+[{y:-0.875,x:5.5,a:7},"",{c:"#ff4444",a:4},"Esc",{x:4.5,c:"#cccccc",a:7},"",""],
+[{y:-0.875,c:"#000000",t:"#ff0000",a:4,w:1.5},"Special\n\n\n\n\n\nShift",{c:"#ff4444",t:"#000000"},"Esc",{x:14.5,c:"#ff8500"},"Back\n\n\n\n\n\nspace",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSpecial\n\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""],
+[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1,a:4},"{\n["],
+[{y:-0.875,x:5.5,a:7},"",{h:1.5},"",{x:4.5,h:1.5},"",""],
+[{y:-0.875,c:"#c6c600",t:"#002299",a:4,w:1.5},"Media\n\n\n\n\n\nLock",{c:"#cccccc",t:"#000000",a:7},"",{x:14.5,a:4},"\n\n}\n]",{c:"#c6c600",t:"#002299",w:1.5},"Media\n\n\n\n\n\nLock"],
+[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""],
+[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
+[{y:-0.875,x:5.5},"",{x:6.5},""],
+[{y:-0.875,c:"#c6c600",t:"#007d00",a:4,w:1.5},"Symbols\n\n\n\n\n\nLock",{c:"#cccccc",t:"#000000",a:7},"",{x:14.5},"",{c:"#c6c600",t:"#007d00",a:4,w:1.5},"Symbols\n\n\n\n\n\nLock"],
+[{y:-0.625,x:6.5,c:"#cccccc",t:"#000000",a:7,h:1.5},"",{x:4.5,h:1.5},""],
+[{y:-0.75,x:3.5},"",{x:10.5},""],
+[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
+[{y:-0.875,x:5.5},"",{x:6.5},""],
+[{y:-0.875,c:"#c6c600",t:"#9e0000",a:4,w:1.5},"Capitals\n\n\n\n\n\nLock",{c:"#cccccc",t:"#000000",a:7},"",{x:14.5},"",{c:"#c6c600",t:"#9e0000",a:4,w:1.5},"Capitals\n\n\n\n\n\nLock"],
+[{y:-0.375,x:3.5,c:"#cccccc",t:"#000000",a:7},"",{x:10.5},""],
+[{y:-0.875,x:2.5},"",{x:1},"",{x:8.5},"",{x:1},""],
+[{y:-0.75,x:0.5},"","",{x:14.5},"",""],
+[{r:30,rx:6.5,ry:4.25,y:-1,x:1},"",""],
+[{h:2},"",{h:2},"",""],
+[{x:2},""],
+[{r:-30,rx:13,y:-1,x:-3},"",""],
+[{x:-3},"",{h:2},"",{h:2},""],
+[{x:-3},""]
+
diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.png b/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.png
new file mode 100644
index 000000000..dd9086329
--- /dev/null
+++ b/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.txt b/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.txt
new file mode 100644
index 000000000..001bf370d
--- /dev/null
+++ b/keyboards/ergodox/keymaps/ordinary/ordinary-symbol.txt
@@ -0,0 +1,27 @@
+[{x:3.5,c:"#99de2a"},"F3",{x:10.5},"F8"],
+[{y:-0.875,x:2.5},"F2",{x:1},"F4",{x:8.5},"F7",{x:1},"F9"],
+[{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#bbddbb"},"_\n\n\n\n\n\n-",{c:"#99de2a"},"F6"],
+[{y:-0.875,c:"#c6c600",w:1.5},"Shift\n\n\n\n\n\nLock",{c:"#99de2a"},"F1",{x:14.5},"F10",{c:"#c6c600",w:1.5},"\n\nShift\n\n\n\n\nLock"],
+[{y:-0.375,x:3.5,c:"#bbddbb"},"{",{x:10.5,c:"#89b087"},"8"],
+[{y:-0.875,x:2.5,c:"#bbddbb"},"@",{x:1},"}",{x:8.5,c:"#89b087"},"7",{x:1},"9"],
+[{y:-0.875,x:5.5,c:"#bbddbb"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"],
+[{y:-0.875,c:"#c6c600",t:"#002299",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"!",{x:14.5,c:"#89b087"},"/",{c:"#c6c600",t:"#002299",w:1.5},"\n\nMedia\n\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#bbddbb",t:"#000000"},"(",{x:10.5,c:"#89b087"},"5"],
+[{y:-0.875,x:2.5,c:"#bbddbb"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"],
+[{y:-0.875,x:5.5,c:"#bbddbb"},"`",{x:6.5},"/"],
+[{y:-0.875,c:"#000000",t:"#007d00",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"#",{x:14.5,c:"#89b087"},"*",{c:"#000000",t:"#007d00",w:1.5},"\n\nSymbols\n\n\n\n\nShift"],
+[{y:-0.625,x:6.5,c:"#ff8500",t:"#000000",fa:[0,0,0,1],h:1.5},"Tab >\n\n\nTab",{x:4.5,h:1.5},"< Tab\n\n\nShift Tab"],
+[{y:-0.75,x:3.5,c:"#bbddbb"},"[",{x:10.5,c:"#89b087"},"2"],
+[{y:-0.875,x:2.5,c:"#bbddbb"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"],
+[{y:-0.875,x:5.5,c:"#bbddbb"},"~",{x:6.5},"\\"],
+[{y:-0.875,c:"#c6c600",t:"#9e0000",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"%",{x:14.5,c:"#89b087"},"-",{c:"#c6c600",t:"#9e0000",w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
+[{y:-0.375,x:3.5,c:"#dddd77",t:"#000000"},"Option\n\n\nLAlt",{x:10.5,c:"#89b087"},"."],
+[{y:-0.875,x:2.5,c:"#dddd77"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#89b087"},"0",{x:1},"="],
+[{y:-0.75,x:0.5,c:"#dddd77"},"Ctrl\n\n\nLCtrl","Meh",{x:14.5,c:"#89b087"},"+","Enter"],
+[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ff8500"},"Left","Right"],
+[{h:2},"Space",{h:2},"Enter","Up"],
+[{x:2},"Down"],
+[{r:-30,rx:13,y:-1,x:-3},"Home","End"],
+[{x:-3},"Page\n\n\n\n\n\nUp",{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete"],
+[{x:-3},"Page\n\n\n\n\n\nDown"]
+
diff --git a/keyboards/ergodox/keymaps/ordinary/readme.md b/keyboards/ergodox/keymaps/ordinary/readme.md
new file mode 100644
index 000000000..820b80b45
--- /dev/null
+++ b/keyboards/ergodox/keymaps/ordinary/readme.md
@@ -0,0 +1,90 @@
+# The Ordinary Layout, a familiar and powerful layout #
+
+The Ordinary Layout is intended to be unremarkably mundane and remarkably useful. This layout maintains most key positions from common QWERTY keyboards, and it features enhanced Symbol and Media layers compared to the default Ergodox EZ layout.
+
+The Ordinary Layout is supposed to look mostly like a normal keyboard, except in the ways that the Ergodox key arrangement is unique. The thumbs are responsible for space, enter, plus both forward and backward delete; with only a couple exceptions, all other keys are in the same place they are found on traditional keyboards.
+
+Nicholas Keene
+ordinarylayout@nicholaskeene.com
+no rights reserved, use for any purposes, credit me if you are a nice person
+
+## The Base Layout ##
+
+* *White Keys* are all the normal characters and symbols in all the normal locations (except for the brackets).
+* *Modifier Keys* are light yellow and in the traditional location: Control, Option, Command, plus Hyper and Meh.
+* *Shift Keys* are dark yellow, found on the outsides of the keyboard. Capitals Shift (traditional shift) is found in the usual place and above that is found Symbol Shift, Media Shift, and Special Shift (Shift Lock).
+* Several of the shift keys double for entry of characters which would typically be in those locations.
+* *Thumb Keys* shown in orange are for text navigation and manipulation.
+* *Escape* is red and it is always found in that location no matter what.
+
+![Ordinary base layout](ordinary-base.png)
+
+The four big orange keys are arranged differently than in the default Ergodox EZ layout. The Ordinary Layout here copies the design of the old Fingerworks TouchStream keyboard, but also reflects the natural presumptions of the author -- me! I type the space character with my right hand, and to me it makes sense for the two delete keys to be next to one another.
+
+The Forward Tab and Backward Tab keys are in their locations mostly because I ended up with two extra buttons and needed something to do with them. My muscle memory from using the Truly Ergonomic Keyboard makes me look for the Tab key with my right index finger, so it is handy to have this redundant Tab, and the idea with the Backward Tab key is that it becomes easy to navigate text fields in forms, or to indent/unindent code.
+
+## The Symbols Layer ##
+
+* *Symbols* shown in light green. All kinds of brackets are available on this layer. Ampersand and Pipe justapose each other. Pipe, slash, and backslash are arranged in a column.
+* *F-Keys* are bright green and overlay the row of numerals.
+* *Number pad* in dark green under the right hand includes all four arithmetic operations in the same order found on most number pads and features an Enter key. The keycodes emitted here are normal numeric keycodes, not the number-pad specific keycodes emitted by most number pads so that NumLock is not needed.
+* *Thumb keys* on this layer are the *reverse* of the orange keys on the base layer, with the keys either mirrored or shifted. This is powerful! Often I find myself using the mouse with my right hand, and the left hand needs to press Enter. Instead of reaching the left hand over to the right side of the keyboard, now I simply tap Symbols to reverse the turquoise keys, and Enter is right where it should be.
+
+![Ordinary symbol layout](ordinary-symbol.png)
+
+The Symbols Layer is based on the Coder Layer from the default Ergodox EZ layout. I slightly rearranged the symbols, added some symbols, expanded the number pad, and straightened out the F-Keys. It's very handy to have the symbols directly underneath the normal typing keys.
+
+## The Media Layer ##
+
+* *Mouse Cursor Keys* are under the left hand, shown in dark blue. Diagonal keys won't automatically repeat unless combined with other keys. Buttons to left- middle- and right-click the mouse are also featured.
+* *Text Cursor Keys* are under the right hand, shown in dark blue. They overlay the numberpad from the Symbols Layer, such that in the Media Layer the same keys can be used as if they were a number pad in navigational mode (Num Lock off). For instance, in traditional number pads the '3' key became 'Page Down', and so it is here. This means a user can do text navigation without moving either hand.
+* *Scrolling and Paging* keys are shown in light blue and have some useful redundancy across the layout.
+* Higher-order *F-Keys* are shown in bright green overylaying the numerals.
+* *Application Keys* to control web browsers and audio players are dark purple but don't get too excited because these have weak support on operating systems I've looked at. Good luck.
+* The light purple keys are various operating system keys such as NumLock and Mute and a button to navigate to My Computer (usually your home dir).
+* The dark gray keys do nothing in case you bump them by accident
+
+![Ordinary media layout](ordinary-media.png)
+
+This layer is a substantial extension of the Media layer on the Ergodox EZ default layout. The Fingerworks TouchStream keyboard had a very useful feature for controlling the text cursor easily and this layer does something similar. The left hand can move the mouse, the right hand moves the text cursor, in all four directions, in small or large increments. This greatly enhances navigation in text documents.
+
+Keys to directly interact with the operating system are also found on this layer, such as volume and shutdown.
+
+## Switching Between Layers ##
+
+In addition to Symbols and Media there is the Capitals layer which is exactly the same as pressing the shift key. Each layer is accessed by a shift key on each edge of the keyboard and corresponds to one of the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active.
+
+Shift buttons work in the expected way: press them and all of the keys switch to that layer; release them and the keys switch back to the base layer. Lock the shift keys using the Shift Lock button, which is the same as the Special Shift button.
+
+Multiple layers can be turned on at once. The Capitals layer will affect characters on other layers to capitalize. Other layers, however, don't 'mix': Symbols blankets the base layout; Media blankets Symbols.
+
+## Special Sequences ##
+
+![Ordinary special layout](ordinary-special.png)
+
+The Special Shift layer is mostly used to lock the shift keys but in order to make this layout more _ordinary_ there are a few special sequences which put some keys near their most common traditional locations.
+
+### Escape ###
+
+The One True Location for the Escape key is segregated way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one is home to the tilde (er, grave) which is commonly found there. In the Ordinary layout the Escape key is found on all layers in the prominent location in the corner next to the 5, which is easy to remember, and yet it isn't natural for those of us with muscle memory flicking our wrists up and to the left looking for Escape.
+
+The Ordinary layout offers as a consolation prize a Special sequence for Escape: Special Shift + 1. This is natural so you can tap the top left button, then the button next to it and get Escape. This gesture works in all layers.
+
+### Backspace ###
+
+At the top right corner of the Ergodox EZ you can a gesture similar to the special Escape sequence using the 0 key to produce a Backspace. Users of this keyboard and this layout are well advised to learn to use their thumbs for deleting text, but sometimes you are doing other computery things and just want to flick your digits up to the right and press backspace a bunch times.
+
+### Other Characters ###
+
+The Escape and Backspace special sequences are so useful why not have a few more? You can find dash under 9, left bracket under o, and right bracket under p. That's pretty much all the characters from the top right corner of the keyboard which moved to make room for the columnar layout.
+
+****
+
+The Ordinary Layout for the Ergodox EZ keyboard, v4.20
+
+Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
+
+No rights reserved. This software is in the public domain. Credit me if you are friendly but if you're a jerk don't bother.
+
+Details: readme.md
+ https://github.com/nrrkeene/qmk_firmware/tree/master/keyboards/ergodox/keymaps/ordinary
diff --git a/keyboards/ergodox_ez/keymaps/osx_de/keymap.c b/keyboards/ergodox/keymaps/osx_de/keymap.c
index 554813d7e..e3b9e11f4 100644
--- a/keyboards/ergodox_ez/keymaps/osx_de/keymap.c
+++ b/keyboards/ergodox/keymaps/osx_de/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
#include "keymap_german_osx.h"
diff --git a/keyboards/ergodox_ez/keymaps/osx_de/osx_de_highres.png b/keyboards/ergodox/keymaps/osx_de/osx_de_highres.png
index d442a992c..d442a992c 100644
--- a/keyboards/ergodox_ez/keymaps/osx_de/osx_de_highres.png
+++ b/keyboards/ergodox/keymaps/osx_de/osx_de_highres.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/osx_de/readme.md b/keyboards/ergodox/keymaps/osx_de/readme.md
index 5011a9dd6..5011a9dd6 100644
--- a/keyboards/ergodox_ez/keymaps/osx_de/readme.md
+++ b/keyboards/ergodox/keymaps/osx_de/readme.md
diff --git a/keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/keymap.c b/keyboards/ergodox/keymaps/osx_de_adnw_koy/keymap.c
index 687a5cb8b..6c4312a32 100644
--- a/keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/keymap.c
+++ b/keyboards/ergodox/keymaps/osx_de_adnw_koy/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png b/keyboards/ergodox/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png
index 193aa339e..193aa339e 100644
--- a/keyboards/ergodox_ez/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png
+++ b/keyboards/ergodox/keymaps/osx_de_adnw_koy/osx_de_adnw_koy_highres.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/osx_de_experimental/keymap.c b/keyboards/ergodox/keymaps/osx_de_experimental/keymap.c
index 21d695894..61b6a4fdb 100644
--- a/keyboards/ergodox_ez/keymaps/osx_de_experimental/keymap.c
+++ b/keyboards/ergodox/keymaps/osx_de_experimental/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
#include "keymap_neo2.h"
diff --git a/keyboards/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental_highres.png b/keyboards/ergodox/keymaps/osx_de_experimental/osx_de_experimental_highres.png
index 031d874a7..031d874a7 100644
--- a/keyboards/ergodox_ez/keymaps/osx_de_experimental/osx_de_experimental_highres.png
+++ b/keyboards/ergodox/keymaps/osx_de_experimental/osx_de_experimental_highres.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/osx_de_experimental/readme.md b/keyboards/ergodox/keymaps/osx_de_experimental/readme.md
index e6a101841..e6a101841 100644
--- a/keyboards/ergodox_ez/keymaps/osx_de_experimental/readme.md
+++ b/keyboards/ergodox/keymaps/osx_de_experimental/readme.md
diff --git a/keyboards/ergodox_ez/keymaps/osx_fr/keymap.c b/keyboards/ergodox/keymaps/osx_fr/keymap.c
index de951666d..7dee284fa 100644
--- a/keyboards/ergodox_ez/keymaps/osx_fr/keymap.c
+++ b/keyboards/ergodox/keymaps/osx_fr/keymap.c
@@ -1,5 +1,5 @@
// French AZERTY version of the default_osx file
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
#include "keymap_french_osx.h"
@@ -184,4 +184,4 @@ void matrix_scan_user(void) {
break;
}
-}; \ No newline at end of file
+};
diff --git a/keyboards/ergodox_ez/keymaps/osx_kinesis_pnut/keymap.c b/keyboards/ergodox/keymaps/osx_kinesis_pnut/keymap.c
index 1032be549..11281df8a 100644
--- a/keyboards/ergodox_ez/keymaps/osx_kinesis_pnut/keymap.c
+++ b/keyboards/ergodox/keymaps/osx_kinesis_pnut/keymap.c
@@ -5,7 +5,7 @@
// Only default layer was remapped all others layers are standard Ergodox EZ
// Very personal mapping of-course, but who knows a starting point for others.
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/keymap.c b/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/keymap.c
new file mode 100644
index 000000000..98d2836ab
--- /dev/null
+++ b/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/keymap.c
@@ -0,0 +1,231 @@
+/*
+ * This is built out of frustration with OSX / Sierra caps lock delay.
+ * Fake it till you make it!
+ */
+
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "timer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+#define BLINK_BASE 150U // timer threshold for blinking on MDIA layer
+
+typedef enum onoff_t {OFF, ON} onoff;
+
+#define caps_led_on ergodox_right_led_2_on
+#define caps_led_off ergodox_right_led_2_off
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | | ` | 7 | 8 | 9 | 0 | - | = |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | CapsL | A | S | D | F | G |------| |------| H | J | K | L | ; | " |
+ * |--------+------+------+------+------+------| ~L1 | | ~L1 |------+------+------+------+------+--------|
+ * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | Ctrl | Opt | Cmd | Left | Right| | Down | Up | Ctrl | Cmd | Opt |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | L1 | | Alt | Ctrl ]
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * |Backsp| Del |------| |------| Enter | Spc |
+ * | | | End | | PgDn | | |
+ * `--------------------' `----------------------'
+ */
+
+ [BASE] = KEYMAP( // layer 0 : default
+ // left hand
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
+ KC_TAB, M(KC_Q), M(KC_W), M(KC_E), M(KC_R), M(KC_T), KC_LBRC,
+ M(KC_CAPS), M(KC_A), M(KC_S), M(KC_D), M(KC_F), M(KC_G),
+ KC_LSFT, M(KC_Z), M(KC_X), M(KC_C), M(KC_V), M(KC_B), KC_FN0,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_LEFT, KC_RGHT,
+ KC_TRNS, KC_FN1,
+ KC_HOME,
+ KC_BSPC, KC_DEL, KC_END,
+ // right hand
+ KC_GRV, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
+ KC_RBRC, M(KC_Y), M(KC_U), M(KC_I), M(KC_O), M(KC_P), KC_BSLS,
+ M(KC_H), M(KC_J), M(KC_K), M(KC_L), KC_SCLN, KC_QUOT,
+ KC_FN0, M(KC_N), M(KC_M), KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_DOWN, KC_UP, KC_RCTL, KC_RGUI, KC_RALT,
+ KC_RALT, KC_RCTL,
+ KC_PGUP,
+ KC_PGDN, KC_ENT, KC_SPC
+ ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | ` | F1 | F2 | F3 | F4 | F5 | F6 | | | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | |------| |------| | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | L0 | L2 | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+ [SYMB] = KEYMAP(
+ // left hand
+ KC_GRV ,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_FN3, KC_FN2,
+ KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+/* Keymap 2: Media and tenkey
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | BOOTL | | Mute | Vol- | Vol+ | F14 | F15 | | | | NumLk| / | * | - | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | | | | | 7 | 8 | 9 | + | |
+ * |--------+------+------+------+------+------| | | |------+-----+-------+------+------+--------|
+ * | | | | | | |------| |------| | 4 | 5 | 6 | + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | 1 | 2 | 3 | Enter| |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | 0 | 0 | . | Enter| |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | L1 | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+ // MEDIA AND TENKEY
+ [MDIA] = KEYMAP(
+ KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_F14, KC_F15,
+ KC_TRNS, 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_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO,
+ KC_FN4, KC_NO,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_NO, KC_NO, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_NO,
+ KC_NO, KC_NO, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_NO,
+ KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_NO,
+ KC_NO, KC_NO, KC_P1, KC_P2, KC_P3, KC_PENT, KC_NO,
+ KC_P0, KC_P0, KC_PDOT, KC_PENT, KC_NO,
+ KC_NO, KC_NO,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ ACTION_LAYER_MOMENTARY(SYMB), // FN0 - Momentary Layer 1 (Symbols)
+ ACTION_LAYER_ON(SYMB,ON_RELEASE), // FN1 - Enable Layer 1 (Symbols)
+ ACTION_LAYER_ON(MDIA,ON_RELEASE), // FN2 - Enable Layer 2 (Media)
+ ACTION_LAYER_OFF(SYMB,ON_RELEASE), // FN3 - Disable Layer 1 (Symbols)
+ ACTION_LAYER_OFF(MDIA,ON_RELEASE), // FN4 - Disable Layer 2 (MMedia)
+ ACTION_LAYER_MOMENTARY(MDIA) // FN5 - Momentary Layer 2 (Mdia)
+};
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ static onoff caps_state = OFF;
+ switch(id) {
+ case KC_CAPS:
+ if (record->event.pressed) {
+ // Toggle caps state;
+ if (caps_state == OFF) {
+ // Turn it on then!
+ caps_led_on();
+ caps_state = ON;
+ } else {
+ caps_led_off();
+ caps_state = OFF;
+ }
+ }
+ break;
+ default:
+ if (record->event.pressed) {
+ bool shifted = false;
+ if (caps_state == ON && get_mods() == 0) {
+ register_code(KC_LSFT);
+ shifted = true;
+ }
+ register_code(id);
+ if(shifted) {
+ unregister_code(KC_LSFT);
+ }
+ } else {
+ unregister_code(id);
+ }
+ 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);
+
+ static onoff board_led_state = OFF;
+ static uint16_t dt = 0;
+ static uint8_t oldlayer = 0;
+
+ if(oldlayer != layer) {
+ // Layer was just toggled.
+ if(layer == BASE) {
+ ergodox_board_led_off();
+ board_led_state = OFF;
+ } else {
+ ergodox_board_led_on();
+ board_led_state = ON;
+ }
+ } else if (layer >= MDIA) {
+ // We need to do blinking.
+ if(timer_elapsed(dt) > BLINK_BASE) {
+ // toggle
+ dt = timer_read();
+ if(board_led_state == OFF) {
+ ergodox_board_led_on();
+ board_led_state = ON;
+ } else {
+ ergodox_board_led_off();
+ board_led_state = OFF;
+ }
+ }
+ }
+ oldlayer = layer;
+}
diff --git a/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/osx_whiskey_tango_foxtrot_capslock.png b/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/osx_whiskey_tango_foxtrot_capslock.png
new file mode 100644
index 000000000..8d49e5e61
--- /dev/null
+++ b/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/osx_whiskey_tango_foxtrot_capslock.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/readme.md b/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/readme.md
new file mode 100644
index 000000000..618db6ff4
--- /dev/null
+++ b/keyboards/ergodox/keymaps/osx_whiskey_tango_foxtrot_capslock/readme.md
@@ -0,0 +1,38 @@
+# The extra special ergodox build for MacOS Sierra caps lock users
+
+###Do you
+- Hate the OSX / MacOS caps lock delay?
+- Have an ergodox?
+
+###Then this might just be for you!
+
+[This](http://apple.stackexchange.com/questions/81234/how-to-remove-caps-lock-delay-on-apple-macbook-pro-aluminum-keyboard)
+and [this](http://sleepycow.org/2014/07/removing-the-caps-lock-delay-on-a-macbook/)
+are good workarounds for the caps lock delay, however none of these
+work on Sierra. This abomination of a keymap simulates capslock to the best
+of its abilities.
+This means that it keeps track of caps lock state internally rather than
+sending a caps lock keypress to the OS. It is smart enough to check for
+modifiers, such as Control being held down, and stop it with the hanky panky
+and just send on the key event unmolested even if FakeCaps is enabled. And
+since the macro isn't even registered on the non-alphas, it will not affect
+them regardless. Only in the event that FakeCaps is enabled and an alpha key
+is pressed will it sneak in a shift keydown before the alpha keydown and
+immediately afterward sneaks in a shift keyup. Generally this works well,
+however there is one known issue:
+
+- Holding down a key will only have the first character in caps. For instance,
+ with caps lock on, if you hold down the 'a' key, you get:
+
+ ```
+ Aaaaaaaaaaaaaaaaaa
+ ```
+
+I have only tested this on an original Ergodox with a Teensy 2.0.
+
+####Some other small tweaks
+ - Layer 0 board light is off
+ - Layer 1 board light is on solid
+ - Layer 2 board light blinks at speed controlled by BLINK_BASE
+
+![osx whiskey tango foxtrot](osx_whiskey_tango_foxtrot_capslock.png)
diff --git a/keyboards/ergodox/keymaps/phoenix/keymap.c b/keyboards/ergodox/keymaps/phoenix/keymap.c
new file mode 100644
index 000000000..624817d47
--- /dev/null
+++ b/keyboards/ergodox/keymaps/phoenix/keymap.c
@@ -0,0 +1,184 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | _ | | Del | 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | = | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd |
+ * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |Grv/L1| '" |AltShf| Left | Right| | Down | UP | [ | ] | ~L1 |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | App | Home | | Alt |Ctrl/Esc|
+ * ,------|------|------| |------+--------+------.
+ * | | | End | | PgUp | | |
+ * | Space|Backsp|------| |------| Enter |Space |
+ * | |ace | LGui | | PgDn | | |
+ * `--------------------' `----------------------'
+ */
+// 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, LSFT(KC_MINS),
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
+ KC_EQL, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
+ LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
+ ALT_T(KC_APP), KC_HOME,
+ KC_END,
+ KC_SPC,KC_BSPC,KC_LGUI,
+ // right hand
+ KC_DELT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
+ MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
+ KC_DOWN,KC_UP ,KC_LBRC,KC_RBRC, KC_FN1,
+ KC_LALT, CTL_T(KC_ESC),
+ KC_PGUP,
+ KC_PGDN,KC_ENT, KC_SPC
+ ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | F11 | F12 | | | | | | | Up | 7 | 8 | 9 | * | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | ` |------| |------| Down | 4 | 5 | 6 | + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | & | 1 | 2 | 3 | \ | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | 0 | 0 | . | = | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+ // left hand
+ KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS,KC_F11, KC_F12, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
+ KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_TRNS,
+ KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
+ KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
+ KC_0, KC_0, KC_DOT, KC_EQL, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | MsUp | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Prev | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | Lclk | Rclk | |VolDn |VolUp | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | |Brwser|
+ * | | |------| |------| |Back |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ 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) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboards/ergodox/keymaps/phoenix/readme.md b/keyboards/ergodox/keymaps/phoenix/readme.md
new file mode 100644
index 000000000..b1053bfb7
--- /dev/null
+++ b/keyboards/ergodox/keymaps/phoenix/readme.md
@@ -0,0 +1,10 @@
+# ErgoDox EZ Phoenix Configuration
+
+I started working using the default layout. The changes that I made are largely things that I consistely do wrong.
+
+As a programmer I hit tab a lot for autocomplete so that muscle memory is very difficult to re-write. The stragest change might be all the keys that I cleared in the Code layer. This is mainly to facilitate quickly typing uuids, as sometimes it is quite tedious to copy/paste them from one window to the other.
+
+## Changelog
+
+* April 25, 2016 (V1.0):
+ * Initial submission.
diff --git a/keyboards/ergodox_ez/keymaps/plover/keymap.c b/keyboards/ergodox/keymaps/plover/keymap.c
index a991e6082..12b3aa212 100644
--- a/keyboards/ergodox_ez/keymaps/plover/keymap.c
+++ b/keyboards/ergodox/keymaps/plover/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
@@ -160,7 +160,7 @@ KEYMAP(
[PLVR] = KEYMAP( // layout: layer 4: Steno for Plover
// left hand
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_NO,
+ KC_NO, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS,
KC_NO, KC_Q, KC_W, KC_E, KC_R, KC_T,
KC_NO, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
@@ -169,7 +169,7 @@ KEYMAP(
KC_C, KC_V, KC_NO,
// right hand
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
- KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
+ KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO,
diff --git a/keyboards/ergodox_ez/keymaps/plums/keymap.c b/keyboards/ergodox/keymaps/plums/keymap.c
index 46eb2e42b..2853455e3 100644
--- a/keyboards/ergodox_ez/keymaps/plums/keymap.c
+++ b/keyboards/ergodox/keymaps/plums/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/plums/plums.png b/keyboards/ergodox/keymaps/plums/plums.png
index 2f127c4ca..2f127c4ca 100644
--- a/keyboards/ergodox_ez/keymaps/plums/plums.png
+++ b/keyboards/ergodox/keymaps/plums/plums.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/plums/readme.md b/keyboards/ergodox/keymaps/plums/readme.md
index b72329eef..b72329eef 100644
--- a/keyboards/ergodox_ez/keymaps/plums/readme.md
+++ b/keyboards/ergodox/keymaps/plums/readme.md
diff --git a/keyboards/ergodox/keymaps/pvinis/Changelog.md b/keyboards/ergodox/keymaps/pvinis/Changelog.md
new file mode 100644
index 000000000..e5816200b
--- /dev/null
+++ b/keyboards/ergodox/keymaps/pvinis/Changelog.md
@@ -0,0 +1,7 @@
+## v0.3
+
+*2016-10-11*
+
+### Starting point
+
+* The starting point of this keymap. A beginner layout, and a couple placeholders.
diff --git a/keyboards/ergodox/keymaps/pvinis/Makefile b/keyboards/ergodox/keymaps/pvinis/Makefile
new file mode 100644
index 000000000..7ceb51ce4
--- /dev/null
+++ b/keyboards/ergodox/keymaps/pvinis/Makefile
@@ -0,0 +1,9 @@
+CONSOLE_ENABLE = no # for debugging
+
+SLEEP_LED_ENABLE = no # no led blinking while sleeping
+NKRO_ENABLE = yes # disable for windows
+TAP_DANCE_ENABLE = yes # tap-tap-tap
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/ergodox/keymaps/pvinis/Readme.md b/keyboards/ergodox/keymaps/pvinis/Readme.md
new file mode 100644
index 000000000..2a4a0c8f3
--- /dev/null
+++ b/keyboards/ergodox/keymaps/pvinis/Readme.md
@@ -0,0 +1,65 @@
+pvinis' keymap
+==============
+
+This is a getting-used-to keymap for the [ErgoDox EZ][ez]. It's very much a work in progress.
+
+[ez]: https://ergodox-ez.com/
+
+## Table of Contents
+
+* [Todo](#todo)
+* [Layouts](#layouts)
+ - [Base layer](#base-layer)
+ - [Beginner layer](#beginner-layer)
+ - [QWERTY layer](#qwerty-layer)
+ - [CARPALX layer](#carpalx-layer)
+ - [System Control layer](#system-control-layer)
+ - [Template layers](#template-layers)
+* [Building](#building)
+
+# Todo
+
+- [ ] Generate images from keymap
+- [ ] Implement algernon's heatmap
+- [ ] Implement `KC_POP`
+
+# Layouts
+
+## Base layer
+
+This is the base layer that contains the common buttons of all keymaps. Right now, it has the top left button as a `flash` button when it's tapped 4 times, and the two thumb islands. The islands contain the `space` and `enter` keys on the right, the `backspace` and `shift` on the left, and all the 1x1 keys are just layer switches.
+Every time I connect the keyboard, I press the `BEGIN` layer switch, and then start typing.
+Recently, I added a few application "shortcuts", that basically call `ctrl`+`alt`+`cmd`+`<key>`, and `<key>` is `S` for Slack, `X` for Xcode, `M` for Messenger. Using [Hammerspoon][hammerspoon], I show/hide the application.
+
+[hammerspoon]: http://www.hammerspoon.org/
+
+## Beginner layer
+
+This is a basic keymap I use right now until I'm comfortable typing on the Ergodox. Currently uses a QWERTY layout, and the `([{}])` on the middle keys. Not a perfect layout, and its going to go away at some point, but for now thats my daily driver.
+
+## QWERTY layer
+
+This is basically the same as the `BEGIN` layer, but it might go away. I'm not using it, but I should have a QWERTY layout on the keyboard, in case someone else wants to try it out, or if I completely forget how keyboards work! At some point, this and the `BEGIN` layer will become one.
+
+## CARPALX layer
+
+This is here as a placeholder. I want to transition to [Carpalx QGMLWY][carpalx] or [White][white] at some point. They both look very interesting and more comfortable to type on, but after I'm confident with typing on the Ergodox.
+
+[carpalx]: http://mkweb.bcgsc.ca/carpalx/?full_optimization
+[white]: https://github.com/mw8/white_keyboard_layout
+
+## System Control layer
+
+This one is a layer that, in time, will have controls like mouse movement, volume up/down, mute, sleep, restart, shutdown, etc.
+
+## Template layers
+
+I have two commented out layers that are just templates, so I can easily create a new layer.
+
+# Building
+
+```
+$ git clone https://github.com/jackhumbert/qmk_firmware.git
+$ cd qmk_firmware/keyboards/ergodox/keymaps/pvinis
+$ make
+```
diff --git a/keyboards/ergodox/keymaps/pvinis/keymap.c b/keyboards/ergodox/keymaps/pvinis/keymap.c
new file mode 100644
index 000000000..df906201a
--- /dev/null
+++ b/keyboards/ergodox/keymaps/pvinis/keymap.c
@@ -0,0 +1,430 @@
+// pvinis' ergodox keymap
+
+#include "ergodox.h"
+#include "mousekey.h"
+
+// easier name for left ctrl-alt-gui
+#define ALLM(kc) LCAG(kc)
+
+// layers
+enum {
+ BASE = 0,
+ BEGIN,
+ QWERTY,
+ CARPALX,
+ SYSCTL,
+};
+
+// extra keys
+enum {
+ NONE = 0,
+
+ // mouse
+ MS_UL, // up left
+ MS_UR, // up right
+ MS_DL, // down left
+ MS_DR, // down right
+
+ // tap dance
+ TD_FLSH, // flash keyboard
+};
+
+// application selection
+// this is sending ctrl-alt-gui-<key>, and this is picked up by hammerspoon
+#define AP_SLCK ALLM(KC_S)
+#define AP_XCOD ALLM(KC_X)
+#define AP_MSGR ALLM(KC_M)
+
+// keymaps
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* BASE
+ * the base of the keyboard.
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * |4x FLASH| | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | |------| |------| | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * |BEGIN |QWERTY| |SYSCTL| |
+ * ,------|------|------| |------+--------+------.
+ * | | |CARPAL| |Slack | | |
+ * |Backsp|LShift|------| |------| Enter |Space |
+ * | | |SYSCTL| |Msngr | | |
+ * `--------------------' `----------------------'
+ */
+[BASE] = KEYMAP(
+ TD(TD_FLSH) ,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
+
+ ,TG(BEGIN) ,TG(QWERTY)
+ ,TG(CARPALX)
+ ,KC_BSPC ,KC_LSFT ,TG(SYSCTL)
+
+ ,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
+
+ ,TG(SYSCTL) ,KC_NO
+ ,AP_SLCK
+ ,AP_MSGR ,KC_ENT ,KC_SPC
+),
+
+/* BEGIN
+ * a beginner's keymap i currently use.
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | 1 | 2 | 3 | 4 | 5 | 6 | | 6 | 7 | 8 | 9 | 0 | - | = |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * |Esc/Ctrl| A | S | D | F | G |------| |------| H | J | K | L | ; | Enter |
+ * |--------+------+------+------+------+------| ( | | ) |------+------+------+------+------+--------|
+ * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | ` | Cmd | | Cmd | | | | | ' | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+--------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `----------------------'
+ */
+[BEGIN] = KEYMAP(
+ KC_TRNS ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_6
+,KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC
+,CTL_T(KC_ESC) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G
+,KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_LPRN
+,KC_TRNS ,KC_GRV ,KC_LGUI ,KC_LEFT ,KC_RIGHT
+
+ ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS
+
+ ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS ,KC_EQL
+ ,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_BSLS
+ ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,KC_ENT
+ ,KC_RPRN ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_RSFT
+ ,KC_UP ,KC_DOWN ,KC_TRNS ,KC_QUOT ,KC_TRNS
+
+ ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS
+),
+
+/* QWERTY
+ * the default qwerty keymap. not really used, but i'll keep it here for now.
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | 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 | ; | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | Z | X | C | V | B | | | | N | M | , | . | / | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+--------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `----------------------'
+ */
+[QWERTY] = KEYMAP(
+ KC_TRNS ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_TRNS
+,KC_TRNS ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_TRNS
+,KC_TRNS ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G
+,KC_TRNS ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_TRNS
+,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+
+ ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS
+
+ ,KC_TRNS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_TRNS
+ ,KC_TRNS ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_TRNS
+ ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,KC_TRNS
+ ,KC_TRNS ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+
+ ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS
+),
+
+/* CARPALX
+ * the keymap i would like to transition to.
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | 1 | 2 | 3 | 4 | 5 | | | RIGHT| 6 | 7 | 8 | 9 | 0 | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | Q | G | M | L | W | | | L1 | Y | F | U | B | ; | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | D | S | T | N | R |------| |------| I | A | E | O | H | |
+ * |--------+------+------+------+------+------| | | Meh |------+------+------+------+------+--------|
+ * | | Z | X | C | V | J | | | | K | P | , | . | / | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | Up | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[CARPALX] = KEYMAP(
+ KC_TRNS ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_TRNS
+,KC_TRNS ,KC_Q ,KC_G ,KC_M ,KC_L ,KC_W ,KC_TRNS
+,KC_TRNS ,KC_D ,KC_S ,KC_T ,KC_N ,KC_R
+,KC_TRNS ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_J ,KC_TRNS
+,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+
+ ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS
+
+ ,KC_TRNS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_TRNS
+ ,KC_TRNS ,KC_Y ,KC_F ,KC_U ,KC_B ,KC_SCLN ,KC_TRNS
+ ,KC_I ,KC_A ,KC_E ,KC_O ,KC_H ,KC_TRNS
+ ,KC_TRNS ,KC_K ,KC_P ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+
+ ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS
+),
+
+
+/* SYSCTL
+ * a keymap to control my system.
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | Mute |VolDn |VolUp | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | | | | |MsUpL | MsUp |MsUpR | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | |------| |------| |MsLeft| MsDn |MsRght| | Lock |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | |MsDnL | MsDn | | | Sleep |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | Power|
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | |MidClk|
+ * ,------|------|------| |------+------+------.
+ * | | | | | |Left |Right |
+ * | | |------| |------| Click| Click|
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[SYSCTL] = KEYMAP(
+ KC_TRNS ,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_POP*/,KC_NO ,KC_NO ,KC_NO ,KC_MUTE ,KC_VOLD ,KC_VOLU ,KC_NO
+ /*,KC_PTRN*/,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
+ ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,LCTL(LSFT(KC_PWR))
+ ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_SLEP
+ ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_PWR
+
+ ,KC_NO ,KC_NO
+ ,KC_NO
+ ,KC_NO ,KC_NO ,KC_NO
+),
+
+/* TEMPLATE
+ * keymap template with transparent and non-transparent keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | |------| |------| | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+--------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `----------------------'
+ */
+/*
+[TEMPLATE] = KEYMAP(
+ KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+
+ ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS
+
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
+
+ ,KC_TRNS ,KC_TRNS
+ ,KC_TRNS
+ ,KC_TRNS ,KC_TRNS ,KC_TRNS
+),
+[TEMPLATE] = KEYMAP(
+ 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 ,KC_NO
+ ,KC_NO ,KC_NO ,KC_NO ,KC_NO ,KC_NO
+
+ ,KC_NO ,KC_NO
+ ,KC_NO
+ ,KC_NO ,KC_NO ,KC_NO
+),
+*/
+};
+
+// keyboard initialization
+void matrix_init_user() {
+ ergodox_led_all_on();
+ for (int i = LED_BRIGHTNESS_HI; i > LED_BRIGHTNESS_LO; i--) {
+ ergodox_led_all_set(i);
+ wait_ms(5);
+ }
+ wait_ms(1000);
+ for (int i = LED_BRIGHTNESS_LO; i > 0; i--) {
+ ergodox_led_all_set(i);
+ wait_ms(10);
+ }
+ ergodox_led_all_off();
+}
+
+// extra keys
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ switch (id) {
+
+ // mouse
+ case MS_UL:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_UP);
+ mousekey_on(KC_MS_LEFT);
+ } else {
+ mousekey_off(KC_MS_UP);
+ mousekey_off(KC_MS_LEFT);
+ }
+ break;
+ case MS_UR:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_UP);
+ mousekey_on(KC_MS_RIGHT);
+ } else {
+ mousekey_off(KC_MS_UP);
+ mousekey_off(KC_MS_RIGHT);
+ }
+ break;
+ case MS_DL:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_DOWN);
+ mousekey_on(KC_MS_LEFT);
+ } else {
+ mousekey_off(KC_MS_DOWN);
+ mousekey_off(KC_MS_LEFT);
+ }
+ break;
+ case MS_DR:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_DOWN);
+ mousekey_on(KC_MS_RIGHT);
+ } else {
+ mousekey_off(KC_MS_DOWN);
+ mousekey_off(KC_MS_RIGHT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+}
+
+// tap dances
+
+// flash keyboard on 4x tap, with leds
+void flash_each_tap(qk_tap_dance_state_t *state, void *user_data) {
+ switch (state->count) {
+ case 1:
+ ergodox_right_led_3_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ case 3:
+ ergodox_right_led_1_on();
+ break;
+ case 4:
+ ergodox_right_led_3_off();
+ wait_ms(50);
+ ergodox_right_led_2_off();
+ wait_ms(50);
+ ergodox_right_led_1_off();
+ break;
+ }
+}
+
+void flash_dance_finished(qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count >= 4) {
+ reset_keyboard();
+ reset_tap_dance(state);
+ }
+}
+
+void flash_dance_reset(qk_tap_dance_state_t *state, void *user_data) {
+ ergodox_right_led_1_off();
+ wait_ms(50);
+ ergodox_right_led_2_off();
+ wait_ms(50);
+ ergodox_right_led_3_off();
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_FLSH] = ACTION_TAP_DANCE_FN_ADVANCED( flash_each_tap, flash_dance_finished, flash_dance_reset ),
+};
diff --git a/keyboards/ergodox/keymaps/robot_test_layout/keymap.c b/keyboards/ergodox/keymaps/robot_test_layout/keymap.c
new file mode 100644
index 000000000..480be177f
--- /dev/null
+++ b/keyboards/ergodox/keymaps/robot_test_layout/keymap.c
@@ -0,0 +1,151 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // can always be here
+ RGB_FF0000,
+ RGB_00FF00,
+ RGB_0000FF,
+ RGB_FFFFFF,
+ RGB_TOGGLE,
+ LED1,
+ LED2,
+ LED3
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = KEYMAP(
+ RGB_TOGGLE, RGB_FF0000, RGB_00FF00, RGB_0000FF, RGB_FFFFFF, KC_5, KC_LPRN,
+ KC_GRAVE, KC_A, KC_B, KC_C, KC_D, KC_E, KC_EXLM,
+ KC_HASH, KC_J, KC_K, KC_L, KC_M, KC_N,
+ KC_AMPR, KC_T, KC_U, KC_V, KC_W, KC_X, KC_DLR,
+ KC_PIPE, KC_R, KC_PLUS, KC_LCBR, KC_RCBR,
+
+ KC_F, KC_G,
+ KC_H,
+ KC_P, KC_O, KC_I,
+
+
+
+ // RIGHT HAND
+ KC_RPRN, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ KC_AT, KC_F, KC_G, KC_H, KC_I, KC_COLN, KC_BSLS,
+ KC_O, KC_P, KC_Q, KC_R, KC_S, KC_QUOT,
+ LSFT(KC_COMM), KC_Y, KC_Z, KC_COMM, KC_DOT, KC_SLSH, KC_ASTR,
+ KC_A, KC_B, KC_C, KC_D, KC_PIPE,
+
+ LED1, KC_E,
+ LED2,
+ LED3, KC_J, KC_K
+ )
+};
+
+
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(1)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+bool status_led1_on = false, status_led2_on = false, status_led3_on = false;
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ // dynamically generate these.
+ case RGB_FF0000:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ EZ_RGB(0xff0000);
+ register_code(KC_1); unregister_code(KC_1);
+ #endif
+ }
+ return false;
+ break;
+ case RGB_00FF00:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ EZ_RGB(0x00ff00);
+ register_code(KC_2); unregister_code(KC_2);
+ #endif
+ }
+ return false;
+ break;
+ case RGB_0000FF:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ EZ_RGB(0x0000ff);
+ register_code(KC_3); unregister_code(KC_3);
+ #endif
+ }
+ return false;
+ break;
+ case RGB_FFFFFF:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ EZ_RGB(0xffffff);
+ register_code(KC_4); unregister_code(KC_4);
+ #endif
+ }
+ return false;
+ break;
+ case RGB_TOGGLE:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_toggle();
+ register_code(KC_EQL); unregister_code(KC_EQL);
+ #endif
+ }
+ return false;
+ break;
+ case LED1:
+ if (record->event.pressed) {
+ if(status_led1_on) {
+ ergodox_right_led_1_off();
+ status_led1_on = false;
+ } else {
+ ergodox_right_led_1_on();
+ status_led1_on = true;
+ }
+ }
+ return false;
+ break;
+ case LED2:
+ if (record->event.pressed) {
+ if(status_led2_on) {
+ ergodox_right_led_2_off();
+ status_led2_on = false;
+ } else {
+ ergodox_right_led_2_on();
+ status_led2_on = true;
+ }
+ }
+ return false;
+ break;
+ case LED3:
+ if (record->event.pressed) {
+ if(status_led3_on) {
+ ergodox_right_led_3_off();
+ status_led3_on = false;
+ } else {
+ ergodox_right_led_3_on();
+ status_led3_on = true;
+ }
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/ergodox/keymaps/robot_test_layout/readme.md b/keyboards/ergodox/keymaps/robot_test_layout/readme.md
new file mode 100644
index 000000000..45dc2aa76
--- /dev/null
+++ b/keyboards/ergodox/keymaps/robot_test_layout/readme.md
@@ -0,0 +1,5 @@
+# Robot test layout
+
+Use this layout if you like to pretend you're [Norman](https://www.youtube.com/watch?v=-sbxFBay-tg), the ErgoDox EZ manufacturing robot.
+
+It's really meant just for internal use, but we're posting it on GitHub anyway, because hurray to open source. :)
diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/keymap.c b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/keymap.c
new file mode 100644
index 000000000..2c6430440
--- /dev/null
+++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/keymap.c
@@ -0,0 +1,46 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#define BASE 0
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [BASE] = KEYMAP(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F5,
+ KC_TAB, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_BSLS,
+ KC_LCTRL, KC_A, KC_S, KC_E, KC_T, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC,
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_LGUI,
+ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLD, KC_MUTE,
+ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLU,
+ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_BSPC, CTL_T(KC_ESC), KC_LALT,
+ //
+ /*-*/ KC_F6, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
+ /*-*/ KC_NO, KC_J, KC_U, KC_R, KC_L, KC_SCLN, KC_MINS,
+ /*-*/ /*-*/ KC_Y, KC_N, KC_I, KC_O, KC_H, KC_ENT,
+ /*-*/ KC_RBRC, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ /*-*/ /*-*/ /*-*/ KC_RGUI, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
+ KC_MPLY, KC_MNXT,
+ KC_MPRV,
+ KC_RALT, KC_QUOT, KC_SPC
+ )
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ return MACRO_NONE;
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+};
diff --git a/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/readme.md b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/readme.md
new file mode 100644
index 000000000..4fa1814fb
--- /dev/null
+++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/readme.md
@@ -0,0 +1,41 @@
+# Roman's Layout
+
+There is only one layer, and it is based on [Norman
+layout](https://normanlayout.info/).
+
+Looking for multiple-layer layouts?
+
+- [Symbols, arrows, plover, HJKL
+ arrows](../romanzolotarev-norman-plover-osx-hjkl/)
+- [Same with IJKL arrows](../romanzolotarev-norman-plover-osx/)
+
+[![keyboard-layout](romanzolotarev-norman-osx.png)](http://www.keyboard-layout-editor.com/#/gists/9e89d54f1ea6eeeb7dab1b2d19d28195)
+
+## How to use Vim key
+
+It is `CTL_T(KC_ESC)` and it works this way:
+
+- Tap `CTRL/ESC` to send `ESC`.
+- Hold `CTRL/ESC` to use as `CTRL`.
+
+## How to activate N-rollover
+
+- Hold left `SHIFT` and right `SHIFT` and then tap `N`.
+
+## How to make and flash on OS X
+
+First you need to install few brew packages.
+
+```bash
+brew tap osx-cross/avr
+brew install dfu-programmer avr-libc teensy_loader_cli
+```
+
+Then you can clone this repository, make and flash your ErgoDox.
+
+```bash
+git clone https://github.com/romanzolotarev/qmk_firmware
+cd qmk_firmware/keyboards/ergodox
+# Optionally tweak ./keymaps/romanzolotarev-norman-osx/keymap.c
+SLEEP_LED_ENABLED=no KEYMAP=romanzolotarev-norman-osx make teensy
+```
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png
index 4b9433be2..4b9433be2 100644
--- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png
+++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-osx/romanzolotarev-norman-osx.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c
index 7c9f67381..9f41e5189 100644
--- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c
+++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md
index 4188d2b50..16cebd091 100644
--- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md
+++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/readme.md
@@ -10,7 +10,7 @@ There are four layers:
Looking for IJKL arrows? [Here we
go](../romanzolotarev-norman-plover-osx/).
-[![keyboard-layout](romanzolotarev-norman-plover-osx-hjkl.png)](rttp://www.keyboard-layout-editor.com/#/gists/56ffedceb0668dda47c993e7271563e0)
+[![keyboard-layout](romanzolotarev-norman-plover-osx-hjkl.png)](http://www.keyboard-layout-editor.com/#/gists/56ffedceb0668dda47c993e7271563e0)
## Switching
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png
index cdc535f79..cdc535f79 100644
--- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png
+++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx-hjkl/romanzolotarev-norman-plover-osx-hjkl.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/keymap.c b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/keymap.c
index 9971b834c..563e24872 100644
--- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/keymap.c
+++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/readme.md b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/readme.md
index 804c52a76..804c52a76 100644
--- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/readme.md
+++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/readme.md
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png
index 10b0752be..10b0752be 100644
--- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png
+++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-plover-osx/romanzolotarev-norman-plover-osx.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c b/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c
index dedac694e..5569f5c74 100644
--- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c
+++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/readme.md b/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/readme.md
index 0e78c130b..0e78c130b 100644
--- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/readme.md
+++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/readme.md
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png b/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png
index 34762ecb7..34762ecb7 100644
--- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png
+++ b/keyboards/ergodox/keymaps/romanzolotarev-norman-qwerty-osx/romanzolotarev-norman-qwerty-osx.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/sethbc/Makefile b/keyboards/ergodox/keymaps/sethbc/Makefile
new file mode 100644
index 000000000..457a3d01d
--- /dev/null
+++ b/keyboards/ergodox/keymaps/sethbc/Makefile
@@ -0,0 +1,3 @@
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/ergodox/keymaps/sethbc/keymap.c b/keyboards/ergodox/keymaps/sethbc/keymap.c
new file mode 100644
index 000000000..8816ad63b
--- /dev/null
+++ b/keyboards/ergodox/keymaps/sethbc/keymap.c
@@ -0,0 +1,102 @@
+#include "ergodox.h"
+#include "action_layer.h"
+
+#define BASE 0 // default layer
+#define FN1 1 // symbols
+#define FN2 2 // media keys
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[BASE] = KEYMAP( // layer 0 : default
+ // left hand
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
+ KC_BSLS, KC_Q, KC_W, KC_E, KC_R, KC_T, MO(FN2),
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(FN1),
+ KC_LGUI, KC_GRV, KC_BSLS, KC_LEFT, KC_RGHT,
+ KC_LCTL, KC_LALT,
+ KC_HOME,
+ KC_BSPC, KC_DEL, KC_END,
+ // right hand
+ MO(FN2), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ KC_LBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RBRC,
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ MO(FN1), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RGUI,
+ KC_RALT, KC_RCTL,
+ KC_PGUP,
+ KC_PGDN, KC_ENT, KC_SPC
+ ),
+// FN1
+[FN1] = KEYMAP(
+ // left hand
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+// FN2
+[FN2] = KEYMAP(
+ RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_NLCK, KC_PSLS, KC_PAST, KC_PAST, KC_PMNS, KC_BSPC,
+ KC_TRNS, KC_NO, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_BSPC,
+ KC_NO, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_PENT,
+ KC_TRNS, KC_NO, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PENT,
+ KC_P0, KC_PDOT, KC_SLSH, KC_PENT, KC_PENT,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+// 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) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboards/ergodox/keymaps/sethbc/readme.md b/keyboards/ergodox/keymaps/sethbc/readme.md
new file mode 100644
index 000000000..57b5d0ec7
--- /dev/null
+++ b/keyboards/ergodox/keymaps/sethbc/readme.md
@@ -0,0 +1,4 @@
+# sethbc's Ergodox EZ keymap
+
+Largely based on the Ergodox Infinity default keymap, but layer locking has been
+removed in favor of momentary layer activation
diff --git a/keyboards/ergodox_ez/keymaps/sneako/keymap.c b/keyboards/ergodox/keymaps/sneako/keymap.c
index 0c6863102..08cadd685 100644
--- a/keyboards/ergodox_ez/keymaps/sneako/keymap.c
+++ b/keyboards/ergodox/keymaps/sneako/keymap.c
@@ -1,7 +1,7 @@
// Based on `default_osx`
// Replace left Bksp with Ctrl/Esc
// Remove the Ctrl from Z and /
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/sneako/readme.md b/keyboards/ergodox/keymaps/sneako/readme.md
index 8dd110ee6..8dd110ee6 100644
--- a/keyboards/ergodox_ez/keymaps/sneako/readme.md
+++ b/keyboards/ergodox/keymaps/sneako/readme.md
diff --git a/keyboards/ergodox_ez/keymaps/software_neo2/keymap.c b/keyboards/ergodox/keymaps/software_neo2/keymap.c
index 2eaba0d7d..41ace403d 100644
--- a/keyboards/ergodox_ez/keymaps/software_neo2/keymap.c
+++ b/keyboards/ergodox/keymaps/software_neo2/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
#include "keymap_neo2.h"
diff --git a/keyboards/ergodox_ez/keymaps/supercoder/config_user.h b/keyboards/ergodox/keymaps/supercoder/config.h
index 8da138372..2de3599f8 100644
--- a/keyboards/ergodox_ez/keymaps/supercoder/config_user.h
+++ b/keyboards/ergodox/keymaps/supercoder/config.h
@@ -1,7 +1,7 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H 1
-#include "config.h"
+#include "../../config.h"
#undef LOCKING_SUPPORT_ENABLE
#undef LOCKING_RESYNC_ENABLE
diff --git a/keyboards/ergodox_ez/keymaps/supercoder/images/layout.png b/keyboards/ergodox/keymaps/supercoder/images/layout.png
index c72958c6e..c72958c6e 100644
--- a/keyboards/ergodox_ez/keymaps/supercoder/images/layout.png
+++ b/keyboards/ergodox/keymaps/supercoder/images/layout.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/supercoder/images/supercoder_2000.jpg b/keyboards/ergodox/keymaps/supercoder/images/supercoder_2000.jpg
index d690eaf02..d690eaf02 100644
--- a/keyboards/ergodox_ez/keymaps/supercoder/images/supercoder_2000.jpg
+++ b/keyboards/ergodox/keymaps/supercoder/images/supercoder_2000.jpg
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/supercoder/keymap.c b/keyboards/ergodox/keymaps/supercoder/keymap.c
index ca21d30fd..775acf2c9 100644
--- a/keyboards/ergodox_ez/keymaps/supercoder/keymap.c
+++ b/keyboards/ergodox/keymaps/supercoder/keymap.c
@@ -2,7 +2,7 @@
* SuperCoder 2000 layout
*/
-#include "ergodox_ez.h"
+#include "ergodox.h"
/* Layers */
diff --git a/keyboards/ergodox_ez/keymaps/supercoder/makefile.mk b/keyboards/ergodox/keymaps/supercoder/makefile.mk
index 41a195d9c..41a195d9c 100644
--- a/keyboards/ergodox_ez/keymaps/supercoder/makefile.mk
+++ b/keyboards/ergodox/keymaps/supercoder/makefile.mk
diff --git a/keyboards/ergodox_ez/keymaps/supercoder/readme.md b/keyboards/ergodox/keymaps/supercoder/readme.md
index 97bf7f583..8ef96eddf 100644
--- a/keyboards/ergodox_ez/keymaps/supercoder/readme.md
+++ b/keyboards/ergodox/keymaps/supercoder/readme.md
@@ -23,7 +23,7 @@ your own:
```
$ git clone https://github.com/jackhumbert/qmk_firmware.git
-$ cd qmk_firmware/keyboards/ergodox_ez
+$ cd qmk_firmware/keyboards/ergodox
$ git clone https://github.com/algernon/ergodox-supercoder.git keymaps/supercoder
$ make KEYMAP=supercoder
```
diff --git a/keyboards/ergodox_ez/keymaps/techtomas/keymap.c b/keyboards/ergodox/keymaps/techtomas/keymap.c
index 1ff6618b9..93d59d487 100644
--- a/keyboards/ergodox_ez/keymaps/techtomas/keymap.c
+++ b/keyboards/ergodox/keymaps/techtomas/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/techtomas/readme.md b/keyboards/ergodox/keymaps/techtomas/readme.md
index 36e0591a8..36e0591a8 100644
--- a/keyboards/ergodox_ez/keymaps/techtomas/readme.md
+++ b/keyboards/ergodox/keymaps/techtomas/readme.md
diff --git a/keyboards/ergodox_ez/keymaps/ordinary/keymap.c b/keyboards/ergodox/keymaps/teckinesis/keymap.c
index 778cbc63c..2837874f7 100644
--- a/keyboards/ergodox_ez/keymaps/ordinary/keymap.c
+++ b/keyboards/ergodox/keymaps/teckinesis/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "led.h"
#include "debug.h"
#include "action_layer.h"
@@ -25,15 +25,16 @@
#define MDR 23 // mouse down right
/*
- * The Ordinary Layout for the Ergodox EZ keyboard, v4
+ * teckinesis layout for ErgoDox (EZ)
*
+ * Modifications from The Ordinary Layout v4 by Will Wolff-Myren willwm@gmail.com
* Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
*
* No rights reserved. This software is in the public domain.
* Credit me if you are friendly but if you're a jerk don't bother.
*
* Details: readme.md
- * https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary
+ * https://github.com/willwm/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/teckinesis
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -41,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/******* Base Layer ********************************************************************************************************
*
* ,------------------------------------------------------. ,------------------------------------------------------.
- * | Special `~ | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | =+ Special |
+ * | Special =+ | 1 | 2 | 3 | 4 | 5 | ESC | | ` | 6 | 7 | 8 | 9 | 0 | -_ Special |
* |------------+------+------+------+------+-------------| |------+------+------+------+------+------+------------|
* | Media Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \| Media |
* |------------+------+------+------+------+------| | | |------+------+------+------+------+------------|
@@ -49,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+------------|
* | Capitals | Z | X | C | V | B | -Tab | | | N | M | , | . | / | Capitals |
* `------------+------+------+------+------+-------------' `-------------+------+------+------+------+------------'
- * | LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh | RCtrl |
+ * | LCtrl |Meh/\ |Hypr//| LAlt | LGui | | RGui | RAlt |Hypr/[|Meh/] | RCtrl |
* `-----------------------------------' `-----------------------------------'
* ,-------------. ,-------------.
* | Home | End | | Left | Right|
@@ -65,16 +66,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
,F(LMdia) ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC
,M(LSymb) ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G
,M(LCaps) ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,LSFT(KC_TAB)
-,KC_LCTL ,KC_MEH ,KC_HYPR,KC_LALT,KC_LGUI
+,KC_LCTL,MEH_T(KC_BSLS),ALL_T(KC_SLSH),KC_LALT,KC_LGUI
,KC_HOME,KC_END
,KC_PGUP
,KC_BSPC,KC_DEL ,KC_PGDN
// right hand
- ,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec)
+ ,KC_GRV ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,F(RSpec)
,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,F(RMdia)
,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,F(RSymb)
,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,M(RCaps)
- ,KC_RGUI,KC_RALT,KC_HYPR ,KC_MEH ,KC_RCTL
+ ,KC_RGUI,KC_RALT,ALL_T(KC_LBRC),MEH_T(KC_RBRC),KC_RCTL
,KC_LEFT ,KC_RGHT
,KC_UP
,KC_DOWN ,KC_ENT ,KC_SPC
@@ -107,7 +108,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
,KC_TRNS ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
,KC_TRNS ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV
,KC_TRNS ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB
-,KC_LCTL ,KC_MEH ,KC_HYPR,KC_LALT ,KC_LGUI
+,KC_LCTL ,KC_MEH ,KC_HYPR ,KC_LALT ,KC_LGUI
,KC_LEFT ,KC_RGHT
,KC_UP
,KC_SPC ,KC_ENT ,KC_DOWN
@@ -127,9 +128,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,---------------------------------------------------------------. ,---------------------------------------------------------------.
* | | F11 | F12 | F13 | F14 | F15 | Esc | | | F16 | F17 | F18 | F19 | F20 | |
* |------+---------+---------+---------+---------+----------------| |------+---------+---------+---------+---------+---------+------|
- * | |Shut Down|MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll| |Scroll|PrintScrn| Home | Up | PgUp | Mail | |
+ * | | |MouseUpLf|Mouse Up |MouseUpRg|Volume Up|Scroll| |Scroll|PrintScrn| Home | Up | PgUp | | |
* |------+---------+---------+---------+---------+---------| Up | | Up |---------+---------+---------+---------+---------+------|
- * | | Sleep |MouseLeft|MouseDown|MouseRght|Volume Dn|------| |------| Num Lock| Left | Down | Right | MyComp | |
+ * | | |MouseLeft|MouseDown|MouseRght|Volume Dn|------| |------| Num Lock| Left | Down | Right | | |
* |------+---------+---------+---------+---------+---------|Scroll| |Scroll|---------+---------+---------+---------+---------+------|
* | | |MouseDnLf|MouseDown|MouseDnRg| Mute | Down | | Down | | End | Down | PgDn | | |
* `------+---------+---------+---------+---------+----------------' `----------------+---------+---------+---------+---------+------'
@@ -146,8 +147,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[MDIA] = KEYMAP(
// left hand
KC_TRNS ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_ESC
-,KC_TRNS ,KC_POWER ,M(MUL) ,KC_MS_U ,M(MUR) ,KC_VOLU ,KC_WH_U
-,KC_TRNS ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD
+,KC_TRNS ,KC_NO ,M(MUL) ,KC_MS_U ,M(MUR) ,KC_VOLU ,KC_WH_U
+,KC_TRNS ,KC_NO ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_VOLD
,KC_TRNS ,KC_NO ,M(MDL) ,KC_MS_D ,M(MDR) ,KC_MUTE ,KC_WH_D
,KC_LCTL ,KC_MEH ,KC_BTN3 ,KC_BTN1 ,KC_BTN2
,KC_WSTP ,KC_WREF
@@ -155,8 +156,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
,KC_WBAK ,KC_NO ,KC_WHOM
// right hand
,KC_NO ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_TRNS
- ,KC_WH_U ,KC_PSCR ,KC_HOME ,KC_UP ,KC_PGUP ,KC_MAIL ,KC_TRNS
- ,KC_NLCK ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_MYCM ,KC_TRNS
+ ,KC_WH_U ,KC_PSCR ,KC_HOME ,KC_UP ,KC_PGUP ,KC_NO ,KC_TRNS
+ ,KC_NLCK ,KC_LEFT ,KC_DOWN ,KC_RIGHT,KC_NO ,KC_TRNS
,KC_WH_D ,KC_NO ,KC_END ,KC_DOWN ,KC_PGDN ,KC_NO ,KC_TRNS
,GUI_T(KC_INS),ALT_T(KC_DEL),KC_HYPR ,KC_MEH ,KC_RCTL
,KC_MPRV ,KC_MNXT
@@ -292,13 +293,13 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
case LSpec:
if (record->event.pressed) {
if (record->tap.count && !record->tap.interrupted) {
- register_code(KC_GRV);
+ register_code(KC_EQL);
} else {
layer_on(SPEC);
}
} else {
if(record->tap.count && !record->tap.interrupted) {
- unregister_code(KC_GRV);
+ unregister_code(KC_EQL);
} else {
layer_off(SPEC);
}
@@ -352,13 +353,13 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
case RSpec:
if (record->event.pressed) {
if (record->tap.count && !record->tap.interrupted) {
- register_code(KC_EQL);
+ register_code(KC_MINS);
} else {
layer_on(SPEC);
}
} else {
if(record->tap.count && !record->tap.interrupted) {
- unregister_code(KC_EQL);
+ unregister_code(KC_MINS);
} else {
layer_off(SPEC);
}
diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.png b/keyboards/ergodox/keymaps/teckinesis/ordinary-special.png
index 6eecf447e..6eecf447e 100644
--- a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.png
+++ b/keyboards/ergodox/keymaps/teckinesis/ordinary-special.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.txt b/keyboards/ergodox/keymaps/teckinesis/ordinary-special.txt
index a08827c6d..a08827c6d 100644
--- a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-special.txt
+++ b/keyboards/ergodox/keymaps/teckinesis/ordinary-special.txt
diff --git a/keyboards/ergodox/keymaps/teckinesis/readme.md b/keyboards/ergodox/keymaps/teckinesis/readme.md
new file mode 100644
index 000000000..9494a4d4c
--- /dev/null
+++ b/keyboards/ergodox/keymaps/teckinesis/readme.md
@@ -0,0 +1,45 @@
+# teckinesis Layout
+
+*A blend of TECK and Kinesis layouts, based on ["The Ordinary Layout" by Nicholas Keene](http://qmk.fm/keyboards/ergodox_ez/keymaps/ordinary/#the-ordinary-layout-a-familiar-and-powerful-layout)*
+
+I love "The Ordinary Layout", but I still use a [TECK](https://www.trulyergonomic.com/store/index.php)
+at the office, and I found the transition back and forth to be a bit more difficult than I expected.
+
+This layout consists of only slight changes to "The Ordinary Layout" based on the layouts of the
+[(original) TECK Model 209](https://www.trulyergonomic.com/store/layout-designer--configurator--reprogrammable--truly-ergonomic-mechanical-keyboard/#KTo7PD0+P0BBQkNERUw5394rNR4fICEi4yMkJSYnLS4xOBQaCBUXTBwYDBITLzDhBBYHCQorCw0ODzPl4B0bBhkFKhEQNjc05OPiSktOTSwoLFBSUU/mZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX2BhAFZXAAAAAAAAAAAAXF1eVAAAAAAAAAAAAABZWltVAAAAAAAAAAAAYgBjAAAAAAAAAAAAWFcAAAAAAACTAQAMAiMBAAwBigEADAIhAQAMAZQBAAwBkgEADAGDAQAMALYBAAwAzQEADAC1AQAMAOIBAAwA6gEADADpAQAMALhJAEYAAAAAAEitR64AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACk6Ozw9Pj9AQUJDREVMOd/eKzUeHyAhIuMjJCUmJy0uMTgUGggVF0wcGAwSEy8w4QQWBwkKKwsNDg8z5eMdGwYZBSoREDY3NOfg4kpLTk0sKCxQUlFP5uQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF9gYQBWVwAAAAAAAAAAAFxdXlQAAAAAAAAAAAAAWVpbVQAAAAAAAAAAAGIAYwAAAAAAAAAAAFhXAAAAAAAAkwEADAIjAQAMAYoBAAwCIQEADAGUAQAMAZIBAAwBgwEADAC2AQAMAM0BAAwAtQEADADiAQAMAOoBAAwA6QEADAC4SQBGAAAAAABIrUeuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) and
+the [Kinesis Advantage](http://www.kinesis-ergo.com/wp-content/uploads/2013/06/advantage_layout_win.pdf)
+
+## The Base Layout ##
+
+[teckinesis (Base Layer)](http://www.keyboard-layout-editor.com/#/gists/befd4c5800d92114aa9e50d4f7c0dfb0)
+![teckinesis base layout](teckinesis-base.png)
+
+### Changes from The Ordinary Layout ###
+
+* Moved KC_MINS from the key left of the 6 to the RSpec key.
+* Moved KC_EQL from RSpec to LSpec.
+* Moved KC_GRV from LSpec to the key left of the 6.
+* Mdded KC_BSLS to the left Meh key.
+* Added KC_SLSH to the left Hyper key.
+* Added KC_LBRC to the right Hyper key.
+* Added KC_RBRC to the right Meh key.
+
+## The Symbols Layer ##
+
+[teckinesis (Symbols Layer)](http://www.keyboard-layout-editor.com/#/gists/e6ddc4e9e0d194b3e52ac0616238ab61)
+![teckinesis symbols layout](teckinesis-symbol.png)
+
+### Changes from The Ordinary Layout ###
+
+* None.
+
+## The Media Layer ##
+
+[teckinesis (Media Layer)](http://www.keyboard-layout-editor.com/#/gists/41ff65e6a7c490211fd6702fb34d9908)
+![teckinesis media layout](teckinesis-media.png)
+
+### Changes from The Ordinary Layout ###
+
+* Removed Power, Sleep, Mail, My Computer keys.
+(I kept hitting these while using the mouse/cursor. =P)
+
diff --git a/keyboards/ergodox/keymaps/teckinesis/teckinesis-base.json b/keyboards/ergodox/keymaps/teckinesis/teckinesis-base.json
new file mode 100644
index 000000000..69fe28cf7
--- /dev/null
+++ b/keyboards/ergodox/keymaps/teckinesis/teckinesis-base.json
@@ -0,0 +1,434 @@
+[
+ {
+ "name": "teckinesis (Base Layer)",
+ "author": "Will Wolff-Myren",
+ "notes": "# teckinesis Layout # \r\n\r\n*A blend of TECK and Kinesis layouts, based on [\"The Ordinary Layout\" by Nicholas Keene](http://qmk.fm/keyboards/ergodox_ez/keymaps/ordinary/#the-ordinary-layout-a-familiar-and-powerful-layout)*\r\n\r\n## The Base Layout ##\r\n\r\n![teckinesis base layout](teckinesis-base.png)\r\n\r\n## The Symbols Layer ##\r\n\r\n![teckinesis symbols layout](teckinesis-symbol.png)\r\n\r\n## The Media Layer ##\r\n\r\n(placeholder)\r\n",
+ "switchMount": "cherry",
+ "switchBrand": "gateron",
+ "switchType": "KS-3-Tea"
+ },
+ [
+ {
+ "x": 3.5
+ },
+ "#\n3",
+ {
+ "x": 10.5
+ },
+ "*\n8"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5
+ },
+ "@\n2",
+ {
+ "x": 1
+ },
+ "$\n4",
+ {
+ "x": 8.5
+ },
+ "&\n7",
+ {
+ "x": 1
+ },
+ "(\n9"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5
+ },
+ "%\n5",
+ {
+ "c": "#ff4444"
+ },
+ "Esc",
+ {
+ "x": 4.5,
+ "c": "#cccccc"
+ },
+ "~\n`",
+ "^\n6"
+ ],
+ [
+ {
+ "y": -0.875,
+ "c": "#2277ff",
+ "w": 1.5
+ },
+ "Special\n\n+\n\n\n\nShift\n=",
+ {
+ "c": "#cccccc"
+ },
+ "!\n1",
+ {
+ "x": 14.5
+ },
+ ")\n0",
+ {
+ "c": "#2277ff",
+ "w": 1.5
+ },
+ "_\n\nSpecial\n\n\n\n-\nShift"
+ ],
+ [
+ {
+ "y": -0.375,
+ "x": 3.5,
+ "c": "#cccccc"
+ },
+ "E",
+ {
+ "x": 10.5
+ },
+ "I"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5
+ },
+ "W",
+ {
+ "x": 1
+ },
+ "R",
+ {
+ "x": 8.5
+ },
+ "U",
+ {
+ "x": 1
+ },
+ "O"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5
+ },
+ "T",
+ {
+ "h": 1.5
+ },
+ "{\n\n\n\n\n\n[",
+ {
+ "x": 4.5,
+ "h": 1.5
+ },
+ "}\n\n\n\n\n\n]",
+ "Y"
+ ],
+ [
+ {
+ "y": -0.875,
+ "c": "#2277ff",
+ "fa": [
+ 0,
+ 0,
+ 4
+ ],
+ "w": 1.5
+ },
+ "Media\n\n<i class='kb kb-Line-Start-End'></i>\n\n\n\nShift",
+ {
+ "c": "#cccccc"
+ },
+ "Q",
+ {
+ "x": 14.5
+ },
+ "P",
+ {
+ "c": "#2277ff",
+ "f": 3,
+ "w": 1.5
+ },
+ "|\n\\\nMedia\n\n\n\n\nShift"
+ ],
+ [
+ {
+ "y": -0.375,
+ "x": 3.5,
+ "c": "#cccccc"
+ },
+ "D",
+ {
+ "x": 10.5
+ },
+ "K"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5
+ },
+ "S",
+ {
+ "x": 1
+ },
+ "F",
+ {
+ "x": 8.5
+ },
+ "J",
+ {
+ "x": 1
+ },
+ "L"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5
+ },
+ "G",
+ {
+ "x": 6.5
+ },
+ "H"
+ ],
+ [
+ {
+ "y": -0.875,
+ "c": "#2277ff",
+ "w": 1.5
+ },
+ "Symbols\n\n\n\n\n\nShift",
+ {
+ "c": "#cccccc"
+ },
+ "A",
+ {
+ "x": 14.5
+ },
+ ":\n;",
+ {
+ "c": "#2277ff",
+ "f": 3,
+ "w": 1.5
+ },
+ "\"\n'\nSymbols\n\n\n\n\nShift"
+ ],
+ [
+ {
+ "y": -0.625,
+ "x": 6.5,
+ "c": "#54d6de",
+ "fa": [
+ 0,
+ 0,
+ 4,
+ 1
+ ],
+ "h": 1.5
+ },
+ "< Tab\n\n\nShift Tab",
+ {
+ "x": 4.5,
+ "h": 1.5
+ },
+ "Tab >\n\n\nTab"
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 3.5,
+ "c": "#cccccc"
+ },
+ "C",
+ {
+ "x": 10.5
+ },
+ "<\n,"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5
+ },
+ "X",
+ {
+ "x": 1
+ },
+ "V",
+ {
+ "x": 8.5
+ },
+ "M",
+ {
+ "x": 1
+ },
+ ">\n."
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5
+ },
+ "B",
+ {
+ "x": 6.5
+ },
+ "N"
+ ],
+ [
+ {
+ "y": -0.875,
+ "c": "#2277ff",
+ "w": 1.5
+ },
+ "Capitals\n\n\n\n\n\nShift",
+ {
+ "c": "#cccccc"
+ },
+ "Z",
+ {
+ "x": 14.5
+ },
+ "?\n/",
+ {
+ "c": "#2277ff",
+ "f": 3,
+ "w": 1.5
+ },
+ "\n\nCapitals\n\n\n\n\nShift"
+ ],
+ [
+ {
+ "y": -0.375,
+ "x": 3.5,
+ "c": "#77aaff",
+ "fa": [
+ 5,
+ 0,
+ 4,
+ 1
+ ]
+ },
+ "<i class='mss mss-Unicode-Option-3'></i>\n\n\nLAlt",
+ {
+ "x": 10.5
+ },
+ "<i class='mss mss-Unicode-Option-3'></i>\n\n\nRAlt"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5,
+ "fa": [
+ 5,
+ 1
+ ]
+ },
+ "\nHyper\n?\n/",
+ {
+ "x": 1,
+ "fa": [
+ 5,
+ 1,
+ 0,
+ 1
+ ]
+ },
+ "<i class='mss mss-Unicode-Command-3'></i>\n\n\nSuper",
+ {
+ "x": 8.5
+ },
+ "<i class='mss mss-Unicode-Command-3'></i>\n\n\nSuper",
+ {
+ "x": 1,
+ "fa": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "{\n[\n\nHyper"
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 0.5
+ },
+ "Ctrl\n\n\nLCtrl",
+ {
+ "f2": 1
+ },
+ "\nMeh\n|\n\\",
+ {
+ "x": 14.5,
+ "fa": [
+ 0,
+ 0,
+ 1,
+ 1
+ ]
+ },
+ "}\n]\n\nMeh",
+ "Ctrl\n\n\nRCtrl"
+ ],
+ [
+ {
+ "r": 30,
+ "rx": 6.5,
+ "ry": 4.25,
+ "y": -1,
+ "x": 1,
+ "c": "#54d6de"
+ },
+ "Home",
+ "End"
+ ],
+ [
+ {
+ "h": 2
+ },
+ "< Del\n\n\nBackspace",
+ {
+ "h": 2
+ },
+ "Del >\n\n\nDelete",
+ "Page\n\n\n\n\n\nUp"
+ ],
+ [
+ {
+ "x": 2
+ },
+ "Page\n\n\n\n\n\nDown"
+ ],
+ [
+ {
+ "r": -30,
+ "rx": 13,
+ "y": -1,
+ "x": -3
+ },
+ "Left",
+ "Right"
+ ],
+ [
+ {
+ "x": -3
+ },
+ "Up",
+ {
+ "h": 2
+ },
+ "Enter",
+ {
+ "h": 2
+ },
+ "Space"
+ ],
+ [
+ {
+ "x": -3
+ },
+ "Down"
+ ]
+] \ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/teckinesis/teckinesis-base.png b/keyboards/ergodox/keymaps/teckinesis/teckinesis-base.png
new file mode 100644
index 000000000..7c4584e9f
--- /dev/null
+++ b/keyboards/ergodox/keymaps/teckinesis/teckinesis-base.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/teckinesis/teckinesis-media.json b/keyboards/ergodox/keymaps/teckinesis/teckinesis-media.json
new file mode 100644
index 000000000..65fe394e8
--- /dev/null
+++ b/keyboards/ergodox/keymaps/teckinesis/teckinesis-media.json
@@ -0,0 +1,436 @@
+[
+ {
+ "name": "teckinesis (MediaLayer)",
+ "author": "Will Wolff-Myren",
+ "switchMount": "cherry",
+ "switchBrand": "gateron",
+ "switchType": "KS-3-Tea"
+ },
+ [
+ {
+ "x": 3.5,
+ "c": "#99de2a"
+ },
+ "F13",
+ {
+ "x": 10.5
+ },
+ "F18"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5
+ },
+ "F12",
+ {
+ "x": 1
+ },
+ "F14",
+ {
+ "x": 8.5
+ },
+ "F17",
+ {
+ "x": 1
+ },
+ "F19"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5
+ },
+ "F15",
+ {
+ "c": "#ff4444"
+ },
+ "Esc",
+ {
+ "x": 4.5
+ },
+ "Esc",
+ {
+ "c": "#99de2a"
+ },
+ "F16"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 1.5
+ },
+ "F11",
+ {
+ "x": 14.5
+ },
+ "F20"
+ ],
+ [
+ {
+ "y": -0.995,
+ "c": "#000000",
+ "t": "#ff0000",
+ "w": 1.5
+ },
+ "Media\n\n\n\n\n\nShift",
+ {
+ "x": 16.5,
+ "w": 1.5
+ },
+ "\n\nMedia\n\n\n\n\nShift"
+ ],
+ [
+ {
+ "y": -0.3799999999999999,
+ "x": 3.5,
+ "c": "#ff8500",
+ "t": "#000000"
+ },
+ "Mouse\n\n\n\n\n\nUp",
+ {
+ "x": 10.5
+ },
+ "Cursor\n\n\n\n\n\nUp"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5
+ },
+ "Mouse\n\n\n\n\n\nUpLeft",
+ {
+ "x": 1
+ },
+ "Mouse\n\n\n\n\n\nUpRgt",
+ {
+ "x": 8.5,
+ "c": "#ffb063"
+ },
+ "Home",
+ {
+ "x": 1
+ },
+ "Page\n\n\n\n\n\nUp"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5,
+ "c": "#e6e067"
+ },
+ "Vol\n\n\n\n\n\nUp",
+ {
+ "c": "#ffb063",
+ "h": 1.5
+ },
+ "Scroll\n\n\n\n\n\nUp",
+ {
+ "x": 4.5,
+ "h": 1.5
+ },
+ "Scroll\n\n\n\n\n\nUp",
+ {
+ "c": "#e6e067"
+ },
+ "Print\n\n\n\n\n\nScreen"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 1.5,
+ "c": "#737373",
+ "a": 7
+ },
+ "",
+ {
+ "x": 14.5
+ },
+ ""
+ ],
+ [
+ {
+ "y": -0.9950000000000001,
+ "c": "#2277ff",
+ "a": 4,
+ "w": 1.5
+ },
+ "Symbols\n\n\n\n\n\nShift",
+ {
+ "x": 16.5,
+ "w": 1.5
+ },
+ "\n\nSymbols\n\n\n\n\nShift"
+ ],
+ [
+ {
+ "y": -0.3799999999999999,
+ "x": 3.5,
+ "c": "#ff8500"
+ },
+ "Mouse\n\n\n\n\n\nDown",
+ {
+ "x": 10.5
+ },
+ "Cursor\n\n\n\n\n\nDown"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5
+ },
+ "Mouse\n\n\n\n\n\nLeft",
+ {
+ "x": 1
+ },
+ "Mouse\n\n\n\n\n\nRight",
+ {
+ "x": 8.5
+ },
+ "Cursor\n\n\n\n\n\nLeft",
+ {
+ "x": 1
+ },
+ "Cursor\n\n\n\n\n\nRight"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5,
+ "c": "#e6e067"
+ },
+ "Vol\n\n\n\n\n\nDown",
+ {
+ "x": 6.5
+ },
+ "Num\n\n\n\n\n\nLock"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 1.5,
+ "c": "#737373",
+ "a": 7
+ },
+ "",
+ {
+ "x": 14.5
+ },
+ ""
+ ],
+ [
+ {
+ "y": -0.9950000000000001,
+ "c": "#2277ff",
+ "a": 4,
+ "w": 1.5
+ },
+ "Capitals\n\n\n\n\n\nShift",
+ {
+ "x": 16.5,
+ "w": 1.5
+ },
+ "\n\nCapitals\n\n\n\n\nShift"
+ ],
+ [
+ {
+ "y": -0.6299999999999999,
+ "x": 6.5,
+ "c": "#ffb063",
+ "h": 1.5
+ },
+ "Scroll\n\n\n\n\n\nDown",
+ {
+ "x": 4.5,
+ "h": 1.5
+ },
+ "Scroll\n\n\n\n\n\nDown"
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 3.5,
+ "c": "#ff8500"
+ },
+ "Mouse\n\n\n\n\n\nDown",
+ {
+ "x": 10.5
+ },
+ "Cursor\n\n\n\n\n\nDown"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5
+ },
+ "Mouse\n\n\n\n\n\nDnLeft",
+ {
+ "x": 1
+ },
+ "Mouse\n\n\n\n\n\nDnRgt",
+ {
+ "x": 8.5,
+ "c": "#ffb063"
+ },
+ "End",
+ {
+ "x": 1
+ },
+ "Page\n\n\n\n\n\nDown"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5,
+ "c": "#e6e067"
+ },
+ "Mute",
+ {
+ "x": 6.5,
+ "c": "#737373",
+ "a": 7
+ },
+ ""
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 1.5
+ },
+ "",
+ {
+ "x": 14.5
+ },
+ ""
+ ],
+ [
+ {
+ "y": -0.9950000000000001,
+ "c": "#2277ff",
+ "a": 4,
+ "w": 1.5
+ },
+ "Ctrl",
+ {
+ "x": 16.5,
+ "w": 1.5
+ },
+ "Ctrl"
+ ],
+ [
+ {
+ "y": -0.3799999999999999,
+ "x": 3.5,
+ "c": "#ff8500"
+ },
+ "Middle\n\n\n\n\n\nClick",
+ {
+ "x": 10.5,
+ "c": "#ffb063",
+ "fa": [
+ 0,
+ 0,
+ 0,
+ 1
+ ]
+ },
+ "Delete\n\n\nOption"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5,
+ "c": "#ff8500"
+ },
+ "Left\n\n\n\n\n\nClick",
+ {
+ "x": 1
+ },
+ "Right\n\n\n\n\n\nClick",
+ {
+ "x": 8.5,
+ "c": "#ffb063"
+ },
+ "Insert\n\n\nCmd",
+ {
+ "x": 1,
+ "c": "#77aaff"
+ },
+ "Hyper"
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 0.5
+ },
+ "Alt\n\n\nLAlt",
+ "Meh",
+ {
+ "x": 14.5
+ },
+ "Meh",
+ "Alt\n\n\nRAlt"
+ ],
+ [
+ {
+ "r": 30,
+ "rx": 6.5,
+ "ry": 4.25,
+ "y": -1,
+ "x": 1,
+ "c": "#ccbb00"
+ },
+ "Stop\n\n\nBrowser",
+ "Reload\n\n\nBrowser"
+ ],
+ [
+ {
+ "h": 2
+ },
+ "< Web\n\n\nBrowser",
+ {
+ "h": 2
+ },
+ "Web >\n\n\nBrowser",
+ "Search\n\n\nBrowser"
+ ],
+ [
+ {
+ "x": 2
+ },
+ "Home\n\n\nBrowser"
+ ],
+ [
+ {
+ "r": -30,
+ "rx": 13,
+ "y": -1,
+ "x": -3
+ },
+ "Prev\n\n\nAudio\n\n\nTrack",
+ "Next\n\n\nAudio\n\n\nTrack"
+ ],
+ [
+ {
+ "x": -3,
+ "c": "#e6e067"
+ },
+ "Vol\n\n\n\n\n\nUp",
+ {
+ "c": "#ccbb00",
+ "h": 2
+ },
+ "Stop\n\n\nAudio",
+ {
+ "h": 2
+ },
+ "Play\n\n\nAudio\n\n\nPause"
+ ],
+ [
+ {
+ "x": -3,
+ "c": "#e6e067"
+ },
+ "Vol\n\n\n\n\n\nDown"
+ ]
+] \ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/teckinesis/teckinesis-media.png b/keyboards/ergodox/keymaps/teckinesis/teckinesis-media.png
new file mode 100644
index 000000000..cc51605f9
--- /dev/null
+++ b/keyboards/ergodox/keymaps/teckinesis/teckinesis-media.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.json b/keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.json
new file mode 100644
index 000000000..439d0128e
--- /dev/null
+++ b/keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.json
@@ -0,0 +1,422 @@
+[
+ {
+ "name": "teckinesis (Symbol Layer)",
+ "author": "Will Wolff-Myren",
+ "switchMount": "cherry",
+ "switchBrand": "gateron",
+ "switchType": "KS-3-Tea"
+ },
+ [
+ {
+ "x": 3.5,
+ "c": "#99de2a"
+ },
+ "F3",
+ {
+ "x": 10.5
+ },
+ "F8"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5
+ },
+ "F2",
+ {
+ "x": 1
+ },
+ "F4",
+ {
+ "x": 8.5
+ },
+ "F7",
+ {
+ "x": 1
+ },
+ "F9"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5
+ },
+ "F5",
+ {
+ "c": "#ff4444"
+ },
+ "Esc",
+ {
+ "x": 4.5,
+ "c": "#bbddbb"
+ },
+ "_\n\n\n\n\n\n-",
+ {
+ "c": "#99de2a"
+ },
+ "F6"
+ ],
+ [
+ {
+ "y": -0.875,
+ "c": "#2277ff",
+ "w": 1.5
+ },
+ "Special\n\n\n\n\n\nShift",
+ {
+ "c": "#99de2a"
+ },
+ "F1",
+ {
+ "x": 14.5
+ },
+ "F10",
+ {
+ "c": "#2277ff",
+ "w": 1.5
+ },
+ "\n\nSpecial\n\n\n\n\nShift"
+ ],
+ [
+ {
+ "y": -0.375,
+ "x": 3.5,
+ "c": "#bbddbb"
+ },
+ "{",
+ {
+ "x": 10.5,
+ "c": "#89b087"
+ },
+ "8"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5,
+ "c": "#bbddbb"
+ },
+ "@",
+ {
+ "x": 1
+ },
+ "}",
+ {
+ "x": 8.5,
+ "c": "#89b087"
+ },
+ "7",
+ {
+ "x": 1
+ },
+ "9"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5,
+ "c": "#bbddbb"
+ },
+ "&",
+ {
+ "h": 1.5
+ },
+ "<",
+ {
+ "x": 4.5,
+ "h": 1.5
+ },
+ ">",
+ "|"
+ ],
+ [
+ {
+ "y": -0.875,
+ "c": "#2277ff",
+ "w": 1.5
+ },
+ "Media\n\n\n\n\n\nShift",
+ {
+ "c": "#bbddbb"
+ },
+ "!",
+ {
+ "x": 14.5,
+ "c": "#89b087"
+ },
+ "/",
+ {
+ "c": "#2277ff",
+ "w": 1.5
+ },
+ "\n\nMedia\n\n\n\n\nShift"
+ ],
+ [
+ {
+ "y": -0.375,
+ "x": 3.5,
+ "c": "#bbddbb"
+ },
+ "(",
+ {
+ "x": 10.5,
+ "c": "#89b087"
+ },
+ "5"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5,
+ "c": "#bbddbb"
+ },
+ "$",
+ {
+ "x": 1
+ },
+ ")",
+ {
+ "x": 8.5,
+ "c": "#89b087"
+ },
+ "4",
+ {
+ "x": 1
+ },
+ "6"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5,
+ "c": "#bbddbb"
+ },
+ "`",
+ {
+ "x": 6.5
+ },
+ "/"
+ ],
+ [
+ {
+ "y": -0.875,
+ "c": "#000000",
+ "t": "#ff0000",
+ "w": 1.5
+ },
+ "Symbols\n\n\n\n\n\nShift",
+ {
+ "c": "#bbddbb",
+ "t": "#000000"
+ },
+ "#",
+ {
+ "x": 14.5,
+ "c": "#89b087"
+ },
+ "*",
+ {
+ "c": "#000000",
+ "t": "#ff0000",
+ "w": 1.5
+ },
+ "\n\nSymbols\n\n\n\n\nShift"
+ ],
+ [
+ {
+ "y": -0.625,
+ "x": 6.5,
+ "c": "#54d6de",
+ "t": "#000000",
+ "fa": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "h": 1.5
+ },
+ "Tab >\n\n\nTab",
+ {
+ "x": 4.5,
+ "h": 1.5
+ },
+ "< Tab\n\n\nShift Tab"
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 3.5,
+ "c": "#bbddbb"
+ },
+ "[",
+ {
+ "x": 10.5,
+ "c": "#89b087"
+ },
+ "2"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5,
+ "c": "#bbddbb"
+ },
+ "^",
+ {
+ "x": 1
+ },
+ "]",
+ {
+ "x": 8.5,
+ "c": "#89b087"
+ },
+ "1",
+ {
+ "x": 1
+ },
+ "3"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5,
+ "c": "#bbddbb"
+ },
+ "~",
+ {
+ "x": 6.5
+ },
+ "\\"
+ ],
+ [
+ {
+ "y": -0.875,
+ "c": "#2277ff",
+ "w": 1.5
+ },
+ "Capitals\n\n\n\n\n\nShift",
+ {
+ "c": "#bbddbb"
+ },
+ "%",
+ {
+ "x": 14.5,
+ "c": "#89b087"
+ },
+ "-",
+ {
+ "c": "#2277ff",
+ "w": 1.5
+ },
+ "\n\nCapitals\n\n\n\n\nShift"
+ ],
+ [
+ {
+ "y": -0.375,
+ "x": 3.5,
+ "c": "#77aaff"
+ },
+ "<i class='mss mss-Unicode-Option-3'></i>\n\n\nLAlt",
+ {
+ "x": 10.5,
+ "c": "#89b087"
+ },
+ ".\n\n\nOption"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5,
+ "c": "#77aaff"
+ },
+ "Hyper",
+ {
+ "x": 1
+ },
+ "<i class='mss mss-Unicode-Command-3'></i>\n\n\nSuper",
+ {
+ "x": 8.5,
+ "c": "#89b087"
+ },
+ "0\n\n\nCmd",
+ {
+ "x": 1
+ },
+ "=\n\n\nHyper"
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 0.5,
+ "c": "#77aaff"
+ },
+ "Ctrl\n\n\nLCtrl",
+ "Meh",
+ {
+ "x": 14.5,
+ "c": "#89b087"
+ },
+ "+\n\n\nMeh",
+ "Enter\n\n\nCtrl"
+ ],
+ [
+ {
+ "r": 30,
+ "rx": 6.5,
+ "ry": 4.25,
+ "y": -1,
+ "x": 1,
+ "c": "#54d6de"
+ },
+ "Left",
+ "Right"
+ ],
+ [
+ {
+ "h": 2
+ },
+ "Space",
+ {
+ "h": 2
+ },
+ "Enter",
+ "Up"
+ ],
+ [
+ {
+ "x": 2
+ },
+ "Down"
+ ],
+ [
+ {
+ "r": -30,
+ "rx": 13,
+ "y": -1,
+ "x": -3
+ },
+ "Home",
+ "End"
+ ],
+ [
+ {
+ "x": -3
+ },
+ "Page\n\n\n\n\n\nUp",
+ {
+ "h": 2
+ },
+ "< Del\n\n\nBackspace",
+ {
+ "h": 2
+ },
+ "Del >\n\n\nDelete"
+ ],
+ [
+ {
+ "x": -3
+ },
+ "Page\n\n\n\n\n\nDown"
+ ]
+] \ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.png b/keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.png
new file mode 100644
index 000000000..7ca86cf47
--- /dev/null
+++ b/keyboards/ergodox/keymaps/teckinesis/teckinesis-symbol.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/tkuichooseyou/README.md b/keyboards/ergodox/keymaps/tkuichooseyou/README.md
index ab02fac2c..ab02fac2c 100644
--- a/keyboards/ergodox_ez/keymaps/tkuichooseyou/README.md
+++ b/keyboards/ergodox/keymaps/tkuichooseyou/README.md
diff --git a/keyboards/ergodox_ez/keymaps/tkuichooseyou/compiled.hex b/keyboards/ergodox/keymaps/tkuichooseyou/compiled.hex
index a8cf4527a..a8cf4527a 100644
--- a/keyboards/ergodox_ez/keymaps/tkuichooseyou/compiled.hex
+++ b/keyboards/ergodox/keymaps/tkuichooseyou/compiled.hex
diff --git a/keyboards/ergodox_ez/keymaps/tkuichooseyou/keymap.c b/keyboards/ergodox/keymaps/tkuichooseyou/keymap.c
index 87b77e42e..d1c779186 100644
--- a/keyboards/ergodox_ez/keymaps/tkuichooseyou/keymap.c
+++ b/keyboards/ergodox/keymaps/tkuichooseyou/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/tm2030/keymap.c b/keyboards/ergodox/keymaps/tm2030/keymap.c
index ca8075226..1d861ee7c 100644
--- a/keyboards/ergodox_ez/keymaps/tm2030/keymap.c
+++ b/keyboards/ergodox/keymaps/tm2030/keymap.c
@@ -1,5 +1,5 @@
/* TypeMatrix-2030-like keymap */
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
#include "led.h"
diff --git a/keyboards/ergodox_ez/keymaps/tm2030/readme.md b/keyboards/ergodox/keymaps/tm2030/readme.md
index 6cd794726..6cd794726 100644
--- a/keyboards/ergodox_ez/keymaps/tm2030/readme.md
+++ b/keyboards/ergodox/keymaps/tm2030/readme.md
diff --git a/keyboards/ergodox_ez/keymaps/tonyabra_osx/keymap.c b/keyboards/ergodox/keymaps/tonyabra_osx/keymap.c
index 87b9fb676..2a15fcb8d 100644
--- a/keyboards/ergodox_ez/keymaps/tonyabra_osx/keymap.c
+++ b/keyboards/ergodox/keymaps/tonyabra_osx/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
diff --git a/keyboards/ergodox_ez/keymaps/tonyabra_osx/readme.md b/keyboards/ergodox/keymaps/tonyabra_osx/readme.md
index f9d76efc2..f9d76efc2 100644
--- a/keyboards/ergodox_ez/keymaps/tonyabra_osx/readme.md
+++ b/keyboards/ergodox/keymaps/tonyabra_osx/readme.md
diff --git a/keyboards/ergodox/keymaps/townk_osx/config.h b/keyboards/ergodox/keymaps/townk_osx/config.h
new file mode 100644
index 000000000..72d3e9670
--- /dev/null
+++ b/keyboards/ergodox/keymaps/townk_osx/config.h
@@ -0,0 +1,44 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2013 Oleg Kostyuk <cub.uanic@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.h"
+/*
+ * 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
+//#define DEBUG_MATRIX_SCAN_RATE
+#define ONESHOT_TAP_TOGGLE 2
+#define ONESHOT_TIMEOUT 3000
+
+#endif
diff --git a/keyboards/ergodox_ez/keymaps/townk_osx/keymap.c b/keyboards/ergodox/keymaps/townk_osx/keymap.c
index 07e58a491..5043d49a0 100644
--- a/keyboards/ergodox_ez/keymaps/townk_osx/keymap.c
+++ b/keyboards/ergodox/keymaps/townk_osx/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
#include "action_util.h"
diff --git a/keyboards/ergodox_ez/keymaps/townk_osx/makefile.mk b/keyboards/ergodox/keymaps/townk_osx/makefile.mk
index e757557bd..c06021b9f 100644
--- a/keyboards/ergodox_ez/keymaps/townk_osx/makefile.mk
+++ b/keyboards/ergodox/keymaps/townk_osx/makefile.mk
@@ -1,4 +1,2 @@
# I don't want my keyboard blinking lights when is suppose to be asleep.
-SLEEP_LED_ENABLE = no
-
-CONFIG_H = keymaps/$(KEYMAP)/config.h
+SLEEP_LED_ENABLE = no \ No newline at end of file
diff --git a/keyboards/ergodox_ez/keymaps/townk_osx/readme.md b/keyboards/ergodox/keymaps/townk_osx/readme.md
index c2853ca17..c2853ca17 100644
--- a/keyboards/ergodox_ez/keymaps/townk_osx/readme.md
+++ b/keyboards/ergodox/keymaps/townk_osx/readme.md
diff --git a/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_base.png b/keyboards/ergodox/keymaps/townk_osx/townk_osx_base.png
index f9bc8b443..f9bc8b443 100644
--- a/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_base.png
+++ b/keyboards/ergodox/keymaps/townk_osx/townk_osx_base.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_fn.png b/keyboards/ergodox/keymaps/townk_osx/townk_osx_fn.png
index 983b72348..983b72348 100644
--- a/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_fn.png
+++ b/keyboards/ergodox/keymaps/townk_osx/townk_osx_fn.png
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_keypad.png b/keyboards/ergodox/keymaps/townk_osx/townk_osx_keypad.png
index 8f04b4327..8f04b4327 100644
--- a/keyboards/ergodox_ez/keymaps/townk_osx/townk_osx_keypad.png
+++ b/keyboards/ergodox/keymaps/townk_osx/townk_osx_keypad.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c
new file mode 100644
index 000000000..c9dc43c56
--- /dev/null
+++ b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.c
@@ -0,0 +1,213 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+/* Keymap 0: Basic Dvorak layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | Hebrew | 1 | 2 | 3 | 4 | 5 |ALT+S | |B.tick| 6 | 7 | 8 | 9 | 0 | = |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | TAB | ' | , | . | P | Y | LCK2 | | | F | G | C | R | L | / |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | ESC | A | O | E | U | I |------| |------| D | H | T | N | S | - |
+ * |--------+------+------+------+------+------| LCK1 | | |------+------+------+------+------+--------|
+ * | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | RSHIFT |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |FN2 | COPY | CUT | PASTE| FN1 | | [ | ] | \ | UNDO | CTRL+A |
+ * `----------------------------------' `------------------------------------'
+ * ,-------------. ,-------------.
+* | DEL | | | END | HOME |
+ * ,------|------|------| |------+--------+------.
+ * | | | SUPER| | PgUp | | |
+ * | BACK | CTRL |------| |------| Enter |SPACE |
+ * | SPACE| | ALT | | PgDn | | |
+ * `--------------------' `----------------------'
+ */
+[0] = KEYMAP(
+ TG(1), KC_1, KC_2, KC_3, KC_4, KC_5, LALT(KC_LSHIFT),
+ KC_TAB, KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, TG(3),
+ KC_ESCAPE, KC_A, KC_O, KC_E, KC_U, KC_I,
+ KC_LSHIFT, KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, TG(2),
+ MO(3), LCTL(KC_C), LCTL(KC_X), LCTL(KC_V), MO(2),
+ KC_DELETE, KC_TRNS,
+ KC_LGUI,
+ KC_BSPACE,CTL_T(KC_NO),KC_LALT,
+
+ KC_TILD, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQUAL,
+ KC_TRNS, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLASH,
+ KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINUS,
+ KC_TRNS, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_LSHIFT,
+ KC_LBRACKET, KC_RBRACKET, KC_BSLASH, KC_UNDO, LCTL(KC_A),
+ KC_END, KC_HOME,
+ KC_PGUP,
+ KC_PGDOWN, KC_ENTER, KC_SPACE
+),
+
+ /* Keymap 1: Hebrew layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | |------| |------| | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[1] = KEYMAP(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_W, KC_QUOTE, KC_SLASH, KC_R, KC_T, KC_TRNS,
+ KC_TRNS, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_Y, KC_U, KC_E, KC_O, KC_P, KC_TRNS,
+ KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_TRNS,
+ KC_TRNS, KC_N, KC_M, KC_COMMA, KC_DOT, KC_I, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+/* Keymap 2: Arrows ,Mouse Navigation and F Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | MsUp | | | | | F11 | | | UP | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght| |------| |------| | LEFT | DOWN | RIGHT| | |
+ * |--------+------+------+------+------+------| | | F12 |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | Lclk | Rclk | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[2] = KEYMAP(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_UP, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
+ KC_F11, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS,
+ KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_MS_BTN1, KC_MS_BTN2, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+ /* Keymap 3: Numpad Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | NMLK | P/ | P* | P- | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | | | | | | | | 7 | 8 | 9 | P+ | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | |------| |------| | 4 | 5 | 6 | P+ | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | 1 | 2 | 3 | ENTER| |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | 0 | 0 | . | ENTER| |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[3] = KEYMAP(
+ // Left Hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // Right Hand
+ KC_TRNS, KC_TRNS, KC_LOCKING_NUM, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, KC_TRNS,
+ KC_TRNS, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_KP_1, KC_KP_2, KC_KP_3, KC_ENTER, KC_TRNS,
+ KC_KP_0, KC_KP_0, KC_KP_DOT, KC_ENTER, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(1)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+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_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ case 3:
+ ergodox_right_led_3_on();
+ default:
+ break;
+ }
+
+};
diff --git a/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.png b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.png
new file mode 100644
index 000000000..82c81dcae
--- /dev/null
+++ b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap2.png b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap2.png
new file mode 100644
index 000000000..ec8e7494d
--- /dev/null
+++ b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap2.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/readme.md b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/readme.md
new file mode 100644
index 000000000..99b8182f5
--- /dev/null
+++ b/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/readme.md
@@ -0,0 +1,10 @@
+#Dvorak-Hebrew
+
+* This layout solves the problem of Dvorak Keyboard with OS QWERTY, which when you change to hebrew all the letters scrumble, the second layer is the Hebrew (top left button), which you can use on any computer, Plug and play.
+
+* The Hebrew layout itself solve another problem with the different locations of punctuation on Dvorak/Hebrew with few minor changes, it's based on Yuval Rabinovich's layout which you can find here : http://heboard.wordpress.com for regular QWERTY keyboards and for other operation systems.
+
+* these are only good when using a public computer or one you can't change settings on, because you need to change both keyboard layout and os layout each time you change language. A better solution is to use [hebrew-hw-dvorak](https://github.com/20lives/hebrew-hw-dvorak) as os layout.
+
+![layout image](https://github.com/20lives/qmk_firmware/blob/master/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap.png)
+![layout image](https://github.com/20lives/qmk_firmware/blob/master/keyboards/ergodox/keymaps/twentylives_dvorak_with_hebrew/keymap2.png)
diff --git a/keyboards/ergodox_ez/keymaps/twey/keymap.c b/keyboards/ergodox/keymaps/twey/keymap.c
index 019930f2a..5deacd63f 100644
--- a/keyboards/ergodox_ez/keymaps/twey/keymap.c
+++ b/keyboards/ergodox/keymaps/twey/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
#include "keymap_plover.h"
diff --git a/keyboards/ergodox_ez/keymaps/twey/readme.md b/keyboards/ergodox/keymaps/twey/readme.md
index 979e4261e..979e4261e 100644
--- a/keyboards/ergodox_ez/keymaps/twey/readme.md
+++ b/keyboards/ergodox/keymaps/twey/readme.md
diff --git a/keyboards/ergodox/keymaps/videck/Makefile b/keyboards/ergodox/keymaps/videck/Makefile
new file mode 100644
index 000000000..5c7d21f2c
--- /dev/null
+++ b/keyboards/ergodox/keymaps/videck/Makefile
@@ -0,0 +1,19 @@
+AUDIO_ENABLE:=no
+BACKLIGHT_ENABLE:=no
+BLUETOOTH_ENABLE:=no
+BOOTMAGIC_ENABLE:=no
+COMMAND_ENABLE:=no
+CONSOLE_ENABLE:=no
+EXTRAKEY_ENABLE:=yes
+MIDI_ENABLE:=no
+MOUSEKEY_ENABLE:=yes
+NKRO_ENABLE:=no
+RGBLIGHT_ENABLE:=no
+SLEEP_LED_ENABLE:=no
+TAP_DANCE_ENABLE:=yes
+UNICODEMAP_ENABLE:=no
+UNICODE_ENABLE:=no
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/ergodox/keymaps/videck/config.h b/keyboards/ergodox/keymaps/videck/config.h
new file mode 100644
index 000000000..d89aabe77
--- /dev/null
+++ b/keyboards/ergodox/keymaps/videck/config.h
@@ -0,0 +1,13 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+#ifndef NO_DEBUG
+ #define NO_DEBUG
+#endif
+#ifndef NO_PRINT
+ #define NO_PRINT
+#endif
+
+#endif
diff --git a/keyboards/ergodox/keymaps/videck/keymap.c b/keyboards/ergodox/keymaps/videck/keymap.c
new file mode 100644
index 000000000..7bd6274e9
--- /dev/null
+++ b/keyboards/ergodox/keymaps/videck/keymap.c
@@ -0,0 +1,179 @@
+#include <stdbool.h>
+
+#include "ergodox.h"
+#include "action_layer.h"
+
+enum {
+ BASE = 0, // Default layer
+ ARROWS = 1, // Arrows and Fx keys layer
+ MOUSE = 2, // Mouse movement and buttons layer
+ PARENS = 3, // Parenthesis easy access layer
+
+ TD_L = 0, // Tap dance index for left shift
+ TD_R = 1 // Tap dance index for right shift
+};
+
+// See the videck.png image for a visualization of the layout.
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [BASE] = KEYMAP(
+ // left hand
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_HOME,
+ KC_EQL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_END,
+ MO(PARENS), KC_A, KC_S, KC_D, KC_F, KC_G,
+ TD(TD_L), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BSPC,
+ KC_LCTL, KC_LALT, KC_VOLD, KC_VOLU, KC_MUTE,
+ KC_ESC, KC_LGUI,
+ TG(MOUSE),
+ KC_SPC, KC_TAB, TG(ARROWS),
+ // right hand
+ KC_PGUP, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ KC_PGDN, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_DELT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TD(TD_R),
+ KC_LBRC, KC_RBRC, KC_EQL, KC_RALT, KC_RCTL,
+ KC_APP, KC_ESC,
+ KC_INS,
+ KC_SLCK, KC_ENT, KC_SPC
+ ),
+ [ARROWS] = KEYMAP(
+ // left hand
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_NO,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F12,
+ KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [MOUSE] = KEYMAP(
+ // left hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_BTN3, KC_TRNS,
+ KC_TRNS,
+ KC_BTN1, KC_BTN2, KC_NO,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [PARENS] = KEYMAP(
+ // left hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_NO,
+ KC_TRNS, KC_TRNS, KC_NO,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LCBR, KC_RCBR, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_LPRN, KC_RPRN, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
+typedef void (*videck_tap_dance_trigger_t) (const uint16_t kc);
+
+typedef struct
+{
+ uint16_t kc1;
+ uint16_t kc2;
+ videck_tap_dance_trigger_t trigger;
+} videck_tap_dance_tuple_t;
+
+static void videck_tap_dance_finished (qk_tap_dance_state_t *state, void *user_data) {
+ videck_tap_dance_tuple_t *const tuple = (videck_tap_dance_tuple_t *)user_data;
+
+ if (state->count == 1) {
+ register_code16 (tuple->kc1);
+ } else if (state->count == 2) {
+ register_code16 (tuple->kc2);
+ }
+}
+
+static void videck_tap_dance_reset (qk_tap_dance_state_t *state, void *user_data) {
+ videck_tap_dance_tuple_t *const tuple = (videck_tap_dance_tuple_t *)user_data;
+
+ if (state->count == 1) {
+ unregister_code16 (tuple->kc1);
+ } else if (state->count == 2) {
+ unregister_code16 (tuple->kc2);
+ tuple->trigger(tuple->kc2);
+ }
+}
+
+static bool caps_lock_is_on;
+
+// Toggles caps lock status.
+static void videck_caps_trigger (const uint16_t kc) {
+ caps_lock_is_on ^= true;
+}
+
+#define ACTION_TAP_DANCE_DOUBLE_TRIGGER(kc1, kc2, double_trigger) { \
+ .fn = { NULL, videck_tap_dance_finished, videck_tap_dance_reset }, \
+ .user_data = (void *)&((videck_tap_dance_tuple_t) { kc1, kc2, double_trigger }), \
+ }
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_L] = ACTION_TAP_DANCE_DOUBLE_TRIGGER(KC_LSFT, KC_CAPS, videck_caps_trigger),
+ [TD_R] = ACTION_TAP_DANCE_DOUBLE_TRIGGER(KC_RSFT, KC_CAPS, videck_caps_trigger)
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+ ergodox_led_all_set(LED_BRIGHTNESS_LO);
+ caps_lock_is_on = false;
+};
+
+static void indicate_using_led(const uint8_t led, const bool enabled) {
+ if (enabled) {
+ ergodox_right_led_on(led);
+ } else {
+ ergodox_right_led_off(led);
+ }
+}
+
+static inline void indicate_caps_lock_state(const bool enabled) {
+ indicate_using_led(1, enabled);
+}
+
+static inline void indicate_arrows_layer_state(const bool enabled) {
+ indicate_using_led(2, enabled);
+}
+
+static inline void indicate_mouse_layer_state(const bool enabled) {
+ indicate_using_led(3, enabled);
+}
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+ // Check if we have shift locked.
+ indicate_caps_lock_state(caps_lock_is_on);
+ indicate_arrows_layer_state(IS_LAYER_ON(ARROWS));
+ indicate_mouse_layer_state(IS_LAYER_ON(MOUSE));
+};
diff --git a/keyboards/ergodox/keymaps/videck/readme.md b/keyboards/ergodox/keymaps/videck/readme.md
new file mode 100644
index 000000000..759e81bac
--- /dev/null
+++ b/keyboards/ergodox/keymaps/videck/readme.md
@@ -0,0 +1,24 @@
+ViDeck keymap for ErgoDox
+=========================
+
+This is a QWERTY layout based on the US layout, where Vi functionality has been
+especially considered.
+
+# Features
+* Mouse movements using the Vi movement keys.
+* Vi movement keys doubling as arrow keys.
+* Shift lock using double tap.
+* A coder's modifier key for easy input of parenthesis.
+* Acess to the escape key using either thumb.
+* Reasonably accessible Scroll Lock key (useful if you, like me, want to switch
+ to a non-US layout once in a while in X).
+
+# Missing keys
+* Caps Lock (shift lock is used instead).
+* Pause/Break.
+* Print Screen.
+
+# LEDs
+* Shift lock is indicated using first LED.
+* Arrow keys layer is indicated using second LED.
+* Mouse keys layer is indicated using third LED.
diff --git a/keyboards/ergodox/keymaps/videck/videck.json b/keyboards/ergodox/keymaps/videck/videck.json
new file mode 100644
index 000000000..7068cf548
--- /dev/null
+++ b/keyboards/ergodox/keymaps/videck/videck.json
@@ -0,0 +1,443 @@
+[
+ {
+ "backcolor": "#333333",
+ "background": {
+ "name": "PBT Black",
+ "style": "background-image: url('/bg/plastic/pbt-black.png');"
+ },
+ "switchMount": "cherry",
+ "switchBrand": "gateron",
+ "switchType": "KS-3-Red"
+ },
+ [
+ {
+ "x": 3.5,
+ "c": "#323232",
+ "t": "#ffffff\n\n\n#ac97d8"
+ },
+ "#\n3\n\nF3",
+ {
+ "x": 10.5
+ },
+ "*\n8\n\nF8"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5
+ },
+ "@\n2\n\nF2",
+ {
+ "x": 1
+ },
+ "$\n4\n\nF4",
+ {
+ "x": 8.5
+ },
+ "&\n7\n\nF7",
+ {
+ "x": 1,
+ "t": "#ffffff\n\n\n#ac97d8\n\n\n\n#555454"
+ },
+ "(\n9\n\nF9"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5,
+ "t": "#ffffff\n\n\n#ac97d8"
+ },
+ "%\n5\n\nF5",
+ {
+ "t": "#ffffff"
+ },
+ "home",
+ {
+ "x": 4.5
+ },
+ "pgup",
+ {
+ "t": "#ffffff\n\n\n#ac97d8"
+ },
+ "^\n6\n\nF6"
+ ],
+ [
+ {
+ "y": -0.875,
+ "t": "#ffffff",
+ "w": 1.5
+ },
+ "~\n`",
+ {
+ "t": "#ffffff\n\n\n#ac97d8"
+ },
+ "!\n1\n\nF1",
+ {
+ "x": 14.5
+ },
+ ")\n0\n\nF10",
+ {
+ "w": 1.5
+ },
+ "_\n-\n\nF11"
+ ],
+ [
+ {
+ "y": -0.375,
+ "x": 3.5,
+ "t": "#ffffff"
+ },
+ "E",
+ {
+ "x": 10.5
+ },
+ "I"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5
+ },
+ "W",
+ {
+ "x": 1
+ },
+ "R",
+ {
+ "x": 8.5
+ },
+ "U",
+ {
+ "x": 1,
+ "t": "#ffffff\n\n\n\n\n\n\n\n\n#f8d615"
+ },
+ "O\n\n\n\n\n\n\n\n\n{"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5,
+ "t": "#ffffff"
+ },
+ "T",
+ {
+ "h": 1.5
+ },
+ "end",
+ {
+ "x": 4.5,
+ "h": 1.5
+ },
+ "pgdn",
+ "Y"
+ ],
+ [
+ {
+ "y": -0.875,
+ "w": 1.5
+ },
+ "+\n=",
+ "Q",
+ {
+ "x": 14.5,
+ "t": "#ffffff\n\n\n\n\n\n\n\n\n#f8d615"
+ },
+ "P\n\n\n\n\n\n\n\n\n}",
+ {
+ "t": "#ffffff\n\n\n#ac97d8",
+ "w": 1.5
+ },
+ "|\n\\\n\nF12"
+ ],
+ [
+ {
+ "y": -0.375,
+ "x": 3.5,
+ "t": "#ffffff"
+ },
+ "D",
+ {
+ "x": 10.5,
+ "t": "#ffffff\n\n#5eb1e7\n#ac97d8"
+ },
+ "K\n\n<i class='fa fa-caret-up'></i>\n<i class='kb kb-Arrows-Up'></i>"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5,
+ "t": "#ffffff"
+ },
+ "S",
+ {
+ "x": 1,
+ "n": true
+ },
+ "F",
+ {
+ "x": 8.5,
+ "t": "#ffffff\n\n#5eb1e7\n#ac97d8",
+ "n": true
+ },
+ "J\n\n<i class='fa fa-caret-down'></i>\n<i class='kb kb-Arrows-Down'></i>",
+ {
+ "x": 1,
+ "t": "#ffffff\n\n#5eb1e7\n#ac97d8\n\n\n\n\n\n#f8d615"
+ },
+ "L\n\n<i class='fa fa-caret-right'></i>\n<i class='kb kb-Arrows-Right'></i>\n\n\n\n\n\n("
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5,
+ "t": "#ffffff"
+ },
+ "G",
+ {
+ "x": 6.5,
+ "t": "#ffffff\n\n#5eb1e7\n#ac97d8"
+ },
+ "H\n\n<i class='fa fa-caret-left'></i>\n<i class='kb kb-Arrows-Left'></i>"
+ ],
+ [
+ {
+ "y": -0.875,
+ "t": "#f8d615",
+ "a": 6,
+ "w": 1.5
+ },
+ "( ) [ ] { }",
+ {
+ "t": "#ffffff",
+ "a": 4
+ },
+ "A",
+ {
+ "x": 14.5,
+ "t": "#ffffff\n\n\n\n\n\n\n#60605b\n\n#f8d615"
+ },
+ ":\n;\n\n\n\n\n\n&Ouml;\n\n)",
+ {
+ "t": "#ffffff\n\n\n\n\n\n\n#60605b",
+ "w": 1.5
+ },
+ "\"\n'\n\n\n\n\n\n&Auml;"
+ ],
+ [
+ {
+ "y": -0.625,
+ "x": 6.5,
+ "t": "#ffffff",
+ "h": 1.5
+ },
+ "<i class='kb kb-Unicode-BackSpace-DeleteLeft-Big'></i>",
+ {
+ "x": 4.5,
+ "h": 1.5
+ },
+ "<i class='kb kb-Unicode-DeleteRight-Big'></i>"
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 3.5
+ },
+ "C",
+ {
+ "x": 10.5
+ },
+ "<\n,"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5
+ },
+ "X",
+ {
+ "x": 1
+ },
+ "V",
+ {
+ "x": 8.5
+ },
+ "M",
+ {
+ "x": 1,
+ "t": "#ffffff\n\n\n\n\n\n\n\n\n#f8d615"
+ },
+ ">\n.\n\n\n\n\n\n\n\n["
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 5.5,
+ "t": "#ffffff"
+ },
+ "B",
+ {
+ "x": 6.5
+ },
+ "N"
+ ],
+ [
+ {
+ "y": -0.875,
+ "t": "#ffffff\n\n#f67f00",
+ "a": 6,
+ "fa": [
+ 5
+ ],
+ "w": 1.5
+ },
+ "&uArr;\n\n2-tap<br/>locks",
+ {
+ "t": "#ffffff",
+ "a": 4,
+ "f": 3
+ },
+ "Z",
+ {
+ "x": 14.5,
+ "t": "#ffffff\n\n\n\n\n\n\n\n\n#f8d615",
+ "f": 3
+ },
+ "?\n/\n\n\n\n\n\n\n\n]",
+ {
+ "t": "#ffffff\n\n#f67f00",
+ "a": 6,
+ "f": 3,
+ "w": 1.5
+ },
+ "&uArr;\n\n2-tap<br/>locks"
+ ],
+ [
+ {
+ "y": -0.375,
+ "x": 3.5,
+ "t": "#ffffff",
+ "a": 4
+ },
+ "\n<i class='kb kb-Multimedia-Volume-Up-2'></i>",
+ {
+ "x": 10.5,
+ "f": 3
+ },
+ "}\n]"
+ ],
+ [
+ {
+ "y": -0.875,
+ "x": 2.5
+ },
+ "\n<i class='kb kb-Multimedia-Volume-Down-1'></i>",
+ {
+ "x": 1
+ },
+ "\n<i class='kb kb-Multimedia-Mute-1'></i>",
+ {
+ "x": 8.5,
+ "t": "#ffffff\n\n\n\n\n\n\n#60605b",
+ "f": 3
+ },
+ "{\n[\n\n\n\n\n\n&Aring;",
+ {
+ "x": 1,
+ "t": "#ffffff",
+ "f": 3
+ },
+ "+\n="
+ ],
+ [
+ {
+ "y": -0.75,
+ "x": 0.5,
+ "f": 3
+ },
+ "ctrl",
+ {
+ "f": 3
+ },
+ "alt",
+ {
+ "x": 14.5,
+ "f": 3
+ },
+ "altgr",
+ {
+ "f": 3
+ },
+ "ctrl"
+ ],
+ [
+ {
+ "r": 30,
+ "rx": 6.5,
+ "ry": 4.25,
+ "y": -1,
+ "x": 1,
+ "t": "#ffffff\n\n\n\n\n\n\n\n\n\n#5eb1e7",
+ "f": 3
+ },
+ "esc\n\n\n\n\n\n\n\n\n\n<i class='fa fa-mouse-pointer'></i>M",
+ {
+ "t": "#ffffff",
+ "f": 7
+ },
+ "<i class='kb kb-logo-linux-tux'></i>"
+ ],
+ [
+ {
+ "t": "#ffffff\n\n\n\n\n\n\n\n\n\n#5eb1e7",
+ "f": 3,
+ "h": 2
+ },
+ "space\n\n\n\n\n\n\n\n\n\n<i class='fa fa-mouse-pointer'></i>L",
+ {
+ "h": 2
+ },
+ "<i class='kb kb-Tab-1'></i>\n\n\n\n\n\n\n\n\n\n<i class='fa fa-mouse-pointer'></i>R",
+ {
+ "t": "#5eb1e7"
+ },
+ "<i class='fa fa-mouse-pointer'></i>"
+ ],
+ [
+ {
+ "x": 2,
+ "t": "#ac97d8"
+ },
+ "<i class='fa fa-arrows'></i>"
+ ],
+ [
+ {
+ "r": -30,
+ "rx": 13,
+ "y": -1,
+ "x": -3,
+ "t": "#ffffff"
+ },
+ "<i class='kb kb-Hamburger-Menu'></i>",
+ "esc"
+ ],
+ [
+ {
+ "x": -3
+ },
+ "ins",
+ {
+ "h": 2
+ },
+ "<i class='kb kb-Return-2'></i>",
+ {
+ "h": 2
+ },
+ "space"
+ ],
+ [
+ {
+ "x": -3
+ },
+ "scroll<br/>lock"
+ ]
+] \ No newline at end of file
diff --git a/keyboards/ergodox/keymaps/videck/videck.png b/keyboards/ergodox/keymaps/videck/videck.png
new file mode 100644
index 000000000..c99323f53
--- /dev/null
+++ b/keyboards/ergodox/keymaps/videck/videck.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/win10_writers-block/Makefile b/keyboards/ergodox/keymaps/win10_writers-block/Makefile
new file mode 100644
index 000000000..fbab4b71c
--- /dev/null
+++ b/keyboards/ergodox/keymaps/win10_writers-block/Makefile
@@ -0,0 +1,9 @@
+# Having a file like this allows you to override Makefile definitions
+# for your own particular keymap
+
+TAP_DANCE_ENABLE=yes
+
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/ergodox/keymaps/win10_writers-block/config.h b/keyboards/ergodox/keymaps/win10_writers-block/config.h
new file mode 100644
index 000000000..43259db08
--- /dev/null
+++ b/keyboards/ergodox/keymaps/win10_writers-block/config.h
@@ -0,0 +1,36 @@
+#ifndef KEYBOARDS_ERGODOX_CONFIG_H_
+#define KEYBOARDS_ERGODOX_CONFIG_H_
+
+#define MOUSEKEY_DELAY 100
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_MAX_SPEED 3
+#define MOUSEKEY_TIME_TO_MAX 10
+
+#define TAPPING_TOGGLE 1
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+#define TAPPING_TERM 300
+#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \
+ keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
+)
+
+#ifdef SUBPROJECT_ez
+ #include "ez/config.h"
+#endif
+#ifdef SUBPROJECT_infinity
+ #include "infinity/config.h"
+#endif
+
+
+#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */
diff --git a/keyboards/ergodox/keymaps/win10_writers-block/images/base-layer.png b/keyboards/ergodox/keymaps/win10_writers-block/images/base-layer.png
new file mode 100644
index 000000000..d1cb1987c
--- /dev/null
+++ b/keyboards/ergodox/keymaps/win10_writers-block/images/base-layer.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/win10_writers-block/images/media-layer.png b/keyboards/ergodox/keymaps/win10_writers-block/images/media-layer.png
new file mode 100644
index 000000000..c2019da4e
--- /dev/null
+++ b/keyboards/ergodox/keymaps/win10_writers-block/images/media-layer.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/win10_writers-block/images/rimworld-layer.png b/keyboards/ergodox/keymaps/win10_writers-block/images/rimworld-layer.png
new file mode 100644
index 000000000..f866d3d55
--- /dev/null
+++ b/keyboards/ergodox/keymaps/win10_writers-block/images/rimworld-layer.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/win10_writers-block/images/symbol-layer.png b/keyboards/ergodox/keymaps/win10_writers-block/images/symbol-layer.png
new file mode 100644
index 000000000..6f49aae79
--- /dev/null
+++ b/keyboards/ergodox/keymaps/win10_writers-block/images/symbol-layer.png
Binary files differ
diff --git a/keyboards/ergodox/keymaps/win10_writers-block/keymap.c b/keyboards/ergodox/keymaps/win10_writers-block/keymap.c
new file mode 100644
index 000000000..3106b3374
--- /dev/null
+++ b/keyboards/ergodox/keymaps/win10_writers-block/keymap.c
@@ -0,0 +1,324 @@
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+#include "wait.h"
+
+#define BASE 0 // default layer - helpful for writing in Office-style word processors.
+#define SYMB 1 // symbol layer - NumPad, etc. - same as Ergodox EZ default but no EEPROM or Version key
+#define RIMW 2 // rimworld layer - made for the game RimWorld, by Tynan Sylvester | feel free to remap for your favorite game!
+#define MDIA 3 // media layer - mouse and music - close to Ergodox EZ default media layer
+
+#define CO_PA M(0) // hold copy, tap paste
+
+#define W_CUT LCTL(KC_X) // C-x Cut
+#define W_COPY LCTL(KC_C) // C-c Copy
+#define W_PASTE LCTL(KC_V) // C-v Paste
+#define W_UNDO LCTL(KC_Z) // C-z Undo
+#define W_FIND LCTL(KC_F) // C-v Find
+#define W_CAD LCTL(LALT(KC_DEL)) // one-tap ctrl-alt-del
+
+
+
+//Tap Dance Declarations
+enum {
+ CAKEWARP,
+ CTRLALTMDIA,
+};
+
+void cake_count (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 2) {
+ layer_on (SYMB); //define double tap here
+ layer_off (MDIA);
+ }
+ else {
+ layer_off (SYMB); //define single tap or hold here
+ layer_off (MDIA);
+ }
+ if (state->count == 3) {
+ layer_on (RIMW); //define triple tap here
+ layer_off (MDIA);
+ }
+ else {
+ layer_off (RIMW); //define single tap or hold here
+ layer_off (MDIA);
+ reset_tap_dance (state);
+ }
+}
+
+void dance_cad_mdia_fin (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ register_code (KC_LCTL);
+ register_code (KC_LALT);
+ register_code (KC_DEL);
+ } else {
+ layer_on (MDIA);
+ }
+}
+
+void dance_cad_mdia_reset (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ unregister_code (KC_DEL);
+ unregister_code (KC_LALT);
+ unregister_code (KC_LCTL);
+ } else {
+ ;
+ }
+}
+
+//Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+ // tap for Layer 0, tap twice to switch to symbol layer, and tap three times to switch to rimworld layer.
+ [CAKEWARP] = ACTION_TAP_DANCE_FN(cake_count)
+ // tap for ctrl-alt-del, tap twice for media layer
+ ,[CTRLALTMDIA] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_cad_mdia_fin, dance_cad_mdia_reset)
+ // Other declarations would go here, separated by commas, if you have them
+};
+
+//In Layer declaration, add tap dance item in place of a key code
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer - TD(one_tap, two_taps, three_taps...)
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 7 | 8 | 9 | 0 | - | = |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | F12/L1 | Q | W | E | R | T | {/[ | |TD(L0 | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | |L1 L2)|------+------+------+------+------+--------|
+ * |Caps/Win| A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
+ * |--------+------+------+------+------+------| }/] | TD(ctrl|------+------+------+------+------+--------|
+ * |LShift/(|Z/Ctrl| X | C | V | B | | |altdel| N | M | , | . | / |RShift/)|
+ * `--------+------+------+------+------+-------------' |L3) |------+------+------+------+------+--------'
+ * | Undo | Cut |CopyPa| Meh | LGui | '------| | Enter| Left | Up | Down | Right |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | Esc | VolUp| | F4 | Mute |
+ * ,------|------|------| |------+--------+------.
+ * | | | VolDn| | F5 | | |
+ * |Backsp|Delete|------| |------| Tab / |Space |
+ * |ace | | Find | | Alt | CTRL | |
+ * `--------------------' `----------------------'
+ */
+// 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
+LT(SYMB, KC_F12), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC,
+ GUI_T(KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSPO, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_RBRC,
+ W_UNDO, W_CUT, CO_PA, MEH_T(KC_NO), KC_LGUI,
+ KC_ESC, KC_VOLU,
+ KC_VOLD,
+ KC_BSPC, KC_DELETE, W_FIND,
+ // right hand
+ KC_7, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
+ TD(CAKEWARP), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ TD(CTRLALTMDIA), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
+ KC_ENT, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT,
+ KC_F4, KC_MUTE,
+ KC_F5,
+ KC_RALT, CTL_T(KC_TAB), KC_SPC
+ ),
+
+/* Keymap 1: Symbol Layer | No EEPROM Or Version keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | xx | | xx | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | |TD(L0 | Up | 7 | 8 | 9 | * | F12 |
+ * |--------+------+------+------+------+------| | |L1 L2)|------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | - |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | . | 0 | = | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[SYMB] = KEYMAP(
+ // left hand
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_NO,
+ KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+ KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+ KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // right hand
+ KC_NO, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_MINS,
+ KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
+ KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_NO,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+/* Keymap 2: RimWorld Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 7 | 8 | 9 | 0 | - | = |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | TAB | C | ,< | W | >. | R | | |TD(L0 | U | B | N | J | M | PGUP |
+ * |--------+------+------+------+------+------| F10 | |L1 L2)|------+------+------+------+------+--------|
+ * | I | F | A | S | D | 8 |------| |------| X | L | P | Y | H | ENTER |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | K | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | PGDN |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | F | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * |SPACE | C |------| |------| E |SPACE |
+ * | | | Q | | | | |
+ * `--------------------' `--------------------'
+ */
+// RIMWORLD
+[RIMW] = KEYMAP(
+ // left hand
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
+ KC_TAB, KC_C, KC_COMM, KC_W, KC_DOT, KC_R, KC_F10,
+ KC_I, KC_F, KC_A, KC_S, KC_D, KC_8,
+ KC_K, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_C,KC_Q,KC_TRNS,
+ // right hand
+ KC_7, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
+ KC_TRNS, KC_U, KC_B, KC_N, KC_J, KC_M, KC_PGUP,
+ KC_X, KC_L, SFT_T(KC_P), KC_Y, KC_H, KC_ENT,
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PGDN,
+ KC_F, KC_LEFT, KC_UP, KC_DOWN,KC_RIGHT,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_E, KC_TRNS
+),
+/* Keymap 3: Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | MsUp | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Prev | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | |Brwser|
+ * | Lclk | Rclk |------| |------| |Back |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = KEYMAP(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_BTN1, KC_BTN2, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+static uint16_t key_timer;
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case 0: {
+ if (record->event.pressed) {
+ key_timer = timer_read(); // if the key is being pressed, we start the timer.
+ }
+ else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down").
+ if (timer_elapsed(key_timer) > 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap.
+ return MACRO( D(LCTL), T(C), U(LCTL), END );
+ }
+ else {
+ return MACRO( D(LCTL), T(V), U(LCTL), END );
+ }
+ }
+ break;
+ }
+ }
+ return MACRO_NONE;
+};
+
+// Anything you want to do once when the keyboard initializes.
+// Tests LED function when the keyboard initializes.
+void matrix_init_user(void) {
+
+ wait_ms(500);
+ ergodox_board_led_on();
+ wait_ms(200);
+ ergodox_right_led_1_on();
+ wait_ms(200);
+ ergodox_right_led_2_on();
+ wait_ms(200);
+ ergodox_right_led_3_on();
+ wait_ms(200);
+ ergodox_board_led_off();
+ wait_ms(200);
+ ergodox_right_led_1_off();
+ wait_ms(200);
+ ergodox_right_led_2_off();
+ wait_ms(200);
+ ergodox_right_led_3_off();
+
+};
+
+
+// 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_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ case 3:
+ ergodox_right_led_3_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboards/ergodox/keymaps/win10_writers-block/readme.md b/keyboards/ergodox/keymaps/win10_writers-block/readme.md
new file mode 100644
index 000000000..e51e3c48f
--- /dev/null
+++ b/keyboards/ergodox/keymaps/win10_writers-block/readme.md
@@ -0,0 +1,113 @@
+<!-- -*- mode: markdown; fill-column: 8192 -*- -->
+
+Win10 Writer's Block ErgoDox - v1.0
+
+=======================
+
+This is a QWERTY layout for QMK. It's designed to work well in MS Office-like environments. It's tested on Windows 7 and 10.
+
+Professional writers may find this layout useful -- copywriters, technical writers, novelists, etc.
+
+I use my ErgoDox with this keymap as a daily driver at my office.
+
+A gaming layer is unobtrusively built into this layout. I use that layer to play RimWorld.
+
+Feel free to modify the gaming layer to your personal taste.
+
+## Table of Contents
+
+* [Layouts](#layouts)
+ - [Base layer](#base-layer)
+ - [Symbol layer](#symbol-layer)
+ - [Gaming layer](#rimworld-layer)
+ - [Media layer](#media-layer)
+* [Tools](#tools)
+ - [Layer notification](#layer-notification)
+* [Building](#building)
+ - [Using on Windows](#using-on-windows)
+* [License](#license)
+* [Special Thanks](#special-thanks)
+
+# Layouts
+
+* TapDance will teleport you to the layer you want:
+* One Tap for the Base layer
+* Two Taps for the Symbol layer
+* Three Taps for the Rimworld/Gaming layer
+
+* Where the "Meh" key is located on the Ergodox EZ default layout, I've changed it to another tap dance key:
+* One Tap for CTRL-ALT-DEL
+* Two Taps for the Media/Mouse layer
+
+## Base layer
+
+[![Base layer](images/base-layer.png)](http://www.keyboard-layout-editor.com/#/gists/8fd9bbdd3a23bbb5a8779de3624a3be1)
+
+This is a QWERTY layout with some quirks.
+
+* Enter is located on a key that won't cause as much thumb fatigue.
+* Copy and Paste work from the same key. Just hold the key to copy and tap the key to paste!
+* Undo, Find and Cut are also one-touch keys.
+* F12 is where you would normally find TAB on standard layouts. Quickly save in Word, safely.
+* You'll find bracket keys below the "6" key.
+
+* The Meh Key is a single-button CTRL+ALT+SHIFT modifier.
+
+* Space Cadet Shift: Tap L Shift for "(" and R Shift for ")" -- holding either shift works like a normal shift.
+* Tap "Z" or Tab to use either normally. Hold them for CTRL.
+* Tap Caps Lock to use it normally. Hold it for Win key combinations (Win+D to minimize all programs, etc).
+
+## Symbol layer
+
+[![Symbol layer](images/symbol-layer.png)](http://www.keyboard-layout-editor.com/#/gists/04eb6458b8b17882e472f64d482f12b4)
+
+Your standard Ergodox EZ symbol + numpad layout, minus the Version and EEPROM keys.
+
+* From the base layer, hold the F12 Key to temporarily access this layer (use for quick access to numpad)
+* Release F12 to return to the base layer.
+
+## Rimworld layer
+
+[![Rimworld / Gaming Layer](images/rimworld-layer.png)](http://www.keyboard-layout-editor.com/#/gists/d53af8391e6e443ed0a98ccfbdb4eace)
+
+This layer was made to play RimWorld, a Sci-Fi Colony Survival Game by Tynan Sylvester and Ludeon Studios, available on Steam.
+
+* Have fun!
+
+## Media layer
+
+[![Media layer](images/media-layer.png)](http://www.keyboard-layout-editor.com/#/gists/3209d09ed4bd997e4f49f28c6ada2ab3)
+
+This is the standard Ergodox EZ media layout with more options for mouseclick buttons.
+
+* In this layer, your "space" key changes into a back button for your browser.
+
+## LED states
+
+Your LEDs will change to indicate your layer. You'll know you are in the base layer if all LEDs are off.
+
+# Building
+
+To build, you will need the [QMK][qmk] firmware checked out. from there, dive into `keyboards/ergodox/keymaps/win10_writers-block/`
+
+[qmk]: https://github.com/jackhumbert/qmk_firmware
+
+```
+$ make keyboard=ergodox keymap=win10_writers-block
+```
+
+## Using on Windows
+
+This layout is tested in Windows 7 Pro and Windows 10 Home environments.
+
+# License
+
+GPL 3+
+
+# Special Thanks
+
+* To algernon for his coding help. I'm a novice but I still made this work (and figured out tap dance) with his help.
+
+* To /r/MechanicalKeyboards for being an all-around great community.
+
+* To /u/profet23 for his amazing custom Ergodox boards. \ No newline at end of file
diff --git a/keyboards/ergodox_ez/keymaps/workman_osx_mdw/keymap.c b/keyboards/ergodox/keymaps/workman_osx_mdw/keymap.c
index 8effa53b2..c05a1018d 100644
--- a/keyboards/ergodox_ez/keymaps/workman_osx_mdw/keymap.c
+++ b/keyboards/ergodox/keymaps/workman_osx_mdw/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
// readme
diff --git a/keyboards/ergodox/keymaps/xyverz/keymap.c b/keyboards/ergodox/keymaps/xyverz/keymap.c
new file mode 100644
index 000000000..08ee5aeda
--- /dev/null
+++ b/keyboards/ergodox/keymaps/xyverz/keymap.c
@@ -0,0 +1,312 @@
+/*
+ * About this keymap:
+ *
+ * The Dvorak layout shown herestems from my early Kinesis years, using the Contour PS/2 with a Dvorak
+ * software layout. Because of this, the RBRC and LBRC were on opposite sides of the board in the corner
+ * keys. I've decided to continue using this layout with my ErgoDox.
+ *
+ * The QWERTY layout shown here is based entirely on the Kinesis Advantage layout, with the additional
+ * keys as shown in the diagrams. The Colemak layout is merely an adaptation of that.
+ *
+ * I've enabled persistent keymaps for Qwerty, Dvorak and Colemak layers, similar to the default Planck
+ * layouts.
+ *
+ */
+
+#include "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+#define _DV 0 // Dvorak layer
+#define _QW 1 // Qwerty layer
+#define _CM 2 // Colemak layer
+#define _MD 3 // Media Layer
+#define _KP 4 // Keypad Layer
+
+// Macro name shortcuts
+#define DVORAK M(_DV)
+#define QWERTY M(_QW)
+#define COLEMAK M(_CM)
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Layer 0 : Dvorak
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | ] | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | [ |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | ' | , | . | P | Y | | | | F | G | C | R | L | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | CapsLk | A | O | E | U | I |------| |------| D | H | T | N | S | - |
+ * |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------|
+ * | LShift | ; | Q | J | K | X | | | | B | M | W | V | Z | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | LCTL | LALT | | RALT | RCTL |
+ * ,------|------|------| |------+------+------.
+ * | | | Home | | PgUp | | |
+ * | BkSp | Del |------| |------| Enter| Space|
+ * | | | End | | PgDn | | |
+ * `--------------------' `--------------------'
+ *
+ */
+[_DV] = KEYMAP(
+ // left hand
+ KC_RBRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_ESC,
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, XXXXXXX,
+ KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, MO(_MD),
+ KC_LGUI, KC_GRV, KC_INS, KC_LEFT, KC_RGHT,
+ KC_LCTL, KC_LALT,
+ KC_HOME,
+ KC_BSPC, KC_DEL, KC_END,
+ // right hand
+ KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC,
+ XXXXXXX, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSLS,
+ KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
+ MO(_KP), KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
+ KC_UP, KC_DOWN, KC_SLSH, KC_EQL, KC_RGUI,
+ KC_RALT, KC_RCTL,
+ KC_PGUP,
+ KC_PGDN, KC_ENT, KC_SPC
+ ),
+
+
+/* Layer 1: QWERTY
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | E | R | T | | | | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | CapsLk | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
+ * |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------|
+ * | LShift | Z | X | C | V | B | | | | N | M | , | . | / | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | LCTL | LALT | | RALT | RCTL |
+ * ,------|------|------| |------+------+------.
+ * | | | Home | | PgUp | | |
+ * | BkSp | Del |------| |------| Enter| Space|
+ * | | | End | | PgDn | | |
+ * `--------------------' `--------------------'
+ */
+[_QW] = KEYMAP(
+ // left hand
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
+ KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, XXXXXXX,
+ KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(_MD),
+ KC_LGUI, KC_GRV, KC_INS, KC_LEFT, KC_RGHT,
+ KC_LCTL, KC_LALT,
+ KC_HOME,
+ KC_BSPC, KC_DEL, KC_END,
+ // right hand
+ KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ XXXXXXX, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ MO(_KP), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, KC_RGUI,
+ KC_LALT, KC_LCTL,
+ KC_PGUP,
+ KC_PGDN, KC_ENT, KC_SPC
+ ),
+
+
+/* Layer 2 : Colemak
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | = | 1 | 2 | 3 | 4 | 5 | ESC | | ESC | 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | F | P | G | | | | J | L | U | Y | ; | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | BkSpc | A | R | S | T | D |------| |------| H | N | E | I | O | ' |
+ * |--------+------+------+------+------+------| _MD | | _KP |------+------+------+------+------+--------|
+ * | LShift | Z | X | C | V | B | | | | K | M | , | . | / | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | LCTL | LALT | | RALT | RCTL |
+ * ,------|------|------| |------+------+------.
+ * | | | Home | | PgUp | | |
+ * | BkSp | Del |------| |------| Enter| Space|
+ * | | | End | | PgDn | | |
+ * `--------------------' `--------------------'
+ */
+[_CM] = KEYMAP(
+ // left hand
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
+ KC_DELT, KC_Q, KC_W, KC_F, KC_P, KC_G, XXXXXXX,
+ KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(_MD),
+ KC_LGUI, KC_GRV, KC_INS, KC_LEFT, KC_RGHT,
+ KC_LCTL, KC_LALT,
+ KC_HOME,
+ KC_BSPC, KC_DEL, KC_END,
+ // right hand
+ KC_ESC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ XXXXXXX, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
+ KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ MO(_KP), KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, KC_RGUI,
+ KC_LALT, KC_LCTL,
+ KC_PGUP,
+ KC_PGDN, KC_ENT, KC_SPC
+ ),
+
+
+/* Layer 3 : Media layer
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | TEENSY | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | PrSc | ScLk | Paus | | | | | | Mute | Vol- | Vol+ | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | |------| |------| Stop | Prev | Play | Next | Sel | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |Dvorak|Qwerty|Colemk| | | | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[_MD] = KEYMAP(
+ // left hand
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11,
+ _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, DVORAK, QWERTY, COLEMAK, _______, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______,
+ // right hand
+ KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
+ KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSEL, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______
+ ),
+
+
+/* Layer 4 : Keypad layer
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | Power | | | | | | | | | | NmLk | KP = | KP / | KP * | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Sleep | | | | | | | | | | KP 7 | KP 8 | KP 9 | KP - | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | Wake | | | | | |------| |------| | KP 4 | KP 5 | KP 6 | KP + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | KP 1 | KP 2 | KP 3 |KP Ent| |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | KP 0 | | KP . |KP Ent| |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+[_KP] = KEYMAP(
+ // left hand
+ KC_PWR, _______, _______, _______, _______, _______, _______,
+ KC_SLEP, _______, _______, _______, _______, _______, _______,
+ KC_WAKE, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______,
+ // right hand
+ _______, _______, KC_NLCK, KC_PEQL, KC_PSLS, KC_PAST, _______,
+ _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, _______,
+ _______, KC_P4, KC_P5, KC_P6, KC_PPLS, _______,
+ _______, _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______,
+ KC_P0, _______, KC_PDOT, KC_PENT, _______,
+ _______, _______,
+ _______,
+ _______, _______, _______
+ ),
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case _DV:
+ if (record->event.pressed) {
+ persistant_default_layer_set(1UL<<_DV);
+ }
+ break;
+ case _QW:
+ if (record->event.pressed) {
+ persistant_default_layer_set(1UL<<_QW);
+ }
+ break;
+ case _CM:
+ if (record->event.pressed) {
+ persistant_default_layer_set(1UL<<_CM);
+ }
+ 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) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboards/ergodox/keymaps/xyverz/readme.md b/keyboards/ergodox/keymaps/xyverz/readme.md
new file mode 100644
index 000000000..6ecdabc9e
--- /dev/null
+++ b/keyboards/ergodox/keymaps/xyverz/readme.md
@@ -0,0 +1,122 @@
+# Xyverz's ErgoDox EZ Keymap
+
+## About this keymap:
+
+The Dvorak layout shown herestems from my early Kinesis years, using the Contour PS/2 with a Dvorak software layout. Because of this, the RBRC and LBRC were on opposite sides of the board in the corner keys. I've decided to continue using this layout with my ErgoDox.
+
+The QWERTY layout shown here is based entirely on the Kinesis Advantage layout, with the additional keys as shown in the diagrams. The Colemak layout is merely an adaptation of that.
+
+I've enabled persistent keymaps for Qwerty, Dvorak and Colemak layers, similar to the default Planck layouts.
+
+## Still to do:
+
+ * Need to figure out a better position for the ESC key.
+ * Come up with a function for the empty keys shown in the alpha layers below.
+ * Fix the CapsLock, NumLock, and ScrLck LEDs.
+
+### Layer 0: Dvorak layer
+
+ ,--------------------------------------------------.,--------------------------------------------------.
+ | ] | 1 | 2 | 3 | 4 | 5 | ESC || ESC | 6 | 7 | 8 | 9 | 0 | [ |
+ |--------+------+------+------+------+-------------||------+------+------+------+------+------+--------|
+ | Tab | ' | , | . | Y | Y | || | F | G | C | R | L | \ |
+ |--------+------+------+------+------+------| || |------+------+------+------+------+--------|
+ | CapsLk | A | O | E | U | I |------||------| D | H | T | N | S | - |
+ |--------+------+------+------+------+------| _MD || _KP |------+------+------+------+------+--------|
+ | LShift | Z | X | C | V | X | || | B | M | W | V | Z | RShift |
+ `--------+------+------+------+------+-------------'`-------------+------+------+------+------+--------'
+ | LGUI | ` | INS | Left | Rght | | Up | Dn | / | = | RGUI |
+ `----------------------------------' `----------------------------------'
+ ,-------------.,-------------.
+ | LCtr | LAlt || Ralt | RCtr |
+ ,------|------|------||------+------+------.
+ | | | Home || PgUp | | |
+ | BkSp | Del |------||------| Enter| Space|
+ | | | End || PgDn | | |
+ `--------------------'`--------------------'
+
+### Layer 1: QWERTY layer
+
+ ,--------------------------------------------------.,--------------------------------------------------.
+ | = | 1 | 2 | 3 | 4 | 5 | ESC || ESC | 6 | 7 | 8 | 9 | 0 | - |
+ |--------+------+------+------+------+-------------||------+------+------+------+------+------+--------|
+ | Tab | Q | W | E | R | T | || | Y | U | I | O | P | \ |
+ |--------+------+------+------+------+------| || |------+------+------+------+------+--------|
+ | CapsLk | A | S | D | F | G |------||------| H | J | K | L | ; | ' |
+ |--------+------+------+------+------+------| _MD || _KP |------+------+------+------+------+--------|
+ | LShift | Z | X | C | V | B | || | N | M | , | . | / | RShift |
+ `--------+------+------+------+------+-------------'`-------------+------+------+------+------+--------'
+ | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI |
+ `----------------------------------' `----------------------------------'
+ ,-------------.,-------------.
+ | LCtr | LAlt || Ralt | RCtr |
+ ,------|------|------||------+------+------.
+ | | | Home || PgUp | | |
+ | BkSp | Del |------||------| Enter| Space|
+ | | | End || PgDn | | |
+ `--------------------'`--------------------'
+
+### Keymap 2: Colemak layer
+
+ ,--------------------------------------------------.,--------------------------------------------------.
+ | = | 1 | 2 | 3 | 4 | 5 | ESC || ESC | 6 | 7 | 8 | 9 | 0 | - |
+ |--------+------+------+------+------+-------------||------+------+------+------+------+------+--------|
+ | Tab | Q | W | F | P | G | || | J | L | U | Y | ; | \ |
+ |--------+------+------+------+------+------| || |------+------+------+------+------+--------|
+ | BkSpc | A | R | S | T | D |------||------| H | N | E | I | O | ' |
+ |--------+------+------+------+------+------| _MD || _KP |------+------+------+------+------+--------|
+ | LShift | Z | X | C | V | B | || | K | M | , | . | / | RShift |
+ `--------+------+------+------+------+-------------'`-------------+------+------+------+------+--------'
+ | LGUI | ` | INS | Left | Rght | | Up | Dn | [ | ] | RGUI |
+ `----------------------------------' `----------------------------------'
+ ,-------------.,-------------.
+ | LCtr | LAlt || Ralt | RCtr |
+ ,------|------|------||------+------+------.
+ | | | Home || PgUp | | |
+ | BkSp | Del |------||------| Enter| Space|
+ | | | End || PgDn | | |
+ `--------------------'`--------------------'
+
+### layer 3 : Media layer
+
+ ,--------------------------------------------------.,--------------------------------------------------.
+ | TEENSY | F1 | F2 | F3 | F4 | F5 | F11 || F12 | F6 | F7 | F8 | F9 | F10 | |
+ |--------+------+------+------+------+-------------||------+------+------+------+------+------+--------|
+ | | | PrSc | ScLk | Paus | | || | | Mute | Vol- | Vol+ | | |
+ |--------+------+------+------+------+------| || |------+------+------+------+------+--------|
+ | | | | | | |------||------| Stop | Prev | Play | Next | Sel | |
+ |--------+------+------+------+------+------| || |------+------+------+------+------+--------|
+ | | |Dvorak|Qwerty|Colemk| | || | | | | | | |
+ `--------+------+------+------+------+-------------'`-------------+------+------+------+------+--------'
+ | | | | | | | | | | | |
+ `----------------------------------' `----------------------------------'
+ ,-------------.,-------------.
+ | | || | |
+ ,------|------|------||------+------+------.
+ | | | || | | |
+ | | |------||------| | |
+ | | | || | | |
+ `--------------------'`--------------------'
+
+
+
+### Keymap 4: Keypad layer
+
+ ,--------------------------------------------------.,--------------------------------------------------.
+ | Power | | | | | | || | | NmLk | KP = | KP / | KP * | |
+ |--------+------+------+------+------+-------------||------+------+------+------+------+------+--------|
+ | Sleep | | | | | | || | | KP 7 | KP 8 | KP 9 | KP - | |
+ |--------+------+------+------+------+------| || |------+------+------+------+------+--------|
+ | Wake | | | | | |------||------| | KP 4 | KP 5 | KP 6 | KP + | |
+ |--------+------+------+------+------+------| || |------+------+------+------+------+--------|
+ | | | | | | | || | | KP 1 | KP 2 | KP 3 |KP Ent| |
+ `--------+------+------+------+------+-------------'`-------------+------+------+------+------+--------'
+ | | | | | | | KP 0 | | KP . |KP Ent| |
+ `----------------------------------' `----------------------------------'
+ ,-------------.,-------------.
+ | | || | |
+ ,------|------|------||------+------+------.
+ | | | || | | |
+ | | |------||------| | |
+ | | | || | | |
+ `--------------------'`--------------------'
diff --git a/keyboards/ergodox/keymaps/yoruian/90-ergodox-yoruian.conf b/keyboards/ergodox/keymaps/yoruian/90-ergodox-yoruian.conf
new file mode 100644
index 000000000..ce4fce3b1
--- /dev/null
+++ b/keyboards/ergodox/keymaps/yoruian/90-ergodox-yoruian.conf
@@ -0,0 +1,6 @@
+Section "InputClass"
+ Identifier "ErgoDox EZ"
+ MatchIsKeyboard "on"
+ MatchProduct "ErgoDox EZ ErgoDox EZ"
+ Option "XkbLayout" "ergodox_yoruian"
+EndSection
diff --git a/keyboards/ergodox/keymaps/yoruian/Makefile b/keyboards/ergodox/keymaps/yoruian/Makefile
new file mode 100644
index 000000000..b43a24c61
--- /dev/null
+++ b/keyboards/ergodox/keymaps/yoruian/Makefile
@@ -0,0 +1,13 @@
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
+
+install-xorg-configuration:
+ install -m 0664 90-$(KEYBOARD)-$(KEYMAP).conf \
+ /etc/X11/xorg.conf.d/90-$(KEYBOARD)-$(KEYMAP).conf
+ install -m 0644 $(KEYBOARD)_$(KEYMAP) \
+ /usr/share/X11/xkb/symbols/$(KEYBOARD)_$(KEYMAP)
+
+uninstall-xorg-configuration:
+ -rm -f /etc/X11/xorg.conf.d/90-$(KEYBOARD)-$(KEYMAP).conf
+ -rm -f /usr/share/X11/xkb/symbols/$(KEYBOARD)_$(KEYMAP)
diff --git a/keyboards/ergodox/keymaps/yoruian/README b/keyboards/ergodox/keymaps/yoruian/README
new file mode 100644
index 000000000..99b41434e
--- /dev/null
+++ b/keyboards/ergodox/keymaps/yoruian/README
@@ -0,0 +1,102 @@
+ Snarfangel's YORUIAN for the ErgoDox EZ
+ ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+DEFAULT
+â”â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┓ â”â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┓
+┃ ` │ ; │ : │ - │ / │ ( │ < ┃ ┃ > │ ) │ ^ │ * │ ~ │ Γ │ σ ┃
+┠───┼───┼───┼───┼───┼───┼───┨ ┠───┼───┼───┼───┼───┼───┼───┨
+┃ ⎋ │ . │ y │ o │ r │ ? │ ✦ ┃ ┃ ✦ │ j │ v │ d │ f │ w │ q ┃
+┠───┼───┼───┼───┼───┼───┤ ┃ ┃ ├───┼───┼───┼───┼───┼───┨
+┃ ⎈ │ u │ i │ a │ n │ ! ├───┨ ┠───┤ m │ h │ t │ s │ c │ ⎈ ┃
+┠───┼───┼───┼───┼───┼───┤ ■┃ ┃ ■├───┼───┼───┼───┼───┼───┨
+┃ λ │ ' │ " │ , │ _ │ = │ ┃ ┃ │ k │ l │ p │ g │ b │ x ┃
+┠───┼───┼───┼───┼───╆â”â”â”â”·â”â”â”â”› â”—â”â”â”â”·â”â”â”╅───┼───┼───┼───┼───┨
+┃ ⎀ │ E │ │ │ ◆ ┃ ┃ ◆ │ │ │ z │ ⎙ ┃
+â”—â”â”â”â”·â”â”â”â”·â”â”â”â”·â”â”â”â”·â”â”â”â”› â”—â”â”â”â”·â”â”â”â”·â”â”â”â”·â”â”â”â”·â”â”â”â”›
+ â”â”â”â”┯â”â”â”┓ â”â”â”â”┯â”â”â”┓
+ ┃ ⌫ │ ⌥ ┃ ┃ ⎄ │ ↹ ┃
+ â”â”â”â”╃───┼───┨ ┠───┼───╄â”â”â”┓
+ ┃ │ │ ┃ ┃ │ │ ┃
+ ┃ e │ ⇧ ├───┨ ┠───┤ ⎠│ ⣠┃
+ ┃ │ │ ┃ ┃ │ │ ┃
+ â”—â”â”â”â”·â”â”â”â”·â”â”â”â”› â”—â”â”â”â”·â”â”â”â”·â”â”â”â”›
+SHIFTED
+â”â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┓ â”â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┓
+┃ 9 │ 7 │ 5 │ 3 │ 1 │ [ │ { ┃ ┃ } │ ] │ 0 │ 2 │ 4 │ 6 │ 8 ┃
+┠───┼───┼───┼───┼───┼───┼───┨ ┠───┼───┼───┼───┼───┼───┼───┨
+┃ │ * │ Y │ O │ R │ \ │ ┃ ┃ │ J │ V │ D │ F │ W │ Q ┃
+┠───┼───┼───┼───┼───┼───┤ ┃ ┃ ├───┼───┼───┼───┼───┼───┨
+┃ │ U │ I │ A │ N │ | ├───┨ ┠───┤ M │ H │ T │ S │ C │ ┃
+┠───┼───┼───┼───┼───┼───┤ ┃ ┃ ├───┼───┼───┼───┼───┼───┨
+┃ │ # │ $ │ @ │ & │ + │ ┃ ┃ │ K │ L │ P │ G │ B │ X ┃
+┠───┼───┼───┼───┼───╆â”â”â”â”·â”â”â”â”› â”—â”â”â”â”·â”â”â”╅───┼───┼───┼───┼───┨
+┃ │ │ │ │ ┃ ┃ │ │ │ Z │ ┃
+â”—â”â”â”â”·â”â”â”â”·â”â”â”â”·â”â”â”â”·â”â”â”â”› â”—â”â”â”â”·â”â”â”â”·â”â”â”â”·â”â”â”â”·â”â”â”â”›
+ â”â”â”â”┯â”â”â”┓ â”â”â”â”┯â”â”â”┓
+ ┃ │ ┃ ┃ │ ┃
+ â”â”â”â”╃───┼───┨ ┠───┼───╄â”â”â”┓
+ ┃ │ │ ┃ ┃ │ │ ┃
+ ┃ │ ├───┨ ┠───┤ │ ┃
+ ┃ │ │ ┃ ┃ │ │ ┃
+ â”—â”â”â”â”·â”â”â”â”·â”â”â”â”› â”—â”â”â”â”·â”â”â”â”·â”â”â”â”›
+λ LAYER
+â”â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┓ â”â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┯â”â”â”┓
+┃ │ │ │ │ │ │ ┃ ┃ │ │ ⑤ │ ⑥ │ ⑦ │ ⑧ │ ⑨ ┃
+┠───┼───┼───┼───┼───┼───┼───┨ ┠───┼───┼───┼───┼───┼───┼───┨
+┃ │ │ │ │ │ │ ┃ ┃ │ │ ① │ ② │ ③ │ ④ │ ⑩ ┃
+┠───┼───┼───┼───┼───┼───┤ ┃ ┃ ├───┼───┼───┼───┼───┼───┨
+┃ │ │ │ │ │ ├───┨ ┠───┤ ⎉ │ ↠│ ↓ │ ↑ │ → │ ⑪ ┃
+┠───┼───┼───┼───┼───┼───┤ ┃ ┃ ├───┼───┼───┼───┼───┼───┨
+┃ λ │ │ │ │ │ │ ┃ ┃ │ │ ⇱ │ ⎘ │ ⎗ │ ⇲ │ ⑫ ┃
+┠───┼───┼───┼───┼───╆â”â”â”â”·â”â”â”â”› â”—â”â”â”â”·â”â”â”╅───┼───┼───┼───┼───┨
+┃ │ │ │ │ ┃ ┃ │ │ │ │ ┃
+â”—â”â”â”â”·â”â”â”â”·â”â”â”â”·â”â”â”â”·â”â”â”â”› â”—â”â”â”â”·â”â”â”â”·â”â”â”â”·â”â”â”â”·â”â”â”â”›
+ â”â”â”â”┯â”â”â”┓ â”â”â”â”┯â”â”â”┓
+ ┃ │ ┃ ┃ │ ┃
+ â”â”â”â”╃───┼───┨ ┠───┼───╄â”â”â”┓
+ ┃ │ │ ┃ ┃ │ │ ┃
+ ┃ │ ├───┨ ┠───┤ │ ┃
+ ┃ │ │ ┃ ┃ │ │ ┃
+ â”—â”â”â”â”·â”â”â”â”·â”â”â”â”› â”—â”â”â”â”·â”â”â”â”·â”â”â”â”›
+
+Installation (X only)
+‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+ 1. Build and flash firmware as usual
+
+ 2. sudo make install-xorg-configuration
+
+ 3. Restart X
+
+Features
+‾‾‾‾‾‾‾‾
+ • E on the thumb
+
+ • Emacs-friendly
+
+ • Symmetric control keys for finger wear levelling
+
+ • Greek and subscript dead keys
+
+ • Compose key for arbitrary Unicode input via ~/.XCompose
+
+Don't Cares
+‾‾‾‾‾‾‾‾‾‾‾
+ • Easy migration from QWERTY
+
+ • Compatbility with non-XKB systems
+
+ • Mouse emulation
+
+ • Media keys
+
+Acknowledgements
+‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
+Snarfangel, for designing the layout.
+
+The GNU FreeFont project and Steve White, for adding new keyboard
+symbols.
+
+Xah Lee, for http://xahlee.info/comp/unicode_computing_symbols.html
+
+Colophon
+‾‾‾‾‾‾‾‾
+This file is best-viewed with an SVN version of GNU FreeFont Mono.
diff --git a/keyboards/ergodox/keymaps/yoruian/ergodox_yoruian b/keyboards/ergodox/keymaps/yoruian/ergodox_yoruian
new file mode 100644
index 000000000..0d13fbfd4
--- /dev/null
+++ b/keyboards/ergodox/keymaps/yoruian/ergodox_yoruian
@@ -0,0 +1,34 @@
+partial alphanumeric_keys modifier_keys
+xkb_symbols "ergodox_yoruian" {
+ include "us"
+ name[Group1]= "English (yoruian-1.0.0)";
+
+ replace key <KP2> { [ Multi_key, Multi_key ] };
+ replace key <KP3> { [ Hyper_L, Hyper_L ] };
+ replace key <AE09> { [ grave, 9 ] };
+ replace key <AE07> { [ semicolon, 7 ] };
+ replace key <AE05> { [ colon, 5 ] };
+ replace key <AE03> { [ minus, 3 ] };
+ replace key <AE01> { [ slash, 1 ] };
+ replace key <AE10> { [ asciicircum, 0 ] };
+ replace key <AE02> { [ percent, 2 ] };
+ replace key <AE04> { [ asciitilde, 4 ] };
+ replace key <AE06> { [ dead_greek, 6 ] };
+ replace key <AE08> { [ dead_caron, 8 ] };
+ replace key <KP1> { [ E, E ] };
+ replace key <AD12> { [ period, asterisk ] };
+ replace key <BKSL> { [ question, backslash ] };
+ replace key <AC10> { [ exclam, bar ] };
+ replace key <AC11> { [ apostrophe, numbersign ] };
+ replace key <AB08> { [ quotedbl, dollar ] };
+ replace key <AB09> { [ comma, at ] };
+ replace key <AB10> { [ underscore, ampersand ] };
+ replace key <KP0> { [ equal, plus ] };
+ replace key <TLDE> { [ parenleft, bracketleft ] };
+ replace key <AE11> { [ less, braceleft ] };
+ replace key <AE12> { [ greater, braceright ] };
+ replace key <AD11> { [ parenright, bracketright ] };
+
+ modifier_map none { <HYPR> };
+ modifier_map Mod3 { <KP3> };
+};
diff --git a/keyboards/ergodox/keymaps/yoruian/keymap.c b/keyboards/ergodox/keymaps/yoruian/keymap.c
new file mode 100644
index 000000000..d3635ddf3
--- /dev/null
+++ b/keyboards/ergodox/keymaps/yoruian/keymap.c
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2016 Thomas Fitzsimmons <fitzsim@fitzsim.org>
+ *
+ * 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 3 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 "yoruian.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = KEYMAP\
+(9, 7, 5, 3, 1, GRV, MINS, EQL, LBRC, 0, 2, 4, 6, 8,
+ ES, RBRC, Y, O, R, BSLS, P3, P3, J, V, D, F, W, Q,
+ LC, U, I, A, N, SCLN, M, H, T, S, C, RC,
+ FF, QUOT, COMM, DOT, SLSH, P0, LGUI, LGUI, K, L, P, G, B, X,
+ IN, P1, NO, NO, LALT, LALT, NO, NO, Z, PS,
+ BSPC, RALT, P2, TAB,
+ NO, NO,
+ E, LSFT, NO, NO, ENT, SPC),
+[1] = KEYMAP\
+(TR, TR, TR, TR, TR, TR, TR, TR, TR, F5, F6, F7, F8, F9,
+ TR, TR, TR, TR, TR, TR, TR, TR, TR, F1, F2, F3, F4, FT,
+ TR, TR, TR, TR, TR, TR, PAUS, LEFT, DOWN, UP, RGHT, FE,
+ TR, TR, TR, TR, TR, TR, TR, TR, TR, HOME, PGDN, PGUP, END, FW,
+ TR, TR, TR, TR, TR, TR, TR, TR, TR, TR,
+ TR, TR, TR, TR,
+ TR, TR,
+ TR, TR, TR, TR, TR, TR),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ return MACRO_NONE;
+};
+
+void matrix_init_user(void) {
+};
+
+void matrix_scan_user(void) {
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+};
+
+/*
+ * Local Variables:
+ * electric-indent-mode: nil
+ * End:
+ */
diff --git a/keyboards/ergodox/keymaps/yoruian/yoruian.h b/keyboards/ergodox/keymaps/yoruian/yoruian.h
new file mode 100644
index 000000000..1adcb7fd3
--- /dev/null
+++ b/keyboards/ergodox/keymaps/yoruian/yoruian.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2016 Thomas Fitzsimmons <fitzsim@fitzsim.org>
+ *
+ * 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 3 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 "ergodox.h"
+#include "debug.h"
+#include "action_layer.h"
+
+#undef KEYMAP
+#define KEYMAP\
+( \
+ /* Spacial positions. */ \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, \
+ k20, k21, k22, k23, k24, k25, k28, k29, k2A, k2B, k2C, k2D, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, \
+ k40, k41, k42, k43, k44, k49, k4A, k4B, k4C, k4D, \
+ k55, k56, k57, k58, \
+ k54, k59, \
+ k53, k52, k51, k5C, k5B, k5A) \
+ \
+ /* Matrix positions. */ \
+ { \
+ { KC_##k00, KC_##k10, KC_##k20, KC_##k30, KC_##k40, KC_NO }, \
+ { KC_##k01, KC_##k11, KC_##k21, KC_##k31, KC_##k41, KC_##k51 }, \
+ { KC_##k02, KC_##k12, KC_##k22, KC_##k32, KC_##k42, KC_##k52 }, \
+ { KC_##k03, KC_##k13, KC_##k23, KC_##k33, KC_##k43, KC_##k53 }, \
+ { KC_##k04, KC_##k14, KC_##k24, KC_##k34, KC_##k44, KC_##k54 }, \
+ { KC_##k05, KC_##k15, KC_##k25, KC_##k35, KC_NO, KC_##k55 }, \
+ { KC_##k06, KC_##k16, KC_NO, KC_##k36, KC_NO, KC_##k56 }, \
+ { KC_##k07, KC_##k17, KC_NO, KC_##k37, KC_NO, KC_##k57 }, \
+ { KC_##k08, KC_##k18, KC_##k28, KC_##k38, KC_NO, KC_##k58 }, \
+ { KC_##k09, KC_##k19, KC_##k29, KC_##k39, KC_##k49, KC_##k59 }, \
+ { KC_##k0A, KC_##k1A, KC_##k2A, KC_##k3A, KC_##k4A, KC_##k5A }, \
+ { KC_##k0B, KC_##k1B, KC_##k2B, KC_##k3B, KC_##k4B, KC_##k5B }, \
+ { KC_##k0C, KC_##k1C, KC_##k2C, KC_##k3C, KC_##k4C, KC_##k5C }, \
+ { KC_##k0D, KC_##k1D, KC_##k2D, KC_##k3D, KC_##k4D, KC_NO } \
+ }
+
+#define KC_ES KC_ESC
+#define KC_LC KC_LCTL
+#define KC_RC KC_RCTL
+#define KC_FF MO(1)
+#define KC_IN KC_INS
+#define KC_PS KC_PSCR
+#define KC_TR KC_TRNS
+#define KC_FT KC_F10
+#define KC_FE KC_F11
+#define KC_FW KC_F12
diff --git a/keyboards/ergodox/keymaps/zweihander-osx/Makefile b/keyboards/ergodox/keymaps/zweihander-osx/Makefile
new file mode 100644
index 000000000..6e3d088a4
--- /dev/null
+++ b/keyboards/ergodox/keymaps/zweihander-osx/Makefile
@@ -0,0 +1,2 @@
+# Don’t do a tricolor wave when the computer is shut down in Windows
+SLEEP_LED_ENABLE = no
diff --git a/keyboards/ergodox_ez/keymaps/zweihander-osx/keymap.c b/keyboards/ergodox/keymaps/zweihander-osx/keymap.c
index 3444152bc..725a73e34 100644
--- a/keyboards/ergodox_ez/keymaps/zweihander-osx/keymap.c
+++ b/keyboards/ergodox/keymaps/zweihander-osx/keymap.c
@@ -1,4 +1,4 @@
-#include "ergodox_ez.h"
+#include "ergodox.h"
#include "debug.h"
#include "action_layer.h"
@@ -11,7 +11,7 @@
#define BBED 2 // BBEdit
#define TMNL 3 // Terminal
#define SAFA 4 // Safari
-#define ALFRED_LEAD_TIME 100 // time, in milliseconds, to let Alfred come to the fore and accept keyboard input
+#define ALFRED_LEAD_TIME 250 // time, in milliseconds, to let Alfred come to the fore and accept keyboard input
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
@@ -31,8 +31,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | `~ | '" | | ⎋ | ⌫ |
* ,------|------|------| |------+--------+------.
* | | | PgUp | | PgDn | | |
- * | | ⌫ |------| |------| ⇥ |Enter |
- * | | | L⌥ | | L⌃ | | |
+ * | | ⇥ |------| |------| ⇥ |Enter |
+ * | | | R⌥ | | R⌃ | | |
* `--------------------' `----------------------'
*/
// If it accepts an argument (i.e, is a function), it doesn't need KC_.
@@ -46,7 +46,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LALT, KC_LGUI,KC_LEFT,KC_RGHT,
KC_GRV, KC_QUOT,
KC_PGUP,
- KC_SPC,KC_BSPC,KC_LALT,
+ KC_SPC,KC_TAB ,KC_RALT,
// right hand
TG(SYMB), KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
MO(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
@@ -55,7 +55,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_SPC ,
KC_ESC, KC_BSPC,
KC_PGDN,
- KC_LCTL, KC_TAB, KC_ENT
+ KC_RCTL, KC_TAB, KC_ENT
),
/* Keymap 1: Symbol Layer
*
@@ -66,25 +66,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | < | > | ( | ) | ' |------| |------| - | 4 | 5 | 6 | + | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | | | | | | | | | | & | 1 | 2 | 3 | = | |
+ * | | | | | | = | | | | : | 1 | 2 | 3 | = | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | 0 | . | ↠| → | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
- * | | | | | Home | | |
+ * | | | | | | | |
* | | |------| |------| | |
- * | | | | | End | | |
+ * | | | | | | | |
* `--------------------' `--------------------'
*/
// SYMBOLS
[SYMB] = KEYMAP(
// left hand
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
- KC_TRNS,KC_LBRC,KC_RBRC,KC_LCBR,KC_RCBR,KC_DQUO,KC_TRNS,
+ KC_TRNS,KC_LBRC,KC_RBRC,KC_LCBR,KC_RCBR,KC_DQT ,KC_TRNS,
KC_TRNS,KC_LABK,KC_RABK,KC_LPRN,KC_RPRN,KC_QUOT,
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_EQL ,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS,
KC_TRNS,
@@ -93,22 +93,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
KC_MINS, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
- KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_EQL, KC_TRNS,
+ KC_TRNS, KC_COLN, KC_1, KC_2, KC_3, KC_EQL, KC_TRNS,
KC_0, KC_DOT, KC_LEFT, KC_RGHT, KC_TRNS,
KC_TRNS, KC_TRNS,
- KC_HOME,
- KC_END , KC_TRNS, KC_TRNS
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
),
/* Keymap 2: Media keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
- * | | F14 | F15 | | | | | | ⌘Q | ⌘W | ⌘⇧` | ⌘` | | | Power |
+ * | | F14 | F15 |PrtScr|SclLck| Pause| | | ⌘Q | ⌘W | ⌘⇧` | ⌘` | | | Power |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | PgUp |⌘S⌘⇥⌘R| Term | | | | ⌘] | ⌥⌘↑ | ↑ | ⌥⌘↓ | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | |Safari| PgDn | | |------| |------| ⌘[ | ↠| ↓ | → | | ⯠|
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
- * | | | | | |BBEdit| | | |L⇧+Spc| Spc | ⮠| ⭠| | |
+ * | | | | | |BBEdit| | | | | ⯠| ⮠| ⭠| | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | |VolUp |VolDn | Mute | | |
* `----------------------------------' `----------------------------------'
@@ -122,7 +122,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
// MEDIA AND MOUSE
[MDIA] = KEYMAP(
- KC_TRNS, KC_F14 , KC_F15 , KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, /* F14 dims screen, F15 brightens */
+ KC_TRNS, KC_F14 , KC_F15 , KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, /* F14 dims screen, F15 brightens */
KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, M(SGWF), M(TMNL), KC_TRNS,
KC_TRNS, KC_TRNS, M(SAFA), KC_PGDN, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(BBED), KC_TRNS,
@@ -131,13 +131,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_HOME,
KC_TRNS, KC_TRNS, KC_TRNS,
// right hand
- LGUI(KC_Q), LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_TRNS, KC_PWR,
+ LGUI(KC_Q), LGUI(KC_W), LGUI(LSFT(KC_GRV)), LGUI(KC_GRV), KC_TRNS, KC_TRNS, KC_PWR ,
KC_TRNS, LGUI(KC_RBRC), LGUI(LALT(KC_UP)), KC_UP , LGUI(LALT(KC_DOWN)), KC_TRNS, KC_TRNS,
LGUI(KC_LBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_MPLY,
- KC_TRNS, LSFT(KC_SPC), KC_SPC , KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
- KC_TRNS,
+ KC_END ,
LGUI(KC_X), LGUI(KC_C), LGUI(KC_V)
),
};
diff --git a/keyboards/ergodox_ez/keymaps/zweihander-osx/readme.markdown b/keyboards/ergodox/keymaps/zweihander-osx/readme.markdown
index 7bce7c690..5125a12ee 100644
--- a/keyboards/ergodox_ez/keymaps/zweihander-osx/readme.markdown
+++ b/keyboards/ergodox/keymaps/zweihander-osx/readme.markdown
@@ -7,7 +7,7 @@ This layout is tuned for people who…
## use OS X
-This layout doesn’t make any concessions for Windows use. While it should work fine in Windows, I’m not about to devote precious keyboard space to Windows-specific shortcuts.
+While this layout should work fine in Windows, it’s not tuned for it. No sane person who primarily uses Windows would put this many Windows keys on a keyboard layout.
## mouse left-handed while doing other things with the right hand
@@ -21,8 +21,6 @@ I tend to have my mouse in my left hand, but I like to use my other hand to make
- Go Up and Close Just-Left Folder (⌥⌘↑)
- Cycle through open windows in current application (⌘\` and ⌘⇧\`)
- Cycle through tabs in current window (⌥⇥ and ⌥⇧⇥)
-- Space (page down in browsers; Quick Look in the Finder)
-- Shift-Space (page up in web browsers)
Because moving letter-by-letter is way slower than moving word-by-word, I added Option (⌥) to the bottommost button on the left side. This key can be held easily while holding ; (activate media layer) and pressing J and L to move left and right by word.
@@ -34,12 +32,16 @@ I wanted to preserve the feel of a number of shortcuts that involve pressing lot
- Empty Trash Without Asking for Confirmation (⇧⌥⌘⌫)
- Shut Down Without Asking for Confirmation (⇧⌥⌘ power)
+⇧⌥⌘⌫, when you press the backspace on the right half of the keyboard, is much more satisfying than if you curl your left hand into a claw to press all the keys on the left. Try both; you’ll agree.
+
## use Emacs-style shortcuts
I press C-a, C-e, and C-k all the time. It’s difficult to press these key combinations with the control key on the bottom left and I’m too quick on the draw for the control function on the / key to work reliably, so the bottommost thumb button on the right side is another control key.
+Having trouble remembering which thumb key is alt and which is ctrl? It’s like on the lower right of a normal keyboard — leftmost is alt, rightmost is ctrl.
+
## use spreadsheets
-All the common spreadsheet operations (+-*/=) are now on the right side of the symbol layer.
+All the common spreadsheet operations (+-*/=) are now on the right side of the symbol layer. There’s also a colon there for entering times and maybe IPv6 addresses. Not that I expect people to type IPv6 addresses into a spreadsheet, but, y’know.
diff --git a/keyboards/ergodox/keymaps/zweihander-osx/zweihander-osx.hex b/keyboards/ergodox/keymaps/zweihander-osx/zweihander-osx.hex
new file mode 100644
index 000000000..832504b02
--- /dev/null
+++ b/keyboards/ergodox/keymaps/zweihander-osx/zweihander-osx.hex
@@ -0,0 +1,1151 @@
+:100000000C94D3020C941A030C941A030C941A0344
+:100010000C941A030C941A030C941A030C941A03EC
+:100020000C941A030C941A030C94B71F0C94892097
+:100030000C941A030C941A030C941A030C941A03CC
+:100040000C941A030C94FC1A0C941A030C941A03C3
+:100050000C941A030C9414160C941A030C941A039F
+:100060000C941A030C941A030C941A030C941A039C
+:100070000C941A030C941A030C941A030C941A038C
+:100080000C941A030C941A030C941A030C941A037C
+:100090000C941A030C941A030C941A030C941A036C
+:1000A0000C941A030C941A030C941A03730C730C1B
+:1000B000A20CA20CD80CF80C290E290E030D290E47
+:1000C000B30DB30D1A0E290E290E230EC00DC00D4F
+:1000D000C00DC00DC00DC00DC00DC00DC00DC00DB8
+:1000E000C00DC00DC00DC00DC00DC00DD20DDF0D77
+:1000F000E60DED0DF70DF620182106221821062237
+:100100005D2180210622D521E821750A01E2012C1A
+:10011000022C02E274FA011602160104020401091B
+:1001200002090104020401150215010C020C012848
+:10013000022800750A01E2012C022C02E274FA0185
+:10014000170217010802080115021501100210011B
+:100150000C020C0111021101040204010F020F0133
+:1001600028022800750A01E2012C022C02E274FA2E
+:100170000105020501050205010802080107020741
+:10018000010C020C011702170128022800750A0150
+:10019000E30116021602E301E3012B022B02E30145
+:1001A000E30115021502E300750A01E301160216C8
+:1001B00002E301E3012B022B02E3000000F0A12E79
+:1001C000004C002A00E100E00000001E00140004C2
+:1001D000001D00E200E2001F001A0016001B00E3F1
+:1001E000002B00200008000700060050002C002112
+:1001F000001500090019004F004B00220017000AEB
+:1002000000050000003500015301510000E300002B
+:10021000003400015301510000E3000000290023D5
+:10022000001C000B00110000002A00240018000D23
+:1002300000100052004E0025000C000E0036005148
+:10024000002800260012000F0037002F002B002787
+:10025000001300334238613000E0002D00310034DB
+:1002600068E5002C00000001000100010001000110
+:100270000000003A002F0036020100010001003B9F
+:1002800000300037020100010001003C002F02266F
+:10029000020100010001003D0030022702010001BF
+:1002A0000001003E00340234002E00000001000175
+:1002B0000001000000010000000100010001000039
+:1002C000000100000001003F0038002D0033020053
+:1002D0000001004000240021001E00270001004111
+:1002E00000250022001F00370001004200260023E5
+:1002F00000200050000100430025022E022E004F76
+:10030000000100440045000100010001000000015F
+:10031000000100010001000100000069000100016E
+:10032000000100010001006A000100043001000129
+:1003300000010001004B004E00010001000100011E
+:100340000001300100010001004A000100033001FA
+:100350000002300000010001000100000001000067
+:100360000001001408010000000100000001001A53
+:100370000830082F082C0200000100350A520C50EA
+:10038000002C00A9004D00350852005100AC00AA15
+:100390000019080100510C4F00AB00A8000608012D
+:1003A0000001000100010001001B08A5000100AED2
+:1003B000000100010000000000000000000000003B
+:1003C0000000010204060A0F17202C3A4A5D7187CB
+:1003D0009DB3C7DAE9F5FCFFFCF5E9DAC7B39D8701
+:1003E000715D4A3A2C20170F0A0604020100000032
+:1003F0000000000000000016034500720067006F57
+:100400000044006F007800200045005A00000016EC
+:10041000034500720067006F0044006F0078002001
+:100420000045005A0000000403090409026D00049D
+:100430000100A0FA090400000103010100092111D3
+:100440000100012240000705810308000A09040198
+:10045000000103010200092111010001224D0007E2
+:1004600005820308000A09040200010300000009D4
+:1004700021110100012236000705830308000A0943
+:1004800004030001030000000921110100012239C9
+:10049000000705840310000112011001000000088C
+:1004A000EDFE071301000102000105010906A1018B
+:1004B000050719E029E71500250195087501810256
+:1004C0000508190129059505750191029501750326
+:1004D0009101050719002977150025019578750107
+:1004E0008102C005010980A101850216810026B79D
+:1004F000001A81002AB700751095018100C0050C13
+:100500000901A1018503160100269C021A01002A97
+:100510009C02751095018100C005010902A1010925
+:1005200001A1000509190129051500250195057589
+:100530000181029501750381010501093009311519
+:1005400081257F95027508810609381581257F95DB
+:100550000175088106050C0A38021581257F950171
+:1005600075088106C0C005010906A101050719E04B
+:1005700029E7150025019508750181029501750887
+:10058000810105081901290595057501910295015B
+:10059000750391010507190029FF150026FF009535
+:1005A0000675088100C011241FBECFEFDAE0DEBF60
+:1005B000CDBF04B603FE27C08091010290910202D4
+:1005C000A0910302B09104028730904BA740B04B3A
+:1005D000D1F41092010210920202109203021092C2
+:1005E000040214BE84B7877F84BF0FB6F894A89521
+:1005F00080916000886180936000109260000FBE5F
+:10060000E0E0FFE3099511E0A0E0B1E0E0EAF7E403
+:1006100002C005900D92A433B107D9F712E0A4E30C
+:10062000B1E001C01D92A130B107E1F70E94FC1CAE
+:100630000C94CE230C9400001092B9008AE08093B1
+:10064000B800089594EA9093BC009091BC0097FF85
+:10065000FCCF9091B900987F983021F0903111F043
+:1006600081E008958093BB0084E88093BC00809172
+:10067000BC0087FFFCCF8091B900887F883111F0E2
+:10068000803471F780E0089584E98093BC00809104
+:10069000BC0084FDFCCF08958093BB0084E8809368
+:1006A000BC008091BC0087FFFCCF9091B900987F7F
+:1006B00081E0983209F480E0089584E88093BC00DA
+:1006C0008091BC0087FFFCCF8091BB00089580B370
+:1006D0008C7080BB81B3836F81BB089580910101D1
+:1006E000811115C080E40E942203809301018111D1
+:1006F0000CC082E10E944C0380930101811105C06E
+:100700008FEF0E944C03809301010E94440384B147
+:10071000807F84B985B1807F85B98AB1837F8AB9AA
+:100720008BB1837F8BB93E98469808950C94E4046E
+:100730000E942509809301010E946E030E946703B5
+:10074000A5E3B1E0E3E4F1E08EE08E0F11921D929B
+:100750008E13FCCF0C940F090E9425098093010190
+:100760000E946E030E946703A5E3B1E0E3E4F1E0B9
+:100770008EE08E0F11921D928E13FCCF0895BF92C2
+:10078000CF92DF92EF92FF920F931F93CF93DF935D
+:1007900080910101882379F0809134018F5F8093EB
+:1007A0003401811108C00E94250980930101811143
+:1007B00002C00E94B70805E311E0C0E0D0E0EE24DB
+:1007C000E394F12CDD24D39495E0C92EC730D105F4
+:1007D00000F58091010181113CC080E40E94220358
+:1007E00080930101811112C082E10E944C03809329
+:1007F000010181110BC0C7010C2E01C0880F0A94A2
+:10080000EAF780950E944C03809301010E94440303
+:1008100020C0CA30A1F028F4C83059F0C93061F0C6
+:1008200005C0CC3089F070F0CD3089F0209A28983E
+:1008300010C0219A29980DC0229A2A980AC0239A9A
+:100840002B9807C0529A01C0539A5B9802C03E9AF7
+:10085000469880EA8A95F1F7C730D10518F580915E
+:100860000101811144C080E40E94220380930101B0
+:10087000882311F0B12C12C083E10E944C038093B5
+:1008800001018111F7CF81E40E94220380930101CD
+:100890008111F0CF0E945D03B82EB0940E944403F2
+:1008A0008B2D26C08FB181708D25799902C092E081
+:1008B00001C090E0892B7C9902C024E001C020E0B7
+:1008C000822B7D9902C028E001C020E0822B7E9916
+:1008D00002C090E101C090E0892B9FB19095991FD3
+:1008E0009927991F9295990F907E892B01C080E0DE
+:1008F000F8019081981719F08083C09200010E943E
+:100900006E0321960F5F1F4FCE30D10509F05ECFE9
+:10091000809100018823A1F08150809300018823F9
+:1009200029F0F5E0FA95F1F700000AC0A3E4B1E080
+:10093000E5E3F1E0CF01825F91919D938E13FCCFAF
+:100940000E94410681E0DF91CF911F910F91FF90AE
+:10095000EF90DF90CF90BF900895E82FF0E0ED5B2F
+:10096000FE4F808108950895FC016230B9F028F4AB
+:10097000662341F0613061F023C06330A9F0643038
+:10098000C9F01EC082818823D9F088EA91E00895D9
+:1009900082818823A9F08DE891E0089582818823DF
+:1009A00079F084E691E008958281882349F083E319
+:1009B00091E008958281882319F08AE091E00895FA
+:1009C00080E090E0089508956091B0017091B101C8
+:1009D0008091B2019091B3010E94081556985E98DB
+:1009E00025982D9826982E9827982F98813019F0C1
+:1009F000823021F00895259A2D9A0895269A2E9AEC
+:100A0000089581E0089581E008950C9403050E9403
+:100A1000940E2FEF84E39CE0215080409040E1F75A
+:100A200000C000000C9439160F931F93CF93DF93EF
+:100A30008C01FC01C081D181CE010E948D13BE01C9
+:100A40000E94D807EC01B8010E940505882309F42B
+:100A500012C1B801CE010E946808882309F40BC1B5
+:100A6000B801CE010E948109882309F404C1C43170
+:100A7000F0E7DF0708F0CDC0C23080E7D80708F400
+:100A8000A3C0F8018281882309F4AAC00E947215CC
+:100A9000811102C00E9458150E94851590E0909324
+:100AA000F3018093F201C230F0E7DF0721F4809177
+:100AB000F201816082C0C33080E7D80721F48091C1
+:100AC000F20182607AC0C430E0E7DE0721F4809151
+:100AD000F201846072C0C530F0E7DF0719F480913D
+:100AE000F20127C0C63080E7D80721F48091F201D7
+:100AF000806163C0C730E0E7DE0721F48091F20136
+:100B000080625BC0C830F0E7DF0721F48091F2011A
+:100B1000806453C0C93080E7D80721F48091F20186
+:100B200080684BC0CA30E0E7DE0729F48091F2010B
+:100B30008460886042C0CB30F0E7DF0721F4809109
+:100B4000F2018E7F3AC0CC3080E7D80721F4809143
+:100B5000F2018D7F32C0CD30E0E7DE0721F48091D5
+:100B6000F2018B7F2AC0CE30F0E7DF0719F48091C5
+:100B7000F20122C0CF3080E7D80721F48091F20142
+:100B80008F7E1BC0C031E0E7DE0721F48091F201C7
+:100B90008F7D13C0C131F0E7DF0721F48091F201AE
+:100BA0008F7B0BC0C231D04721F48091F2018F7747
+:100BB00004C08091F2018B7F877F8093F201809146
+:100BC000F2010E94891557C0C115E0E7DE0779F0F0
+:100BD000C130D047A1F081E0809351018093520150
+:100BE000C801DF91CF911F910F910C940105F8017D
+:100BF0008281882309F43FC00E9407053CC0F801A8
+:100C000082818823C1F18091CD0181608093CD01E3
+:100C100032C0CB3380E7D807A1F4F8018281882362
+:100C200021F01092510182E016C080915101811192
+:100C300006C086E20E940C0B86E20E94DF0B82E077
+:100C400018C0CC33D04739F6F8018281882331F0BF
+:100C50001092520180E20E942E0C0DC08091520130
+:100C6000811106C087E20E940C0B87E20E94DF0B15
+:100C700080E20E94350C80E0DF91CF911F910F91AF
+:100C800008950C94960308950C9443060C9444061E
+:100C900026E0729FF001112444E5849FE00DF11DD0
+:100CA0001124E60FF11DEE0FFF1FE154FE4F859159
+:100CB00094910E94EA07811560E49607B0F58115CA
+:100CC00070E3970708F0E6C0803E9105D8F4803CB9
+:100CD000910508F06CC0883A910578F4853A910541
+:100CE00008F06BC08130910509F460C108F417C1A8
+:100CF0008430910508F05AC112C18D3B910508F46A
+:100D000067C00DC18F3F910509F048F4803F910500
+:100D100008F0B5C0883E910508F448C100C18115AE
+:100D200020E2920708F0ADC00895811543E59407CD
+:100D300090F4811562E5960708F0D0C0811571E541
+:100D4000970708F0C6C0811520E5920708F0A5C0F6
+:100D50009F70906A0895811545E59407D8F4811530
+:100D600064E5960708F0D0C0482F4695469570E296
+:100D7000479FA00111248370992721E030E0B90139
+:100D800002C0660F771F8A95E2F7CB01842B952B63
+:100D90009A680895811576E5970708F4BAC09C0112
+:100DA00030562115304108F0BAC09F70B6C0FC0122
+:100DB000EE0FFF1FE55CFF4F6AC0853A910509F40D
+:100DC000B1C0863A910509F0B0C082E890E4089578
+:100DD000883A910509F4ACC0893A910509F4ABC091
+:100DE0008A3A910509F4AAC08B3A910509F4A9C081
+:100DF0008C3A910509F4A8C08B3B910509F4A7C072
+:100E00008C3B910509F4A6C08D3A910509F4A5C063
+:100E1000803B910509F4A4C08E3A910509F4A3C062
+:100E20008F3A910509F4A2C0813B910509F4A1C054
+:100E3000823B910509F4A0C0833B910509F49FC052
+:100E4000843B910509F49EC0853B910509F49DC042
+:100E5000863B910509F49CC0873B910509F49BC032
+:100E6000883B910509F49AC0893B910509F499C022
+:100E70008A3B910509F498C080E094E40895906558
+:100E80000895FC01FF70EE0FFF1FE554FE4F8591A2
+:100E9000949108959927906C0895482F437021E00C
+:100EA00030E002C0220F331F4A95E2F73C68AC01E4
+:100EB00064E0569547956A95E1F74370342B8F703F
+:100EC0008695869560E2869FC0011124822B932B24
+:100ED0000895982F8827816F906A0895482F469526
+:100EE000469570E2479FA00111248370992721E065
+:100EF00030E0B90102C0660F771F8A95E2F7CB0197
+:100F0000842B952B9C680895982F8827846F906A6E
+:100F100008958F719927982F88279062089580E00F
+:100F200090E0089581E890E4089583E890E40895BE
+:100F300082EE94E4089589EE94E408958AEE94E4B0
+:100F4000089585EB94E4089586EB94E4089583EB8B
+:100F500094E4089584EB94E4089587EB94E4089571
+:100F60008CEC94E408958DEC94E4089583E895E482
+:100F700008958AE895E4089582E995E4089584E95E
+:100F800095E4089581E296E4089583E296E4089555
+:100F900084E296E4089585E296E4089586E296E474
+:100FA000089587E296E408958AE296E40895089504
+:100FB00096E0799FF001112494E5899FE00DF11DE1
+:100FC0001124E60FF11DEE0FFF1FE154FE4F859136
+:100FD000949108958238910549F1B0F481339105D7
+:100FE00009F458C048F48932910509F44EC08A3298
+:100FF000910509F454C008958533910509F440C062
+:101000008933910599F00895833E910529F138F4CB
+:10101000803E910591F0823E9105A1F00895863EB3
+:101020009105F9F0873E910531F108952091F20183
+:1010300020FD3AC021FD38C008958091F20180FD65
+:1010400035C032C08091F20182FF32C08091F2013E
+:1010500084FD30C083EE39C08091F20182FD28C04A
+:10106000F5CF8091F20183FF27C08091F20184FDCA
+:1010700021C087EE2AC08091F20183FD1DC0F5CF0B
+:101080008091F20185FD1AC01BC08091F20185FD9F
+:1010900017C014C08091F20186FD14C015C0809164
+:1010A000F20186FD11C00EC080EE0FC089E30DC0B5
+:1010B00082EE0BC080E009C086EE07C089E205C061
+:1010C00085E303C08AE201C081E390E008950895BA
+:1010D0000F931F93CF93FB012281211102C0C1E026
+:1010E00041C08C01C0916001C11125C0843190477D
+:1010F000B1F70E94670881E0809360010E94DE15CD
+:1011000090935F0180935E011092530110925501FC
+:1011100010925401109257011092560110925901E9
+:101120001092580110925B0110925A0110925D01C9
+:1011300010925C0117C080915E0190915F010E9446
+:10114000EA15883C910558F690915301E92FF0E09B
+:10115000EE0FFF1FEC5AFE4F118300839F5F9093A9
+:101160005301C0E08C2FCF911F910F910895569895
+:101170005E9825982D9826982E9827982F988FEF6F
+:1011800090E0909389008093880090938B008093E7
+:101190008A0090938D0080938C00259A2D9A2FEFD2
+:1011A00080E792E0215080409040E1F700C00000CD
+:1011B000269A2E9A2FEF80E792E0215080409040AF
+:1011C000E1F700C00000279A2F9A2FEF80E792E006
+:1011D000215080409040E1F700C0000025982D98F4
+:1011E0002FEF80E792E0215080409040E1F700C06F
+:1011F000000026982E982FEF80E792E02150804043
+:101200009040E1F700C0000027982F9856985E980C
+:1012100025982D9826982E9827982F98089589EA32
+:101220008093800089E08093810024982C983F98D7
+:101230008AB18F748AB96E98479A8BB1806B8BB9DB
+:10124000769A0E94B7080C94E30480E2809301012F
+:101250008091610181110EC00E941C0381E0809386
+:1012600061012FEF83ED90E3215080409040E1F742
+:1012700000C0000080E40E942203809301018111DC
+:101280002EC00E944C0380930101811128C00E944E
+:101290004C0380930101811122C08FE30E944C0313
+:1012A0008093010181111BC00E94440380E40E94CD
+:1012B000220380930101811112C08CE00E944C0333
+:1012C0008093010181110BC00E944C0380930101A6
+:1012D000811105C08FE30E944C03809301010E949D
+:1012E0004403809101010895282F882339F090E06C
+:1012F0002A3010F44D9608950697089587E290E0FD
+:101300000895FF920F931F93CF93DF93813020E8CE
+:10131000920708F44DC0FB012281222309F448C042
+:10132000EC01DF7780916201813079F050F08230FA
+:10133000C1F482EE0E940C0B87E50E940C0B87E53E
+:101340000EC082EE0E940C0B0CC080EE0E940C0BB3
+:1013500081EE0E940C0B88E10E940C0B88E10E9438
+:10136000DF0B0CE010E0CE01002E02C096958795B1
+:101370000A94E2F78F700E947409F82E0E940C0BF9
+:101380008F2D0E94DF0B045011090C3FFFEF1F0748
+:1013900051F780916201813029F010F0823041F4E0
+:1013A00082EE04C080EE0E94DF0B81EE0E94DF0B14
+:1013B00081E0DF91CF911F910F91FF90089590935D
+:1013C0006801809367010895E0916701F0916801D9
+:1013D000309721F00190F081E02D099480E008958C
+:1013E000E0916701F0916801309721F00280F3816C
+:1013F000E02D09940895E0916701F091680130971C
+:1014000021F00480F581E02D099408952091650173
+:10141000309166018217930771F090936601809373
+:101420006501E0916701F0916801309721F0068035
+:10143000F781E02D099408952091630130916401B2
+:101440008217930771F09093640180936301E09198
+:101450006701F0916801309721F00084F185E02D5B
+:101460000994089508950C94320A0E94D5150E949B
+:1014700098030C945B16CF92DF92EF92FF920F933A
+:101480001F93CF93DF93CDB7DEB72B970FB6F894AA
+:10149000DEBF0FBECDBF0E94BF038AE6C82E81E02B
+:1014A000D82E00E010E0E02E802F0E94AD04F6015F
+:1014B00041916F01F42EF826B1F40F5F1F4F0E30EB
+:1014C000110589F78FEF89838A831B820E94DE15BD
+:1014D0008160782F9D838C8349815A816B818D81B6
+:1014E0000E94DE0A40C09091CD0191FF04C08B871D
+:1014F0000E94B3048B8520E030E04F2D50E0922F06
+:10150000BA01022E02C0759567950A94E2F760FF52
+:1015100024C02E83EF8221E030E0690102C0CC0CB0
+:10152000DD1C9A95E2F790E08C219D21892B09F42E
+:1015300020E028870E94DE158160782F9A878987AE
+:101540004E815F8168858A850E94DE0AF801E6592E
+:10155000FE4F8081C826C08206C02F5F3F4F2630D5
+:10156000310569F6AACF0E94F317109169010E9414
+:10157000E4091817A1F00E94E409809369012B96F1
+:101580000FB6F894DEBF0FBECDBFDF91CF911F9194
+:101590000F91FF90EF90DF90CF900C9446062B9622
+:1015A0000FB6F894DEBF0FBECDBFDF91CF911F9174
+:1015B0000F91FF90EF90DF90CF900895CF93DF933E
+:1015C000CDB7DEB72B970FB6F894DEBF0FBECDBFF9
+:1015D0004F83588769877A878B87DE01119686E06B
+:1015E000FD0111928A95E9F785E0FE013796019099
+:1015F0000D928A95E1F749815A816B817C818D81B9
+:101600009E810E9432112B960FB6F894DEBF0FBE5A
+:10161000CDBFDF91CF910895CF93882309F4CDC03A
+:10162000C82F823859F40E94E40981FDC6C089E3BD
+:101630000E940C140E94D91489E30CC0833879F4F9
+:101640000E94E40980FDB9C083E50E940C140E9449
+:10165000D91483E50E944E14CF910C94D914843888
+:1016600059F40E94E40982FDA8C087E40E940C148A
+:101670000E94D91487E4EECF8CEF8C0F813A48F4A6
+:101680008C2F0E943D1A811198C08C2F0E940C143F
+:10169000E3CF80E28C0F883048F4C77081E001C04E
+:1016A000880FCA95EAF70E949214D6CF8BE58C0F6B
+:1016B000833078F4C53A29F0C63A31F083E890E0F7
+:1016C00005C081E890E002C082E890E0CF910C94E0
+:1016D000060A88E58C0F853108F06FC0C83A61F1C1
+:1016E000C93A69F1CA3A71F1CB3A79F1CC3A81F150
+:1016F000CB3B89F1CC3B91F1CD3A99F1C03BA1F1C3
+:10170000CE3AA9F1CF3AB1F1C13BB9F1C23BC1F137
+:10171000C33BC9F1C43BD1F1C53BD9F1C63BE1F1B3
+:10172000C73BE9F1C83BF1F1C93BF9F1CA3B09F408
+:101730003FC080E090E03EC082EE90E03BC089EE8A
+:1017400090E038C08AEE90E035C085EB90E032C082
+:1017500086EB90E02FC083EB90E02CC084EB90E010
+:1017600029C087EB90E026C08CEC90E023C08DEC84
+:1017700090E020C083E891E01DC08AE891E01AC0A3
+:1017800082E991E017C084E991E014C081E292E01F
+:1017900011C083E292E00EC084E292E00BC085E2C9
+:1017A00092E008C086E292E005C087E292E002C0C3
+:1017B0008AE292E0CF910C941C0ACF91089588237D
+:1017C00009F44BC0823859F40E94E40981FF45C0F6
+:1017D00089E30E940C140E94D91489E30CC0833859
+:1017E00071F40E94E40980FF38C083E50E940C1464
+:1017F0000E94D91483E50E944E140C94D9148438A5
+:1018000059F40E94E40982FF28C087E40E940C1466
+:101810000E94D91487E4EFCF9CEF980F913A58F3C8
+:1018200090E2980F983050F4877091E001C0990FC2
+:101830008A95EAF7892F0E949814DFCF9BE5980FCD
+:10184000933020F480E090E00C94060A885A8531A9
+:1018500020F480E090E00C941C0A0895882321F085
+:101860000E9492140C94D9140895882321F00E94A8
+:1018700098140C94D91408957F928F929F92AF92EE
+:10188000BF92CF92DF92EF92FF920F931F93CF936D
+:10189000DF931F92CDB7DEB77C01C62E772EFC01F9
+:1018A000058102950F70128111110E94AF140E94E0
+:1018B0000514882379F0112369F080E28C0D8830BB
+:1018C00048F082E00E94EE130E94051491E0D82EA9
+:1018D000D92601C0D12CE72DE295EF70F0E0EA5A4D
+:1018E000FF4F0C947F23872D807F072D0F70882357
+:1018F00011F00295007F112389F0002309F490C1B3
+:1019000080E28C0D883020F4802F0E94921403C056
+:10191000802F0E94A2140E94D91482C18C2D0E9493
+:10192000DF0B002309F495C180E28C0D883020F490
+:10193000802F0E94981403C0802F0E94A8140E9438
+:10194000D91487C1972D907F872D8F70903211F019
+:101950008295807FCC2021F0F1E0CF16B1F01EC03F
+:10196000112349F0002309F414C1013009F011C119
+:101970000E94C2146EC1002319F0013009F469C13C
+:1019800089830E94C51489810AC1112321F0023084
+:1019900008F05FC1FEC001115CC101C1112321F03B
+:1019A000002309F4F6C03CC1002309F4F8C03EC18D
+:1019B000872D86958695837090E0009719F00197A2
+:1019C00061F047C1112321F08C2D972D937002C037
+:1019D00080E090E00E94060A3CC1112321F08C2D8A
+:1019E000972D937002C080E090E00E941C0A31C1E4
+:1019F0008C2D112319F00E94FB1602C00E94631760
+:101A00000E94E81726C1872D837009F052C011117A
+:101A100020C18C2D829586958770880F880F9C2D0C
+:101A20009F70892E912CA12CB12C082E04C0880CFB
+:101A3000991CAA1CBB1C0A94D2F7C4FE14C00FE068
+:101A400010E020E030E0B901A80104C0440F551FA8
+:101A5000661F771F8A95D2F7CB01BA016095709502
+:101A60008095909503C060E070E0CB01272D26950E
+:101A70002695237030E02230310569F0233031059E
+:101A800089F0682979298A299B292130310571F04B
+:101A90000E947A12DEC0682979298A299B290E942E
+:101AA0009612D7C00E947A12C501B4010E945E123C
+:101AB000D0C0112319F0872D817001C0869588232D
+:101AC00009F4C7C08C2D829586958770880F880F82
+:101AD0009C2D9F70892E912CA12CB12C082E04C016
+:101AE000880C991CAA1CBB1C0A94D2F7C4FE14C013
+:101AF0000FE010E020E030E0B901A80104C0440F7D
+:101B0000551F661F771F8A95D2F7CB01BA016095E2
+:101B100070958095909503C060E070E0CB01272D13
+:101B2000269526952370422F50E04230510569F0EA
+:101B30004330510589F0682979298A299B29413048
+:101B4000510571F00E94541384C0682979298A29AB
+:101B50009B290E9470137DC00E945413C501B401DB
+:101B60000E94381376C08C2D90E0FC01E05EF109F4
+:101B7000E531F10508F050C0EA59FF4F0C947F237E
+:101B80000C2D0F70872D8F71112331F00E94D1120F
+:101B9000802F0E942E0C5DC00E94F212802F0E94A6
+:101BA000350C57C0112339F0011153C0872D8F71A7
+:101BB0000E9417134EC0023008F04BC0F7CF11231C
+:101BC00039F0872D8F710E94D11243C01123C9F3C0
+:101BD000872D8F710E94F2123CC0112329F0872DAE
+:101BE0008F710E94BC1235C00E94B21232C0112304
+:101BF00051F0172D1F71812F0E94D11263E0812FA8
+:101C00000E94E51326C081E00E94EE13023008F125
+:101C100082E00E94EE131DC0112331F0002389F2EF
+:101C20008C2D0E940C0B15C0002391F28C2D0E946C
+:101C3000DF0B0FC0472D4F706C2DC7010E94B404FD
+:101C40000E94D61106C0472D4F706C2DC7010E940F
+:101C5000D707DD20F9F00E94E11380FD1BC0F701DA
+:101C600012820E94DB130E94D112C7010E94590EFA
+:101C70000E94DB130F90DF91CF911F910F91FF9086
+:101C8000EF90DF90CF90BF90AF909F908F907F901C
+:101C90000C94F2120F90DF91CF911F910F91FF9052
+:101CA000EF90DF90CF90BF90AF909F908F907F90FC
+:101CB00008950F931F93CF93DF93EC01888199814F
+:101CC0002B813C81232BB9F09F3F11F48F3F99F07A
+:101CD000CE010E941405882371F0688179818A8180
+:101CE0000E94D7138C010E948C130E945312B801DA
+:101CF000CE010E943C0CDF91CF911F910F9108956E
+:101D00000E94AF140E94BF140E9484140E94D91430
+:101D10000E9499180E94E81780E090E00E94060A4D
+:101D200080E090E00C941C0A0E949F140C94800E9A
+:101D30000E94CC13292F22952F7030E02C303105D2
+:101D40004CF42A3031056CF422503109223031052F
+:101D5000A8F407C02C30310569F02F30310551F05F
+:101D60000DC0803F69F018F4803E40F409C0843F04
+:101D700029F406C093FB882780F9089580E0089530
+:101D800081E00895CF93DF9300D000D01F92CDB7AC
+:101D9000DEB70F900F900F900F900F90DF91CF91C3
+:101DA0000895CF93DF9300D000D000D0CDB7DEB739
+:101DB00026960FB6F894DEBF0FBECDBFDF91CF9150
+:101DC00008951F93CF93DF93C091780116E080911F
+:101DD0007901C81799F0D0E01C9FF0011D9FF00D0C
+:101DE0001124E658FE4F40815181628173818481C4
+:101DF00095810E94D10E2196C770E9CFDF91CF91D6
+:101E00001F9108954091AA015091AB016091AC01DE
+:101E10007091AD018091AE019091AF010C94D10E03
+:101E20008091AF0182958F7009F054C08091AC0110
+:101E3000882309F44FC080917801A09179016091C5
+:101E4000AA017091AB014091AD015091AE01B6E095
+:101E50008A1709F43FC090E041155105C1F17F3F59
+:101E600011F46F3FA1F1B89FF001B99FF00D11245B
+:101E7000E658FE4F218172132AC02081621327C0C9
+:101E80002281211124C0238134812417350710F4C5
+:101E900021503109241B350B283C3105C0F4209119
+:101EA000AF012F7020612093AF0126E0289FF00141
+:101EB000299FF00D1124E158FE4F80818F708061C1
+:101EC00080838AEA91E00E94590E0C94E10E0196FB
+:101ED0008770BECF0895CF92DF92EF92FF920F935B
+:101EE0001F93CF93DF93CDB7DEB762970FB6F89409
+:101EF000DEBF0FBECDBF8C0185E0F801DE011D966F
+:101F000001900D928A95E1F7D8014C9111965C9160
+:101F1000119712966C9112971396CD90DC901497AE
+:101F20003091AA017091AB018091AD019091AE0109
+:101F3000009709F46BC17F3F19F43F3F09F466C174
+:101F4000E090AC01EE2009F4C0C02091AF01C816AA
+:101F5000D90628F0F601E81BF90BCF0104C08095E3
+:101F600090958C0D9D1DFF24F394883C910578F08D
+:101F7000F12C207F09F0C6C07C2DD98AC88A8989B6
+:101F80000E94C20E8AEA91E00E94590EB1C0822FCF
+:101F9000807F09F046C0751314C0341312C061115C
+:101FA00010C02F7020612093AF010E94020F8AEAB7
+:101FB00091E00E94590E8091AF01D80115968C9343
+:101FC0002EC0CD2819F15F3F11F44F3FF9F0F62EE6
+:101FD00061111CC0809178012091790136E082174F
+:101FE00009F45AC090E0389FF001399FF00D112498
+:101FF000E658FE4F7181571306C07081471303C026
+:102000007281711103C001968770E9CFF62E6623A5
+:1020100009F418C18091AF0181608093AF01F12C68
+:1020200011C1751308C0341306C0611104C080913A
+:10203000AF01D801C3C04D875E878D859E856A8BB1
+:102040000E94980E6A898823E1F16623D1F12091DC
+:10205000AF01822F82958F7090E0029774F080918B
+:10206000AA019091AB0198878F831986DB86CA8677
+:102070002C87CE0107960E94590E86E0F801AAEA45
+:10208000B1E001900D928A95E1F70E94100F0E9435
+:10209000020FFF24F394D6C04D875E878D859E8501
+:1020A0000E94CC13292F22952F7030E02230310569
+:1020B0000CF0BCC09F7009F0B6C0805E883008F498
+:1020C000C1C0C8010E94590EE4CFC816D90608F451
+:1020D00053C0F601E81BF90BCF01883C910508F4C9
+:1020E00050C0F12C7C2DD98AC88A89890E94C20EE1
+:1020F000EAEAF1E086E0DF011D928A95E9F70E94A5
+:10210000020FA0C0751314C0341312C0611110C0A7
+:102110008091AF01F8018583C8010E94590E86E0C5
+:10212000EAEAF1E0DF011D928A95E9F7FE2C8AC008
+:102130004D875E878D859E856A8B0E94980E6A8981
+:10214000882309F4BECF662309F4BBCF2091AF01E9
+:10215000822F82958F7090E002970CF48ECF809141
+:10216000AA019091AB019A8389831B82DD82CC8284
+:102170002E83CE0101967FCF809590958C0D9D1D6D
+:10218000ACCFF62E662309F49CCF75132EC0341302
+:102190002CC02091AF0120FD1FC0822F82958F702F
+:1021A000D9F0D80115962C9315978F3049F08F5F91
+:1021B000982F9295907F822F8F70892B15968C93F4
+:1021C000C8010E94590E86E0F801AAEAB1E0019028
+:1021D0000D928A95E1F793CF86E0F801AAEAB1E083
+:1021E00001900D928A95E1F72DC04D875E878D8510
+:1021F0009E850E94980E811140CF8091AF01816031
+:102200008093AF01C8010E94590E1CC0662309F4D7
+:1022100058CF4D875E878D859E850E94980E8823B6
+:1022200009F44FCF2ACF811148CF0CC0243031059B
+:102230000CF047CF9F7009F440CFF8019581907F53
+:1022400009F03BCF8F2D62960FB6F894DEBF0FBE1C
+:10225000CDBFDF91CF911F910F91FF90EF90DF9055
+:10226000CF9008951F93CF93DF93CDB7DEB72C9710
+:102270000FB6F894DEBF0FBECDBF4F835887698776
+:102280007A878B879C87CE0107960E946B0F8823E5
+:1022900069F08F8198852A853B85232BF1F19F3F3B
+:1022A00009F063C08F3F09F060C037C086E0FE01CF
+:1022B0003796DE01119601900D928A95E1F76F81B4
+:1022C0007885EA85FB85309741F17F3F11F46F3FB8
+:1022D00021F12091790130E0C90101968770992799
+:1022E0004091780150E08417950709F447C069834D
+:1022F0007A83FD83EC8396E0929FD001939FB00D8B
+:102300001124A658BE4FFE01319601900D929A9568
+:10231000E1F7809379010E94E10E16E08091780147
+:10232000909179018917C1F1189FC0011124865835
+:102330009E4F0E946B0F882379F1E09178011E9FD8
+:10234000F0011124E658FE4F408151816281738172
+:10235000848195810E94D10E8091780190E0019650
+:102360008770992780937801D9CF4F8158856985E7
+:102370007A858B859C850E94D10ECFCF0E94940ECA
+:102380001092790110927801EAEAF1E086E0DF012B
+:102390001D928A95E9F7C1CF2C960FB6F894DEBF4F
+:1023A0000FBECDBFDF91CF911F910895EF92FF92A5
+:1023B0000F931F93CF93DF938C01892B09F46CC08B
+:1023C000F12CEE24E394E8012196F80184918437FE
+:1023D00040F4843008F051C0813081F0823019F12E
+:1023E0005BC0853709F444C0A8F19CE7980F90378B
+:1023F00008F052C08F770E94DF0B41C00E5F1F4F65
+:10240000FE01C49180E28C0F883048F4C7708E2D95
+:1024100001C0880FCA95EAF70E94B21414C08C2F2D
+:102420000E940C0B2DC00E5F1F4FFE01C49180E275
+:102430008C0F883058F4C7708E2D01C0880FCA9554
+:10244000EAF70E94B8140E94D9141AC08C2F0E9477
+:10245000DF0B16C00E5F1F4FFE01C491CC2381F02D
+:102460008FE99FE00197F1F700C00000C150F6CF5F
+:102470000E5F1F4FFE01F49003C00E940C0B8E01F3
+:102480008F2D882309F49FCFEFE9FFE03197F1F713
+:1024900000C000008150F5CFDF91CF911F910F91C7
+:1024A000FF90EF90089508956093B4017093B50183
+:1024B0008093B6019093B7010C94800E0F931F93F5
+:1024C0000091B4011091B5012091B6013091B7018E
+:1024D000DC01CB01802B912BA22BB32B8093B40179
+:1024E0009093B501A093B601B093B7011F910F91DE
+:1024F0000C94800E0F931F930091B4011091B501BD
+:102500002091B6013091B701DC01CB0180239123EA
+:10251000A223B3238093B4019093B501A093B60195
+:10252000B093B7011F910F910C94800E0F931F93DE
+:102530000091B4011091B5012091B6013091B7011D
+:10254000DC01CB0180279127A227B3278093B40118
+:102550009093B501A093B601B093B7011F910F916D
+:102560000C94800E1092B0011092B1011092B20141
+:102570001092B3010C94800E41E050E060E070E0F6
+:1025800004C0440F551F661F771F8A95D2F74093EA
+:10259000B0015093B1016093B2017093B3010C94F8
+:1025A000800E41E050E060E070E004C0440F551F31
+:1025B000661F771F8A95D2F78091B0019091B10183
+:1025C000A091B201B091B301482B592B6A2B7B2B00
+:1025D0004093B0015093B1016093B2017093B30185
+:1025E0000C94800E41E050E060E070E004C0440FC5
+:1025F000551F661F771F8A95D2F7409550956095B5
+:1026000070958091B0019091B101A091B201B0910B
+:10261000B301482359236A237B234093B00150938D
+:10262000B1016093B2017093B3010C94800E41E04C
+:1026300050E060E070E004C0440F551F661F771F34
+:102640008A95D2F78091B0019091B101A091B20129
+:10265000B091B301482759276A277B274093B001DF
+:102660005093B1016093B2017093B3010C94800E4A
+:102670000F931F930091B0011091B1012091B2010D
+:102680003091B301DC01CB01802B912BA22BB32B1A
+:102690008093B0019093B101A093B201B093B301C4
+:1026A0001F910F910C94800E0F931F930091B00116
+:1026B0001091B1012091B2013091B301DC01CB0145
+:1026C00080239123A223B3238093B0019093B1017F
+:1026D000A093B201B093B3011F910F910C94800E9F
+:1026E0000F931F930091B0011091B1012091B2019D
+:1026F0003091B301DC01CB0180279127A227B327BA
+:102700008093B0019093B101A093B201B093B30153
+:102710001F910F910C94800E0895CF92DF92EF924B
+:10272000FF920F931F93CF93DF938C01C090B4015E
+:10273000D090B501E090B601F090B7018091B00162
+:102740009091B101A091B201B091B301C82AD92AE8
+:10275000EA2AFB2ACFE1D0E0D701C6010C2E04C043
+:10276000B695A795979587950A94D2F780FF06C0EE
+:10277000B8018C2F0E944806019721F4219760F739
+:1027800080E001C08C2FDF91CF911F910F91FF90BE
+:10279000EF90DF90CF900895CF93DF93EC010E94EC
+:1027A0008D13BE010E944806DF91CF910895CB01A1
+:1027B0000E94CC1308958091B801859585958595E3
+:1027C00008958091B8018770089598E0899F9001DD
+:1027D0001124262B2093B8010C94D1122091B8011A
+:1027E000809582238093B801982F977069F430E028
+:1027F000482F552747FD50952417350729F0859513
+:10280000859585950C94F21208959091B801977072
+:1028100081E009F480E0089590911501992321F059
+:1028200090910201911109C020910301309104019E
+:10283000F90132969FEF40E01FC0982F969596952C
+:1028400096959F3050F5E0910301F0910401E90F56
+:10285000F11D877021E030E0A90102C0440F551F2F
+:102860008A95E2F7CA019181892B818308959F3F60
+:1028700039F04F5F4E3041F051915813F8CF0DC0F1
+:102880005111F7CF942FF5CF9F3F39F0F901E90FA0
+:10289000F11D97FDFA958283089508959091150191
+:1028A000992321F090910201911109C02091030117
+:1028B00030910401F9013296205F3F4F1FC0982FDD
+:1028C0009695969596959F30F0F4E0910301F091DE
+:1028D0000401E90FF11D877021E030E0A90102C079
+:1028E000440F551F8A95E2F7CA018095918189238B
+:1028F000818308953196E217F30729F090819813A8
+:10290000F9CF1082F7CF089581E090E0E0910301C4
+:10291000F0910401E80FF91F1082019680319105B2
+:10292000A9F708959091CC01892B8093CC0108954B
+:1029300080959091CC0189238093CC0108951092C9
+:10294000CC0108959091CB01892B8093CB01089500
+:1029500080959091CB0189238093CB0108951092AB
+:10296000CB0108959091CA01892B8093CA010895E3
+:1029700080959091CA0189238093CA01089510928D
+:10298000CA0108958093B90108951092B90108957C
+:102990008091030190910401FC0131969C01205F1C
+:1029A0003F4F80E0919191118F5FE217F307D1F7CC
+:1029B0000895E0910301F09104018091CC0180839E
+:1029C000E0910301F091040190818091CB01892B6A
+:1029D0008083E0910301F091040190818091CA010C
+:1029E000892B80838091B901882361F0E0910301F4
+:1029F000F09104019081892B80830E94C814811179
+:102A00001092B90180910301909104010C94F00996
+:102A1000CF92DF92EF92FF926C01EE24FF24C1145B
+:102A2000D104E104F10421F0C701B60120E101C0A5
+:102A300020E0C72ED82EE92EFF24C114D104E104D2
+:102A4000F10419F0285FC701B6016B017C0154E065
+:102A5000F694E794D794C7945A95D1F7C114D1044A
+:102A6000E104F10419F02C5FC701B6016B017C0190
+:102A700042E0F694E794D794C7944A95D1F7C114ED
+:102A8000D104E104F10419F02E5FC701B601DC01A5
+:102A9000CB01B695A79597958795892B8A2B8B2B7C
+:102AA00009F02F5F822FFF90EF90DF90CF90089575
+:102AB0006DEE7EEF80E090E00E94B82360E082E05F
+:102AC00090E00E94A72360E083E090E00E94A723AB
+:102AD00060E084E090E00E94A72360E085E090E061
+:102AE0000C94A72380E090E00E94A12321E08D3E7A
+:102AF0009E4F09F020E0822F089582E090E00C9430
+:102B0000992383E090E00C94992384E090E00C9466
+:102B10009923682F84E090E00C94A7238091F8011A
+:102B2000843039F11092CE0120E488E190E00FB6B4
+:102B3000F894A895809360000FBE2093600080E019
+:102B40000E94460683B7817F846083BF83B781601C
+:102B500083BF7894889583B78E7F83BF0FB6F89430
+:102B6000A895809160008861809360001092600059
+:102B70000FBE08950895CF930E94AC030E94BF0337
+:102B80000E94BA15C0E08C2F0E94AD04811104C0D0
+:102B9000CF5FCE30C1F701C081E0CF9108950E9490
+:102BA000940E0E94E4090C94460682E084BD93E0F2
+:102BB00095BD9AEF97BD80936E0008952FB7F89456
+:102BC0008091CF019091D001A091D101B091D2011B
+:102BD0002FBF0895CF92DF92EF92FF920F931F9332
+:102BE0002FB7F8944091CF015091D0016091D1015D
+:102BF0007091D2012FBF6A017B01EE24FF248C016A
+:102C000020E030E0C016D106E206F30610F4415091
+:102C100051099A01281B390BC9011F910F91FF908F
+:102C2000EF90DF90CF9008951F920F920FB60F9202
+:102C300011248F939F93AF93BF938091CF01909175
+:102C4000D001A091D101B091D2010196A11DB11D79
+:102C50008093CF019093D001A093D101B093D20182
+:102C6000BF91AF919F918F910F900FBE0F901F90CA
+:102C700018950E943C1FF8942FEF87EA91E62150A7
+:102C800080409040E1F700C0000087E090EBDC015D
+:102C90008093010290930202A0930302B093040276
+:102CA0009CE088E10FB6F894A895809360000FBE71
+:102CB00090936000FFCF0E947215811102C00E94A4
+:102CC00058150E947D158093CD010E94851590E0D6
+:102CD0009093F3018093F20187FB882780F980931A
+:102CE00002010E948115682F70E080E090E00C9452
+:102CF00054128091D50180FF0BC06091080185E0DE
+:102D0000689FB001112475956795759567952BC0DF
+:102D100081FF09C06091080185E0689FB00111241E
+:102D20007595679520C082FF07C06091080185E016
+:102D3000689FB001112417C09091D6019923D1F05A
+:102D400060910701961788F72091080185E0289F78
+:102D500090011124929FA001939F500D112470E0C7
+:102D6000CA010E946B236038710540F4611571053A
+:102D700039F002C065E070E0862F08958FE708956E
+:102D800081E008958091D50180FF08C0609106011F
+:102D900070E0759567957595679521C081FF06C0B0
+:102DA0006091060170E07595679519C082FF04C0B7
+:102DB0006091060170E010C09091D6019923C1F096
+:102DC000609105019617A0F780910601899FC001C7
+:102DD000112470E00E946B236038710528F461159E
+:102DE000710521F0862F08958FE7089581E00895F9
+:102DF00061E070E0F4CF803F21F40E947916819564
+:102E000004C0813F29F40E9479168093D901089566
+:102E1000823F21F40E947916819504C0833F29F4F2
+:102E20000E9479168093D8010895893F19F40E9471
+:102E3000C21605C08A3F31F40E94C2168195809364
+:102E4000DA0108958B3F21F40E94C216819504C0D7
+:102E50008C3F29F40E94C2168093DB010895843FC1
+:102E600021F48091D701816017C0853F21F48091C2
+:102E7000D701826011C0863F21F48091D701846020
+:102E80000BC0873F21F48091D701886005C0883F3F
+:102E900031F48091D70180618093D70108958D3FEF
+:102EA00021F48091D50181600BC08E3F21F4809187
+:102EB000D501826005C08F3F29F48091D5018460DF
+:102EC0008093D5010895803F39F48091D90187FF1F
+:102ED0006CC01092D90169C0813F29F48091D90159
+:102EE0001816BCF362C09091D801823F29F497FF75
+:102EF0005CC01092D80159C0833F19F41916CCF365
+:102F000054C0893F41F48091DA0118160CF04DC08D
+:102F10001092DA014AC08A3F29F48091DA0187FFD2
+:102F200044C0F6CF8B3F39F48091DB0187FF3DC071
+:102F30001092DB013AC08C3F29F48091DB01181616
+:102F4000BCF333C0843F21F48091D7018E7F17C03A
+:102F5000853F21F48091D7018D7F11C0863F21F4F8
+:102F60008091D7018B7F0BC0873F21F48091D701DF
+:102F7000877F05C0883F31F48091D7018F7E809391
+:102F8000D70113C08D3F21F48091D5018E7F0BC0F6
+:102F90008E3F21F48091D5018D7F05C08F3F29F4AC
+:102FA0008091D5018B7F8093D5018091D8018111CB
+:102FB0000EC08091D90181110AC08091DA0181117E
+:102FC00006C08091DB01811102C01092D6010895E4
+:102FD00087ED91E00E94FB090E94DE159093D401D9
+:102FE0008093D30108951F93CF93DF938091D301F2
+:102FF0009091D4010E94EA15AC019091D6019923D9
+:1030000021F02091090130E006C020910A018AE0F8
+:10301000289F900111244217530708F486C080911D
+:10302000D801C091D901D091DA011091DB01811151
+:1030300007C0C11176C0D11174C0111172C075C022
+:103040009F3F19F09F5F9093D601181624F40E94B9
+:1030500079168093D8018091D80187FF05C00E941E
+:10306000791681958093D8011C1624F40E94791654
+:103070008093D9018091D90187FF05C00E947916FC
+:1030800081958093D9016091D801662339F1C0916F
+:10309000D901CC2319F1772767FD7095872F972FDA
+:1030A0000E94722223E333E343E35FE30E94D622CC
+:1030B0000E943A226093D8016C2F772767FD7095A4
+:1030C000872F972F0E94722223E333E343E35FE3CA
+:1030D0000E94D6220E943A226093D9011D1624F440
+:1030E0000E94C2168093DA018091DA0187FF05C041
+:1030F0000E94C21681958093DA01111624F40E9471
+:10310000C2168093DB018091DB0187FF05C00E941E
+:10311000C21681958093DB01DF91CF911F910C94B2
+:10312000E8179F3F09F08ECF96CFDF91CF911F9187
+:103130000895E7EDF1E085E0DF011D928A95E9F75A
+:103140001092D6011092D5010895833081F128F4B0
+:10315000813059F08230D1F00895853009F449C0AA
+:10316000B8F1863009F456C0089580910A01262FDF
+:1031700030E0280F311D2F3F310524F4680F609394
+:103180000A0108958FEF80930A0108958091090143
+:10319000262F30E0280F311D2F3F310524F4680F12
+:1031A0006093090108958FEF80930901089580913C
+:1031B0000801262F30E0280F311D2F3F310524F460
+:1031C000680F6093080108958FEF809308010895B8
+:1031D00080910701262F30E0280F311D2F3F310548
+:1031E00024F4680F6093070108958FEF809307011F
+:1031F000089580910601262F30E0280F311D2F3FC2
+:10320000310524F4680F6093060108958FEF8093D1
+:103210000601089580910501262F30E0280F311D09
+:103220002F3F310524F4680F6093050108958FEF57
+:10323000809305010895833011F128F4813049F01D
+:10324000823091F00895853081F120F18630C1F10E
+:10325000089580910A01681720F4861B80930A0163
+:10326000089510920A01089580910901681720F4C9
+:10327000861B809309010895109209010895809199
+:103280000801681720F4861B8093080108951092A6
+:103290000801089580910701681720F4861B809328
+:1032A000070108951092070108958091060168179B
+:1032B00020F4861B8093060108951092060108955C
+:1032C00080910501681720F4861B809305010895FD
+:1032D0001092050108950F931F938D3109F471C069
+:1032E00008F045C0803109F485C008F5873009F43D
+:1032F0006FC068F4863009F0ADC08091CD01817F48
+:103300008E7F8093CD0181E08093DD01A4C08B305E
+:1033100009F49EC08E3009F09DC08091CD0182FBE2
+:10332000222720F991E0922790FB82F96CC0863128
+:1033300009F48EC060F4813109F08CC00E94940EB3
+:103340009091020181E089278093020181C0893137
+:1033500009F47EC08B3109F07DC08091CD0181FBE5
+:10336000222720F991E0922790FB81F94CC0853308
+:1033700009F466C048F4873209F462C008F44FC00B
+:10338000893209F45DC066C0833438F48A3308F0AA
+:1033900044C0883309F45CC05DC0833409F450C074
+:1033A000883409F057C00E94940E0FEF13ED20E30C
+:1033B000015010402040E1F700C000000E94391683
+:1033C00047C00E94F51A0E94E4090E94460640C0C8
+:1033D0009091CD01892F8095817080FB90F929F023
+:1033E000966098609093CD0136C0997F977F9093B7
+:1033F000CD012EC08091CD0183FB222720F991E0E1
+:10340000922790FB83F98093CD01992309F1809154
+:10341000CD0181608093CD011BC0895301C08D51C6
+:1034200041E050E060E070E08A019B0104C0000FC1
+:10343000111F221F331F8A95D2F7C901B80104C09A
+:1034400061E070E080E090E00E9454120E94940ECF
+:1034500081E001C080E01F910F91089580E0089500
+:1034600080E008958E518A3030F4E82FF0E0EA5E73
+:10347000FE4F8081089580E00895CF93C82F8091FA
+:10348000DD01813079F018F08230E9F186C0E091F9
+:103490000301F09104018081813169F0823209F0E9
+:1034A0007EC009C0E0910301F09104018081813167
+:1034B00011F0823261F48C2F0E942E1A811104C007
+:1034C0008C2F0E946B191DC081E090E01AC08C2FD8
+:1034D0000E94301A811114C0C43179F048F4CB3005
+:1034E00079F0C03109F05FC082E08093DD0108C04F
+:1034F000C93219F0C83321F056C01092DD0153C013
+:1035000081E0817052C0C93281F110F5C43169F196
+:10351000A8F4C73009F045C08AE080930A0194E11D
+:103520009093090193E0909308018093070188E04C
+:103530008093060188E28093050133C082EE8C0FF0
+:10354000863078F58C2F0E94321A8093DC0129C0D6
+:10355000CE34E9F020F4CB3421F56AE013C0C13554
+:1035600079F0C235F1F461E00DC08091DC0188236F
+:1035700019F01092DC0115C081E08093DD0115C0C7
+:1035800061E006C08091DC010E94A5180AC06AE0D3
+:103590008091DC010E941B1904C01092DD0180E0C3
+:1035A00004C081E002C080E0ACCFCF910895E1E893
+:1035B000F0E08081886080838081816080838FB724
+:1035C000F89493E09093890090ED909388008FBFDA
+:1035D0000895EFE6F0E08081826080830895EFE651
+:1035E000F0E080818D7F80830895EFE6F0E09081A8
+:1035F00082E08927808308951F920F920FB60F9261
+:1036000011242F933F934F935F936F937F938F93E7
+:103610009F93AF93BF93EF93FF938091DE019091BF
+:10362000DF0101969093DF018093DE01811103C0D9
+:1036300082E00E944606E091DF01E695E695F0E023
+:10364000E954FC4FE4918091DE018E1303C080E0C9
+:103650000E944606FF91EF91BF91AF919F918F918C
+:103660007F916F915F914F913F912F910F900FBE7E
+:103670000F901F9018958091F0010895CF93DF93DC
+:1036800000D01F92CDB7DEB79C018091F801843045
+:1036900019F593E099833B832A839093E9008FEF98
+:1036A0009091E800815095FD06C095ED9A95F1F74F
+:1036B00000008111F5CF8091E80085FF0DC040E04A
+:1036C00050E063E070E0CE0101960E94A71D80915A
+:1036D000E8008E778093E8000F900F900F90DF91B5
+:1036E000CF910895CF93DF9300D01F92CDB7DEB76F
+:1036F0002091F801243021F522E029839B838A83DD
+:1037000083E08093E9008FEF9091E800815095FD70
+:1037100006C095ED9A95F1F700008111F5CF8091E3
+:10372000E80085FF0DC040E050E063E070E0CE01AE
+:1037300001960E94A71D8091E8008E778093E80093
+:103740000F900F900F90DF91CF9108952091F80185
+:103750002430F1F422E02093E9002FEF3091E800CB
+:10376000215035FD06C035ED3A95F1F700002111E5
+:10377000F5CF2091E80025FF0BC040E050E065E068
+:1037800070E00E94A71D8091E8008E778093E8008A
+:103790000895CF93DF93EC019091F801943009F0F4
+:1037A00046C0809115018823D9F0809102018823B9
+:1037B000B9F09093E9008FEF9091E800815095FD6A
+:1037C00006C095E19A95F1F700008111F5CF80913F
+:1037D000E80085FF2CC040E050E060E170E017C0D9
+:1037E00081E08093E9008FEF9091E800815095FD92
+:1037F00006C095ED9A95F1F700008111F5CF809103
+:10380000E80085FF14C040E050E068E070E0CE01C1
+:103810000E94A71D8091E8008E778093E80080E1E8
+:10382000FE01A0EEB1E001900D928A95E1F7DF91E3
+:10383000CF9108958091F701811109C00E943C1F2A
+:103840000E94991F8091E20084608093E2000895B5
+:103850001092F701089508950C94E91A0E94CF156B
+:103860000E94EF1A0E94E4090C94460642E061ECC3
+:1038700081E00E94B61E42E061EC82E00E94B61E2A
+:1038800042E061EC83E00E94B61E42E161EC84E01C
+:103890000C94B61E8091FA01833009F455C030F4BF
+:1038A000813071F0823009F48EC008958A3009F4B5
+:1038B0007AC08B3009F460C0893009F09CC020C008
+:1038C0008091F901813A09F096C08091E800877FE4
+:1038D0008093E8008091FD019091FE01892B21F4F5
+:1038E00060E180EE91E003C060E080E090E070E095
+:1038F0000E94F21D8091E8008B778093E800089584
+:103900008091F901813209F076C08091FD0190919A
+:10391000FE01009719F0039709F06DC08091E8004F
+:10392000877F8093E8008091E80082FD05C0809148
+:10393000F8018111F8CF5FC08091F1008093F00110
+:103940008091E8008B7753C08091F901813A09F0AA
+:1039500052C08091FD019091FE01892B09F04BC06E
+:103960008091E800877F8093E8008091E80080FFE5
+:10397000FCCF8091150136C08091F9018132D9F5D3
+:103980008091FD019091FE01892BA9F58091E800BD
+:10399000877F8093E8000E94EB1E8091FB0180935B
+:1039A00015010C94940E8091F901813221F58091DA
+:1039B000E800877F8093E8000E94EB1E8091FC0165
+:1039C0008093F10108958091F901813AA1F48091E9
+:1039D000E800877F8093E8008091E80080FFFCCFBB
+:1039E0008091F1018093F1008091E8008E778093BF
+:1039F000E8000C94EB1E089584B7877F84BF0FB650
+:103A0000F894A8958091600088618093600010927E
+:103A100060000FBE80E880936100109261000E94F8
+:103A2000330A0E943C1F0E94991F8091E20084602B
+:103A30008093E20078940E941F220E94350A8BE056
+:103A400091E00E94DF090E94D71A8091F801853029
+:103A500069F40E948E158091F6018823B1F30E94CB
+:103A6000BB15882391F30E94911DEFCF0E943B0A62
+:103A7000ECCF292F332723303105C9F064F42130EE
+:103A8000310581F02230310509F043C08DE690E028
+:103A90002BE234E042C021323105F1F0223231050F
+:103AA00041F137C082E190E028E934E036C099273F
+:103AB0008130910541F08230910541F0892B49F523
+:103AC000E7E2F4E005C0EFE0F4E002C0E7EFF3E086
+:103AD000849190E09F0121C06430D8F4E62FF0E09B
+:103AE000EE0FFF1FE45DFE4F2081318189E090E001
+:103AF00014C0643070F470E0FB01EE0FFF1FEC5D4A
+:103B0000FE4F20813181FB01E05EFE4F808190E01D
+:103B100004C080E090E020E030E0FA0131832083AF
+:103B2000089580E189BD82E189BD09B400FEFDCF21
+:103B30008091D8008F7D8093D8008091E0008260D2
+:103B40008093E0008091E00081FDFCCF0895CF924A
+:103B5000DF92EF92FF920F931F93CF93DF93EC01CD
+:103B60008B016A010E940A1F811133C0C114D10464
+:103B700039F0F60180819181081B190BC80FD91FFC
+:103B8000E12CF12C0115110519F18091E80085FD5A
+:103B900016C08091E8008E778093E800C114D104AC
+:103BA00049F0F60180819181E80EF91EF182E082F0
+:103BB00085E00FC00E940A1F882321F30AC0899163
+:103BC0008093F10001501109FFEFEF1AFF0ADACFDD
+:103BD00080E0DF91CF911F910F91FF90EF90DF90E8
+:103BE000CF9008952091FF013091000226173707EA
+:103BF00048F06115710539F42091E8002E77209383
+:103C0000E80001C0B90140E061157105A9F12091FA
+:103C1000F801222309F443C0253009F442C0209161
+:103C2000E80023FD40C02091E80022FD32C0209131
+:103C3000E80020FFE9CF4091F3002091F20030E04E
+:103C4000342BFC01CF016115710559F02830310585
+:103C500040F481918093F100615071092F5F3F4FD3
+:103C6000F1CF41E02830310509F040E02091E80033
+:103C70002E772093E800C8CF4111C9CF0AC08091A8
+:103C8000F801882361F0853061F08091E80083FDC0
+:103C90000AC08091E80082FFF2CF80E0089582E0C0
+:103CA000089583E0089581E008952091FF01309107
+:103CB00000022617370748F06115710539F4209185
+:103CC000E8002E772093E80001C0B901FC0120E054
+:103CD0006115710591F18091F801882309F440C0C4
+:103CE000853009F43FC08091E80083FD3DC080919C
+:103CF000E80082FD2FC08091E80080FFE9CF20918D
+:103D0000F3008091F20090E0922B6115710559F05B
+:103D10008830910540F424912093F1003196615050
+:103D200071090196F2CF21E0089709F020E0809117
+:103D3000E8008E778093E800CBCF2111CCCF0AC06A
+:103D40008091F801882361F0853061F08091E8006E
+:103D500083FD0AC08091E80082FFF2CF80E00895E1
+:103D600082E0089583E0089581E00895982F9730C8
+:103D700058F59093E900981739F07091EC00209174
+:103D8000ED005091F00003C0242F762F50E021FF6A
+:103D900019C03091EB003E7F3093EB003091ED0085
+:103DA0003D7F3093ED003091EB0031603093EB00BC
+:103DB0007093EC002093ED005093F0002091EE0002
+:103DC00027FF07C09F5FD3CF8F708093E90081E00A
+:103DD000089580E008958091F90187FF11C08091D6
+:103DE000E80082FD05C08091F8018111F8CF11C073
+:103DF0008091E8008B770BC08091F801882349F00F
+:103E00008091E80080FFF8CF8091E8008E77809362
+:103E1000E80008952091E4003091E50095E6409196
+:103E2000EC00842F817040FF22C08091E80080FD6B
+:103E30001CC08091F801882391F0853091F0809129
+:103E4000EB0085FD10C04091E4005091E500421761
+:103E5000530729F39A01915011F784E0089582E005
+:103E6000089583E0089581E0089580E008954091E9
+:103E7000E80042FFDECF08950E94AA1F0E94B21FF1
+:103E8000E0EEF0E0808181608083E8EDF0E0808109
+:103E90008F77808319BCA7EDB0E08C918E7F8C93D7
+:103EA00080818F7E80831092F70108950F931F9376
+:103EB000CF93DF930E94AA1F0E94B21FC8EDD0E0EB
+:103EC00088818F77888388818068888388818F7DC7
+:103ED000888319BC1092F8011092F4011092F60137
+:103EE0001092F50100EE10E0F80180818B7F808355
+:103EF00088818160888342E060E080E00E94B61E95
+:103F0000E1EEF0E080818E7F8083E2EEF0E0808160
+:103F100081608083808188608083F80180818E7FCA
+:103F20008083888180618883DF91CF911F910F9179
+:103F30000895E8EDF0E080818F7E8083E7EDF0E08A
+:103F400080818160808384E082BF81E08093F7017B
+:103F50000C94561FE8EDF0E080818E7F80831092F4
+:103F6000E20008951092DA001092E10008951F9285
+:103F70000F920FB60F9211242F933F934F935F939D
+:103F80006F937F938F939F93AF93BF93EF93FF9321
+:103F90008091E10082FF0BC08091E20082FF07C0A8
+:103FA0008091E1008B7F8093E1000E941E2280912E
+:103FB000DA0080FF1FC08091D80080FF1BC0809175
+:103FC000DA008E7F8093DA008091D90080FF0DC0E7
+:103FD00080E189BD82E189BD09B400FEFDCF81E0A9
+:103FE0008093F8010E941A1C05C019BC1092F801B8
+:103FF0000E94281C8091E10080FF19C08091E2009E
+:1040000080FF15C08091E2008E7F8093E200809156
+:10401000E20080618093E2008091D800806280930A
+:10402000D80019BC85E08093F8010E942C1C809177
+:10403000E10084FF30C08091E20084FF2CC080E169
+:1040400089BD82E189BD09B400FEFDCF8091D80011
+:104050008F7D8093D8008091E1008F7E8093E10076
+:104060008091E2008F7E8093E2008091E200816087
+:104070008093E2008091F401882311F084E007C06E
+:104080008091E30087FD02C081E001C083E080935E
+:10409000F8010E942E1C8091E10083FF29C08091CD
+:1040A000E20083FF25C08091E100877F8093E100DB
+:1040B00082E08093F8011092F4018091E1008E7FFC
+:1040C0008093E1008091E2008E7F8093E2008091F6
+:1040D000E20080618093E20042E060E080E00E94C4
+:1040E000B61E8091F00088608093F0000E942B1C27
+:1040F000FF91EF91BF91AF919F918F917F916F91C0
+:104100005F914F913F912F910F900FBE0F901F9095
+:1041100018951F920F920FB60F9211242F933F9371
+:104120004F935F936F937F938F939F93AF93BF93BF
+:10413000CF93DF93EF93FF93C091E900CF7080910D
+:10414000EC00D82FD17080FDD0E81092E90080916A
+:10415000F000877F8093F00078940E94CD20109229
+:10416000E9008091F00088608093F000CD2BCF7043
+:10417000C093E900FF91EF91DF91CF91BF91AF9193
+:104180009F918F917F916F915F914F913F912F916F
+:104190000F900FBE0F901F9018951F93CF93DF9332
+:1041A000CDB7DEB7AA970FB6F894DEBF0FBECDBF6E
+:1041B000E9EFF1E088E08E0F9091F10091938E137A
+:1041C000FBCF0E944A1C8091E80083FF1FC18091B1
+:1041D000F9019091FA01492F50E04A30510508F059
+:1041E00015C1FA01E558FF4F0C947F23803881F008
+:1041F000823809F00BC18091FD018F708093E90036
+:104200008091EB0085FB882780F91092E90006C0B9
+:104210008091F5019091F601911182609091E800F2
+:10422000977F9093E8008093F1001092F100C8C04E
+:10423000282F2D7F09F0EAC0882319F0823061F021
+:10424000E5C08091FB01813009F0E0C0933009F0B6
+:1042500080E08093F6012BC08091FB01811127C083
+:104260008091FD018F7009F4D1C08093E900209105
+:10427000EB0020FF1CC0933021F48091EB008062A2
+:1042800014C09091EB0090619093EB0021E030E03E
+:10429000A90102C0440F551F8A95E2F74093EA0036
+:1042A0001092EA008091EB0088608093EB001092FE
+:1042B000E9008091E800877F86C08111A7C0109136
+:1042C000FB011F778091E3008078812B8093E300CE
+:1042D0008091E800877F8093E8000E94EB1E809128
+:1042E000E80080FFFCCF8091E30080688093E300CA
+:1042F000111102C082E001C083E08093F80186C002
+:104300008058823008F082C08091FB019091FC01BE
+:104310008C3D53E0950779F583E08A838AE28983AF
+:104320004FB7F894DE01139620E03EE051E2E32F10
+:10433000F0E050935700E49120FF03C0E295EF7046
+:104340003F5FEF708E2F90E0EA3010F0C79601C00B
+:10435000C0968D939D932F5F243149F74FBF809175
+:10436000E800877F8093E8006AE270E0CE01019662
+:104370000E94F21D14C0AE014F5F5F4F6091FD01BE
+:104380000E94391DBC01892B09F440C09091E800BE
+:10439000977F9093E80089819A810E94551E8091B1
+:1043A000E8008B778093E80031C0803879F5809100
+:1043B000E800877F8093E8008091F4018093F1000A
+:1043C0008091E8008E778093E8000E94EB1E1EC06B
+:1043D00081111CC09091FB019230C0F48091E800E3
+:1043E000877F8093E8009093F4010E94EB1E8091F8
+:1043F000F401811106C08091E30087FD02C081E0D5
+:1044000001C084E08093F8010E94361C8091E8008E
+:1044100083FF0AC08091E800877F8093E800809145
+:10442000EB0080628093EB00AA960FB6F894DEBF93
+:104430000FBECDBFDF91CF911F9108950895CF9307
+:104440008091F8018823A1F0C091E900CF7090918C
+:10445000EC00892F817090FD80E8C82B1092E90054
+:104460008091E80083FD0E94CD20CF70C093E900C9
+:10447000CF9108950E9441226894B1110C94D022EA
+:1044800008950E94B52288F09F5798F0B92F992778
+:10449000B751B0F0E1F0660F771F881F991F1AF02F
+:1044A000BA95C9F714C0B13091F00E94CF22B1E0A3
+:1044B00008950C94CF22672F782F8827B85F39F0A2
+:1044C000B93FCCF3869577956795B395D9F73EF4C8
+:1044D00090958095709561957F4F8F4F9F4F089570
+:1044E000E89409C097FB3EF490958095709561958E
+:1044F0007F4F8F4F9F4F9923A9F0F92F96E9BB2744
+:104500009395F695879577956795B795F111F8CFBF
+:10451000FAF4BB0F11F460FF1BC06F5F7F4F8F4F2A
+:104520009F4F16C0882311F096E911C0772321F020
+:104530009EE8872F762F05C0662371F096E8862FB8
+:1045400070E060E02AF09A95660F771F881FDAF70F
+:10455000880F9695879597F9089557FD9058440FC1
+:10456000551F59F05F3F71F04795880F97FB991FD2
+:1045700061F09F3F79F0879508951216130614068F
+:10458000551FF2CF4695F1DF08C01616170618061C
+:10459000991FF1CF86957105610508940895E894F7
+:1045A000BB2766277727CB0197F908950E94E92258
+:1045B0000C945A230E944C2338F00E94532320F07D
+:1045C000952311F00C9443230C94492311240C944B
+:1045D000D0220E94AD2270F3959FC1F3950F50E059
+:1045E000551F629FF001729FBB27F00DB11D639FA5
+:1045F000AA27F00DB11DAA1F649F6627B00DA11D4B
+:10460000661F829F2227B00DA11D621F739FB00DF0
+:10461000A11D621F839FA00D611D221F749F332760
+:10462000A00D611D231F849F600D211D822F762FF9
+:104630006A2F11249F5750409AF0F1F088234AF0D6
+:10464000EE0FFF1FBB1F661F771F881F9150504042
+:10465000A9F79E3F510580F00C9443230C94D0227F
+:104660005F3FE4F3983ED4F3869577956795B795C9
+:10467000F795E7959F5FC1F7FE2B880F911D9695E3
+:10468000879597F9089597F99F6780E870E060E053
+:1046900008959FEF80EC089500240A9416161706DB
+:1046A00018060906089500240A9412161306140623
+:1046B00005060895092E0394000C11F4882352F086
+:1046C000BB0F40F4BF2B11F460FF04C06F5F7F4F3E
+:1046D0008F4F9F4F089597FB072E16F4009407D035
+:1046E00077FD09D00E94852307FC05D03EF4909504
+:1046F00081959F4F0895709561957F4F0895EE0FB6
+:10470000FF1F0590F491E02D0994AA1BBB1B51E1FA
+:1047100007C0AA1FBB1FA617B70710F0A61BB70B31
+:10472000881F991F5A95A9F780959095BC01CD01D6
+:104730000895F999FECF92BD81BDF89A992780B569
+:104740000895A8E1B0E042E050E00C94C023262F89
+:10475000F999FECF92BD81BDF89A019700B4021677
+:1047600031F020BD0FB6F894FA9AF99A0FBE089569
+:104770000196272F0E94A8230C94A723DC01CB01CC
+:10478000FC01F999FECF06C0F2BDE1BDF89A319661
+:1047900000B40D9241505040B8F70895F894FFCFFF
+:1047A000052001BA0128080A03140A3B1BC91BA6ED
+:1047B0001B721B3E1B0101020304050607080900CA
+:1047C000404D363966051905E304AA043D04560434
+:0447D0006F048804E6
+:00000001FF
diff --git a/keyboards/ergodox/readme.md b/keyboards/ergodox/readme.md
new file mode 100644
index 000000000..3bbe98fd6
--- /dev/null
+++ b/keyboards/ergodox/readme.md
@@ -0,0 +1,165 @@
+# The Easy Way
+
+If you can find firmware someone else has made that does what you want, that
+is the easiest way to customize your ErgoDox. It requires no programming
+experience or the setup of a build environment.
+
+Quickstart:
+
+ - Find and download an existing firmware
+ [from Other Firmware Options](#other-firmware-options)
+
+ - Then flash the firmware to your [ErgoDox Ez](#ergodox-ez)
+ or [ErgoDox Infinity](#ergodox-infinity)
+
+# Customizing Keymaps
+
+There are many existing keymaps in the "keymaps" directory. If you just want
+to use one of them, you don't need to modify keymaps and can just build and
+flash the firmware as described below. These directories each have a
+"readme.md" file which describe them.
+
+If none of the existing keymaps suit you, you can create your own custom
+keymap. This will require some experience with coding. Follow these steps
+to customize a keymap:
+
+ - Read the [qmk firmware README](https://github.com/jackhumbert/qmk_firmware) from top to bottom. Then come back here. :)
+
+ - Clone the qmk_firmware repository
+
+ - Set up your build environment (see below).
+
+ - Make a new directory under "keymaps" to hold your customizations.
+
+ - Copy an existing keymap that is close to what you want, such as
+ "keymaps/default/keymap.c".
+
+ - Use an editor to modify the new "keymap.c". See "Finding the keycodes you
+ need" below). Try to edit the comments as well, so the "text graphics"
+ represent your layout correctly.
+
+ - Compile your new firmware (see below)
+
+ - Flash your firmware (see below)
+
+ - Test the changes.
+
+ - Submit your keymap as a pull request to the qmk_firmware repository so
+ others can use it. You will want to add a "readme.md" that describes the
+ keymap.
+
+# Build Dependencies
+
+Before you can build, you will need the build dependencies. There is a script
+to try to do this for Linux:
+
+ - Run the `util/install_dependencies.sh` script as root.
+
+For the Infinity, you need the chibios submodules to be checked out or you
+will receive errors about the build process being unable to find the chibios
+files. Check them out with:
+
+ - Go to the top level repo directory and run: `git submodule update --init --recursive`
+
+# Flashing Firmware
+
+## ErgoDox Ez
+
+The Ez uses the [Teensy Loader](https://www.pjrc.com/teensy/loader.html).
+
+Linux users need to modify udev rules as described on the Teensy Linux page.
+Some distributions provide a binary, maybe called `teensy-loader-cli`).
+
+To flash the firmware:
+
+ - Build the firmware with `make keymapname`, for example `make default`
+ - This will result in a hex file called `ergodox_ez_keymapname.hex`, e.g.
+ `ergodox_ez_default.hex`
+
+ - Start the teensy loader.
+
+ - Load the .hex file into it.
+
+ - Press the Reset button by inserting a paperclip gently into the reset hole
+ in the top right corder.
+
+ - Click the button in the Teensy app to download the firmware.
+
+## ErgoDox Infinity
+
+The Infinity is two completely independent keyboards, and needs to be flashed
+for the left and right halves seperately. To flash them:
+
+ - Build the firmware with `make infinity-keymapname`
+
+ - Plug in the left hand keyboard only.
+
+ - Press the program button (back of keyboard, above thumb pad).
+
+ - Install the firmware with `sudo make infinity-keymapname-dfu-util`
+
+ - Build left hand firmware with `make infinity-keymapname MASTER=right`
+
+ - Plug in the right hand keyboard only.
+
+ - Press the program button (back of keyboard, above thumb pad).
+
+ - Install the firmware with `sudo make infinity-keymapname-dfu-util MASTER=right`
+
+More information on the Infinity firmware is available in the [TMK/chibios for
+Input Club Infinity Ergodox](https://github.com/fredizzimo/infinity_ergodox/blob/master/README.md)
+
+### Infinity Master/Two Halves
+
+The Infinity is two completely independent keyboards, that can connect together.
+You have a few options in how you flash the firmware:
+
+- Flash the left half, rebuild the firmware with "MASTER=right" and then flash
+ the right half. This allows you to plug in either half directly to the
+ computer and is what the above instructions do.
+
+- Flash the left half, then flash the same firmware on the right. This only
+ works when the left half is plugged directly to the computer and the keymap
+ is mirrored. It saves the small extra step of rebuilding with
+ "MASTER=right".
+
+- The same as the previous one but with "MASTER=right" when you build the
+ firmware, then flash the same firmware to both halves. You just have to
+ directly connect the right half to the computer.
+
+- For minor changes such as changing only the keymap without having updated
+ any part of the firmware code itself, you can program only the MASTER half.
+ It is safest to program both halves though.
+
+# Contributing your keymap
+
+The QMK firmware is open-source, so it would be wonderful to have your contribution! Within a very short time after launching we already amassed dozens of user-contributed keymaps, with all sorts of creative improvements and tweaks. This is very valuable for people who aren't comfortable coding, but do want to customize their ErgoDox. To make it easy for these people to use your layout, I recommend submitting your PR in the following format.
+
+1. All work goes inside your keymap subdirectory (`keymaps/german` in this example).
+2. `keymap.c` - this is your actual keymap file; please update the ASCII comments in the file so they correspond with what you did.
+3. `readme.md` - a readme file, which GitHub would display by default when people go to your directory. Explain what's different about your keymap, what you tweaked or how it works. No specific format to follow, just communicate what you did. :)
+4. Any graphics you wish to add. This is absolutely not a must. If you feel like it, you can use [Keyboard Layout Editor](http://keyboard-layout-editor.com) to make something and grab a screenshot, but it's really not a must. If you do have graphics, your readme can just embed the graphic as a link, just like I did with the default layout.
+
+# Finding the keycodes you need
+
+Let's say you want a certain key in your layout to send a colon; to figure out what keycode to use to make it do that, you're going to need `quantum/keymap_common.h`.
+
+That file contains a big list of all of the special, fancy keys (like, being able to send % on its own and whatnot).
+
+If you want to send a plain vanilla key, you can look up its code under `doc/keycode.txt`. That's where all the boring keys hang out.
+
+# Other Firmware Options
+
+There are external tools for customizing the layout, but those do not use
+the featurs of this qmk firmware. These sites include:
+
+ - [Massdrop configurator](https://keyboard-configurator.massdrop.com/ext/ergodox) for Ez
+ - [Input Club configurator](https://input.club/configurator-ergodox) for Infinity, provides left and right files
+
+You can also find an existing firmware that you like, for example from:
+
+ - [Dozens of community-contributed keymaps](http://qmk.fm/keyboards/ergodox/)
+
+This qmk firmware also provides the ability to customize keymaps, but requires
+a toolchain to build the firmware. See below for instructions on building
+firmware and customizing keymaps.
diff --git a/keyboards/ergodox/rules.mk b/keyboards/ergodox/rules.mk
new file mode 100644
index 000000000..2e501e81b
--- /dev/null
+++ b/keyboards/ergodox/rules.mk
@@ -0,0 +1,28 @@
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make = Make software.
+#
+# make clean = Clean out built project files.
+#
+# That's pretty much all you need. To compile, always go make clean,
+# followed by make.
+#
+# For advanced users only:
+# make teensy = Download the hex file to the device, using teensy_loader_cli.
+# (must have teensy_loader_cli installed).
+#
+#----------------------------------------------------------------------------
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+CUSTOM_MATRIX ?= yes # Custom matrix file for the ErgoDox EZ
+SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+UNICODE_ENABLE ?= yes # Unicode
+ONEHAND_ENABLE ?= yes # Allow swapping hands of keyboard
diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/base-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/base-layer.png
deleted file mode 100644
index c4e298b6b..000000000
--- a/keyboards/ergodox_ez/keymaps/algernon/images/base-layer.png
+++ /dev/null
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/experimental-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/experimental-layer.png
deleted file mode 100644
index 81155851b..000000000
--- a/keyboards/ergodox_ez/keymaps/algernon/images/experimental-layer.png
+++ /dev/null
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/one-handed-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/one-handed-layer.png
deleted file mode 100644
index 698d11e5f..000000000
--- a/keyboards/ergodox_ez/keymaps/algernon/images/one-handed-layer.png
+++ /dev/null
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/algernon/images/steno-layer.png b/keyboards/ergodox_ez/keymaps/algernon/images/steno-layer.png
deleted file mode 100644
index fe3c03c93..000000000
--- a/keyboards/ergodox_ez/keymaps/algernon/images/steno-layer.png
+++ /dev/null
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/algernon/readme.md b/keyboards/ergodox_ez/keymaps/algernon/readme.md
deleted file mode 100644
index 6b7e8fa2e..000000000
--- a/keyboards/ergodox_ez/keymaps/algernon/readme.md
+++ /dev/null
@@ -1,230 +0,0 @@
-algernon's layout
-=======================
-
-This is an unconventional layout for the ErgoDox EZ. For more details about the
-history of the layout, see my
-[blog posts about my ErgoDox journey][blog-ergodox].
-
- [blog-ergodox]: https://asylum.madhouse-project.org/blog/tags/ergodox/
-
-Some of the things in the layout only work when one uses Spacemacs and GNOME
-under Linux. Your mileage may vary.
-
-## Table of Contents
-
-* [Layouts](#layouts)
- - [Base layer](#base-layer)
- - [Experimental layer](#experimental-layer)
- - [Hungarian layer](#hungarian-layer)
- - [Navigation and media layer](#navigation-and-media-layer)
- - [One-handed layer](#one-handed-layer)
- - [Steno layer](#steno-layer)
- - [LED states](#led-states)
-* [Building](#building)
- - [Using on Windows](#using-on-windows)
-* [Changelog](#changelog)
-* [License](#license)
-
-# Layouts
-
-## Base layer
-
-[![Base layer](images/base-layer.png)](http://www.keyboard-layout-editor.com/#/gists/28f7eb305fdbff943613e1dc7aa9e82b)
-
-At its core, this is a Dvorak layout, with some minor changes. The more
-interesting parts are how certain keys behave:
-
-* The keys on the number row double as function keys, when held for a bit longer
- than an usual tap. This allows me to use the function keys without having to
- switch layers.
-* The `Shift`, `Alt`, and `Control` modifiers are one-shot. When tapped, they
- are considered active for the next key press only. When double tapped, they
- toggle on, until a third, single tap sometime later. When held, they act as
- expected. My usual pattern is that I use these for the next keypress only, so
- this behaviour is perfect. If I need them held, I'll just double-tap.
-* The `GUI` key is special, because when I double-tap it, it sends `GUI + w`,
- which pops up an application selector. It also switches to a one-shot layer,
- where the number row on the left half turns into app selector macros, for the
- most common things I usually want to switch to. Otherwise it behaves as on a
- normal layout.
-* The `ESC` key also doubles as a one-shot cancel key: if tapped while any of
- the one-shot modifiers are in-flight (as in, single-tapped, and not expired
- yet), it cancels all one-shot modifiers. It also cancels the **Hun** layer, if
- active. Otherwise it sends the usual keycode.
-* The **Media**, **Arrow**, and **Hun** layer keys are one-shot, the **1Hand**
- and **STENO** keys are toggles.
-* Toggling the **Arrow** layer toggles between the cursor arrows and the paging
- keys on the bottom row.
-* Tapping the `:` key once yields `:`, tapping it twice yields `;`.
-* The **Lead** key allows me to type in a sequence of keys, and trigger some
- actions:
- - `LEAD u` enters unicode input mode, by sending the GTK+ key sequence that
- does this.
- - `LEAD l` uses the unicode input method to enter a `λ`.
- - `LEAD s` does a lot of magic to type in a shruggie: `¯\_(ツ)_/¯`
- - `LEAD y` types `\o/`.
- - `LEAD w m` maximises the currently focused window.
- - `LEAD e` makes the [experimental layer](#experimental-layer) the default.
- - `LEAD v` prints the firmware version, the keyboard and the keymap.
-
-## Experimental layer
-
-[![Experimental layer](images/experimental-layer.png)](http://www.keyboard-layout-editor.com/#/gists/6ff50bf71248e05aab5b3fec4fae3d08)
-
-While using the standard Dvorak layout, I encountered a number of
-inconveniences, and on this layer, I am playing with ideas to make the layout
-feel better. Initially, it was based on [Capewell-Dvorak][cpd], but that too,
-had shortcomings I was not happy with. So now this is something inbetween, with
-own observations thrown in. How it works out in the long run remains to be seen.
-
- [cpd]: http://www.michaelcapewell.com/projects/keyboard/layout_capewell-dvorak.htm
-
-## Hungarian layer
-
-[![Hungarian layer](images/hun-layer.png)](http://www.keyboard-layout-editor.com/#/gists/b160f6ec90d58c127c114c89f66e9dc9)
-
-On this layer, the accented characters are at the same position as their base
-variant. For some, which can have other diatribes, the long one is on top,
-short's on bottom. Tapping any of the accented characters takes us back to the
-base layer.
-
-## Navigation and media layer
-
-[![Navigation and media layer](images/nav-n-media-layer.png)](http://www.keyboard-layout-editor.com/#/gists/c59c453f9fe1a3238ba1494e7e5c6892)
-
-This layer is primarily for navigating with the cursor or the mouse, and some
-media things.
-
-## One-handed layer
-
-[![One-handed layer](images/one-handed-layer.png)](http://www.keyboard-layout-editor.com/#/gists/edff2495135955b8963198dace7f7ece)
-
-The one-handed layer is used in situations where the right hand is occupied, by
-mousing around, for example. Tapping the `OTHER` key switches which side is
-active. For the most part, keys remain in their usual position. When the right
-half is active, keys are mirrored to the left half.
-
-The differences are as follows:
-
-* The `ESC` key has been moved to the bottom row, so the `OTHER` key is easier
- to tap.
-* Most keys on the thumb cluster now have dual uses, and these do not change
- when switching sides:
- - The `Space`/`Backspace` key sends `Space` on tap, `Backspace` when held
- for longer than a normal tap.
- - The `Enter`/`Shift` key sends `Enter` on short-tap, `Shift` on long-tap.
-* The `Apps`/`BASE` key can be used to go back to the base layer, by
- long-tapping it. A short-tap will send the `App` key, as usual.
-
-## Steno layer
-
-[![Steno layer for Plover](images/steno-layer.png)](http://www.keyboard-layout-editor.com/#/gists/401ef9a84369e47c57f9aedcf0a0d667)
-
-This is to be used with [Plover](http://www.openstenoproject.org/plover/),
-nothing really fancy here. The **STENO** key toggles the layer on and off, and
-sends the toggle command to Plover too.
-
-## LED states
-
-The primary purpose of the LEDs is to show the modifier status, a secondary, to
-show which layer is active. Each modifier, `Shift`, `Alt` and `Control` each
-have their designated LEDs: the *red*, *green* and *blue*, respectively. When a
-modifier is in a one-shot state, the respective LED will turn on with a dimmer
-light. If the modifier is toggled on, the brightness of the LED turns full.
-
-For the layers, the following rules apply:
-
-* When the [Experimental layer](#experimental-layer) is toggled on, LEDs will
- light up from left to right in a sequence, then turn off. When the layer is
- toggled off, the LEDs light up and turn off in the other direction. No LEDs
- are on while the layer is active.
-* When the [Hungarian layer](#hungarian-layer) is active, the *green* and *blue*
- LEDs are on.
-* When the [Navigation and media layer](#navigation-and-media-layer) is active,
- the *red* and *green* ones are on.
-* When the [One-handed layer](#one-handed-layer) is active, the *green* LED is
- on and bright, and either the *red* or the *blue* one is going to slowly
- blink, depending on the currently active side.
-* For the [Steno layer](#steno-layer), all LEDs will be turned on.
-
-Unless noted otherwise, the layers use a dim light for the LEDs, while modifiers
-use a stronger one, and modifiers override any layer preferences. For example,
-when on the one-handed layer, with the left side active (*red* light blinking),
-if `Shift` is on, the *red* light will be constantly on.
-
-# Building
-
-To make my workflow easier, this layout is maintained in
-[its own repository][algernon:ez-layout]. To build it, you will need the
-[QMK][qmk] firmware checked out, and this repo either checked out to something
-like `keyboards/ergodox_ez/algernon-master`. One way to achieve that is this:
-
- [algernon:ez-layout]: https://github.com/algernon/ergodox-layout
- [qmk]: https://github.com/jackhumbert/qmk_firmware
-
-```
-$ git clone https://github.com/jackhumbert/qmk_firmware.git
-$ cd qmk_firmware
-$ git clone https://github.com/algernon/ergodox-layout.git \
- keyboards/ergodox_ez/keymaps/algernon-master
-$ make KEYBOARD=ergodox_ez KEYMAP=algernon-master
-```
-
-From time to time, updates may be submitted back to the QMK repository. If you
-are reading it there, you can build the firmware like any other firmware
-included with it (assuming you are in the root directory of the firmware):
-
-```
-$ make KEYBOARD=ergodox_ez KEYMAP=algernon
-```
-
-## Using on Windows
-
-The keymap default to forcing NKRO, which seems to upset Windows, and except the
-modifiers, none of them work. If you experience this problem, recompile the
-firmware with `FORCE_NKRO=no` added to the `make` command line.
-
-# Changelog
-
-## v1.2 - 2016-06-22
-
-* The forced NKRO mode can be easily toggled off at compile-time, to make the
- firmware compatible with [certain operating systems](#using-on-windows).
-* The `:;` key has changed behaviour: to access the `;` symbol, the key needs to
- be double-tapped, instead of shifted.
-* The `=` and `\` keys were swapped, `=` moved to the home row, on both the
- [base](#base-layer) and the [experimental](#experimental-layer) layers.
-* The arrow and navigation keys were redone, they are now more accessible, but
- the navigation keys require an extra tap to access.
-* The **Emacs** layer is gone, replaced by a simplified
- [navigation and media](#navigation-and-media-layer) layer.
-* `LEAD v` types the firmware version, and the keymap version.
-* On the [experimental](#experimental-layer) layer, the `L` and `Q`, and the `K`
- and `G` keys were swapped.
-* The [Steno](#steno-layer) layer gained a few more `#` and `*` keys, to make it
- easier on my fingers.
-
-## v1.1 - 2016-06-14
-
-* The keyboard starts in NKRO mode, bootmagic and other things are disabled.
-* A [Steno](#steno-layer) layer was added, to be used with Plover.
-* An [experimental](#experimental-layer) layer was added, something halfway
- between Dvorak and Capewell-Dvorak. A work in progress.
-* `LEAD y` types `\o/`.
-* Some keys on the [Base](#base-layer) layer have been moved around:
- - `?` moved to the left pinky, left of `Q`.
- - `=` shifted one row down, but `F11` stayed where it was.
- - `-` on the left half was replaced by `Tab`.
- - `Tab`'s original position is taken by a `Media Next`/`Media Prev` key.
- - `:` now inputs `;` when shifted.
-* `ESC` cancels the [Hungarian](#hungarian-layer) layer too, not just modifiers.
-
-## v1.0 - 2016-05-26
-
-Initial version.
-
-# License
-
-The layout, being a derivative of the original TMK firmware which is under the
-GPL-2+, this layout is under the GPL as well, but GPL-3+, rather than the older
-version.
diff --git a/keyboards/ergodox_ez/keymaps/algernon/tools/max-focused b/keyboards/ergodox_ez/keymaps/algernon/tools/max-focused
deleted file mode 100755
index 4d5220aa8..000000000
--- a/keyboards/ergodox_ez/keymaps/algernon/tools/max-focused
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /bin/sh
-WIN="$(xdotool getactivewindow)"
-wmctrl -i -r ${WIN} -b remove,maximized_vert,maximized_horz
-xdotool windowsize ${WIN} 100% 100%
-wmctrl -i -r ${WIN} -b add,maximized_vert,maximized_horz
diff --git a/keyboards/ergodox_ez/keymaps/bepo/bepo.png b/keyboards/ergodox_ez/keymaps/bepo/bepo.png
deleted file mode 100644
index 3df7aa609..000000000
--- a/keyboards/ergodox_ez/keymaps/bepo/bepo.png
+++ /dev/null
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/coderkun_neo2/Makefile b/keyboards/ergodox_ez/keymaps/coderkun_neo2/Makefile
deleted file mode 100644
index e7b2d0a65..000000000
--- a/keyboards/ergodox_ez/keymaps/coderkun_neo2/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-UNICODE_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-base.png b/keyboards/ergodox_ez/keymaps/ordinary/ordinary-base.png
deleted file mode 100644
index 9c561a10a..000000000
--- a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-base.png
+++ /dev/null
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.png b/keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.png
deleted file mode 100644
index 99e5ed80b..000000000
--- a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.png
+++ /dev/null
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.txt b/keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.txt
deleted file mode 100644
index 4eccc9f35..000000000
--- a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-media.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-[{x:3.5,c:"#99de2a"},"F13",{x:10.5},"F18"],
-[{y:-0.875,x:2.5},"F12",{x:1},"F14",{x:8.5},"F17",{x:1},"F19"],
-[{y:-0.875,x:5.5},"F15",{c:"#ff4444"},"Esc",{x:4.5,c:"#737373",a:7},"",{c:"#99de2a",a:4},"F16"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n\n\n\n\nShift",{c:"#99de2a"},"F11",{x:14.5},"F20",{c:"#2277ff",w:1.5},"\n\nSpecial\n\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nUp",{x:10.5},"Cursor\n\n\n\n\n\nUp"],
-[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nUpLeft",{x:1},"Mouse\n\n\n\n\n\nUpRgt",{x:8.5,c:"#ffb063"},"Home",{x:1},"Page\n\n\n\n\n\nUp"],
-[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#e6e067"},"Print\n\n\n\n\n\nScreen"],
-[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#e6e067",t:"#000000"},"Shut\n\n\n\n\n\nDown",{x:14.5},"Mail",{c:"#000000",t:"#ff0000",w:1.5},"\n\nMedia\n\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#ff8500",t:"#000000"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
-[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nLeft",{x:1},"Mouse\n\n\n\n\n\nRight",{x:8.5},"Cursor\n\n\n\n\n\nLeft",{x:1},"Cursor\n\n\n\n\n\nRight"],
-[{y:-0.875,x:5.5,c:"#e6e067"},"Vol\n\n\n\n\n\nDown",{x:6.5},"Num\n\n\n\n\n\nLock"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#e6e067"},"Sleep",{x:14.5},"My\n\n\n\n\n\nComp",{c:"#2277ff",w:1.5},"\n\nSymbols\n\n\n\n\nShift"],
-[{y:-0.625,x:6.5,c:"#ffb063",h:1.5},"Scroll\n\n\n\n\n\nDown",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nDown"],
-[{y:-0.75,x:3.5,c:"#ff8500"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
-[{y:-0.875,x:2.5},"Mouse\n\n\n\n\n\nDnLeft",{x:1},"Mouse\n\n\n\n\n\nDnRgt",{x:8.5,c:"#ffb063"},"End",{x:1},"Page\n\n\n\n\n\nDown"],
-[{y:-0.875,x:5.5,c:"#e6e067"},"Mute",{x:6.5,c:"#737373",a:7},""],
-[{y:-0.875,c:"#2277ff",a:4,w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#737373",a:7},"",{x:14.5},"",{c:"#2277ff",a:4,w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#ff8500"},"Middle\n\n\n\n\n\nClick",{x:10.5,c:"#ffb063",fa:[0,0,0,1]},"Delete\n\n\nOption"],
-[{y:-0.875,x:2.5,c:"#ff8500"},"Left\n\n\n\n\n\nClick",{x:1},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#ffb063"},"Insert\n\n\nCmd",{x:1,c:"#77aaff"},"Hyper"],
-[{y:-0.75,x:0.5},"Ctrl\n\n\nLCtrl","Meh",{x:14.5},"Meh","Crtl\n\n\nRCtrl"],
-[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#ccbb00"},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"],
-[{h:2},"< Web\n\n\nBrowser",{h:2},"Web >\n\n\nBrowser","Search\n\n\nBrowser"],
-[{x:2},"Home\n\n\nBrowser"],
-[{r:-30,rx:13,y:-1,x:-3},"Prev\n\n\nAudio\n\n\nTrack","Next\n\n\nAudio\n\n\nTrack"],
-[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#ccbb00",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"],
-[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nDown"]
-
diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.png b/keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.png
deleted file mode 100644
index e4de64a96..000000000
--- a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.png
+++ /dev/null
Binary files differ
diff --git a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt b/keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt
deleted file mode 100644
index e199f5c59..000000000
--- a/keyboards/ergodox_ez/keymaps/ordinary/ordinary-symbol.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-[{x:3.5,c:"#99de2a"},"F3",{x:10.5},"F8"],
-[{y:-0.875,x:2.5},"F2",{x:1},"F4",{x:8.5},"F7",{x:1},"F9"],
-[{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#bbddbb"},"_\n\n\n\n\n\n-",{c:"#99de2a"},"F6"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Special\n\n\n\n\n\nShift",{c:"#99de2a"},"F1",{x:14.5},"F10",{c:"#2277ff",w:1.5},"\n\nSpecial\n\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#bbddbb"},"{",{x:10.5,c:"#89b087"},"8"],
-[{y:-0.875,x:2.5,c:"#bbddbb"},"@",{x:1},"}",{x:8.5,c:"#89b087"},"7",{x:1},"9"],
-[{y:-0.875,x:5.5,c:"#bbddbb"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Media\n\n\n\n\n\nShift",{c:"#bbddbb"},"!",{x:14.5,c:"#89b087"},"/",{c:"#2277ff",w:1.5},"\n\nMedia\n\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#bbddbb"},"(",{x:10.5,c:"#89b087"},"5"],
-[{y:-0.875,x:2.5,c:"#bbddbb"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"],
-[{y:-0.875,x:5.5,c:"#bbddbb"},"`",{x:6.5},"/"],
-[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#bbddbb",t:"#000000"},"#",{x:14.5,c:"#89b087"},"*",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSymbols\n\n\n\n\nShift"],
-[{y:-0.625,x:6.5,c:"#54d6de",t:"#000000",fa:[0,0,0,1],h:1.5},"Tab >\n\n\nTab",{x:4.5,h:1.5},"< Tab\n\n\nShift Tab"],
-[{y:-0.75,x:3.5,c:"#bbddbb"},"[",{x:10.5,c:"#89b087"},"2"],
-[{y:-0.875,x:2.5,c:"#bbddbb"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"],
-[{y:-0.875,x:5.5,c:"#bbddbb"},"~",{x:6.5},"\\"],
-[{y:-0.875,c:"#2277ff",w:1.5},"Capitals\n\n\n\n\n\nShift",{c:"#bbddbb"},"%",{x:14.5,c:"#89b087"},"-",{c:"#2277ff",w:1.5},"\n\nCapitals\n\n\n\n\nShift"],
-[{y:-0.375,x:3.5,c:"#77aaff"},"Option\n\n\nLAlt",{x:10.5,c:"#89b087"},".\n\n\nOption"],
-[{y:-0.875,x:2.5,c:"#77aaff"},"Hyper",{x:1},"Cmd\n\n\nSuper",{x:8.5,c:"#89b087"},"0\n\n\nCmd",{x:1},"=\n\n\nHyper"],
-[{y:-0.75,x:0.5,c:"#77aaff"},"Ctrl\n\n\nLCtrl","Meh",{x:14.5,c:"#89b087"},"+\n\n\nMeh","Enter\n\n\nCtrl"],
-[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#54d6de"},"Left","Right"],
-[{h:2},"Space",{h:2},"Enter","Up"],
-[{x:2},"Down"],
-[{r:-30,rx:13,y:-1,x:-3},"Home","End"],
-[{x:-3},"Page\n\n\n\n\n\nUp",{h:2},"< Del\n\n\nBackspace",{h:2},"Del >\n\n\nDelete"],
-[{x:-3},"Page\n\n\n\n\n\nDown"]
-
diff --git a/keyboards/ergodox_ez/keymaps/ordinary/readme.md b/keyboards/ergodox_ez/keymaps/ordinary/readme.md
deleted file mode 100644
index 6465cd79e..000000000
--- a/keyboards/ergodox_ez/keymaps/ordinary/readme.md
+++ /dev/null
@@ -1,103 +0,0 @@
-# The Ordinary Layout, a familiar and powerful layout #
-
-The Ordinary Layout is intended to be unremarkably mundane and remarkably useful. This layout maintains most key positions from common QWERTY keyboards, and it features enhanced Symbol and Media layers compared to the default Ergodox EZ layout.
-
-The Ordinary Layout is supposed to look mostly like a normal keyboard, except in the ways that the Ergodox key arrangement is unique. The thumbs are responsible for space, enter, plus both forward and backward delete; with only a couple exceptions, all other keys are in the same place they are found on traditional keyboards.
-
-Nicholas Keene
-ordinarylayout@nicholaskeene.com
-no rights reserved, use for any purposes, credit me if you are a nice person
-
-## The Base Layout ##
-
-* The light blue keys are modifiers: traditional Control, Option, and Command keys, plus Hyper and Meh
-* The dark blue keys are Shift keys: Capitals Shift (traditional shift), Symbol Shift, and Media Shift; plus a Shift Lock key
-* Several dark blue keys double for entry of characters which would typically be in those locations
-* The turquoise keys are text navigation and manipulation
-* The red keys is Escape and it is always found in that location no matter what
-
-![Ordinary base layout](ordinary-base.png)
-
-This layout puts the modifier keys along the bottom of the keyboard where they are on most keyboards. They are in the regular order, with the addition of Hyper and Meh keys. The modifier keys are all in the same place on all layers, although some layers also assign symbols on those buttons. On the outside edges are the Shift keys. The traditional shift key is called Capitals Shift and it is in the normal location. Above that are Symbols Shift and Media Shift. Each Shift key momentarily switches the layout to that layer, and if you use the Shift Lock button you can lock the layout to that layer.
-
-Touch typists will also find tilde, tab, equals/plus, slash/pipe, and quote/double-quote sharing space on those Shift keys where they would probably be on a common keyboard. Other than the turquoise keys the only buttons which move to new locations are the Brackets and Dash and Escape. Most touch typists dont touch-type brackets or dash anyway so only Escape really requires retraining of muscle memory, and see below for the Special Escape Sequence.
-
-The four big turquoise keys are arranged differently than in the default Ergodox EZ layout. The Ordinary Layout here copies the design of the old Fingerworks TouchStream keyboard, but also reflects the natural presumptions of the author -- me! I type the space character with my right hand, and to me it makes sense for the two delete keys to be next to one another.
-
-The Forward Tab and Backward Tab keys are in their locations mostly because I ended up with two extra buttons and needed something to do with them. My muscle memory from using the Truly Ergonomic Keyboard makes me look for the Tab key with my right index finger, so it is handy to have this redundant Tab, and the idea with the Backward Tab key is that it becomes easy to navigate text fields in forms, or to indent/unindent code.
-
-## The Symbols Layer ##
-
-* The light green keys are the eponymous symbols
-* The bright green keys are F-Keys
-* The dark green keys constitute a number pad
-* The turquoise keys are the *reverse* of the turquoise keys on the base layer
-
-![Ordinary symbol layout](ordinary-symbol.png)
-
-The Ergodox EZ ships with the "Coder Layer" which I like to call the Symbols layer. There are some significant improvements in The Ordinary Layout over the default layout.
-
-The symbol keys are mostly the same as on the default layout, which did a good job in this regard, but with a few enhancements:
-
-* Angle brackets on this layer mean that curly, square, and angle brackets are all available on different layers of the same two buttons. Also, they mean that all kinds of brackets, including parentheses, are available on both the Base and Symbols layers.
-* The slash, backslash, and pipe characters are grouped together as a memory aid.
-* The & and | symbols are juxtaposed as a memory aid
-
-The number pad area here, in green, includes all four arithmetic operations in the same order found on most number pads and features an Enter key. The keycodes emitted here are normal numeric keycodes, not the number-pad specific keycodes emitted by most number pads, because this layout does not use a Num Lock key to switch the buttons between numeric keycodes and navigational keycodes. See the explanation in The Media Layout section about navigation using these same buttons.
-
-Finally, consider the turquoise text-nav keys. Here in the Symbols layer, these are *reversed* from the base layer, with the keys either mirrored or shifted. This is powerful! Often I find myself using the mouse with my right hand, and the left hand needs to press Enter. Instead of reaching the left hand over to the right side of the keyboard, now I simply tap Symbols to reverse the turquoise keys, and Enter is right where it should be.
-
-## The Media Layer ##
-
-* The dark orange keys on the left move the mouse cursor
-* The dark orange keys on the right move the text cursor
-* The light orange keys are for scrolling and paging
-* The bright green keys are more F-keys
-* The dark yellow keys signal Web and Audio applications
-* The light yellow keys signal the operating system
-* The dark gray keys do nothing in case you bump them by accident
-
-![Ordinary media layout](ordinary-media.png)
-
-This layer was inspired by the Media layer on the Ergodox EZ but takes it farther. The Fingerworks TouchStream keyboard had a very useful feature for controlling the text cursor easily and this layer does something similar. The left hand can move the mouse, the right hand moves the text cursor, in all four directions, in small or large increments. This greatly enhances navigation in text documents.
-
-Moreover, the orange keys on the right overlay the numberpad from the Symbols Layer, such that in the Media Layer the same keys can be used as if they were a number pad in navigational mode (Num Lock off). For instance, in traditional number pads the '3' key became 'Page Down', and so it is here. This means a user can do text navigation without moving either hand.
-
-Alas, the yellow keys have at best spotty success with common software. Good luck with those but don't expect too much.
-
-## Switching Between Layers ##
-
-In addition to Symbols and Media there is the Capitals layer which is exactly the same as pressing the shift key. Each layer is accessed by a shift key on each edge of the keyboard and corresponds to one of the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active.
-
-Shift buttons work in the expected way: press them and all of the keys switch to that layer; release them and the keys switch back to the base layer. If you press both of a pair of shift keys, the layer will lock on until you press both shift keys again. For instance, the widely and rightly loathed Caps Lock is engaged by pressing both Capitals Shift buttons. All the Shift keys work this way.
-
-Multiple layers can be turned on at once. The Capitals layer will affect characters on other layers to capitalize. Other layers, however, don't 'mix': Symbols blankets the base layout; Media blankets Symbols.
-
-## Special Sequences ##
-
-![Ordinary special layout](ordinary-special.png)
-
-### Escape ###
-
-The One True Location for the Escape key is segregated way up on the top left of the keyboard. The Ergodox does not have a physical button in such a location and the nearest one is home to the tilde (er, grave) which is commonly found there. In the Ordinary layout the Escape key is found on all layers in the prominent location in the corner next to the 5, whnich is easy to remember, and yet it isn't natural for those of us with muscle memory flicking our wrists up and to the left looking for Escape.
-
-The Ordinary layout offers as a consolation prize a Special sequence for Escape: Special Shift + 1. This is natural so you can tap the top left button, then the button next to it and get Escape. This gesture works in all layers.
-
-### Backspace ###
-
-At the top right corner of the Ergodox EZ you can a gesture similar to the special Escape sequence, using the 0 key, to produce a Backspace. Users of this keyboard and this layout are well advised to learn to use their thumbs for deleting text, but sometimes you are doing other computery things and just want to flick your digits up to the right and press backspace a bunch times.
-
-### RShift ###
-
-The Ordinary Layout locks layers by pressing both of a pair of shift keys. This interferes with the QMK firmware magic sequence, which is LShift+RShift. To work around this, both of the Capitals Shift keys produce a *Left Shift* keystroke. If for some reason a person needs *Right Shift* they can find it by pressing a Special Shift key, then the Capitals Shift key on the right side of the keyboard.
-
-****
-
-The Ordinary Layout for the Ergodox EZ keyboard, v4
-
-Modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
-
-No rights reserved. This software is in the public domain. Credit me if you are friendly but if you're a jerk don't bother.
-
-Details: readme.md
- https://github.com/nrrkeene/qmk_firmware/tree/master/keyboard/ergodox_ez/keymaps/ordinary
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/keymap.c b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/keymap.c
deleted file mode 100644
index a66971bef..000000000
--- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/keymap.c
+++ /dev/null
@@ -1,46 +0,0 @@
-#include "ergodox_ez.h"
-#include "debug.h"
-#include "action_layer.h"
-
-#define BASE 0
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [BASE] = KEYMAP(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F5,
- KC_TAB, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_BSLS,
- CTL_T(KC_ESC), KC_A, KC_S, KC_E, KC_T, KC_G,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC,
- KC_F1, KC_F2, KC_F3, KC_F4, KC_LGUI,
- /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLD, KC_MUTE,
- /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLU,
- /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_BSPC, CTL_T(KC_ESC), KC_LALT,
- //
- /*-*/ KC_F6, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
- /*-*/ KC_NO, KC_J, KC_U, KC_R, KC_L, KC_SCLN, KC_MINS,
- /*-*/ /*-*/ KC_Y, KC_N, KC_I, KC_O, KC_H, KC_ENT,
- /*-*/ KC_RBRC, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
- /*-*/ /*-*/ /*-*/ KC_RGUI, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
- KC_MPLY, KC_MNXT,
- KC_MPRV,
- KC_RALT, KC_QUOT, KC_SPC
- )
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE;
-};
-
-// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
- ergodox_board_led_off();
- ergodox_right_led_1_off();
- ergodox_right_led_2_off();
- ergodox_right_led_3_off();
-};
-
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-};
diff --git a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/readme.md b/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/readme.md
deleted file mode 100644
index 80475ab21..000000000
--- a/keyboards/ergodox_ez/keymaps/romanzolotarev-norman-osx/readme.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# Roman's Layout
-
-There is only one layer based on [Norman layout](https://normanlayout.info/).
-
-Looking for multiple-layer layouts?
-
-- [Symbols, arrows, plover, HJKL arrows](../romanzolotarev-norman-plover-osx-hjkl/)
-- [Same with IJKL arrows](../romanzolotarev-norman-plover-osx/)
-
-[![keyboard-layout](romanzolotarev-norman-osx.png)](http://www.keyboard-layout-editor.com/#/gists/9e89d54f1ea6eeeb7dab1b2d19d28195)
-
-## Functional Keys
-
-- Tap `F1` to mute microphone via [Shush](http://mizage.com/shush/).
-- Tap `F2` to copy screenshot to the clipboard.
-- Hold `SHIFT` and tap `F2` to save screenshot as a file.
-- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/).
-
-## CTRL/ESC
-
-CTRL and ESC are frequently used in Vim.
-
-- Tap `CTRL/ESC` to send `ESC`.
-- Hold `CTRL/ESC` to use as `CTRL`.
-
-## Activate N-rollover
-
-- Hold left `SHIFT` and right `SHIRT` and then tap `N`.
diff --git a/keyboards/ergodox_ez/readme.md b/keyboards/ergodox_ez/readme.md
deleted file mode 100644
index 67a5fb095..000000000
--- a/keyboards/ergodox_ez/readme.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# Getting started
-
-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). 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.
-
-## More technical: create your own totally custom firmware by editing the source files.
-
-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](/doc/BUILD_GUIDE.md)
- - Using a Mac and have homebrew? just run `brew tap osx-cross/avr && brew install avr-libc`
-4. Copy `keyboards/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 keymap=your_name`. For example, `make keymap=german`. This will result in a hex file, which will be called `ergodox_ez_your_name.hex`, e.g. `ergodox_ez_german.hex`.
-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! :)
-
-## Contributing your keymap
-
-The ErgoDox EZ firmware is open-source, so it would be wonderful to have your contribution! Within a very short time after launching we already amassed almost 20 user-contributed keymaps, with all sorts of creative improvements and tweaks. This is very valuable for people who aren't comfortable coding, but do want to customize their ErgoDox EZ. To make it easy for these people to use your layout, I recommend submitting your PR in the following format.
-
-1. All work goes inside your keymap subdirectory (`keymaps/german` in this example).
-2. `keymap.c` - this is your actual keymap file; please update the ASCII comments in the file so they correspond with what you did.
-3. `readme.md` - a readme file, which GitHub would display by default when people go to your directory. Explain what's different about your keymap, what you tweaked or how it works. No specific format to follow, just communicate what you did. :)
-4. Any graphics you wish to add. This is absolutely not a must. If you feel like it, you can use [Keyboard Layout Editor](http://keyboard-layout-editor.com) to make something and grab a screenshot, but it's really not a must. If you do have graphics, your readme can just embed the graphic as a link, just like I did with the default layout.
-
-
-## Finding the keycodes you need
-
-Let's say you want a certain key in your layout to send a colon; to figure out what keycode to use to make it do that, you're going to need `quantum/keymap_common.h`.
-
-That file contains a big list of all of the special, fancy keys (like, being able to send % on its own and whatnot).
-
-If you want to send a plain vanilla key, you can look up its code under `doc/keycode.txt`. That's where all the boring keys hang out.
diff --git a/keyboards/gh60/Makefile b/keyboards/gh60/Makefile
index 39a9cc0ae..57b2ef62e 100644
--- a/keyboards/gh60/Makefile
+++ b/keyboards/gh60/Makefile
@@ -1,74 +1,3 @@
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-# 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
-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 ?= yes # Breathing sleep LED during USB suspend
-NKRO_ENABLE ?= yes # USB 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 ?= YES # MIDI controls
-# UNICODE_ENABLE ?= YES # Unicode
-# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
-
-
-ifndef QUANTUM_DIR
- include ../../Makefile
-endif
-
+ifndef MAKEFILE_INCLUDED
+ include ../../Makefile
+endif
diff --git a/keyboards/gh60/config.h b/keyboards/gh60/config.h
index 4813c4e78..97753bc06 100644
--- a/keyboards/gh60/config.h
+++ b/keyboards/gh60/config.h
@@ -1,161 +1,161 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0001
-#define MANUFACTURER geekhack
-#define PRODUCT GH60
-#define DESCRIPTION t.m.k. keyboard firmware for GH60
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 14
-
-/*
- * 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 { D0, D1, D2, D3, D5 }
-// Rev A
-// #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B0, B5, B4, D7, D6, B3 }
-// Rev B/C
- #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 }
-#define UNUSED_PINS
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* 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
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER geekhack
+#define PRODUCT GH60
+#define DESCRIPTION t.m.k. keyboard firmware for GH60
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/*
+ * 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 { D0, D1, D2, D3, D5 }
+// Rev A
+// #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B0, B5, B4, D7, D6, B3 }
+// Rev B/C
+ #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* 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/keyboards/gh60/gh60.c b/keyboards/gh60/gh60.c
index 255d87de9..f5a158e12 100644
--- a/keyboards/gh60/gh60.c
+++ b/keyboards/gh60/gh60.c
@@ -1,25 +1,25 @@
-#include "gh60.h"
-
-void led_set_kb(uint8_t usb_led) {
- // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
-
- if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
- gh60_caps_led_on();
- } else {
- gh60_caps_led_off();
- }
-
- // if (usb_led & (1<<USB_LED_NUM_LOCK)) {
- // gh60_esc_led_on();
- // } else {
- // gh60_esc_led_off();
- // }
-
- // if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {
- // gh60_fn_led_on();
- // } else {
- // gh60_fn_led_off();
- // }
-
- led_set_user(usb_led);
-}
+#include "gh60.h"
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ gh60_caps_led_on();
+ } else {
+ gh60_caps_led_off();
+ }
+
+ // if (usb_led & (1<<USB_LED_NUM_LOCK)) {
+ // gh60_esc_led_on();
+ // } else {
+ // gh60_esc_led_off();
+ // }
+
+ // if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {
+ // gh60_fn_led_on();
+ // } else {
+ // gh60_fn_led_off();
+ // }
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/gh60/gh60.h b/keyboards/gh60/gh60.h
index ca30562a4..66bc2790d 100644
--- a/keyboards/gh60/gh60.h
+++ b/keyboards/gh60/gh60.h
@@ -1,74 +1,75 @@
-#ifndef GH60_H
-#define GH60_H
-
-#include "quantum.h"
-#include "led.h"
-
-/* GH60 LEDs
- * GPIO pads
- * 0 F7 WASD LEDs
- * 1 F6 ESC LED
- * 2 F5 FN LED
- * 3 F4 POKER Arrow LEDs
- * B2 Capslock LED
- * B0 not connected
- */
-inline void gh60_caps_led_on(void) { DDRB |= (1<<2); PORTB &= ~(1<<2); }
-inline void gh60_poker_leds_on(void) { DDRF |= (1<<4); PORTF &= ~(1<<4); }
-inline void gh60_fn_led_on(void) { DDRF |= (1<<5); PORTF &= ~(1<<5); }
-inline void gh60_esc_led_on(void) { DDRF |= (1<<6); PORTF &= ~(1<<6); }
-inline void gh60_wasd_leds_on(void) { DDRF |= (1<<7); PORTF &= ~(1<<7); }
-
-inline void gh60_caps_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }
-inline void gh60_poker_leds_off(void) { DDRF &= ~(1<<4); PORTF &= ~(1<<4); }
-inline void gh60_fn_led_off(void) { DDRF &= ~(1<<5); PORTF &= ~(1<<5); }
-inline void gh60_esc_led_off(void) { DDRF &= ~(1<<6); PORTF &= ~(1<<6); }
-inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }
-
-/* GH60 keymap definition macro
- * K2C, K31 and K3C are extra keys for ISO
- */
-#define KEYMAP( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
- K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \
-) { \
- { 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_##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_##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_##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_##K40, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_##K45, KC_NO, KC_NO, KC_NO, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D } \
-}
-
-/* ANSI valiant. No extra keys for ISO */
-#define KEYMAP_ANSI( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
- K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
- K40, K41, K42, K45, K4A, K4B, K4C, K4D \
-) KEYMAP( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, NO, K2D, \
- K30, NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, NO, K3D, \
- K40, K41, K42, K45, NO, K4A, K4B, K4C, K4D \
-)
-
-#define KEYMAP_HHKB( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49,\
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
- K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \
- K40, K41, K42, K45, K4A, K4B, K4C, K4D \
-) KEYMAP( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, NO, K2D, \
- K30, NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
- K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \
-)
-
-#endif
+#ifndef GH60_H
+#define GH60_H
+
+#include "quantum.h"
+#include "led.h"
+
+/* GH60 LEDs
+ * GPIO pads
+ * 0 F7 WASD LEDs
+ * 1 F6 ESC LED
+ * 2 F5 FN LED
+ * 3 F4 POKER Arrow LEDs
+ * B2 Capslock LED
+ * B0 not connected
+ */
+inline void gh60_caps_led_on(void) { DDRB |= (1<<2); PORTB &= ~(1<<2); }
+inline void gh60_poker_leds_on(void) { DDRF |= (1<<4); PORTF &= ~(1<<4); }
+inline void gh60_fn_led_on(void) { DDRF |= (1<<5); PORTF &= ~(1<<5); }
+inline void gh60_esc_led_on(void) { DDRF |= (1<<6); PORTF &= ~(1<<6); }
+inline void gh60_wasd_leds_on(void) { DDRF |= (1<<7); PORTF &= ~(1<<7); }
+
+inline void gh60_caps_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }
+inline void gh60_poker_leds_off(void) { DDRF &= ~(1<<4); PORTF &= ~(1<<4); }
+inline void gh60_fn_led_off(void) { DDRF &= ~(1<<5); PORTF &= ~(1<<5); }
+inline void gh60_esc_led_off(void) { DDRF &= ~(1<<6); PORTF &= ~(1<<6); }
+inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }
+
+/* GH60 keymap definition macro
+ * K2C, K31 and K3C are extra keys for ISO
+ */
+#define KEYMAP( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \
+}
+
+/* ANSI variant. No extra keys for ISO */
+#define KEYMAP_ANSI( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
+ K40, K41, K42, K45, K4A, K4B, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
+}
+
+/* HHKB Variant */
+#define KEYMAP_HHKB( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49,\
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \
+ K40, K41, K42, K45, K4A, K4B, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \
+}
+
+#endif
diff --git a/keyboards/gh60/keymaps/default/keymap.c b/keyboards/gh60/keymaps/default/keymap.c
index 3622be41b..92f545984 100644
--- a/keyboards/gh60/keymaps/default/keymap.c
+++ b/keyboards/gh60/keymaps/default/keymap.c
@@ -4,25 +4,25 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: qwerty */
KEYMAP(
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, GRV, \
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSPC, \
- CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NO, ENT, \
- LSFT,FN1, Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, RSFT, \
- LCTL,LGUI,LALT, SPC, BSLS,RALT,RGUI,APP, RCTL),
+ KC_ESC,KC_1,KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINS,KC_EQL,KC_GRV,\
+ KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_LBRC,KC_RBRC,KC_BSPC,\
+ KC_CAPS,KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT,KC_NO,KC_ENT,\
+ KC_LSFT,F(1),KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH,F(0),KC_RSFT,\
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_BSLS,KC_RALT,KC_RGUI,KC_APP,KC_RCTL),
/* 1: fn */
KEYMAP(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, \
- TRNS,TRNS,UP, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS),
+ KC_ESC,KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11,KC_F12,KC_TRNS,\
+ KC_TRNS,KC_TRNS,KC_UP,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
+ KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
+ KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
/* 2: arrows */
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,UP, \
- TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,LEFT,DOWN,RGHT),
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,\
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_UP,\
+ KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT),
};
const uint16_t PROGMEM fn_actions[] = {
@@ -49,7 +49,7 @@ void matrix_scan_user(void) {
//Layer LED indicators
uint32_t layer = layer_state;
-
+
if (layer & (1<<1)) {
gh60_wasd_leds_on();
gh60_fn_led_on();
@@ -57,7 +57,7 @@ void matrix_scan_user(void) {
gh60_wasd_leds_off();
gh60_fn_led_off();
}
-
+
if (layer & (1<<2)) {
gh60_poker_leds_on();
gh60_esc_led_on();
@@ -65,5 +65,5 @@ void matrix_scan_user(void) {
gh60_poker_leds_off();
gh60_esc_led_off();
}
-
+
};
diff --git a/keyboards/gh60/keymaps/robotmaxtron/Makefile b/keyboards/gh60/keymaps/robotmaxtron/Makefile
index 2e69aee29..c73cf1141 100644
--- a/keyboards/gh60/keymaps/robotmaxtron/Makefile
+++ b/keyboards/gh60/keymaps/robotmaxtron/Makefile
@@ -1,112 +1,112 @@
-#----------------------------------------------------------------------------
-# 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".
-#----------------------------------------------------------------------------
-
-# 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
-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 ?= yes # Breathing sleep LED during USB suspend
-NKRO_ENABLE ?= yes # USB 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 ?= YES # MIDI controls
-# UNICODE_ENABLE ?= YES # Unicode
-# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE ?= yes # Enable RGB Underglow
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
+#----------------------------------------------------------------------------
+# 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".
+#----------------------------------------------------------------------------
+
+# 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
+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 ?= yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE ?= yes # USB 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 ?= YES # MIDI controls
+# UNICODE_ENABLE ?= YES # Unicode
+# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE ?= yes # Enable RGB Underglow
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
+
diff --git a/keyboards/gh60/keymaps/robotmaxtron/config.h b/keyboards/gh60/keymaps/robotmaxtron/config.h
index 8272875ed..bcd753461 100644
--- a/keyboards/gh60/keymaps/robotmaxtron/config.h
+++ b/keyboards/gh60/keymaps/robotmaxtron/config.h
@@ -1,190 +1,190 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0001
-#define MANUFACTURER geekhack
-#define PRODUCT GH60
-#define DESCRIPTION t.m.k. keyboard firmware for GH60
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 14
-
-/*
- * 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 { D0, D1, D2, D3, D5 }
-// Rev A
-// #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B0, B5, B4, D7, D6, B3 }
-// Rev B/C
- #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 }
-#define UNUSED_PINS
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* 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
-
-/*
- * RGB Underglow
- * These settings are for the F4 by default:
- *
- *
- * #define ws2812_PORTREG PORTF
- * #define ws2812_DDRREG DDRF
- * #define ws2812_pin PF4
- * #define RGBLED_NUM 14 // Number of LEDs
- * #define RGBLIGHT_HUE_STEP 10
- * #define RGBLIGHT_SAT_STEP 17
- * #define RGBLIGHT_VAL_STEP 17
- *
- * The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects.
- * To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations.
- * For details, please check this keymap. keyboard/planck/keymaps/yang/keymap.c
-*/
-
-/* Deprecated code below
-#define ws2812_PORTREG PORTF
-#define ws2812_DDRREG DDRF
-#define ws2812_pin PF4
-*/
-#define RGB_DI_PIN F4
-#define RGBLIGHT_TIMER
-#define RGBLED_NUM 8 // Number of LEDs
-#define RGBLIGHT_HUE_STEP 8
-#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8
-#endif
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER geekhack
+#define PRODUCT GH60
+#define DESCRIPTION t.m.k. keyboard firmware for GH60
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/*
+ * 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 { D0, D1, D2, D3, D5 }
+// Rev A
+// #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B0, B5, B4, D7, D6, B3 }
+// Rev B/C
+ #define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* 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
+
+/*
+ * RGB Underglow
+ * These settings are for the F4 by default:
+ *
+ *
+ * #define ws2812_PORTREG PORTF
+ * #define ws2812_DDRREG DDRF
+ * #define ws2812_pin PF4
+ * #define RGBLED_NUM 14 // Number of LEDs
+ * #define RGBLIGHT_HUE_STEP 10
+ * #define RGBLIGHT_SAT_STEP 17
+ * #define RGBLIGHT_VAL_STEP 17
+ *
+ * The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects.
+ * To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations.
+ * For details, please check this keymap. keyboard/planck/keymaps/yang/keymap.c
+*/
+
+/* Deprecated code below
+#define ws2812_PORTREG PORTF
+#define ws2812_DDRREG DDRF
+#define ws2812_pin PF4
+*/
+#define RGB_DI_PIN F4
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 8 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
diff --git a/keyboards/gh60/keymaps/robotmaxtron/keymap.c b/keyboards/gh60/keymaps/robotmaxtron/keymap.c
index 263eec4e5..9acac7cec 100644
--- a/keyboards/gh60/keymaps/robotmaxtron/keymap.c
+++ b/keyboards/gh60/keymaps/robotmaxtron/keymap.c
@@ -8,9 +8,9 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
- * Base layer, pretty standard ANSI layout.
+ * Base layer, pretty standard ANSI layout.
* ,-----------------------------------------------------------.
- * |FN12| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
+ * |F(12)| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
* |-----------------------------------------------------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
* |-----------------------------------------------------------|
@@ -22,13 +22,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------'
*/
[_BL] = KEYMAP(
- FN12,1,2,3,4,5,6,7,8,9,0,MINS,EQL,BSPC, \
- TAB,Q,W,E,R,T,Y,U,I,O,P,LBRC,RBRC,BSLS, \
- FN2,A,S,D,F,G,H,J,K,L,SCLN,QUOT,NO,ENT, \
- LSFT,NO,Z,X,C,V,B,N,M,COMM,DOT,SLSH,NO,RSFT, \
- LCTL,LGUI,LALT, SPC, NO,RALT,FN0,APP, RCTL),
-
- /*
+ F(12),KC_1,KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINS,KC_EQL,KC_BSPC, \
+ KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_LBRC,KC_RBRC,KC_BSLS, \
+ F(2),KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT,KC_NO,KC_ENT, \
+ KC_LSFT,KC_NO,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH,KC_NO,KC_RSFT, \
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_NO,KC_RALT,F(0),KC_APP,KC_RCTL),
+
+ /*
* Locking arrow keys to WASD for when you need dedicated arrow keys
* ,-----------------------------------------------------------.
* | | | | | | | | | | | | | | |
@@ -43,14 +43,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------'
*/
[_AL] = KEYMAP(
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,UP,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,LEFT,DOWN,RGHT,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS),
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
+ KC_TRNS,KC_TRNS,KC_UP,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
+ KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
+ KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
- /*
+ /*
* Primary function layer, mostly the same as the traditional Pok3r layout.
* ,-------------------------------------------------------------.
* |`~ | F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12|DEL |
@@ -65,15 +65,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------------------------------------------------------------'
*/
[_FL] = KEYMAP(
- GRAVE,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12, DELETE, \
- TRNS,FN1,TRNS,TRNS,TRNS,TRNS,CALC,PGUP,UP,PGDN,PSCR,SLCK,PAUS,TRNS, \
- TRNS,MUTE,_VOLDOWN,_VOLUP,TRNS,TRNS,HOME,LEFT,DOWN,RGHT,INS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,FN3,TRNS,TRNS,TRNS,TRNS,END,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS),
-
- /*
+ KC_GRAVE,KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11,KC_F12,KC_DELETE, \
+ KC_TRNS,F(1),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_CALC,KC_PGUP,KC_UP,KC_PGDN,KC_PSCR,KC_SLCK,KC_PAUS,KC_TRNS, \
+ KC_TRNS,KC_MUTE,KC__VOLDOWN,KC__VOLUP,KC_TRNS,KC_TRNS,KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_INS,KC_TRNS,KC_TRNS,KC_TRNS, \
+ KC_TRNS,KC_TRNS,F(3),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_END,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
+ KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
+
+ /*
* Locking layer for controlling the underglow.
- *
+ *
* ,-----------------------------------------------------------.
* | | | | | | | | | | | | | | |
* |-----------------------------------------------------------|
@@ -87,11 +87,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------'
*/
[_UL] = 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,FN4,FN5,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS,FN6,FN7,FN8,FN9,FN10,FN11,TRNS,TRNS,TRNS,TRNS,TRNS, \
- TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS),
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
+ KC_TRNS,F(4),F(5),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
+ KC_TRNS,KC_TRNS,KC_TRNS,F(6),F(7),F(8),F(9),F(10),F(11),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
+ KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
};
enum function_id {
@@ -124,7 +124,7 @@ const uint16_t PROGMEM fn_actions[] = {
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
- // MACRODOWN only works in this function
+ // MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
diff --git a/keyboards/gh60/keymaps/sethbc/Makefile b/keyboards/gh60/keymaps/sethbc/Makefile
new file mode 100644
index 000000000..457a3d01d
--- /dev/null
+++ b/keyboards/gh60/keymaps/sethbc/Makefile
@@ -0,0 +1,3 @@
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/gh60/keymaps/sethbc/keymap.c b/keyboards/gh60/keymaps/sethbc/keymap.c
new file mode 100644
index 000000000..599e664e2
--- /dev/null
+++ b/keyboards/gh60/keymaps/sethbc/keymap.c
@@ -0,0 +1,76 @@
+#include "gh60.h"
+#include "action_layer.h"
+
+#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: qwerty */
+ KEYMAP_HHKB(
+ F(0),KC_1,KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9,KC_0,KC_MINS,KC_EQL,KC_BSLS,KC_GRV,\
+ KC_TAB,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_LBRC,KC_RBRC,KC_BSPC,\
+ KC_LCTL,KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT,KC_ENT,\
+ KC_LSFT,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_SLSH,KC_RSFT,F(1),\
+ KC_LCTL,KC_LALT,KC_LGUI, KC_SPC, KC_RGUI,KC_RALT,KC_APP,KC_RCTL),
+ /* 1: fn */
+ KEYMAP_HHKB(
+ KC_GRV,KC_F1,KC_F2,KC_F3,KC_F4,KC_F5,KC_F6,KC_F7,KC_F8,KC_F9,KC_F10,KC_F11,KC_F12,KC_TRNS,KC_TRNS,\
+ KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_UP,KC_TRNS,KC_TRNS,\
+ KC_TRNS,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RIGHT,KC_PENT,\
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PPLS,KC_PMNS,KC_END,KC_PGDN,KC_DOWN,KC_TRNS,KC_TRNS,\
+ KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
+};
+
+enum function_id {
+ SHIFT_ESC,
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_FUNCTION(SHIFT_ESC),
+ [1] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+void matrix_scan_user(void) {
+
+}
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ static uint8_t shift_esc_shift_mask;
+ switch (id) {
+ case SHIFT_ESC:
+ shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
+ if (record->event.pressed) {
+ if (shift_esc_shift_mask) {
+ add_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ add_key(KC_ESC);
+ send_keyboard_report();
+ }
+ } else {
+ if (shift_esc_shift_mask) {
+ del_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ del_key(KC_ESC);
+ send_keyboard_report();
+ }
+ }
+ break;
+ }
+}
diff --git a/keyboards/gh60/pinout.txt b/keyboards/gh60/pinout.txt
index 3787f938e..e9bf1983a 100644
--- a/keyboards/gh60/pinout.txt
+++ b/keyboards/gh60/pinout.txt
@@ -1,18 +1,18 @@
- /* Column pin configuration
- * col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
- * pin: F0 F1 E6 C7 C6 B6 D4 B1 B7 B5 B4 D7 D6 B3 (Rev.C)
- */
-
- /* Row pin configuration
- * row: 0 1 2 3 4
- * pin: D0 D1 D2 D3 D5
- */
-
- GPIO pads
- 0 F7 WASD LEDs
- 1 F6 ESC LED
- 2 F5 FN LED
- 3 F4 POKER Arrow LEDs
-
- B2 Capslock LED
+ /* Column pin configuration
+ * col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
+ * pin: F0 F1 E6 C7 C6 B6 D4 B1 B7 B5 B4 D7 D6 B3 (Rev.C)
+ */
+
+ /* Row pin configuration
+ * row: 0 1 2 3 4
+ * pin: D0 D1 D2 D3 D5
+ */
+
+ GPIO pads
+ 0 F7 WASD LEDs
+ 1 F6 ESC LED
+ 2 F5 FN LED
+ 3 F4 POKER Arrow LEDs
+
+ B2 Capslock LED
B0 not connected \ No newline at end of file
diff --git a/keyboards/gh60/readme.md b/keyboards/gh60/readme.md
index 92302d507..8c744bfd3 100644
--- a/keyboards/gh60/readme.md
+++ b/keyboards/gh60/readme.md
@@ -1,60 +1,62 @@
-## gh60 Rev C keyboard firmware
-
-![gh60 Rev C PCB](gh60revc.jpg)
-
- /* Column pin configuration
- * col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
- * pin: F0 F1 E6 C7 C6 B6 D4 B1 B7 B5 B4 D7 D6 B3 (Rev.C)
- */
-
- /* Row pin configuration
- * row: 0 1 2 3 4
- * pin: D0 D1 D2 D3 D5
- */
-
- GPIO pads
- 0 F7 WASD LEDs
- 1 F6 ESC LED
- 2 F5 FN LED
- 3 F4 POKER Arrow LEDs
-
- B2 Capslock LED
- B0 not connected
-
-Functions to controls LED clusters
-
- gh60_caps_led_on()
- gh60_poker_leds_on()
- gh60_fn_led_on()
- gh60_esc_led_on()
- gh60_wasd_leds_on()
-
- gh60_caps_led_off()
- gh60_poker_leds_off()
- gh60_fn_led_off()
- gh60_esc_led_off()
- gh60_wasd_leds_off()
-
-======================
-
-## Quantum MK Firmware
-
-For the full Quantum feature list, see [the parent readme.md](/readme.md).
-
-## Building
-
-Download or clone the whole firmware and navigate to the keyboards/gh60_rev_c 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.
+## gh60 Rev C keyboard firmware
+
+![gh60 Rev C PCB](gh60revc.jpg)
+
+ /* Column pin configuration
+ * col: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
+ * pin: F0 F1 E6 C7 C6 B6 D4 B1 B7 B5 B4 D7 D6 B3 (Rev.C)
+ */
+
+ /* Row pin configuration
+ * row: 0 1 2 3 4
+ * pin: D0 D1 D2 D3 D5
+ */
+
+ GPIO pads
+ 0 F7 WASD LEDs
+ 1 F6 ESC LED
+ 2 F5 FN LED
+ 3 F4 POKER Arrow LEDs
+
+ B2 Capslock LED
+ B0 not connected
+
+Functions to controls LED clusters
+
+ gh60_caps_led_on()
+ gh60_poker_leds_on()
+ gh60_fn_led_on()
+ gh60_esc_led_on()
+ gh60_wasd_leds_on()
+
+ gh60_caps_led_off()
+ gh60_poker_leds_off()
+ gh60_fn_led_off()
+ gh60_esc_led_off()
+ gh60_wasd_leds_off()
+
+======================
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/gh60_rev_c 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 default`.
+
+### Other Keymaps
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create 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 a keymap like this:
+
+```
+$ make [default|jack|<name>]
+```
+
+Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/gh60/rules.mk b/keyboards/gh60/rules.mk
new file mode 100644
index 000000000..aba680e45
--- /dev/null
+++ b/keyboards/gh60/rules.mk
@@ -0,0 +1,66 @@
+# 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
+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 ?= yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE ?= yes # USB 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 ?= YES # MIDI controls
+# UNICODE_ENABLE ?= YES # Unicode
+# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/handwired/CMD60/CMD60.c b/keyboards/handwired/CMD60/CMD60.c
new file mode 100644
index 000000000..799848e34
--- /dev/null
+++ b/keyboards/handwired/CMD60/CMD60.c
@@ -0,0 +1,8 @@
+#include "CMD60.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
diff --git a/keyboards/handwired/CMD60/CMD60.h b/keyboards/handwired/CMD60/CMD60.h
new file mode 100644
index 000000000..f90871fc7
--- /dev/null
+++ b/keyboards/handwired/CMD60/CMD60.h
@@ -0,0 +1,20 @@
+#ifndef CMD60_H
+#define CMD60_H
+
+#include "quantum.h"
+
+#define KEYMAP( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K41, K42, K45, K4A, K4B, K4C, K4D \
+ ) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO,K4A, K4B, K4C, K4D } \
+}
+
+#endif \ No newline at end of file
diff --git a/keyboards/handwired/CMD60/Makefile b/keyboards/handwired/CMD60/Makefile
new file mode 100644
index 000000000..191c6bb66
--- /dev/null
+++ b/keyboards/handwired/CMD60/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/handwired/CMD60/README.md b/keyboards/handwired/CMD60/README.md
new file mode 100644
index 000000000..83e371543
--- /dev/null
+++ b/keyboards/handwired/CMD60/README.md
@@ -0,0 +1,35 @@
+CMD60 keyboard firmware
+======================
+
+##CMD60
+
+This layout has been designed to optimize use of the left-hand, and it focussed specifically on programmers who work
+with text editors like SublimeText and Atom. It utilizes the power of Space_fn, and features a caps lock swap for Fn2
+and enter key on tap. These features allow you to keep your right hand on the mouse more and should enable you to
+achieve a higher level of productivity if you take the time to learn its function layers.
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/handwired/CMD60 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
+
+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 **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
diff --git a/keyboards/handwired/CMD60/config.h b/keyboards/handwired/CMD60/config.h
new file mode 100644
index 000000000..27eb400b8
--- /dev/null
+++ b/keyboards/handwired/CMD60/config.h
@@ -0,0 +1,162 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER cmd
+#define PRODUCT CMD60
+#define DESCRIPTION Advanced Programming Keeb Layout
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/*
+ * 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, F4, F5, F6, F7 }
+#define MATRIX_COL_PINS { B0, B1, B2, B3, B7, D0, D1, D2, D3, C6, D7, B4, B5, B6 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* 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 */
+
+/* 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/keyboards/handwired/CMD60/keymaps/default/keymap.c b/keyboards/handwired/CMD60/keymaps/default/keymap.c
new file mode 100644
index 000000000..9f9cbcd66
--- /dev/null
+++ b/keyboards/handwired/CMD60/keymaps/default/keymap.c
@@ -0,0 +1,66 @@
+#include "CMD60.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = KEYMAP( /* CMD60 - QWERTY */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ LT(3, KC_ENT), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_NO, KC_RSFT, \
+ KC_LCTL, KC_LGUI, KC_LALT, LT(2, KC_SPC), MO(3), MO(4), MO(5), TG(1) \
+ ),
+ [1] = KEYMAP( /* CMD60 - GameMode */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, \
+ KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_RSFT, \
+ KC_TRNS, KC_NO, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
+ ),
+ [2] = KEYMAP( /* CMD60 - Arrows */
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ KC_TRNS, KC_BSPC, KC_UP, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, KC_UP, KC_DEL, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, \
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
+ ),
+ [3] = KEYMAP( /* CMD60 - Functions */
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ KC_AUDIO_MUTE, KC_BSPC, KC_PGUP, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_TRNS, KC_PAUSE, KC_SLCK, KC_PSCREEN, \
+ KC_TRNS, KC_HOME, KC_PGDN, KC_END, KC_TRNS, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_INSERT, KC_NO, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
+ ),
+ [4] = KEYMAP( /* CMD60 - Mouse */
+ KC_SYSTEM_SLEEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_TRNS, KC_NO, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_WH_UP, KC_MS_BTN3, KC_MS_WH_DOWN, KC_NO, KC_NO, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
+ ),
+ [5] = KEYMAP( /* CMD60 - Media */
+ KC_SYSTEM_WAKE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_AUDIO_MUTE, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MEDIA_PREV_TRACK, KC_MEDIA_NEXT_TRACK, KC_MEDIA_PLAY_PAUSE, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WWW_BACK, KC_WWW_FORWARD, KC_NO, KC_NO, KC_WWW_REFRESH, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
+ ),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboards/handwired/CMD60/rules.mk b/keyboards/handwired/CMD60/rules.mk
new file mode 100644
index 000000000..711759917
--- /dev/null
+++ b/keyboards/handwired/CMD60/rules.mk
@@ -0,0 +1,73 @@
+
+# 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(+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
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+# 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 ?= no # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
+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
+
+ifndef QUANTUM_DIR
+ include ../../../Makefile
+endif
+
+
diff --git a/keyboards/handwired/Makefile b/keyboards/handwired/Makefile
index 57493a47c..4e2a6f00f 100644
--- a/keyboards/handwired/Makefile
+++ b/keyboards/handwired/Makefile
@@ -1,3 +1,3 @@
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../Makefile
endif \ No newline at end of file
diff --git a/keyboards/handwired/fivethirteen/Makefile b/keyboards/handwired/fivethirteen/Makefile
index 711759917..191c6bb66 100644
--- a/keyboards/handwired/fivethirteen/Makefile
+++ b/keyboards/handwired/fivethirteen/Makefile
@@ -1,73 +1,3 @@
-
-# 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(+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
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes # Console for debug(+400)
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
-# 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 ?= no # USB Nkey Rollover
-BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
-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
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../../Makefile
-endif
-
-
+endif \ No newline at end of file
diff --git a/keyboards/handwired/fivethirteen/rules.mk b/keyboards/handwired/fivethirteen/rules.mk
new file mode 100644
index 000000000..711759917
--- /dev/null
+++ b/keyboards/handwired/fivethirteen/rules.mk
@@ -0,0 +1,73 @@
+
+# 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(+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
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+# 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 ?= no # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
+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
+
+ifndef QUANTUM_DIR
+ include ../../../Makefile
+endif
+
+
diff --git a/keyboards/handwired/gamenum/Makefile b/keyboards/handwired/gamenum/Makefile
new file mode 100644
index 000000000..191c6bb66
--- /dev/null
+++ b/keyboards/handwired/gamenum/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/handwired/gamenum/README.md b/keyboards/handwired/gamenum/README.md
new file mode 100644
index 000000000..5b53004ef
--- /dev/null
+++ b/keyboards/handwired/gamenum/README.md
@@ -0,0 +1,102 @@
+GameNum firmware
+======================
+## Board overview
+
+The GameNum was designed to facilitate the use of mechanical keys for gaming even when your packing space is limited.
+It uses a standard numpad layout replacing the NumLock key with a layer toggle that allows you to cycle through the different layers.
+The standard layout features a default layer that acts as a standard numpad, a layer that was meant for simple WASD based games and a layer that was designed to be used for MOBA/RTS related games.
+The RTS layer is meant to be used rotating the device 90 degrees counterclockwise.
+
+The README.MD for this board is reasonably extensive and in-depth because the build is quite small and covers a lot of things that I feel that it would be a good starting point for getting into QMK.
+
+## Build considerations
+
+Since the GameNum is handwired and uses 2 of its pins to toggle indicator lights there are some things to keep in mind.
+Firmware was build for use with a Pro Micro based on a ATMEGA32u4 at 16mHz.
+The indicator LED's are normally assigned to `pin C6` and `pin D4`, C6 goes high when the first layer is used, D4 goes high when layer 2 is used. Both LED's are off when the default layer is enabled.
+'+' of the LED goes to the respective pins and can be joined together on the '-' into a resistor that runs to the ground pin of the pro micro. With a standard LED a resistor value of 100 ohm is fine, keep in mind that you cannot use high powered LEDS on these pins without ruining your pro micro.
+
+## schematic of the switches and diodes
+
+![schematic overview](http://i.imgur.com/fleitoA.jpg)
+
+Keep in mind that the minus of the diodes should point towards the pro micros inputs.
+
+##LED hookup
+
+![led overview](http://i.imgur.com/U6m865n.jpg)
+
+## Adding more layers
+
+Adding additional layers is pretty straight forward. Look in `keymaps/default/keymap.c` and find `#define OSY 2` add a new definition for the layer you are going to add. This can be named pretty much anything. Example: `#define NAMEHERE 3`.
+Keep in mind here that the number after the name should correspond with the number that the layer has in the stack of layers.
+
+Next thing to do is to add the actual layer for the keymap.
+
+```
+[DEF] = KEYMAP(
+ KC_FN0, KC_SLSH, KC_ASTR, KC_MINS, \
+ KC_7, KC_8, KC_9, KC_PLUS, \
+ KC_4, KC_5, KC_6, \
+ KC_1, KC_2, KC_3, \
+ KC_0, KC_DOT, KC_ENT \
+)
+```
+
+This is the default layer for the gamenum. It's generally easiest to just copy this and change things as you see fit. Keep in mind that at least 1 button on the pad has to be used to switch to the next layer in the stack or you will be stuck in that layer FOREVER! D:
+In the case of DEF this is key `KC_FN0`. Also keep in mind that the last layer that you add does not have a comma after its closing bracket but any other layer does!
+
+Which brings us nicely to the next part, the layer switching logic. Under the keymaps look for `PROGMEM fn_actions[]` this function handles the switching between layers, as you might have noticed every layer in the keymap has its own KC_FNx key. This is the key responsible for switching you from layer to layer.
+The number that is at the end of the keycode corresponds with the code in the function.
+`[0] = ACTION_LAYER_SET(HDN, ON_PRESS),` When `KC_FN0` is pressed the keyboard switches layer `HDN` on when the key is pressed down. Add an extra line for your layer here as well.
+
+Now for the LEDs, if you plan on adding extra LED's to the keyboard to indicate other layers you have to first define the pin that the LED will be using in `gamenum.c`.
+Look for this piece of code:
+
+```
+ DDRD |= (1<<4);
+ PORTD &= ~(1<<4);
+```
+
+Copy it and change the letter after DDR and PORT to the letter of your pin. Change the 4 to the number of your pin. `DDRx |= (1<<y);` defines that pin as an output. `PORTx &= ~(1<<y);` sets the pin to LOW turning off the LED.
+
+Now go back to `keymap.c` and look for the `process_record_user` function. The function is basically a switch case that checks if you pushed one of the defined layer-switch buttons. When it sees that you pushed one of them it sets the pins of the LED's either low or high.
+
+```
+ case KC_FN1:
+ if (record->event.pressed) {
+ PORTC &= ~(1 << 6); // PC6 goes low
+ PORTD |= (1<<4); //PD4 goes high
+ }
+ break;
+```
+
+This is the code for the KC_FN1 button. Notice how we check against what key is pressed in the case and then set pin C6 low and pin D4 high. Adjust this as you see fit.
+
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/handwired/gamenum folder.
+Read the README.md for the qmk repository on how to set up your developer enviroment to build your firmware with.
+Building firmware on Windows can be a bit of a hassle. Linux is a lot easier to use if you have some experience with it. A raspberry pi will already be able to build the firmware for you.
+Once your dev env is set up, you'll be able to type `make` to generate your .hex - you can then use AVRDudess to program your .hex file.
+
+### Default
+
+To build with the default keymap, simply run `make`.
+
+### Other Keymaps
+
+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 **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
+
+
diff --git a/keyboards/handwired/gamenum/config.h b/keyboards/handwired/gamenum/config.h
new file mode 100644
index 000000000..6af876ab7
--- /dev/null
+++ b/keyboards/handwired/gamenum/config.h
@@ -0,0 +1,162 @@
+/*
+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 0x1234
+#define PRODUCT_ID 0x5678
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Seth-Senpai
+#define PRODUCT GameNum
+#define DESCRIPTION Numpad with gamelayers
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#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 { B6, B2, B3, B1, F7 }
+#define MATRIX_COL_PINS { D7, E6, B4, B5 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+// #define BACKLIGHT_PIN C6
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* 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 */
+
+/* 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/keyboards/handwired/gamenum/gamenum.c b/keyboards/handwired/gamenum/gamenum.c
new file mode 100644
index 000000000..8048194bb
--- /dev/null
+++ b/keyboards/handwired/gamenum/gamenum.c
@@ -0,0 +1,14 @@
+#include "gamenum.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+ DDRC |= (1<<6);
+ PORTC &= ~(1<<6);
+
+ DDRD |= (1<<4);
+ PORTD &= ~(1<<4);
+
+ matrix_init_user();
+
+}
diff --git a/keyboards/handwired/gamenum/gamenum.h b/keyboards/handwired/gamenum/gamenum.h
new file mode 100644
index 000000000..ea633b9bf
--- /dev/null
+++ b/keyboards/handwired/gamenum/gamenum.h
@@ -0,0 +1,21 @@
+#ifndef GAMENUM_H
+#define GAMENUM_H
+
+#include "quantum.h"
+
+#define KEYMAP( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13, \
+ k20, k21, k22, \
+ k30, k31, k32, \
+ k41, k42, k43 \
+) \
+{ \
+ { k00, k01, k02, k03}, \
+ { k10, k11, k12, k13}, \
+ { k20, k21, k22, KC_NO}, \
+ { k30, k31, k32, KC_NO}, \
+ { KC_NO, k41, k42, k43} \
+}
+
+#endif
diff --git a/keyboards/handwired/gamenum/keymaps/default/keymap.c b/keyboards/handwired/gamenum/keymaps/default/keymap.c
new file mode 100644
index 000000000..6950b741a
--- /dev/null
+++ b/keyboards/handwired/gamenum/keymaps/default/keymap.c
@@ -0,0 +1,68 @@
+#include "gamenum.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+
+#define _______ KC_TRNS
+
+#define DEF 0
+#define HDN 1
+#define OSY 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[DEF] = KEYMAP(
+ KC_FN0, KC_SLSH, KC_ASTR, KC_MINS, \
+ KC_7, KC_8, KC_9, KC_PLUS, \
+ KC_4, KC_5, KC_6, \
+ KC_1, KC_2, KC_3, \
+ KC_0, KC_DOT, KC_ENT \
+),
+[HDN] = KEYMAP(
+ KC_FN1, KC_1, KC_2, KC_3, \
+ KC_Q, KC_W, KC_E, KC_R, \
+ KC_A, KC_S, KC_D, \
+ KC_Z, KC_X, KC_C, \
+ KC_LSFT, KC_LALT, KC_SPC \
+),
+[OSY] = KEYMAP(
+ KC_A, KC_Q, KC_1, KC_FN2, \
+ KC_S, KC_W, KC_2, KC_LALT, \
+ KC_D, KC_E, KC_3, \
+ KC_F, KC_R, KC_4, \
+ KC_SPC, KC_T, KC_TAB \
+)
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_SET(HDN, ON_PRESS),
+ [1] = ACTION_LAYER_SET(OSY, ON_PRESS),
+ [2] = ACTION_LAYER_SET(DEF, ON_PRESS),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ return MACRO_NONE;
+};
+
+
+bool process_record_user (uint16_t keycode, keyrecord_t *record) {
+ switch(keycode) {
+ case KC_FN0:
+ if (record->event.pressed) {
+ PORTC |= (1 << 6); // PC6 goes high
+ }
+ break;
+ case KC_FN1:
+ if (record->event.pressed) {
+ PORTC &= ~(1 << 6); // PC6 goes high
+ PORTD |= (1<<4);
+ }
+ break;
+ case KC_FN2:
+ if (record->event.pressed) {
+ PORTD &= ~(1 << 4); // PC6 goes high
+ }
+ break;
+ }
+ return true;
+} \ No newline at end of file
diff --git a/keyboards/handwired/gamenum/rules.mk b/keyboards/handwired/gamenum/rules.mk
new file mode 100644
index 000000000..afb9372e1
--- /dev/null
+++ b/keyboards/handwired/gamenum/rules.mk
@@ -0,0 +1,73 @@
+
+# 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(+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
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+# 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 ?= no # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
+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
+
+ifndef QUANTUM_DIR
+ include ../../Makefile
+endif
+
+
diff --git a/keyboards/handwired/minorca/Makefile b/keyboards/handwired/minorca/Makefile
new file mode 100644
index 000000000..191c6bb66
--- /dev/null
+++ b/keyboards/handwired/minorca/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/handwired/minorca/config.h b/keyboards/handwired/minorca/config.h
new file mode 100644
index 000000000..4cdafcbd2
--- /dev/null
+++ b/keyboards/handwired/minorca/config.h
@@ -0,0 +1,80 @@
+/*
+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 0x6660
+#define DEVICE_VER 0x0001
+#define MANUFACTURER ME
+#define PRODUCT MinOrca
+#define DESCRIPTION Tiny Whale
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/* MinOrca PCB default pin-out */
+#define MATRIX_COL_PINS { D4, D6, D7, B4, B5, B6, F7, F6, F5, F4, F1, F0 }
+#define MATRIX_ROW_PINS { B0, B1, B2, B3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/handwired/minorca/keymaps/default/Makefile b/keyboards/handwired/minorca/keymaps/default/Makefile
new file mode 100644
index 000000000..a573488a5
--- /dev/null
+++ b/keyboards/handwired/minorca/keymaps/default/Makefile
@@ -0,0 +1,25 @@
+
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../../Makefile
+endif
diff --git a/keyboards/handwired/minorca/keymaps/default/config.h b/keyboards/handwired/minorca/keymaps/default/config.h
new file mode 100644
index 000000000..bf40376c1
--- /dev/null
+++ b/keyboards/handwired/minorca/keymaps/default/config.h
@@ -0,0 +1,12 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+/* bootmagic salt key */
+#define BOOTMAGIC_KEY_SALT KC_ESC
+
+/* skip bootmagic and eeconfig */
+#define BOOTMAGIC_KEY_SKIP KC_SPACE
+
+#endif
diff --git a/keyboards/handwired/minorca/keymaps/default/keymap.c b/keyboards/handwired/minorca/keymaps/default/keymap.c
new file mode 100644
index 000000000..a55d578e4
--- /dev/null
+++ b/keyboards/handwired/minorca/keymaps/default/keymap.c
@@ -0,0 +1,44 @@
+// 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 "minorca.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = { /* Base */
+ {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC },
+ {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, XXXXXXX, KC_ENT },
+ {KC_LCTRL,XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_QUOT, KC_FN1, KC_FN0 },
+ {KC_NO, XXXXXXX, KC_NO, KC_LALT, KC_SPC, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, KC_DOT, KC_SLSH, KC_NO }
+ },
+ [1] = { /* First */
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELT },
+ {KC_TAB, KC_MPRV, KC_MPLY, KC_MNXT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, XXXXXXX, KC_LGUI },
+ {KC_LCTRL,XXXXXXX, KC_Z, KC_X, KC_C, KC_PGDN, KC_END, KC_L, KC_SCLN, KC_UP, KC_FN1, KC_FN0 },
+ {KC_NO, XXXXXXX, KC_NO, KC_LALT, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_DOWN, KC_RIGHT,KC_NO }
+ },
+ [2] = { /* Second */
+ {KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DELT },
+ {KC_TAB, KC_MUTE, KC_VOLD, KC_VOLU, KC_TILD, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, XXXXXXX, KC_ENT },
+ {KC_CAPS, XXXXXXX, KC_LSFT, KC_RSFT, KC_PAUSE,KC_F10, KC_F11, KC_F12, KC_NO, KC_UP, KC_FN1, KC_FN0 },
+ {KC_NO, XXXXXXX, KC_NO, KC_LALT, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_DOWN, KC_RIGHT,KC_NO }
+ },
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_MOMENTARY(1), // to First overlay
+ [1] = ACTION_LAYER_MOMENTARY(2), // to Second overlay
+
+}; \ No newline at end of file
diff --git a/keyboards/handwired/minorca/keymaps/default/readme.md b/keyboards/handwired/minorca/keymaps/default/readme.md
new file mode 100644
index 000000000..6ed31f82b
--- /dev/null
+++ b/keyboards/handwired/minorca/keymaps/default/readme.md
@@ -0,0 +1,5 @@
+# The Default Minorca Layout
+
+Copied from https://github.com/pancinteractive/qmk_firmware/blob/master/keyboard/minorca_mkV/keymaps/default/keymap.c
+
+It looks incomplete. \ No newline at end of file
diff --git a/keyboards/handwired/minorca/keymaps/readme.md b/keyboards/handwired/minorca/keymaps/readme.md
new file mode 100644
index 000000000..058923ba2
--- /dev/null
+++ b/keyboards/handwired/minorca/keymaps/readme.md
@@ -0,0 +1,23 @@
+# 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.h` *optional*, found automatically when compiling
+* `Makefile` *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 Minorca keymaps
+
+* **default** default Minorca layout
+* **rgb** layout with WS2812b control
diff --git a/keyboards/handwired/minorca/keymaps/rgb/Makefile b/keyboards/handwired/minorca/keymaps/rgb/Makefile
new file mode 100644
index 000000000..2b2af1335
--- /dev/null
+++ b/keyboards/handwired/minorca/keymaps/rgb/Makefile
@@ -0,0 +1,25 @@
+
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../../Makefile
+endif
diff --git a/keyboards/handwired/minorca/keymaps/rgb/config.h b/keyboards/handwired/minorca/keymaps/rgb/config.h
new file mode 100644
index 000000000..43b3c5911
--- /dev/null
+++ b/keyboards/handwired/minorca/keymaps/rgb/config.h
@@ -0,0 +1,20 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+/* bootmagic salt key */
+#define BOOTMAGIC_KEY_SALT KC_ESC
+
+/* skip bootmagic and eeconfig */
+#define BOOTMAGIC_KEY_SKIP KC_SPACE
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D5
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 13 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+#endif
diff --git a/keyboards/handwired/minorca/keymaps/rgb/example.jpg b/keyboards/handwired/minorca/keymaps/rgb/example.jpg
new file mode 100644
index 000000000..a04c8d37d
--- /dev/null
+++ b/keyboards/handwired/minorca/keymaps/rgb/example.jpg
Binary files differ
diff --git a/keyboards/handwired/minorca/keymaps/rgb/keymap.c b/keyboards/handwired/minorca/keymaps/rgb/keymap.c
new file mode 100644
index 000000000..9002afbb8
--- /dev/null
+++ b/keyboards/handwired/minorca/keymaps/rgb/keymap.c
@@ -0,0 +1,65 @@
+// 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 "minorca.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+#define _TB 3
+
+// Macro name shortcuts
+#define QWERTY M(_QWERTY)
+#define LOWER M(_LOWER)
+#define RAISE M(_RAISE)
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QWERTY] = { /* Qwerty */
+ {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {FUNC(0), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, XXXXXXX, KC_QUOT},
+ {KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, FUNC(1)},
+ {KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, FUNC(2), XXXXXXX, XXXXXXX, FUNC(3), XXXXXXX, KC_RALT, KC_APP, KC_RCTL}
+},
+
+[_RAISE] = {
+ {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUSE, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), XXXXXXX, S(KC_BSLS)},
+ {KC_TRNS, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_ENT},
+ {KC_TRNS, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, KC_TRNS, XXXXXXX, KC_MNXT, KC_MUTE, KC_MPLY}
+},
+
+[_LOWER] = {
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, XXXXXXX, KC_BSLS},
+ {KC_TRNS, XXXXXXX, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_PGUP, KC_ENT},
+ {KC_TRNS, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, KC_TRNS, XXXXXXX, KC_HOME, KC_PGDN, KC_END}
+},
+
+[_TB] = { /* Tab */
+ {KC_ESC, KC_CALC, KC_WHOM, KC_MAIL, KC_MYCM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, KC_TRNS},
+ {KC_TRNS, XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_UP, KC_ENT},
+ {BL_STEP, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, KC_TRNS, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT}
+}
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_TAP_KEY(_TB, KC_TAB),
+ [1] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),
+ [2] = ACTION_LAYER_TAP_KEY(_RAISE, KC_SPC),
+ [3] = ACTION_LAYER_TAP_KEY(_LOWER, KC_SPC),
+};
diff --git a/keyboards/handwired/minorca/keymaps/rgb/readme.md b/keyboards/handwired/minorca/keymaps/rgb/readme.md
new file mode 100644
index 000000000..f50dfa546
--- /dev/null
+++ b/keyboards/handwired/minorca/keymaps/rgb/readme.md
@@ -0,0 +1,25 @@
+#RGB backlight for MinOrca
+
+![wiring](example.jpg)
+
+Example of adding WS2812b LEDs to a MinOrca.
+
+http://www.40percent.club/2016/08/tiny-whale.html
+
+The keymap is a work in progress. The RGB functions are accessed by holding down the TAB key.
+
+* Tab + Z Toggle on/off
+* Tab + X Mode
+* Tab + C Hue+
+* Tab + V Hue-
+* Tab + B Saturation+
+* Tab + N Saturation-
+* Tab + M Brightness+
+* Tab + , Brightness-
+
+Example wiring:
+
+WS2812 data pin is connected to D5
+
+![wiring](wiring1.jpg)
+![wiring closeup](wiring2.jpg)
diff --git a/keyboards/handwired/minorca/keymaps/rgb/wiring1.jpg b/keyboards/handwired/minorca/keymaps/rgb/wiring1.jpg
new file mode 100644
index 000000000..7dcbe80c5
--- /dev/null
+++ b/keyboards/handwired/minorca/keymaps/rgb/wiring1.jpg
Binary files differ
diff --git a/keyboards/handwired/minorca/keymaps/rgb/wiring2.jpg b/keyboards/handwired/minorca/keymaps/rgb/wiring2.jpg
new file mode 100644
index 000000000..fd91d3e1c
--- /dev/null
+++ b/keyboards/handwired/minorca/keymaps/rgb/wiring2.jpg
Binary files differ
diff --git a/keyboards/handwired/minorca/minorca.c b/keyboards/handwired/minorca/minorca.c
new file mode 100644
index 000000000..24e72c2a5
--- /dev/null
+++ b/keyboards/handwired/minorca/minorca.c
@@ -0,0 +1,6 @@
+#include "minorca.h"
+
+void matrix_init_kb(void) {
+
+ matrix_init_user();
+} \ No newline at end of file
diff --git a/keyboards/handwired/minorca/minorca.h b/keyboards/handwired/minorca/minorca.h
new file mode 100644
index 000000000..158e5b4c5
--- /dev/null
+++ b/keyboards/handwired/minorca/minorca.h
@@ -0,0 +1,6 @@
+#ifndef MINORCA_H
+#define MINORCA_H
+
+#include "quantum.h"
+
+#endif
diff --git a/keyboards/handwired/minorca/readme.md b/keyboards/handwired/minorca/readme.md
new file mode 100644
index 000000000..93c767954
--- /dev/null
+++ b/keyboards/handwired/minorca/readme.md
@@ -0,0 +1,33 @@
+minorca keyboard firmware
+======================
+Handwired 40% keyboard
+
+http://www.panc.co/blog/minorcasebright-information-page
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button.
+
+Depending on which keymap you would like to use, you will have to compile slightly differently.
+
+### Default
+To build with the default keymap, simply run `make`.
+
+### Other Keymaps
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create 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.
+
+### Notable forks (which some of the keymap files are from)
+- [Shane's Fork](https://github.com/shanecelis/tmk_keyboard/tree/master/keyboard/planck)
+- [Pierre's Fork](https://github.com/pcarrier/tmk_keyboard/blob/pcarrier/planck/keyboard/gh60/keymap_planck.c)
+- [Nathan's Fork](https://github.com/nathanrosspowell/tmk_keyboard/tree/planck-jack/keyboard/planck)
+- [Matthew's Fork](https://github.com/pepers/tmk_keyboard/tree/master/keyboard/planck_grid)
diff --git a/keyboards/handwired/minorca/rules.mk b/keyboards/handwired/minorca/rules.mk
new file mode 100644
index 000000000..c51371a78
--- /dev/null
+++ b/keyboards/handwired/minorca/rules.mk
@@ -0,0 +1,67 @@
+# 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
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+NKRO_ENABLE ?= yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality
+MIDI_ENABLE ?= no # MIDI controls
+AUDIO_ENABLE ?= no # Audio output on port C6
+UNICODE_ENABLE ?= no # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE ?= yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend \ No newline at end of file
diff --git a/keyboards/handwired/onekey/Makefile b/keyboards/handwired/onekey/Makefile
index c6d10856a..191c6bb66 100644
--- a/keyboards/handwired/onekey/Makefile
+++ b/keyboards/handwired/onekey/Makefile
@@ -1,65 +1,3 @@
-
-
-# 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(+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 ?= no # 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
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../../Makefile
endif \ No newline at end of file
diff --git a/keyboards/handwired/onekey/rules.mk b/keyboards/handwired/onekey/rules.mk
new file mode 100644
index 000000000..c6d10856a
--- /dev/null
+++ b/keyboards/handwired/onekey/rules.mk
@@ -0,0 +1,65 @@
+
+
+# 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(+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 ?= no # 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
+
+ifndef QUANTUM_DIR
+ include ../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/handwired/promethium/Makefile b/keyboards/handwired/promethium/Makefile
new file mode 100644
index 000000000..191c6bb66
--- /dev/null
+++ b/keyboards/handwired/promethium/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/handwired/promethium/config.h b/keyboards/handwired/promethium/config.h
new file mode 100644
index 000000000..473af67d3
--- /dev/null
+++ b/keyboards/handwired/promethium/config.h
@@ -0,0 +1,162 @@
+/*
+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 0x6660
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Priyadi
+#define PRODUCT Promethium Keyboard
+#define DESCRIPTION Promethium Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 6
+
+/* default pin-out */
+#define MATRIX_COL_PINS { B6, B7, D6, C7, F6, F7 }
+#define MATRIX_ROW_PINS { D7, C6, D0, D1, F5, F4, F1, F0 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT) | MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RCTRL)) \
+)
+
+/*
+ * 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
+
+/* PS/2 mouse */
+#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 2
+#endif
+
+/* PS/2 mouse interrupt version */
+#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 3
+#define PS2_DATA_PORT PORTD
+#define PS2_DATA_PIN PIND
+#define PS2_DATA_DDR DDRD
+#define PS2_DATA_BIT 2
+
+#define PS2_INT_INIT() do { \
+ EICRA |= ((1<<ISC31) | \
+ (0<<ISC30)); \
+} while (0)
+#define PS2_INT_ON() do { \
+ EIMSK |= (1<<INT3); \
+} while (0)
+#define PS2_INT_OFF() do { \
+ EIMSK &= ~(1<<INT3); \
+} while (0)
+#define PS2_INT_VECT INT3_vect
+#endif
+
+/* PS/2 mouse USART version */
+#ifdef PS2_USE_USART
+/* 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
+#endif
+
+
+#endif
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/Makefile b/keyboards/handwired/promethium/keymaps/priyadi/Makefile
new file mode 100644
index 000000000..46fdfa011
--- /dev/null
+++ b/keyboards/handwired/promethium/keymaps/priyadi/Makefile
@@ -0,0 +1,29 @@
+
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+UNICODEMAP_ENABLE = yes
+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.
+PS2_MOUSE_ENABLE = yes
+PS2_USE_INT = yes
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../../Makefile
+endif
+
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/config.h b/keyboards/handwired/promethium/keymaps/priyadi/config.h
new file mode 100644
index 000000000..8b78c0dc4
--- /dev/null
+++ b/keyboards/handwired/promethium/keymaps/priyadi/config.h
@@ -0,0 +1,17 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+/* bootmagic salt key */
+#define BOOTMAGIC_KEY_SALT KC_ESC
+
+/* skip bootmagic and eeconfig */
+#define BOOTMAGIC_KEY_SKIP KC_SPACE
+
+#define PREVENT_STUCK_MODIFIERS
+
+#define RGB_DI_PIN B5
+#define RGBSPS_NUM 57
+
+#endif
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/flash.sh b/keyboards/handwired/promethium/keymaps/priyadi/flash.sh
new file mode 100755
index 000000000..14a3b4378
--- /dev/null
+++ b/keyboards/handwired/promethium/keymaps/priyadi/flash.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+sleep 10
+avrdude -p m32u4 -P /dev/ttyACM0 -c avr109 -U flash:w:../../../../../.build/handwired_promethium_priyadi.hex
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
new file mode 100644
index 000000000..bf797a749
--- /dev/null
+++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
@@ -0,0 +1,841 @@
+// 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 "promethium.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+ #include "musical_notes.h"
+#endif
+#include "eeconfig.h"
+#include "process_unicode.h"
+#include "quantum.h"
+#include "rgbsps.h"
+#include "ps2_mouse.h"
+#include "ps2.h"
+#define COUNT(x) (sizeof (x) / sizeof (*(x)))
+
+// #define RGBLED_NUM 5
+// struct cRGB led[RGBLED_NUM];
+
+
+extern keymap_config_t keymap_config;
+
+enum layers {
+ _QWERTY,
+ _COLEMAK,
+ _WORKMAN,
+ _PUNC,
+ _NUM,
+ _FUNC,
+ _EMOJI,
+ _GUI,
+};
+
+enum planck_keycodes {
+ // layouts
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ WORKMAN,
+
+ // layer switchers
+ PUNC,
+ NUM,
+ FUNC,
+ EMOJI,
+ GUI,
+
+ // os switchers
+ LINUX,
+ WIN,
+ OSX,
+};
+
+// Fillers to make layering clearer
+
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// unicode map
+
+enum unicode_name {
+ GRIN, // grinning face 😊
+ TJOY, // tears of joy 😂
+ SMILE, // grining face with smiling eyes ðŸ˜
+ HEART, // heart â¤
+ EYERT, // smiling face with heart shaped eyes ðŸ˜
+ CRY, // crying face 😭
+ SMEYE, // smiling face with smiling eyes 😊
+ UNAMU, // unamused 😒
+ KISS, // kiss 😘
+ HART2, // two hearts 💕
+ WEARY, // weary 😩
+ OKHND, // ok hand sign 👌
+ PENSV, // pensive 😔
+ SMIRK, // smirk ðŸ˜
+ RECYC, // recycle â™»
+ WINK, // wink 😉
+ THMUP, // thumb up ðŸ‘
+ THMDN, // thumb down 👎
+ PRAY, // pray ðŸ™
+ PHEW, // relieved 😌
+ MUSIC, // musical notes
+ FLUSH, // flushed 😳
+ CELEB, // celebration 🙌
+ CRY2, // crying face 😢
+ COOL, // smile with sunglasses 😎
+ NOEVS, // see no evil
+ NOEVH, // hear no evil
+ NOEVK, // speak no evil
+ POO, // pile of poo
+ EYES, // eyes
+ VIC, // victory hand
+ BHART, // broken heart
+ SLEEP, // sleeping face
+ SMIL2, // smiling face with open mouth & sweat
+ HUNRD, // 100
+ CONFU, // confused
+ TONGU, // face with tongue & winking eye
+ DISAP, // disappointed
+ YUMMY, // face savoring delicious food
+ CLAP, // hand clapping
+ FEAR, // face screaming in fear
+ HORNS, // smiling face with horns
+ HALO, // smiling face with halo
+ BYE, // waving hand
+ SUN, // sun
+ MOON, // moon
+ SKULL, // skull
+};
+
+const uint32_t PROGMEM unicode_map[] = {
+ [GRIN] = 0x1F600,
+ [TJOY] = 0x1F602,
+ [SMILE] = 0x1F601,
+ [HEART] = 0x2764,
+ [EYERT] = 0x1f60d,
+ [CRY] = 0x1f62d,
+ [SMEYE] = 0x1F60A,
+ [UNAMU] = 0x1F612,
+ [KISS] = 0x1F618,
+ [HART2] = 0x1F495,
+ [WEARY] = 0x1F629,
+ [OKHND] = 0x1F44C,
+ [PENSV] = 0x1F614,
+ [SMIRK] = 0x1F60F,
+ [RECYC] = 0x267B,
+ [WINK] = 0x1F609,
+ [THMUP] = 0x1F44D,
+ [THMDN] = 0x1F44E,
+ [PRAY] = 0x1F64F,
+ [PHEW] = 0x1F60C,
+ [MUSIC] = 0x1F3B6,
+ [FLUSH] = 0x1F633,
+ [CELEB] = 0x1F64C,
+ [CRY2] = 0x1F622,
+ [COOL] = 0x1F60E,
+ [NOEVS] = 0x1F648,
+ [NOEVH] = 0x1F649,
+ [NOEVK] = 0x1F64A,
+ [POO] = 0x1F4A9,
+ [EYES] = 0x1F440,
+ [VIC] = 0x270C,
+ [BHART] = 0x1F494,
+ [SLEEP] = 0x1F634,
+ [SMIL2] = 0x1F605,
+ [HUNRD] = 0x1F4AF,
+ [CONFU] = 0x1F615,
+ [TONGU] = 0x1F61C,
+ [DISAP] = 0x1F61E,
+ [YUMMY] = 0x1F60B,
+ [CLAP] = 0x1F44F,
+ [FEAR] = 0x1F631,
+ [HORNS] = 0x1F608,
+ [HALO] = 0x1F607,
+ [BYE] = 0x1F44B,
+ [SUN] = 0x2600,
+ [MOON] = 0x1F314,
+ [SKULL] = 0x1F480,
+};
+
+
+// hybrid shift - =
+// #undef KC_LSFT
+// #define KC_LSFT MT(MOD_LSFT, KC_MINS)
+// #undef KC_RSFT
+// #define KC_RSFT MT(MOD_LSFT, KC_EQL)
+
+
+// hybrid right-gui & scroll lock (mapped to Compose in OS)
+#undef KC_RCTL
+#define KC_RCTL MT(MOD_LCTL, KC_SLCK)
+
+// RGBSPS
+
+const uint8_t PROGMEM LED_ALNUM[] = {
+ LED_Z,
+ LED_A,
+ LED_Q,
+ LED_W,
+ LED_S,
+ LED_X,
+ LED_C,
+ LED_D,
+ LED_E,
+ LED_R,
+ LED_F,
+ LED_V,
+ LED_B,
+ LED_G,
+ LED_T,
+ LED_N,
+ LED_HH,
+ LED_Y,
+ LED_U,
+ LED_J,
+ LED_M,
+ LED_COMM,
+ LED_K,
+ LED_I,
+ LED_O,
+ LED_L,
+ LED_DOT,
+ LED_SLSH,
+ LED_SCLN,
+ LED_P,
+ LED_LSPC,
+ LED_RSPC
+};
+
+const uint8_t PROGMEM LED_MODS[] = {
+ LED_TAB,
+ LED_ESC,
+ LED_LSFT,
+ LED_LCTL,
+ LED_LGUI,
+ LED_LALT,
+ LED_RALT,
+ LED_RGUI,
+ LED_BKSP,
+ LED_ENT,
+ LED_RSFT,
+ LED_RCTL
+};
+
+const uint8_t PROGMEM LED_FN[] = {
+ LED_PUNC,
+ LED_NUM,
+ LED_FUNC,
+ LED_EMOJI
+};
+
+const uint8_t PROGMEM LED_INDICATORS[] = {
+ LED_IND_EMOJI,
+ LED_IND_NUM,
+ LED_IND_FUNC,
+ LED_IND_BATTERY,
+ LED_IND_USB,
+ LED_IND_BLUETOOTH,
+};
+
+const uint8_t PROGMEM LED_TRACKPOINT[] = {
+ LED_TRACKPOINT1,
+ LED_TRACKPOINT2,
+ LED_TRACKPOINT3,
+};
+
+void led_reset(void) {
+ for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
+ rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 15, 6, 0);
+ }
+
+ for(uint8_t i = 0; i < COUNT(LED_MODS); i++) {
+ rgbsps_set(pgm_read_byte(&LED_MODS[i]), 15, 0, 0);
+ }
+
+ for(uint8_t i = 0; i < COUNT(LED_FN); i++) {
+ rgbsps_set(pgm_read_byte(&LED_FN[i]), 15, 15, 15);
+ }
+}
+
+void led_layer_normal(void) {
+ rgbsps_set(LED_IND_FUNC, 0, 0, 0);
+ rgbsps_set(LED_IND_NUM, 0, 0, 0);
+ rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
+
+ led_reset();
+
+ rgbsps_send();
+}
+
+void led_layer_func(void) {
+ rgbsps_set(LED_IND_FUNC, 0, 15, 0);
+ rgbsps_set(LED_IND_NUM, 0, 0, 0);
+ rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
+
+ led_reset();
+
+ for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
+ rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 0, 0, 0);
+ }
+
+ rgbsps_set(LED_I, 15, 0, 15);
+ rgbsps_set(LED_J, 15, 0, 15);
+ rgbsps_set(LED_K, 15, 0, 15);
+ rgbsps_set(LED_L, 15, 0, 15);
+
+ rgbsps_set(LED_U, 15, 0, 0);
+ rgbsps_set(LED_O, 15, 0, 0);
+ rgbsps_set(LED_COMM, 15, 0, 0);
+ rgbsps_set(LED_DOT, 15, 0, 0);
+ rgbsps_set(LED_SCLN, 15, 0, 0);
+ rgbsps_set(LED_P, 15, 0, 0);
+
+ rgbsps_set(LED_Q, 0, 15, 0);
+ rgbsps_set(LED_W, 0, 15, 0);
+ rgbsps_set(LED_E, 0, 15, 0);
+ rgbsps_set(LED_R, 0, 15, 0);
+ rgbsps_set(LED_A, 0, 15, 0);
+ rgbsps_set(LED_S, 0, 15, 0);
+ rgbsps_set(LED_D, 0, 15, 0);
+ rgbsps_set(LED_F, 0, 15, 0);
+ rgbsps_set(LED_Z, 0, 15, 0);
+ rgbsps_set(LED_X, 0, 15, 0);
+ rgbsps_set(LED_C, 0, 15, 0);
+ rgbsps_set(LED_V, 0, 15, 0);
+
+ rgbsps_send();
+}
+
+void led_layer_punc(void) {
+ rgbsps_set(LED_IND_FUNC, 0, 15, 0);
+ rgbsps_set(LED_IND_NUM, 0, 0, 15);
+ rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
+
+ led_reset();
+
+ rgbsps_send();
+}
+
+void led_layer_num(void) {
+ rgbsps_set(LED_IND_FUNC, 0, 0, 0);
+ rgbsps_set(LED_IND_NUM, 0, 0, 15);
+ rgbsps_set(LED_IND_EMOJI, 0, 0, 0);
+
+ led_reset();
+
+ for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
+ rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 0, 0, 0);
+ }
+
+ rgbsps_set(LED_U, 0, 5, 15);
+ rgbsps_set(LED_I, 0, 5, 15);
+ rgbsps_set(LED_O, 0, 5, 15);
+ rgbsps_set(LED_J, 0, 5, 15);
+ rgbsps_set(LED_K, 0, 5, 15);
+ rgbsps_set(LED_L, 0, 5, 15);
+ rgbsps_set(LED_M, 0, 5, 15);
+ rgbsps_set(LED_COMM, 0, 5, 15);
+ rgbsps_set(LED_DOT, 0, 5, 15);
+ rgbsps_set(LED_FUNC, 0, 5, 15);
+
+ rgbsps_set(LED_EMOJI, 0, 10, 15);
+ rgbsps_set(LED_RALT, 0, 10, 15);
+
+ rgbsps_set(LED_Q, 0, 10, 15);
+ rgbsps_set(LED_W, 0, 10, 15);
+ rgbsps_set(LED_E, 0, 10, 15);
+ rgbsps_set(LED_R, 0, 10, 15);
+ rgbsps_set(LED_T, 0, 10, 15);
+ rgbsps_set(LED_Y, 0, 10, 15);
+ rgbsps_set(LED_P, 0, 10, 15);
+
+ rgbsps_set(LED_A, 0, 15, 15);
+ rgbsps_set(LED_S, 0, 15, 15);
+ rgbsps_set(LED_D, 0, 15, 15);
+ rgbsps_set(LED_F, 0, 15, 15);
+ rgbsps_set(LED_Z, 0, 15, 15);
+ rgbsps_set(LED_X, 0, 15, 15);
+ rgbsps_set(LED_C, 0, 15, 15);
+ rgbsps_set(LED_V, 0, 15, 15);
+
+ rgbsps_send();
+}
+
+void led_layer_emoji(void) {
+ for(uint8_t i = 0; i < COUNT(LED_ALNUM); i++) {
+ rgbsps_set(pgm_read_byte(&LED_ALNUM[i]), 15, 15, 0);
+ }
+ for(uint8_t i = 0; i < COUNT(LED_MODS); i++) {
+ rgbsps_set(pgm_read_byte(&LED_MODS[i]), 15, 15, 0);
+ }
+ for(uint8_t i = 0; i < COUNT(LED_FN); i++) {
+ rgbsps_set(pgm_read_byte(&LED_FN[i]), 15, 15, 0);
+ }
+
+ rgbsps_set(LED_IND_FUNC, 0, 0, 0);
+ rgbsps_set(LED_IND_NUM, 0, 0, 0);
+ rgbsps_set(LED_IND_EMOJI, 15, 15, 0);
+
+ rgbsps_set(LED_PUNC, 15, 15, 15);
+ rgbsps_set(LED_EMOJI, 15, 15, 15);
+
+ rgbsps_send();
+}
+
+void led_layer_gui(void) {
+ rgbsps_set(LED_IND_FUNC, 15, 10, 15);
+ rgbsps_set(LED_IND_NUM, 15, 10, 15);
+ rgbsps_set(LED_IND_EMOJI, 15, 10, 15);
+ rgbsps_send();
+}
+
+void led_init(void) {
+ // turn off all
+ rgbsps_turnoff();
+
+ // set trackpoint color
+ rgbsps_set(LED_TRACKPOINT1, 15, 0, 0);
+ rgbsps_set(LED_TRACKPOINT2, 0, 0, 15);
+ rgbsps_set(LED_TRACKPOINT3, 15, 0, 0);
+
+ // // hardcode indicator for now
+ rgbsps_set(LED_IND_BLUETOOTH, 0, 0, 15);
+ rgbsps_set(LED_IND_USB, 15, 15, 15);
+ rgbsps_set(LED_IND_BATTERY, 0, 15, 0);
+
+ led_layer_normal();
+}
+
+
+// keymaps
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = KEYMAP(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT ,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = KEYMAP(
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT ,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL
+),
+
+/* Workman
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | D | R | W | B | J | F | U | P | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | H | T | G | Y | N | E | O | I |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | M | C | V | K | K | , | . | / |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_WORKMAN] = KEYMAP(
+ KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSPC,
+ KC_ESC, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_ENT ,
+ KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL
+),
+
+/* Punc
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | ` |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | \ | - | = | < | > | ( | ) | ' | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | _ | + | { | } | [ | ] | " | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_PUNC] = KEYMAP(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_GRV ,
+ XXXXXXX, XXXXXXX, KC_BSLS, KC_MINS, KC_EQL, KC_LABK, KC_RABK, KC_LPRN, KC_RPRN, KC_QUOT, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_DQUO, XXXXXXX, XXXXXXX,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Num
+ * ,-----------------------------------------------------------------------------------.
+ * | ^ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | @ | A | B | C | ( | ) | 4 | 5 | 6 | : |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | & | # | D | E | F | [ | ] | 1 | 2 | 3 | / | * |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | x | | | 0 | , | . | + | - |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_NUM] = KEYMAP(
+ KC_CIRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_ESC, KC_AT, S(KC_A), S(KC_B), S(KC_C), KC_LPRN, KC_RPRN, KC_4, KC_5, KC_6, KC_COLN, KC_ENT,
+ KC_AMPR, KC_HASH, S(KC_D), S(KC_E), S(KC_F), KC_LBRC, KC_RBRC, KC_1, KC_2, KC_3, KC_SLSH, KC_ASTR,
+ _______, _______, _______, KC_X, _______, KC_SPC, KC_SPC, KC_0, KC_COMM, KC_DOT, KC_PLUS, KC_MINS
+),
+
+/* Func
+ * ,-----------------------------------------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | | | PgUp | Up | PgDn | PgUp | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | F5 | F6 | F7 | F8 |PrtSc | | Left | Down | Right| PgDn | Ins |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F9 | F10 | F11 | F12 | | | | Home | End | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FUNC] = KEYMAP(
+ XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL,
+ XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8,KC_PSCREEN,XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_INS,
+ _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Emoji
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_EMOJI] = KEYMAP(
+ X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW),
+ X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS),
+ X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH),
+ X(POO), X(EYES),X(HUNRD), _______,X(SKULL),X(HORNS), X(HALO), X(FEAR), _______,X(YUMMY),X(DISAP),X(NOEVK)
+),
+
+/* GUI
+ * ,-----------------------------------------------------------------------------------.
+ * | | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |Linux | | Vol- | Mute | Vol+ | | | D- | | D+ | |Qwerty|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Win | | Prev | Play | Next | | | | | | |Colmak|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | OSX | | | | | BL- | BL+ | | | | |Workmn|
+ * `-----------------------------------------------------------------------------------'
+ */
+[_GUI] = KEYMAP(
+ _______, LGUI(KC_1),LGUI(KC_2),LGUI(KC_3),LGUI(KC_4),LGUI(KC_5),LGUI(KC_6),LGUI(KC_7),LGUI(KC_8),LGUI(KC_9),LGUI(KC_0), _______,
+ LINUX, _______, KC_VOLD, KC_MUTE, KC_VOLU,_______,_______,KC_WWW_BACK,_______,KC_WWW_FORWARD,_______, QWERTY,
+ WIN, _______, KC_MPRV, KC_MPLY, KC_MNXT, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, COLEMAK,
+ OSX, _______, _______, _______, _______, BL_DEC, BL_INC, _______, _______, RGB_VAI, RGB_VAD, WORKMAN
+),
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_workman[][2] = SONG(DVORAK_SOUND);
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+float tone_linux[][2] = SONG(CAPS_LOCK_ON_SOUND);
+float tone_windows[][2] = SONG(SCROLL_LOCK_ON_SOUND);
+float tone_osx[][2] = SONG(NUM_LOCK_ON_SOUND);
+float tone_click[][2] = SONG(MUSICAL_NOTE(_F3, 2));
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ #ifdef AUDIO_ENABLE
+ // faux clicky
+ if (record->event.pressed) PLAY_NOTE_ARRAY(tone_click, false, 0);
+ #endif
+
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case WORKMAN:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_workman, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_WORKMAN);
+ }
+ return false;
+ break;
+
+
+
+ case PUNC:
+ if (record->event.pressed) {
+ layer_on(_PUNC);
+ update_tri_layer(_PUNC, _EMOJI, _GUI);
+ if (IS_LAYER_ON(_GUI)) {
+ led_layer_gui();
+ } else {
+ led_layer_punc();;
+ }
+ } else {
+ layer_off(_PUNC);
+ update_tri_layer(_PUNC, _EMOJI, _GUI);
+ if (IS_LAYER_ON(_EMOJI)) {
+ led_layer_emoji();
+ } else {
+ led_layer_normal();;
+ }
+ }
+ return false;
+ break;
+ case EMOJI:
+ if (record->event.pressed) {
+ layer_on(_EMOJI);
+ update_tri_layer(_PUNC, _EMOJI, _GUI);
+ if (IS_LAYER_ON(_GUI)) {
+ led_layer_gui();
+ } else {
+ led_layer_emoji();;
+ }
+ } else {
+ layer_off(_EMOJI);
+ update_tri_layer(_PUNC, _EMOJI, _GUI);
+ if (IS_LAYER_ON(_PUNC)) {
+ led_layer_punc();
+ } else {
+ led_layer_normal();;
+ }
+ }
+ return false;
+ break;
+ case NUM:
+ if (record->event.pressed) {
+ layer_on(_NUM);
+ led_layer_num();
+ } else {
+ layer_off(_NUM);
+ led_layer_normal();
+ }
+ return false;
+ break;
+ case FUNC:
+ if (record->event.pressed) {
+ layer_on(_FUNC);
+ led_layer_func();
+ } else {
+ layer_off(_FUNC);
+ led_layer_normal();
+ }
+ return false;
+ break;
+
+
+ case LINUX:
+ set_unicode_input_mode(UC_LNX);
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_linux, false, 0);
+ #endif
+ return false;
+ break;
+ case WIN:
+ set_unicode_input_mode(UC_WINC);
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_windows, false, 0);
+ #endif
+ return false;
+ break;
+ case OSX:
+ set_unicode_input_mode(UC_OSX);
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_osx, false, 0);
+ #endif
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+ set_unicode_input_mode(UC_LNX);
+ led_init();
+}
+
+// void init_rgblight(void) {
+// for (uint8_t i = 0; i < RGBLED_NUM; i++) {
+// led[i].r = 255;
+// led[i].g = 85;
+// led[i].b = 0;
+// }
+// ws2812_setleds(led, RGBLED_NUM);
+// }
+
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+ PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+#endif
+
+
+void ps2_mouse_init_user() {
+ // set TrackPoint sensitivity
+ PS2_MOUSE_SEND(0xE2, "set trackpoint sensitivity: 0xE2");
+ PS2_MOUSE_SEND(0x81, "set trackpoint sensitivity: 0x81");
+ PS2_MOUSE_SEND(0x4A, "set trackpoint sensitivity: 0x4A");
+ PS2_MOUSE_SEND(0x60, "set trackpoint sensitivity: 0x60");
+
+ // set TrackPoint speed
+ // (transfer function upper plateau speed)
+ PS2_MOUSE_SEND(0xE2, "set trackpoint speed: 0xE2");
+ PS2_MOUSE_SEND(0x81, "set trackpoint speed: 0x81");
+ PS2_MOUSE_SEND(0x60, "set trackpoint speed: 0x60");
+ PS2_MOUSE_SEND(0x90, "set trackpoint speed: 0x90");
+
+ // set TrackPoint Negative Inertia factor
+ PS2_MOUSE_SEND(0xE2, "set negative inertia factor: 0xE2");
+ PS2_MOUSE_SEND(0x81, "set negative inertia factor: 0x81");
+ PS2_MOUSE_SEND(0x4D, "set negative inertia factor: 0x4D");
+ PS2_MOUSE_SEND(0x03, "set negative inertia factor: 0x03");
+
+ // disable up threshold (click)
+ PS2_MOUSE_SEND(0xE2, "set disable up threshold: 0xE2");
+ PS2_MOUSE_SEND(0x47, "set disable up threshold: 0x47");
+ PS2_MOUSE_SEND(0x2C, "set disable up threshold: 0x2C");
+ PS2_MOUSE_SEND(0x01, "set disable up threshold: 0x01");
+
+ // enable TrackPoint Press to Select (PtS)
+ // print("ps2_mouse_init: send 0xE2: ");
+ // rcv = ps2_host_send(0xE2);
+ // phex(rcv); phex(ps2_error); print("\n");
+ // print("ps2_mouse_init: send 0x47: ");
+ // rcv = ps2_host_send(0x47);
+ // phex(rcv); phex(ps2_error); print("\n");
+ // print("ps2_mouse_init: send 0x2C: ");
+ // rcv = ps2_host_send(0x2C);
+ // phex(rcv); phex(ps2_error); print("\n");
+ // print("ps2_mouse_init: send 0x00: ");
+ // rcv = ps2_host_send(0x00);
+ // phex(rcv); phex(ps2_error); print("\n");
+
+ // set TrackPoint Press to Select threshold
+ // print("ps2_mouse_init: send 0xE2: ");
+ // rcv = ps2_host_send(0xE2);
+ // phex(rcv); phex(ps2_error); print("\n");
+ // print("ps2_mouse_init: send 0x81: ");
+ // rcv = ps2_host_send(0x81);
+ // phex(rcv); phex(ps2_error); print("\n");
+ // print("ps2_mouse_init: send 0x5C: ");
+ // rcv = ps2_host_send(0x5C);
+ // phex(rcv); phex(ps2_error); print("\n");
+ // // default PtS threshold is 0x08
+ // print("ps2_mouse_init: send 0x04: ");
+ // rcv = ps2_host_send(0x04);
+ // phex(rcv); phex(ps2_error); print("\n");
+
+ // set TrackPoint Press to Select time constant (zTc)
+ // print("ps2_mouse_init: send 0xE2: ");
+ // rcv = ps2_host_send(0xE2);
+ // phex(rcv); phex(ps2_error); print("\n");
+ // print("ps2_mouse_init: send 0x81: ");
+ // rcv = ps2_host_send(0x81);
+ // phex(rcv); phex(ps2_error); print("\n");
+ // print("ps2_mouse_init: send 0x5E: ");
+ // rcv = ps2_host_send(0x5E);
+ // phex(rcv); phex(ps2_error); print("\n");
+ // // default zTc is 0x26
+ // print("ps2_mouse_init: send 0x45: ");
+ // rcv = ps2_host_send(0x45);
+ // phex(rcv); phex(ps2_error); print("\n");
+
+ /*
+ // set TrackPoint Press to Select Jenks Curvature (jkcur)
+ print("ps2_mouse_init: send 0xE2: ");
+ rcv = ps2_host_send(0xE2);
+ phex(rcv); phex(ps2_error); print("\n");
+ print("ps2_mouse_init: send 0x81: ");
+ rcv = ps2_host_send(0x81);
+ phex(rcv); phex(ps2_error); print("\n");
+ print("ps2_mouse_init: send 0x5D: ");
+ rcv = ps2_host_send(0x5D);
+ phex(rcv); phex(ps2_error); print("\n");
+ // default jkcur is 0x87
+ print("ps2_mouse_init: send 0x87: ");
+ rcv = ps2_host_send(0x87);
+ phex(rcv); phex(ps2_error); print("\n");
+ */
+
+ /*
+ // set TrackPoint Minimum Drag (mindrag)
+ print("ps2_mouse_init: send 0xE2: ");
+ rcv = ps2_host_send(0xE2);
+ phex(rcv); phex(ps2_error); print("\n");
+ print("ps2_mouse_init: send 0x81: ");
+ rcv = ps2_host_send(0x81);
+ phex(rcv); phex(ps2_error); print("\n");
+ print("ps2_mouse_init: send 0x59: ");
+ rcv = ps2_host_send(0x59);
+ phex(rcv); phex(ps2_error); print("\n");
+ // default PtS mindrag is 0x14
+ print("ps2_mouse_init: send 0x14: ");
+ rcv = ps2_host_send(0x14);
+ phex(rcv); phex(ps2_error); print("\n");
+ */
+} \ No newline at end of file
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/readme.md b/keyboards/handwired/promethium/keymaps/priyadi/readme.md
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/handwired/promethium/keymaps/priyadi/readme.md
diff --git a/keyboards/handwired/promethium/keymaps/readme.md b/keyboards/handwired/promethium/keymaps/readme.md
new file mode 100644
index 000000000..527691389
--- /dev/null
+++ b/keyboards/handwired/promethium/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.h` *optional*, found automatically when compiling
+* `Makefile` *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 Promethium keymaps
+
+
diff --git a/keyboards/handwired/promethium/promethium.c b/keyboards/handwired/promethium/promethium.c
new file mode 100644
index 000000000..a0035cce1
--- /dev/null
+++ b/keyboards/handwired/promethium/promethium.c
@@ -0,0 +1,6 @@
+#include "promethium.h"
+
+void matrix_init_kb(void) {
+
+ matrix_init_user();
+} \ No newline at end of file
diff --git a/keyboards/handwired/promethium/promethium.h b/keyboards/handwired/promethium/promethium.h
new file mode 100644
index 000000000..662eeab99
--- /dev/null
+++ b/keyboards/handwired/promethium/promethium.h
@@ -0,0 +1,101 @@
+#ifndef PROMETHIUM_H
+#define PROMETHIUM_H
+
+#include "quantum.h"
+
+#define PS2_INIT_DELAY 2000
+
+#define KEYMAP( \
+ k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
+ k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
+ k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
+ k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c \
+) \
+{ \
+ {k11, k12, k13, k14, k15, k16}, \
+ {k21, k22, k23, k24, k25, k26}, \
+ {k31, k32, k33, k34, k35, k36}, \
+ {k41, k42, k43, k44, k45, k46}, \
+ {k17, k18, k19, k1a, k1b, k1c}, \
+ {k27, k28, k29, k2a, k2b, k2c}, \
+ {k37, k38, k39, k3a, k3b, k3c}, \
+ {k47, k48, k49, k4a, k4b, k4c} \
+}
+
+enum led_sequence {
+ LED_IND_BLUETOOTH,
+ LED_IND_USB,
+ LED_IND_BATTERY,
+
+ LED_IND_FUNC,
+ LED_IND_NUM,
+ LED_IND_EMOJI,
+
+ LED_BKSP,
+ LED_ENT,
+ LED_RSFT,
+ LED_RCTL,
+
+ LED_RGUI,
+ LED_SLSH,
+ LED_SCLN,
+ LED_P,
+
+ LED_O,
+ LED_L,
+ LED_DOT,
+ LED_RALT,
+
+ LED_EMOJI,
+ LED_COMM,
+ LED_K,
+ LED_I,
+
+ LED_U,
+ LED_J,
+ LED_M,
+ LED_FUNC,
+
+ LED_RSPC,
+ LED_N,
+ LED_HH,
+ LED_Y,
+
+ LED_TRACKPOINT3,
+ LED_TRACKPOINT2,
+ LED_TRACKPOINT1,
+
+ LED_LSPC,
+ LED_B,
+ LED_G,
+ LED_T,
+
+ LED_R,
+ LED_F,
+ LED_V,
+ LED_NUM,
+
+ LED_PUNC,
+ LED_C,
+ LED_D,
+ LED_E,
+
+ LED_W,
+ LED_S,
+ LED_X,
+ LED_LALT,
+
+ LED_LGUI,
+ LED_Z,
+ LED_A,
+ LED_Q,
+
+ LED_TAB,
+ LED_ESC,
+ LED_LSFT,
+ LED_LCTL,
+};
+
+#endif
+
+
diff --git a/keyboards/handwired/promethium/readme.md b/keyboards/handwired/promethium/readme.md
new file mode 100644
index 000000000..e63d2f1ad
--- /dev/null
+++ b/keyboards/handwired/promethium/readme.md
@@ -0,0 +1,13 @@
+Promethium Keyboard Firmware
+============================
+A handwired Planck based keyboard using the Adafruit Feather 32u4 Bluefruit LE controller.
+
+Features:
+
+* Single piece split form factor
+* Columnar stagger
+* Trackpoint
+* Bluetooth LE *TBD*
+* Battery
+* Per switch RGB LED
+* Proximity sensor for energy conservation *TBD* \ No newline at end of file
diff --git a/keyboards/handwired/promethium/rgbsps.c b/keyboards/handwired/promethium/rgbsps.c
new file mode 100644
index 000000000..ea922ec3f
--- /dev/null
+++ b/keyboards/handwired/promethium/rgbsps.c
@@ -0,0 +1,24 @@
+#include "light_ws2812.h"
+#include "rgbsps.h"
+
+struct cRGB led[RGBSPS_NUM];
+
+void rgbsps_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b) {
+ led[index].r = r;
+ led[index].g = g;
+ led[index].b = b;
+}
+
+void rgbsps_setall(uint8_t r, uint8_t g, uint8_t b) {
+ for (uint16_t i = 0; i < RGBSPS_NUM; i++) {
+ rgbsps_set(i, r, g, b);
+ }
+}
+
+void rgbsps_turnoff(void) {
+ rgbsps_setall(0, 0, 0);
+}
+
+void rgbsps_send(void) {
+ ws2812_setleds(led, RGBSPS_NUM);
+} \ No newline at end of file
diff --git a/keyboards/handwired/promethium/rgbsps.h b/keyboards/handwired/promethium/rgbsps.h
new file mode 100644
index 000000000..6da197f75
--- /dev/null
+++ b/keyboards/handwired/promethium/rgbsps.h
@@ -0,0 +1,4 @@
+void rgbsps_set(uint8_t index, uint8_t r, uint8_t g, uint8_t b);
+void rgbsps_setall(uint8_t r, uint8_t g, uint8_t b);
+void rgbsps_turnoff(void);
+void rgbsps_send(void); \ No newline at end of file
diff --git a/keyboards/handwired/promethium/rules.mk b/keyboards/handwired/promethium/rules.mk
new file mode 100644
index 000000000..891f523c2
--- /dev/null
+++ b/keyboards/handwired/promethium/rules.mk
@@ -0,0 +1,74 @@
+
+# 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 = 8000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no # Console for debug(+400)
+COMMAND_ENABLE ?= no # Commands for debug and configuration
+NKRO_ENABLE ?= yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality
+MIDI_ENABLE ?= no # MIDI controls
+AUDIO_ENABLE ?= no # Audio output on port C6
+UNICODE_ENABLE ?= no # Unicode
+UNICODEMAP_ENABLE ?= yes
+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.
+PS2_MOUSE_ENABLE ?= yes
+PS2_USE_INT ?= yes
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
+
+SRC += $(QUANTUM_DIR)/light_ws2812.c
+SRC += rgbsps.c \ No newline at end of file
diff --git a/keyboards/handwired/retro_refit/Makefile b/keyboards/handwired/retro_refit/Makefile
new file mode 100644
index 000000000..191c6bb66
--- /dev/null
+++ b/keyboards/handwired/retro_refit/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/retro_refit/config.h b/keyboards/handwired/retro_refit/config.h
index f2194e550..f2194e550 100644
--- a/keyboards/retro_refit/config.h
+++ b/keyboards/handwired/retro_refit/config.h
diff --git a/keyboards/retro_refit/keymaps/default/keymap.c b/keyboards/handwired/retro_refit/keymaps/default/keymap.c
index 405402d5e..405402d5e 100644
--- a/keyboards/retro_refit/keymaps/default/keymap.c
+++ b/keyboards/handwired/retro_refit/keymaps/default/keymap.c
diff --git a/keyboards/handwired/retro_refit/readme.md b/keyboards/handwired/retro_refit/readme.md
new file mode 100644
index 000000000..9f10edf9f
--- /dev/null
+++ b/keyboards/handwired/retro_refit/readme.md
@@ -0,0 +1,60 @@
+retro_refit keyboard firmware
+======================
+
+## Keyboard Info
+
+The retro refit keyboard used a Teensy to replace the original controller on a 386 "laptop".
+
+http://imgur.com/a/08Fyj
+
+This keyboard uses a KEYMAP macro that is a great example of using a non-standard row-column matrix. The keyboard in question had 11 rows and 8 columns, but the rows were not all horizontal, and the columns were not all vertical. For example, row 2 contained "Print Screen", "N", "M", ",", ".", "/", "Right Shift", and"Left Alt". Column 0 contained "F6", "7", "O", "'", "Q", "D", "B", "Left Alt", "Up Arrow", and "Down Arrow".
+
+The macro makes programming the keys easier and in a more straight-forward manner because it realigns the keys into a 6x15 sensible keyboard layout instead of the obtuse 11x8 matrix. Each Kxy corrisponds to a key in row x column y.
+
+```
+#define KEYMAP( \
+ K77, K05, K04, K03, K02, K01, K00, KA7, KA6, KA5, KA4, KA3, KA2, K11, K94, \
+ K27, K76, K75, K74, K73, K72, K71, K70, K67, K66, K65, K64, K63, K62, KA1, \
+ K61, K60, K57, K56, K55, K54, K53, K52, K51, K50, K47, K46, K45, K97, \
+ K43, K42, K41, K40, K37, K36, K35, K34, K33, K32, K31, K30, K44, K87, \
+ K26, K24, K23, K22, K21, K20, K17, K16, K15, K14, K13, K12, KA0, K91, \
+ K10, K06, K25, K07, K86, K85, K95, K90, K93 \
+) { \
+{ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, }, \
+{ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, }, \
+{ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, }, \
+{ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, }, \
+{ KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47, }, \
+{ KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57, }, \
+{ KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67, }, \
+{ KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76, KC_##K77, }, \
+{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K85, KC_##K86, KC_##K87, }, \
+{ KC_##K90, KC_##K91, KC_NO, KC_##K93, KC_##K94, KC_##K95, KC_NO, KC_##K97, }, \
+{ KC_##KA0, KC_##KA1, KC_##KA2, KC_##KA3, KC_##KA4, KC_##KA5, KC_##KA6, KC_##KA7, } \
+}
+```
+
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/retro_refit 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 default`.
+
+### Other Keymaps
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
+```
+$ make [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/keyboards/retro_refit/retro_refit.c b/keyboards/handwired/retro_refit/retro_refit.c
index 3d610eba3..3d610eba3 100644
--- a/keyboards/retro_refit/retro_refit.c
+++ b/keyboards/handwired/retro_refit/retro_refit.c
diff --git a/keyboards/retro_refit/retro_refit.h b/keyboards/handwired/retro_refit/retro_refit.h
index 109acdc39..109acdc39 100644
--- a/keyboards/retro_refit/retro_refit.h
+++ b/keyboards/handwired/retro_refit/retro_refit.h
diff --git a/keyboards/retro_refit/Makefile b/keyboards/handwired/retro_refit/rules.mk
index 2dd8cc5f7..10fbfa5c9 100644
--- a/keyboards/retro_refit/Makefile
+++ b/keyboards/handwired/retro_refit/rules.mk
@@ -66,9 +66,3 @@ NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https
# MIDI_ENABLE ?= YES # MIDI controls
# UNICODE_ENABLE ?= YES # Unicode
# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
-
-
-ifndef QUANTUM_DIR
- include ../../Makefile
-endif
-
diff --git a/keyboards/handwired/rules.mk b/keyboards/handwired/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/handwired/rules.mk
diff --git a/keyboards/handwired/traveller/Makefile b/keyboards/handwired/traveller/Makefile
new file mode 100644
index 000000000..191c6bb66
--- /dev/null
+++ b/keyboards/handwired/traveller/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/handwired/traveller/config.h b/keyboards/handwired/traveller/config.h
new file mode 100644
index 000000000..2b82da447
--- /dev/null
+++ b/keyboards/handwired/traveller/config.h
@@ -0,0 +1,173 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER You
+#define PRODUCT traveller
+#define DESCRIPTION A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 13
+
+/*
+ * 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 { D0, D1, D3, D2 }
+ // no I can't say why this order seemed like a good idea
+#define MATRIX_COL_PINS { B5, D6, B7, B6, F6, B1, B3, F7, B4, E6, D7, C6, D4 }
+#define UNUSED_PINS
+
+// LED stuff
+#define RGB_DI_PIN B2
+//#define RBLIGHT_TIMER
+#define RGBLED_NUM 1 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* 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/keyboards/handwired/traveller/keymaps/default/keymap.c b/keyboards/handwired/traveller/keymaps/default/keymap.c
new file mode 100644
index 000000000..13d889ab8
--- /dev/null
+++ b/keyboards/handwired/traveller/keymaps/default/keymap.c
@@ -0,0 +1,305 @@
+#include "traveller.h"
+#include "mousekey.h"
+#include "action_layer.h"
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+#define _QW 0
+#define _LW 1
+#define _HI 2
+#define _NAV 4
+#define _CUR 5
+#define _FKEYS 6
+#define _TRNS 8
+
+// We do the same trick for functions
+#define RGBLED_TOGGLE 10
+#define _HIOUT 15
+#define _LWOUT 16
+// Macros
+#define MDL 4
+#define MDR 5
+#define MUR 6
+#define MUL 3
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Qwerty
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | NAV | ` ~ | W | E | R | T | | Y | U | I | O | - | = |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | Q | S | D | F | G | | H | J | K | L | P | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------|
+ *|ctrl/esc| A | X | C | V | B |Ctrl /| N | M | , | . | ; | ' |
+ * |------+------+------+------+------+------+ // +------+------+------+------+------+------|
+ * | Shift| Z | Del | GUI | Low | Bspc |/Enter| Spc | Hi | GUI | Alt | / |Shift |
+ * `------------------------------------------------------------------------------------------'
+ *
+ */
+[_QW] = KEYMAP(
+ F(_NAV), KC_GRV, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_MINS, KC_EQL,
+ KC_TAB, KC_Q, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_P, KC_BSLS,
+ CTL_T(KC_ESC), KC_A, KC_X, KC_C, KC_V, KC_B, KC_RCTL, KC_N, KC_M, KC_COMM, KC_DOT, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_DEL, KC_LGUI, MO(_LW), KC_BSPC, KC_ENTER, KC_SPC, MO(_HI), KC_RGUI, KC_RALT, KC_SLSH, KC_RSFT
+ ),
+
+/* LOW - numbers, missing or awkward programming keys
+ Doubled 1 key allows lazy reach with ring finger.
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | FKeys| 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 |Ctrl-alt-del|
+ * |------+------+------+------+------+------| +------+------+------+------+------+------|
+ * | Tab | 1 | ] | ( | ) | | | * | ( | ) | [ | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------|
+ * | Caps | [ | | { | } | ` | /| # | { | } | | ] | |
+ * |------+------+------+------+------+------+ // +------+------+------+------+------+------|
+ * | Shift| | | | Low | |/ | | Hi | | | |Shift |
+ * `------------------------------------------------------------------------------------------'
+ *
+ */
+
+[_LW] = KEYMAP(
+ F(_FKEYS), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, LCTL(LALT(KC_DEL)) ,
+ KC_TRNS, KC_1, KC_RBRC, KC_LPRN, KC_RPRN, KC_NO, KC_ASTR, KC_LPRN, KC_RPRN, KC_LBRC, KC_NO, KC_NO,
+ KC_CAPS, KC_LBRC, KC_NO, KC_LCBR, KC_RCBR, KC_TILD, KC_TRNS, KC_HASH, KC_LCBR, KC_RCBR, KC_NO, KC_RBRC, KC_NO,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+/* HI - Punctuation, shell and
+url ://@.com row on bottom, && is opposite || ^$ are in regex order: ^.*$
+Right hand nav keys work pretty well chorded with the Right hand Hi Key
+ * ,-----------------------------------------. .-----------------------------------------.
+ * |FKEYS | ! | @ | # | $ | % | | ^ | & | * | ( | ) | + |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | ! | & | "|" | $ | % | | Vol+| Mute| | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------|
+ * | CAPS | ^ | : | . | * | - | /| Vol-| Play | PgUp | Home | Up | End |
+ * |------+------+------+------+------+------+ // +------+------+------+------+------+------|
+ * | | / | | | Low | |/ | | Hi | PgDn | Left| Down | Right |
+ * `------------------------------------------------------------------------------------------'
+ *
+ */
+
+[_HI] = KEYMAP(
+ F(_FKEYS), KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PLUS,
+ KC_TRNS, KC_EXLM, KC_AMPR, KC_PIPE, KC_DLR, KC_PERC, KC_VOLU, KC_MUTE, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_CAPS, KC_CIRC, KC_COLN, KC_DOT, KC_ASTR, KC_MINS, KC_TRNS, KC_VOLD, KC_PPLS, KC_PGUP, KC_HOME, KC_UP, KC_END,
+ KC_TRNS, KC_SLSH, KC_TRNS, KC_TRNS, F(_LW), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT
+),
+
+/* NAV - mouse & navigation
+//gui left and right are line home/end, or fore & back in browser
+// Mouse buttons are reversed for comfort - bigger stretch is to the right button.
+
+ * ,-----------------------------------------. .-----------------------------------------.
+* | NAV | | | Up | |Gui-> | | MwU | MS_UL| MS_U |MS_UR | |Ms Norm|
+* |------+------+------+------+------+------| |------+------+------+------+------+--------|
+* | |Gui<- | Left | Down |Right | C^E | | BTN3 | MS_L |MS Up | MS_R | |Ms Fast |
+* |------+------+------+------+------+------|------|------+------+------+------+------+--------|
+* | | C^A | GUI X| GUI C| GUI_V| |Enter/| MWD | M_DL |MS Dwn|MS_DR | Up |Ms Slow |
+* |------+------+------+------+------+------+ // +------+------+------+------+------+------|
+* | | GuiZ | | | Low | |/ButnR|ButnL | Hi | | Left | Down | Right |
+* `------------------------------------------------------------------------------------------'
+*/
+
+[_NAV] = KEYMAP(
+ F(_NAV), KC_NO, KC_NO, KC_UP, KC_NO, RGUI(KC_RIGHT), KC_WH_U, M(MUL), KC_MS_U, M(MUR), KC_NO, KC_ACL2,
+ KC_TRNS, RGUI(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_E), KC_BTN3, KC_MS_L, KC_MS_U, KC_MS_R, KC_NO, KC_ACL1,
+ KC_TRNS, LCTL(KC_A), LGUI(KC_X),RGUI(KC_C), RGUI(KC_V),KC_NO, KC_ENTER, KC_WH_D, M(MDL), KC_MS_D, M(MDR), KC_UP, KC_ACL0,
+ KC_TRNS, RGUI(KC_Z), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN2, KC_BTN1, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT
+),
+
+/* FKEYS - Funtion keys & mac stuff
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | FKEYS| F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | Ctrl |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | F11 | F12 | F13 | F14 | F15 | Alt |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------|
+ * |Qwerty| | | | | | /| | | | | | Del |
+ * |------+------+------+------+------+------+ // +------+------+------+------+------+------|
+ * | . |RGBTog| . | | LO | Bspc |/ | | HI | | | | |
+ * `------------------------------------------------------------------------------------------'
+ *
+ */
+
+[_FKEYS] = KEYMAP(
+ F(_FKEYS), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_RCTL,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_LALT ,
+ F(_QW), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL,
+ KC_TRNS, F(RGBLED_TOGGLE), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+),
+
+
+/* TRNS - skeleton for laters
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | . | . | . | . | . | . | | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | . | . | . | . | . | . | | 6 | 7 | 8 | 9 | 0 | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------|
+ * | . | . | . | . | . | . | /| | | | . | ; | " |
+ * |------+------+------+------+------+------+ // +------+------+------+------+------+------|
+ * | . | . | . | GUI | LO | . |/ | Spc | HI | GUI | M0 | / |LSFT |
+ * `------------------------------------------------------------------------------------------'
+ *
+ */
+
+[_TRNS] = {
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
+ }
+
+
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+ [_QW] = ACTION_LAYER_ON(_QW,ON_RELEASE), // return to QWERTY layer
+ [_LW] = ACTION_LAYER_TAP_TOGGLE(_LW), // Turn on LW when holding, or tap 3 times to switch
+ [_HI] = ACTION_LAYER_TAP_TOGGLE(_HI), // Turn on LW when holding, or tap 3 times to switch
+ [_NAV] = ACTION_LAYER_TOGGLE(_NAV),
+ [_FKEYS] = ACTION_LAYER_TOGGLE(_FKEYS),
+ [_LWOUT] = ACTION_LAYER_OFF(_LW,ON_RELEASE),
+ [_HIOUT] = ACTION_LAYER_OFF(_HI,ON_RELEASE),
+
+ // Functions
+ [RGBLED_TOGGLE] = ACTION_FUNCTION(RGBLED_TOGGLE),
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+
+ // from algernon's ErgoDox EZ layout,
+ case MUL:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_UP);
+ mousekey_on(KC_MS_LEFT);
+ } else {
+ mousekey_off(KC_MS_UP);
+ mousekey_off(KC_MS_LEFT);
+ }
+ mousekey_send();
+ break;
+
+ case MUR:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_UP);
+ mousekey_on(KC_MS_RIGHT);
+ } else {
+ mousekey_off(KC_MS_UP);
+ mousekey_off(KC_MS_RIGHT);
+ }
+ mousekey_send();
+ break;
+
+ case MDL:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_DOWN);
+ mousekey_on(KC_MS_LEFT);
+ } else {
+ mousekey_off(KC_MS_DOWN);
+ mousekey_off(KC_MS_LEFT);
+ }
+ mousekey_send();
+ break;
+
+ case MDR:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_DOWN);
+ mousekey_on(KC_MS_RIGHT);
+ } else {
+ mousekey_off(KC_MS_DOWN);
+ mousekey_off(KC_MS_RIGHT);
+ }
+ mousekey_send();
+ break;
+
+
+ }
+ return MACRO_NONE;
+};
+
+
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ switch (id) {
+ case RGBLED_TOGGLE:
+ //led operations
+ if (record->event.pressed) {
+ rgblight_toggle();
+ }
+ break;
+ }
+}
+
+
+
+void LayerLEDSet(uint8_t layr) {
+
+ switch (layr) {
+ case _QW:
+ rgblight_setrgb(0,20, 0); // dim green
+ break;
+ case _LW:
+ // deep purple
+ rgblight_setrgb(20,0,35);
+ break;
+ case _HI:
+ // light blue
+ rgblight_setrgb(0,20,20);
+ break;
+ case _NAV:
+ // Yellowy orange
+ rgblight_setrgb(25,20,0); // brighter
+ break;
+ case _FKEYS:
+ // RED
+ rgblight_setrgb(20,0,0); // brighter
+ break;
+ default:
+ rgblight_setrgb(20,2,20);//error
+ break;
+ }
+
+ return;
+
+}
+
+void matrix_init_user(void) {
+}
+
+// Bleah globals need to be initialized.
+uint8_t old_layer=_QW;
+
+void matrix_scan_user(void) {
+ uint8_t layer = biton32(layer_state);
+ if (old_layer != layer) {
+ LayerLEDSet(layer);
+ old_layer=layer;
+ }
+}
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
+
+
diff --git a/keyboards/handwired/traveller/keymaps/default/readme.md b/keyboards/handwired/traveller/keymaps/default/readme.md
new file mode 100644
index 000000000..7ddc40b3c
--- /dev/null
+++ b/keyboards/handwired/traveller/keymaps/default/readme.md
@@ -0,0 +1,2 @@
+# The default keymap for handwired/traveller
+this is a kitchen sink build
diff --git a/keyboards/handwired/traveller/readme.md b/keyboards/handwired/traveller/readme.md
new file mode 100644
index 000000000..646844b1d
--- /dev/null
+++ b/keyboards/handwired/traveller/readme.md
@@ -0,0 +1,35 @@
+traveler keyboard firmware
+======================
+
+## Traveller Specific Info ##
+The traveller is a varient on the atreus keyboard.
+Like the Atreus, it is designed to be a good compromise between size and ergonomics.
+
+key differences are
+- an additional column for each pinky
+- an RGB LED in the center to show the current layer
+- more finger stagger, splay angle and contoured keycaps (F2 profile for space key).
+
+You can make your own traveller keyboard by using the openscad tools from the atreus repository, and adding a hole for the LED to shine through.
+
+## 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/traveler 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` 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.
diff --git a/keyboards/handwired/traveller/rules.mk b/keyboards/handwired/traveller/rules.mk
new file mode 100644
index 000000000..12a4b71f4
--- /dev/null
+++ b/keyboards/handwired/traveller/rules.mk
@@ -0,0 +1,89 @@
+
+#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
+
+# for avr upload
+USB ?= /dev/cu.usbmodem1421
+#
+# 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)
+
+
+ifdef TEENSY2
+ OPT_DEFS += -DATREUS_TEENSY2
+ ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex
+else
+ OPT_DEFS += -DATREUS_ASTAR
+ OPT_DEFS += -DCATERINA_BOOTLOADER
+ ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
+ avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
+endif
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# MCU name
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no # Console for debug(+400)
+COMMAND_ENABLE ?= no # Commands for debug and configuration
+# 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 ?= no # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
+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
+RGBLIGHT_ENABLE = yes
+
+ifndef QUANTUM_DIR
+ include ../../../Makefile
+endif
+
+upload: build
+ $(ATREUS_UPLOAD_COMMAND)
+
diff --git a/keyboards/handwired/traveller/traveller.c b/keyboards/handwired/traveller/traveller.c
new file mode 100644
index 000000000..9d2534130
--- /dev/null
+++ b/keyboards/handwired/traveller/traveller.c
@@ -0,0 +1,61 @@
+#include "traveller.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))
+void process_action_user(keyrecord_t *record) {
+ // leave this function blank - it can be defined in a keymap file
+}
+
+__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 RGBLIGHT_ENABLE
+ rgblight_init();
+ rgblight_mode(1); // solid, no timer
+ rgblight_setrgb(0,20,0);// dim green, happens to be same as _QW
+#endif
+
+// Turn status LED on
+ DDRC |= (1<<7);
+ PORTC |= (1<<7);
+
+ matrix_init_user();
+}
+
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, 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);
+}
+
+
diff --git a/keyboards/handwired/traveller/traveller.h b/keyboards/handwired/traveller/traveller.h
new file mode 100644
index 000000000..972a1a94a
--- /dev/null
+++ b/keyboards/handwired/traveller/traveller.h
@@ -0,0 +1,32 @@
+#ifndef TRAVELLER_H
+#define TRAVELLER_H
+
+#include "quantum.h"
+#include "led.h"
+
+#ifdef RGBLIGHT_ENABLE
+ #include "rgblight.h"
+#endif
+#ifdef BACKLIGHT_ENABLE
+ #include "backlight.h"
+#endif
+
+
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define KEYMAP( \
+ k00, k01, k02, k03, k04, k05, k07, k08, k09, k0a, k0b, k0c, \
+ k10, k11, k12, k13, k14, k15, k17, k18, k19, k1a, k1b, k1c, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, KC_NO, k07, k08, k09, k0a, k0b, k0c }, \
+ { k10, k11, k12, k13, k14, k15, KC_NO, k17, k18, k19, k1a, k1b, k1c }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c } \
+}
+
+#endif
diff --git a/keyboards/hhkb/Makefile b/keyboards/hhkb/Makefile
index 6fe973e1e..4e2a6f00f 100644
--- a/keyboards/hhkb/Makefile
+++ b/keyboards/hhkb/Makefile
@@ -1,90 +1,3 @@
-
-
-# project specific files
-SRC = matrix.c
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-#OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-# as per original hasu settings
-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
-CUSTOM_MATRIX ?= yes # Custom matrix file for the HHKB
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
-# NKRO_ENABLE ?= yes # USB 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 ?= YES # MIDI controls
-# UNICODE_ENABLE ?= YES # Unicode
-# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
-
-
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../Makefile
-endif
-
-ifneq (, $(findstring yes, $(HHKB_JP)))
- OPT_DEFS += -DHHKB_JP
-endif
-
-debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION
-debug-on: all
-
-debug-off: EXTRAFLAGS += -DNO_DEBUG -DNO_PRINT
-debug-off: OPT_DEFS := $(filter-out -DCONSOLE_ENABLE,$(OPT_DEFS))
-debug-off: all
+endif \ No newline at end of file
diff --git a/keyboards/hhkb/keymaps/dbroqua/keymap.c b/keyboards/hhkb/keymaps/dbroqua/keymap.c
new file mode 100644
index 000000000..2b6d3901a
--- /dev/null
+++ b/keyboards/hhkb/keymaps/dbroqua/keymap.c
@@ -0,0 +1,92 @@
+/*
+ * dbroqua HHKB Layout
+ */
+#include "hhkb.h"
+
+#define BASE 0
+#define FN 1
+#define MOUSE 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* BASE Level: Default Layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ * |-----------------------------------------------------------------------------------------+
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | fn |
+ * +-----------------------------------------------------------------------------------------+
+ * | Gui | Alt | Space | AltGr |Mouse|
+ * `----------------------------------------------------------------´
+ */
+ [BASE] = KEYMAP(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(FN), \
+ KC_LGUI, KC_LALT, /* */ KC_SPC, KC_RALT, MO(MOUSE)
+ ),
+
+ /* FN Layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F0 | F11 | F12 | Ins | Del|
+ * |-----------------------------------------------------------------------------------------+
+ * | Caps | | | | | | | |PrtSc| Slck| Paus| Up | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | Vol-| Vol+| Mute| | | * | / | Home| PgUp| Left |Right| |
+ * |-----------------------------------------------------------------------------------------+
+ * | | Prev| Play| Next| | | + | - | End |PgDwn| Down| | |
+ * +-----------------------------------------------------------------------------------------+
+ * | | | | Stop | |
+ * `----------------------------------------------------------------´
+ */
+ [FN] = KEYMAP(
+ KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, \
+ KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MSTP, KC_TRNS
+ ),
+
+ /* MOUSE Layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | WUp | | | | | | | | Btn1| Up | Btn2| |
+ * |-----------------------------------------------------------------------------------------+
+ * | | WLt | WDn | WRt | | | | | | | Left |Right| |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | | Btn3| Down| | |
+ * +-----------------------------------------------------------------------------------------+
+ * | | | | | |
+ * `----------------------------------------------------------------´
+ */
+ [MOUSE] = KEYMAP(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_WH_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, \
+ KC_TRNS, KC_WH_L, KC_WH_D, KC_WH_R, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_R, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN3, KC_MS_D, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboards/hhkb/keymaps/dbroqua/readme.md b/keyboards/hhkb/keymaps/dbroqua/readme.md
new file mode 100644
index 000000000..0afebc84c
--- /dev/null
+++ b/keyboards/hhkb/keymaps/dbroqua/readme.md
@@ -0,0 +1,9 @@
+# Dbroqua Layout
+
+* Online keyboard layout editor: http://www.keyboard-layout-editor.com/#/gists/78eaf35e80bb714eea80cb4049dedb01
+
+# Programming Instructions:
+Enter into programming mode and run the following command.
+```
+$ sudo KEYMAP=dbroqua make dfu
+``` \ No newline at end of file
diff --git a/keyboards/hhkb/keymaps/jp/Makefile b/keyboards/hhkb/keymaps/jp/Makefile
index 92986292a..a7f700f01 100644
--- a/keyboards/hhkb/keymaps/jp/Makefile
+++ b/keyboards/hhkb/keymaps/jp/Makefile
@@ -1 +1 @@
-HHKB_JP=yes
+OPT_DEFS += -DHHKB_JP
diff --git a/keyboards/hhkb/keymaps/rdg_jp/Makefile b/keyboards/hhkb/keymaps/rdg_jp/Makefile
index 92986292a..a7f700f01 100644
--- a/keyboards/hhkb/keymaps/rdg_jp/Makefile
+++ b/keyboards/hhkb/keymaps/rdg_jp/Makefile
@@ -1 +1 @@
-HHKB_JP=yes
+OPT_DEFS += -DHHKB_JP
diff --git a/keyboards/hhkb/keymaps/sh_jp/Makefile b/keyboards/hhkb/keymaps/sh_jp/Makefile
new file mode 100644
index 000000000..a7f700f01
--- /dev/null
+++ b/keyboards/hhkb/keymaps/sh_jp/Makefile
@@ -0,0 +1 @@
+OPT_DEFS += -DHHKB_JP
diff --git a/keyboards/hhkb/keymaps/sh_jp/README.md b/keyboards/hhkb/keymaps/sh_jp/README.md
new file mode 100644
index 000000000..4f82f2f4e
--- /dev/null
+++ b/keyboards/hhkb/keymaps/sh_jp/README.md
@@ -0,0 +1,86 @@
+###Keymaps with both Dvorak layout and QWER layout for HHKB JP.
+
+1. The default layout is Dvorak.
+2. Use `Tog` to toggle between Dvorak and QWER
+3. Holding `NewCmd`, the original `LftCmd`, will activate the `NewCmd` layer which means `NewCmd+key` is the same as `Cmd+key` in normal QWER layout.<sup>[1](#cmdTab)</sup>
+ - For example, no matter you are in Dvorak layout or QWER layout, you can use `Cmd+s` to save a currently editing file.
+4. `Symb` makes type symbols easier
+ - for example: `Symb+a` is `!`.
+5. `Spc+key` equals to `Shft+key` while using `Spc` alone will yield a space as usual.
+6. There's an extra `Tab` in the last line.
+
+```
+Layer DVOR:
+,-----------------------------------------------------------.
+|Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| |Bsp|
+|-----------------------------------------------------------|
+|Tab | '| ,| .| P| Y| F| G| C| R| L| /| =| |
+|------------------------------------------------------` Ent|
+|Ctrl | A| O| E| U| I| D| H| T| N| S| -| \| |
+|-----------------------------------------------------------|
+|Shft | ;| Q| J| K| X| B| M| W| V| Z| | Up| |
+|-----------------------------------------------------------|
+|FN| `| Alt|NewCmd|Symb| Spc |Symb|Tab|RCmd|Tog|Lft|Dwn|Rgh|
+`-----------------------------------------------------------'
+```
+
+```
+Layer QWER:
+,-----------------------------------------------------------.
+|Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| -| =| |Bsp|
+|-----------------------------------------------------------|
+|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| |
+|------------------------------------------------------` Ent|
+|Ctrl | A| S| D| F| G| H| J| K| L| ;| '| \| |
+|-----------------------------------------------------------|
+|Shft | Z| X| C| V| B| N| M| ,| .| /| | Up| |
+|-----------------------------------------------------------|
+|FN| `| Alt|NewCmd|Symb| Spc |Symb|Tab|Cmd|Tog|Lft|Dwn|Rgh|
+`-----------------------------------------------------------'
+```
+
+```
+Layer Symb:
+,-----------------------------------------------------------.
+| | | | | | | | | | | | | | | |
+|-----------------------------------------------------------|
+| | | | [| ]| | | {| }| | | | | |
+|------------------------------------------------------` |
+| | !| @| #| $| %| ^| &| *| (| )| '| \| |
+|-----------------------------------------------------------|
+| | | | | | | | | | | | | | |
+|-----------------------------------------------------------|
+| | | | | | | | | | | | | |
+`-----------------------------------------------------------'
+```
+
+```
+Layer FUNC: HHKB mode (HHKB Fn)
+,-----------------------------------------------------------.
+|Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
+|-----------------------------------------------------------|
+|Caps | | | | | | | |Psc|Slk|Pus|Up | | |
+|------------------------------------------------------` |
+| |VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig| | |
+|-----------------------------------------------------------|
+| | | | | | | +| -|End|PgD|Dow| | | |
+|-----------------------------------------------------------|
+| || | | | | | | | | || | | |
+`-----------------------------------------------------------'
+```
+
+```
+Empty Layer:
+,-----------------------------------------------------------.
+| | | | | | | | | | | | | | | |
+|-----------------------------------------------------------|
+| | | | | | | | | | | | | | |
+|------------------------------------------------------` |
+| | | | | | | | | | | | | | |
+|-----------------------------------------------------------|
+| | | | | | | | | | | | | | |
+|-----------------------------------------------------------|
+| | | | | | | | | | | | | |
+`-----------------------------------------------------------'
+```
+<a name="cmdTab">1</a>: `NewCmd + Tab` does not work, you can use `RCmd+Tab` to switch among applications.
diff --git a/keyboards/hhkb/keymaps/sh_jp/keymap.c b/keyboards/hhkb/keymaps/sh_jp/keymap.c
new file mode 100644
index 000000000..d4cb3b041
--- /dev/null
+++ b/keyboards/hhkb/keymaps/sh_jp/keymap.c
@@ -0,0 +1,60 @@
+#include "hhkb.h"
+
+#define _______ KC_TRNS
+
+enum {
+ DVOR,
+ QWER,
+ NEW_CMD,
+ SYMB,
+ FUNC
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [DVOR] = KEYMAP_JP(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_JYEN, KC_BSPC,
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL,
+ KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_BSLS, KC_ENT,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RO, KC_UP, KC_RSFT,
+ MO(FUNC), KC_ZKHK, KC_LALT, MO(NEW_CMD), MO(SYMB), MT(MOD_LSFT, KC_SPC), MO(SYMB), KC_TAB, KC_RGUI, TG(QWER), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [QWER] = KEYMAP_JP(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_JYEN, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_UP, KC_RSFT,
+ MO(FUNC), KC_ZKHK, KC_LALT, MO(NEW_CMD), MO(SYMB), MT(MOD_LSFT, KC_SPC), MO(SYMB), KC_TAB, KC_RGUI, _______, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [NEW_CMD] = KEYMAP_JP(
+ _______, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), _______, _______, _______, LGUI(KC_BSPC),
+ _______, LGUI(KC_Q), LGUI(KC_W), LGUI(KC_E), LGUI(KC_R), LGUI(KC_T), LGUI(KC_Y), LGUI(KC_U), LGUI(KC_I), LGUI(KC_O), LGUI(KC_P), LGUI(KC_LBRC), LGUI(KC_RBRC),
+ _______, LGUI(KC_A), LGUI(KC_S), LGUI(KC_D), LGUI(KC_F), LGUI(KC_G), LGUI(KC_H), LGUI(KC_J), LGUI(KC_K), LGUI(KC_L), _______, _______, _______, _______,
+ LGUI(KC_LSFT), LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_B), LGUI(KC_N), LGUI(KC_M), LGUI(KC_COMM), LGUI(KC_DOT), LGUI(KC_SLSH), _______, _______, _______,
+ _______, _______, _______, _______, _______, LGUI(KC_SPC), _______, _______, _______, _______, LGUI(KC_LEFT), LGUI(KC_DOWN), LGUI(KC_RGHT)
+ ),
+
+ [SYMB] = KEYMAP_JP(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_LBRC, KC_RBRC, _______, _______, LSFT(KC_LBRC), LSFT(KC_RBRC), _______, _______,_______, _______,
+ _______, LSFT(KC_1),LSFT(KC_2),LSFT(KC_3),LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_0), _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [FUNC] = KEYMAP_JP(
+ KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PWR, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______, KC_PENT,
+ _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______ , _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t macro_id, uint8_t opt) {
+ return MACRO_NONE;
+}
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
diff --git a/keyboards/hhkb/keymaps/shela/Makefile b/keyboards/hhkb/keymaps/shela/Makefile
new file mode 100644
index 000000000..d0586bda6
--- /dev/null
+++ b/keyboards/hhkb/keymaps/shela/Makefile
@@ -0,0 +1 @@
+SRC += action_pseudo_lut.c
diff --git a/keyboards/hhkb/keymaps/shela/action_pseudo_lut.c b/keyboards/hhkb/keymaps/shela/action_pseudo_lut.c
new file mode 100644
index 000000000..b205968c7
--- /dev/null
+++ b/keyboards/hhkb/keymaps/shela/action_pseudo_lut.c
@@ -0,0 +1,142 @@
+#include "quantum.h"
+#include "action_pseudo_lut.h"
+
+static uint8_t send_key_shift_bit[SHIFT_BIT_SIZE];
+
+/*
+ * Pseudo layout action.
+ * This action converts a keycode in order to output the character according to the keymap you specified
+ * still your keyboard layout recognized wrongly on your OS.
+ * Memo: Using other layer keymap to get keycode
+ */
+void action_pseudo_lut(keyrecord_t *record, uint8_t base_keymap_id, const uint16_t (*keymap)[2]) {
+ static uint8_t prev_shift;
+ uint16_t keycode;
+ uint16_t pseudo_keycode;
+
+ /* get keycode from keymap you specified */
+ keycode = keymap_key_to_keycode(base_keymap_id, record->event.key);
+
+ prev_shift = keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+
+ if (record->event.pressed) {
+ /* when magic commands entered, keycode does not converted */
+ if (IS_COMMAND()) {
+ if (prev_shift) {
+ add_shift_bit(keycode);
+ }
+ register_code(keycode);
+ return;
+ }
+
+ if (prev_shift) {
+ pseudo_keycode = convert_keycode(keymap, keycode, true);
+ dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode);
+ add_shift_bit(keycode);
+
+ if (IS_LSFT(pseudo_keycode)) {
+ register_code(QK_LSFT ^ pseudo_keycode);
+ } else {
+ /* delete shift mod temporarily */
+ del_mods(prev_shift);
+ send_keyboard_report();
+ register_code(pseudo_keycode);
+ add_mods(prev_shift);
+ send_keyboard_report();
+ }
+ } else {
+ pseudo_keycode = convert_keycode(keymap, keycode, false);
+ dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode);
+
+ if (IS_LSFT(pseudo_keycode)) {
+ add_weak_mods(MOD_BIT(KC_LSFT));
+ send_keyboard_report();
+ register_code(QK_LSFT ^ pseudo_keycode);
+ /* on Windows, prevent key repeat to avoid unintended output */
+ unregister_code(QK_LSFT ^ pseudo_keycode);
+ del_weak_mods(MOD_BIT(KC_LSFT));
+ send_keyboard_report();
+ } else {
+ register_code(pseudo_keycode);
+ }
+ }
+ } else {
+ if (get_shift_bit(keycode)) {
+ del_shift_bit(keycode);
+ pseudo_keycode = convert_keycode(keymap, keycode, true);
+ } else {
+ pseudo_keycode = convert_keycode(keymap, keycode, false);
+ }
+ dprintf("released: %02X, converted: %04X\n", keycode, pseudo_keycode);
+
+ if (IS_LSFT(pseudo_keycode)) {
+ unregister_code(QK_LSFT ^ pseudo_keycode);
+ } else {
+ unregister_code(pseudo_keycode);
+ }
+ }
+}
+
+uint16_t convert_keycode(const uint16_t (*keymap)[2], uint16_t keycode, bool shift_modded)
+{
+ uint16_t pseudo_keycode;
+
+ switch (keycode) {
+ case KC_A ... KC_CAPSLOCK:
+#if defined(__AVR__)
+ if (shift_modded) {
+ pseudo_keycode = pgm_read_word(&keymap[keycode][1]);
+ } else {
+ pseudo_keycode = pgm_read_word(&keymap[keycode][0]);
+ }
+#else
+ if (shift_modded) {
+ pseudo_keycode = keymap[keycode][1];
+ } else {
+ pseudo_keycode = keymap[keycode][0];
+ }
+#endif
+ /* if undefined, use got keycode as it is */
+ if (pseudo_keycode == 0x00) {
+ if (shift_modded) {
+ pseudo_keycode = S(keycode);
+ } else {
+ pseudo_keycode = keycode;
+ }
+ }
+ break;
+ default:
+ if (shift_modded) {
+ pseudo_keycode = S(keycode);
+ } else {
+ pseudo_keycode = keycode;
+ }
+ break;
+ }
+ return pseudo_keycode;
+}
+
+uint8_t get_shift_bit(uint16_t keycode) {
+ if ((keycode >> 3) < SHIFT_BIT_SIZE) {
+ return send_key_shift_bit[keycode >> 3] & (1 << (keycode & 7));
+ } else {
+ dprintf("get_shift_bit: Can't get shift bit. keycode: %02X\n", keycode);
+ return 0;
+ }
+}
+
+void add_shift_bit(uint16_t keycode) {
+ if ((keycode >> 3) < SHIFT_BIT_SIZE) {
+ send_key_shift_bit[keycode >> 3] |= (1 << (keycode & 7));
+ } else {
+ dprintf("add_shift_bit: Can't add shift bit. keycode: %02X\n", keycode);
+ }
+}
+
+void del_shift_bit(uint16_t keycode) {
+ if ((keycode >> 3) < SHIFT_BIT_SIZE) {
+ send_key_shift_bit[keycode >> 3] &= ~(1 << (keycode & 7));
+ } else {
+ dprintf("del_shift_bit: Can't delete shift bit. keycode: %02X\n", keycode);
+ }
+}
diff --git a/keyboards/hhkb/keymaps/shela/action_pseudo_lut.h b/keyboards/hhkb/keymaps/shela/action_pseudo_lut.h
new file mode 100644
index 000000000..681252440
--- /dev/null
+++ b/keyboards/hhkb/keymaps/shela/action_pseudo_lut.h
@@ -0,0 +1,15 @@
+#ifndef ACTION_PSEUDO_LUT_H
+#define ACTION_PSEUDO_LUT_H
+
+#define SHIFT_BIT_SIZE (0xE7 / 8 + 1) // 1bit per 1key
+
+#define IS_LSFT(kc) ((QK_LSFT & (kc)) == QK_LSFT)
+
+void action_pseudo_lut(keyrecord_t *, uint8_t, const uint16_t (*)[2]);
+uint16_t convert_keycode(const uint16_t (*)[2], uint16_t, bool);
+
+uint8_t get_shift_bit(uint16_t);
+void add_shift_bit(uint16_t);
+void del_shift_bit(uint16_t);
+
+#endif
diff --git a/keyboards/hhkb/keymaps/shela/config.h b/keyboards/hhkb/keymaps/shela/config.h
new file mode 100644
index 000000000..08cc1fb46
--- /dev/null
+++ b/keyboards/hhkb/keymaps/shela/config.h
@@ -0,0 +1,12 @@
+#ifndef CONFIG_SHELA_H
+#define CONFIG_SHELA_H
+
+#include "../../config.h"
+
+#undef TAPPING_TERM
+#define TAPPING_TERM 230
+
+#define ONESHOT_TAP_TOGGLE 2
+#define ONESHOT_TIMEOUT 2000
+
+#endif
diff --git a/keyboards/hhkb/keymaps/shela/keymap.c b/keyboards/hhkb/keymaps/shela/keymap.c
new file mode 100644
index 000000000..c286b99de
--- /dev/null
+++ b/keyboards/hhkb/keymaps/shela/keymap.c
@@ -0,0 +1,179 @@
+/*
+ * HHKB Pro 2 US Layout for shela
+ */
+#include "hhkb.h"
+#include "keymap_jis2us.h"
+#include "action_pseudo_lut.h"
+
+enum keymap_layout {
+ BASE = 0,
+ PSEUDO_US,
+ DVORAK,
+ MOUSE,
+ TENKEY,
+ HHKB,
+ SPACE_FN,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Layer 0: Default Layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | ` | BSp |
+ * |-----------------------------------------------------------------------------------------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
+ * |-----------------------------------------------------------------------------------------|
+ * | Control | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * |-----------------------------------------------------------------------------------------|
+ * | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 |
+ * `-----------------------------------------------------------------------------------------'
+ * |LAlt | LGui | SpaceFN | RGui |RAlt |
+ * `-----------------------------------------------------------------'
+ */
+ [BASE] =
+ KEYMAP(KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_GRV, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS, \
+ KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_ENT, \
+ OSM(MOD_LSFT),KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,KC_FN0, \
+ KC_LALT,KC_LGUI, KC_FN2, KC_RGUI,KC_RALT),
+
+ /* Layer 1: Pseudo US Layout Layer */
+ [PSEUDO_US] =
+ KEYMAP(KC_ESC, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_BSPC, \
+ KC_TAB, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, \
+ KC_LCTL,KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_ENT, \
+ OSM(MOD_LSFT),KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_RSFT,KC_FN0, \
+ KC_LGUI,KC_FN3, KC_FN2, KC_FN4 ,KC_RGUI),
+
+ /* Layer 2: Dvorak Layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | [ | ] | ` | BSp |
+ * |-----------------------------------------------------------------------------------------|
+ * | Tab | ' | , | . | P | Y | F | G | C | R | L | / | = | \ |
+ * |-----------------------------------------------------------------------------------------|
+ * | Control | A | O | E | U | I | D | H | T | N | S | - | Enter |
+ * |-----------------------------------------------------------------------------------------|
+ * | Shift | ; | Q | J | K | X | B | M | W | V | Z | Shift | Fn0 |
+ * `-----------------------------------------------------------------------------------------'
+ * |LAlt | LGui | SpaceFN | RGui |RAlt |
+ * `-----------------------------------------------------------------'
+ */
+ [DVORAK] =
+ KEYMAP(KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC,KC_RBRC,KC_GRV, KC_BSPC, \
+ KC_TAB, KC_QUOT,KC_COMM,KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,KC_EQL, KC_BSLS, \
+ KC_LCTL,KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,KC_ENT, \
+ KC_LSFT,KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,KC_FN0, \
+ KC_LALT,KC_LGUI, KC_FN2, KC_RGUI,KC_RALT),
+
+ /* Layer 3: Mouse layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | |
+ * |-----------------------------------------------------------------------------------------|
+ * | | | | | | | MwL | MwD | MwU | MwR | | | | |
+ * |-----------------------------------------------------------------------------------------|
+ * | | | | | | | McL | McD | McU | McR | | | |
+ * |-----------------------------------------------------------------------------------------|
+ * | | | | | | | Mb1 | Mb2 | Mb3 | | | | Fn0 |
+ * `-----------------------------------------------------------------------------------------'
+ * | | | Mb1 | | |
+ * `-----------------------------------------------------------------'
+ */
+ [MOUSE] =
+ KEYMAP(KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_TRNS, \
+ KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L,KC_WH_D,KC_WH_U,KC_WH_R,KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R,KC_NO, KC_NO, KC_TRNS, \
+ KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1,KC_BTN2,KC_BTN3,KC_NO, KC_NO, KC_TRNS,KC_FN0, \
+ KC_TRNS,KC_TRNS, KC_BTN1, KC_TRNS,KC_TRNS),
+
+ /* Layer 4: Tenkey layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | | | | | | | | | | / | * | - | | BSp |
+ * |-----------------------------------------------------------------------------------------|
+ * | | | | | | | | | | 7 | 8 | 9 | + | |
+ * |-----------------------------------------------------------------------------------------|
+ * | | | | | | | | | | 4 | 5 | 6 | Enter |
+ * |-----------------------------------------------------------------------------------------|
+ * | | | | | | | | | 1 | 2 | 3 | + | Fn0 |
+ * `-----------------------------------------------------------------------------------------'
+ * | | | SpaceFN | 0 | . |
+ * `-----------------------------------------------------------------'
+ */
+ [TENKEY] =
+ KEYMAP(KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSLS,KC_PAST,KC_PMNS,KC_NO, KC_BSPC, \
+ KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_7,KC_KP_8,KC_KP_9,KC_PPLS,KC_NO, \
+ KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_4,KC_KP_5,KC_KP_6,KC_PENT, \
+ KC_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_1,KC_KP_2,KC_KP_3,KC_PPLS,KC_FN0, \
+ KC_TRNS,KC_TRNS, KC_FN2, KC_KP_0,KC_PDOT),
+
+ /* Layer 5: HHKB mode (HHKB Fn)
+ * ,-----------------------------------------------------------------------------------------.
+ * | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
+ * |-----------------------------------------------------------------------------------------|
+ * | Caps | Fn5 | Fn6 | Fn7 | Fn8 | Fn9 | | | Psc | Slk | Pus | Up | | BSp |
+ * |-----------------------------------------------------------------------------------------|
+ * | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter |
+ * |-----------------------------------------------------------------------------------------|
+ * | | | | | | | + | - | End | PgD | Dow | | |
+ * `-----------------------------------------------------------------------------------------'
+ * | | | | | |
+ * `-----------------------------------------------------------------'
+ */
+ [HHKB] =
+ KEYMAP(KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
+ KC_CAPS,KC_FN5, KC_FN6, KC_FN7, KC_FN8, KC_FN9, KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS,KC_UP, KC_TRNS,KC_BSPC, \
+ KC_TRNS,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT,KC_PENT, \
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PPLS,KC_PMNS,KC_END, KC_PGDN,KC_DOWN,KC_TRNS,KC_TRNS, \
+ KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS),
+
+ /* Layer 6: SpaceFN
+ * ,-----------------------------------------------------------------------------------------.
+ * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | Del |
+ * |-----------------------------------------------------------------------------------------|
+ * | | End | Up | Hom | | | | Hom | Up | End | Psc | Slk | Pau | Ins |
+ * |-----------------------------------------------------------------------------------------|
+ * | | Lef | Dow | Rig | PgU | | PgU | Lef | Dow | Rig | | | |
+ * |-----------------------------------------------------------------------------------------|
+ * | | | | PgD | | Spc | PgD | ` | ~ | | | | |
+ * `-----------------------------------------------------------------------------------------'
+ * | | | | | |
+ * `-----------------------------------------------------------------'
+ */
+ [SPACE_FN] =
+ KEYMAP(KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_DEL, \
+ KC_TRNS,KC_END, KC_UP, KC_HOME,KC_NO, KC_NO, KC_NO, KC_HOME,KC_UP, KC_END, KC_PSCR,KC_SLCK,KC_PAUS,KC_INS, \
+ KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_PGUP,KC_NO, KC_PGUP,KC_LEFT,KC_DOWN,KC_RGHT,KC_NO, KC_NO, KC_TRNS, \
+ KC_TRNS,KC_NO, KC_NO, KC_PGDN,KC_NO, KC_SPC, KC_PGDN,KC_GRV, KC_TILD,KC_NO, KC_NO, KC_TRNS,KC_NO, \
+ KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS),
+};
+
+/*
+ * user defined action function
+ */
+enum function_id {
+ PSEUDO_US_FUNCTION,
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+
+ switch (id) {
+ case PSEUDO_US_FUNCTION:
+ action_pseudo_lut(record, BASE, keymap_jis2us);
+ break;
+ }
+}
+
+/*
+ * Fn action definition
+ */
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_MOMENTARY(HHKB),
+ [1] = ACTION_FUNCTION(PSEUDO_US_FUNCTION),
+ [2] = ACTION_LAYER_TAP_KEY(SPACE_FN, KC_SPACE),
+ [3] = ACTION_MODS_TAP_KEY(MOD_LALT, KC_MHEN),
+ [4] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_KANA),
+ [5] = ACTION_DEFAULT_LAYER_SET(BASE),
+ [6] = ACTION_DEFAULT_LAYER_SET(PSEUDO_US),
+ [7] = ACTION_DEFAULT_LAYER_SET(MOUSE),
+ [8] = ACTION_DEFAULT_LAYER_SET(TENKEY),
+ [9] = ACTION_DEFAULT_LAYER_SET(DVORAK),
+};
diff --git a/keyboards/hhkb/keymaps/shela/keymap_jis2us.h b/keyboards/hhkb/keymaps/shela/keymap_jis2us.h
new file mode 100644
index 000000000..cf2bd4f0e
--- /dev/null
+++ b/keyboards/hhkb/keymaps/shela/keymap_jis2us.h
@@ -0,0 +1,32 @@
+#ifndef KEYMAP_JIS2US_H
+#define KEYMAP_JIS2US_H
+
+/* keymap for convert from JIS to US */
+const uint16_t PROGMEM keymap_jis2us[][2] = {
+ [KC_A ... KC_CAPS] = { 0x00, 0x00 }, /* default value */
+
+ [KC_1] = { KC_1, KC_EXLM }, /* 1 and ! -> 1 and ! */
+ [KC_2] = { KC_2, KC_LBRC }, /* 2 and " -> 2 and @ */
+ [KC_3] = { KC_3, KC_HASH }, /* 3 and # -> 3 and # */
+ [KC_4] = { KC_4, KC_DLR }, /* 4 and $ -> 4 and $ */
+ [KC_5] = { KC_5, KC_PERC }, /* 5 and % -> 5 and % */
+ [KC_6] = { KC_6, KC_EQL }, /* 6 and & -> 6 and ^ */
+ [KC_7] = { KC_7, KC_CIRC }, /* 7 and ' -> 7 and & */
+ [KC_8] = { KC_8, KC_DQT }, /* 8 and ( -> 8 and * */
+ [KC_9] = { KC_9, KC_ASTR }, /* 9 and ) -> 9 and ( */
+ [KC_0] = { KC_0, KC_LPRN }, /* 0 and (no assign) -> 0 and ) */
+ [KC_MINS] = { KC_MINS, S(KC_RO) }, /* - and = -> - and _ */
+ [KC_EQL] = { KC_UNDS, KC_COLN }, /* ^ and ~ -> = and + */
+ [KC_LBRC] = { KC_RBRC, KC_RCBR }, /* @ and ` -> [ and { */
+ [KC_RBRC] = { KC_BSLS, KC_PIPE }, /* [ and { -> ] and } */
+ [KC_BSLS] = { KC_JYEN, S(KC_JYEN) }, /* ] and } -> / and | */
+ [KC_NUHS] = { KC_NUHS, S(KC_NUHS) }, /* (no assign) */
+ [KC_SCLN] = { KC_SCLN, KC_QUOT }, /* ; and + -> ; and : */
+ [KC_QUOT] = { KC_AMPR, KC_AT }, /* : and * -> ' and " */
+ [KC_GRV] = { KC_LCBR, KC_PLUS }, /* (no assign) -> ` and ~ */
+ [KC_COMM] = { KC_COMM, KC_LT }, /* , and < -> , and < */
+ [KC_DOT] = { KC_DOT, KC_GT }, /* . and > -> . and > */
+ [KC_SLSH] = { KC_SLSH, KC_QUES }, /* / and ? -> / and ? */
+};
+
+#endif
diff --git a/keyboards/hhkb/keymaps/shela/readme.md b/keyboards/hhkb/keymaps/shela/readme.md
new file mode 100644
index 000000000..5a06a8363
--- /dev/null
+++ b/keyboards/hhkb/keymaps/shela/readme.md
@@ -0,0 +1,14 @@
+# Shela's HHKB Layout
+
+Layer 0: US Layout
+Layer 1: Pseudo US Layout
+Layer 2: Dvorak Layout
+Layer 3: Mouse
+Layer 4: Tenkey
+Layer 5: HHKB Fn Key
+Layer 6: SpaceFN
+
+## Pseudo US Layout
+
+On japanese Windows, HHKB Professional 2 US layout model recognized wrongly as JIS layout without changing OS settings.
+But, you can use HHKB like a US layout keyboard as it is.
diff --git a/keyboards/hhkb/readme.md b/keyboards/hhkb/readme.md
index 39d49b32a..367c0a08f 100644
--- a/keyboards/hhkb/readme.md
+++ b/keyboards/hhkb/readme.md
@@ -168,13 +168,15 @@ Download or clone the whole firmware and navigate to the keyboards/planck folder
Depending on which keymap you would like to use, you will have to compile slightly differently.
### Default
-To build with the default keymap, simply run `make`.
+To build with the default keymap, simply run `make default`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a file in the keymaps folder named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
-To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
```
-$ make KEYMAP=[default|jack|<name>]
+$ make [default|jack|<name>]
```
+
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/hhkb/rules.mk b/keyboards/hhkb/rules.mk
new file mode 100644
index 000000000..a46271f02
--- /dev/null
+++ b/keyboards/hhkb/rules.mk
@@ -0,0 +1,80 @@
+
+
+# project specific files
+SRC = matrix.c
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+#OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# as per original hasu settings
+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
+CUSTOM_MATRIX ?= yes # Custom matrix file for the HHKB
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
+# NKRO_ENABLE ?= yes # USB 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 ?= yes # MIDI controls
+# UNICODE_ENABLE ?= yes # Unicode
+# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
+
+debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION
+debug-on: all
+
+debug-off: EXTRAFLAGS += -DNO_DEBUG -DNO_PRINT
+debug-off: OPT_DEFS := $(filter-out -DCONSOLE_ENABLE,$(OPT_DEFS))
+debug-off: all
diff --git a/keyboards/infinity_ergodox/MEMO.txt b/keyboards/infinity60/MEMO.txt
index e2886aa00..e2886aa00 100644
--- a/keyboards/infinity_ergodox/MEMO.txt
+++ b/keyboards/infinity60/MEMO.txt
diff --git a/keyboards/infinity60/Makefile b/keyboards/infinity60/Makefile
new file mode 100644
index 000000000..4e2a6f00f
--- /dev/null
+++ b/keyboards/infinity60/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/infinity_ergodox/bootloader_defs.h b/keyboards/infinity60/bootloader_defs.h
index c67153be6..c67153be6 100644
--- a/keyboards/infinity_ergodox/bootloader_defs.h
+++ b/keyboards/infinity60/bootloader_defs.h
diff --git a/keyboards/infinity_chibios/chconf.h b/keyboards/infinity60/chconf.h
index b886c383b..d9114ec85 100644
--- a/keyboards/infinity_chibios/chconf.h
+++ b/keyboards/infinity60/chconf.h
@@ -1,524 +1,524 @@
-/*
- ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-/**
- * @file templates/chconf.h
- * @brief Configuration file template.
- * @details A copy of this file must be placed in each project directory, it
- * contains the application specific kernel settings.
- *
- * @addtogroup config
- * @details Kernel related settings and hooks.
- * @{
- */
-
-#ifndef CHCONF_H
-#define CHCONF_H
-
-#define _CHIBIOS_RT_CONF_
-
-/*===========================================================================*/
-/**
- * @name System timers settings
- * @{
- */
-/*===========================================================================*/
-
-/**
- * @brief System time counter resolution.
- * @note Allowed values are 16 or 32 bits.
- */
-#define CH_CFG_ST_RESOLUTION 32
-
-/**
- * @brief System tick frequency.
- * @details Frequency of the system timer that drives the system ticks. This
- * setting also defines the system tick time unit.
- */
-#define CH_CFG_ST_FREQUENCY 1000
-
-/**
- * @brief Time delta constant for the tick-less mode.
- * @note If this value is zero then the system uses the classic
- * periodic tick. This value represents the minimum number
- * of ticks that is safe to specify in a timeout directive.
- * The value one is not valid, timeouts are rounded up to
- * this value.
- */
-#define CH_CFG_ST_TIMEDELTA 0
-
-/** @} */
-
-/*===========================================================================*/
-/**
- * @name Kernel parameters and options
- * @{
- */
-/*===========================================================================*/
-
-/**
- * @brief Round robin interval.
- * @details This constant is the number of system ticks allowed for the
- * threads before preemption occurs. Setting this value to zero
- * disables the preemption for threads with equal priority and the
- * round robin becomes cooperative. Note that higher priority
- * threads can still preempt, the kernel is always preemptive.
- * @note Disabling the round robin preemption makes the kernel more compact
- * and generally faster.
- * @note The round robin preemption is not supported in tickless mode and
- * must be set to zero in that case.
- */
-#define CH_CFG_TIME_QUANTUM 20
-
-/**
- * @brief Managed RAM size.
- * @details Size of the RAM area to be managed by the OS. If set to zero
- * then the whole available RAM is used. The core memory is made
- * available to the heap allocator and/or can be used directly through
- * the simplified core memory allocator.
- *
- * @note In order to let the OS manage the whole RAM the linker script must
- * provide the @p __heap_base__ and @p __heap_end__ symbols.
- * @note Requires @p CH_CFG_USE_MEMCORE.
- */
-#define CH_CFG_MEMCORE_SIZE 0
-
-/**
- * @brief Idle thread automatic spawn suppression.
- * @details When this option is activated the function @p chSysInit()
- * does not spawn the idle thread. The application @p main()
- * function becomes the idle thread and must implement an
- * infinite loop.
- */
-#define CH_CFG_NO_IDLE_THREAD FALSE
-
-/* Use __WFI in the idle thread for waiting. Does lower the power
- * consumption. */
-#define CORTEX_ENABLE_WFI_IDLE TRUE
-
-/** @} */
-
-/*===========================================================================*/
-/**
- * @name Performance options
- * @{
- */
-/*===========================================================================*/
-
-/**
- * @brief OS optimization.
- * @details If enabled then time efficient rather than space efficient code
- * is used when two possible implementations exist.
- *
- * @note This is not related to the compiler optimization options.
- * @note The default is @p TRUE.
- */
-#define CH_CFG_OPTIMIZE_SPEED TRUE
-
-/** @} */
-
-/*===========================================================================*/
-/**
- * @name Subsystem options
- * @{
- */
-/*===========================================================================*/
-
-/**
- * @brief Time Measurement APIs.
- * @details If enabled then the time measurement APIs are included in
- * the kernel.
- *
- * @note The default is @p TRUE.
- */
-#define CH_CFG_USE_TM FALSE
-
-/**
- * @brief Threads registry APIs.
- * @details If enabled then the registry APIs are included in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#define CH_CFG_USE_REGISTRY TRUE
-
-/**
- * @brief Threads synchronization APIs.
- * @details If enabled then the @p chThdWait() function is included in
- * the kernel.
- *
- * @note The default is @p TRUE.
- */
-#define CH_CFG_USE_WAITEXIT TRUE
-
-/**
- * @brief Semaphores APIs.
- * @details If enabled then the Semaphores APIs are included in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#define CH_CFG_USE_SEMAPHORES TRUE
-
-/**
- * @brief Semaphores queuing mode.
- * @details If enabled then the threads are enqueued on semaphores by
- * priority rather than in FIFO order.
- *
- * @note The default is @p FALSE. Enable this if you have special
- * requirements.
- * @note Requires @p CH_CFG_USE_SEMAPHORES.
- */
-#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
-
-/**
- * @brief Mutexes APIs.
- * @details If enabled then the mutexes APIs are included in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#define CH_CFG_USE_MUTEXES TRUE
-
-/**
- * @brief Enables recursive behavior on mutexes.
- * @note Recursive mutexes are heavier and have an increased
- * memory footprint.
- *
- * @note The default is @p FALSE.
- * @note Requires @p CH_CFG_USE_MUTEXES.
- */
-#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
-
-/**
- * @brief Conditional Variables APIs.
- * @details If enabled then the conditional variables APIs are included
- * in the kernel.
- *
- * @note The default is @p TRUE.
- * @note Requires @p CH_CFG_USE_MUTEXES.
- */
-#define CH_CFG_USE_CONDVARS TRUE
-
-/**
- * @brief Conditional Variables APIs with timeout.
- * @details If enabled then the conditional variables APIs with timeout
- * specification are included in the kernel.
- *
- * @note The default is @p TRUE.
- * @note Requires @p CH_CFG_USE_CONDVARS.
- */
-#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
-
-/**
- * @brief Events Flags APIs.
- * @details If enabled then the event flags APIs are included in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#define CH_CFG_USE_EVENTS TRUE
-
-/**
- * @brief Events Flags APIs with timeout.
- * @details If enabled then the events APIs with timeout specification
- * are included in the kernel.
- *
- * @note The default is @p TRUE.
- * @note Requires @p CH_CFG_USE_EVENTS.
- */
-#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
-
-/**
- * @brief Synchronous Messages APIs.
- * @details If enabled then the synchronous messages APIs are included
- * in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#define CH_CFG_USE_MESSAGES TRUE
-
-/**
- * @brief Synchronous Messages queuing mode.
- * @details If enabled then messages are served by priority rather than in
- * FIFO order.
- *
- * @note The default is @p FALSE. Enable this if you have special
- * requirements.
- * @note Requires @p CH_CFG_USE_MESSAGES.
- */
-#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
-
-/**
- * @brief Mailboxes APIs.
- * @details If enabled then the asynchronous messages (mailboxes) APIs are
- * included in the kernel.
- *
- * @note The default is @p TRUE.
- * @note Requires @p CH_CFG_USE_SEMAPHORES.
- */
-#define CH_CFG_USE_MAILBOXES TRUE
-
-/**
- * @brief Core Memory Manager APIs.
- * @details If enabled then the core memory manager APIs are included
- * in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#define CH_CFG_USE_MEMCORE TRUE
-
-/**
- * @brief Heap Allocator APIs.
- * @details If enabled then the memory heap allocator APIs are included
- * in the kernel.
- *
- * @note The default is @p TRUE.
- * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
- * @p CH_CFG_USE_SEMAPHORES.
- * @note Mutexes are recommended.
- */
-#define CH_CFG_USE_HEAP TRUE
-
-/**
- * @brief Memory Pools Allocator APIs.
- * @details If enabled then the memory pools allocator APIs are included
- * in the kernel.
- *
- * @note The default is @p TRUE.
- */
-#define CH_CFG_USE_MEMPOOLS TRUE
-
-/**
- * @brief Dynamic Threads APIs.
- * @details If enabled then the dynamic threads creation APIs are included
- * in the kernel.
- *
- * @note The default is @p TRUE.
- * @note Requires @p CH_CFG_USE_WAITEXIT.
- * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
- */
-#define CH_CFG_USE_DYNAMIC TRUE
-
-/** @} */
-
-/*===========================================================================*/
-/**
- * @name Debug options
- * @{
- */
-/*===========================================================================*/
-
-/**
- * @brief Debug option, kernel statistics.
- *
- * @note The default is @p FALSE.
- */
-#define CH_DBG_STATISTICS FALSE
-
-/**
- * @brief Debug option, system state check.
- * @details If enabled the correct call protocol for system APIs is checked
- * at runtime.
- *
- * @note The default is @p FALSE.
- */
-#define CH_DBG_SYSTEM_STATE_CHECK FALSE
-
-/**
- * @brief Debug option, parameters checks.
- * @details If enabled then the checks on the API functions input
- * parameters are activated.
- *
- * @note The default is @p FALSE.
- */
-#define CH_DBG_ENABLE_CHECKS FALSE
-
-/**
- * @brief Debug option, consistency checks.
- * @details If enabled then all the assertions in the kernel code are
- * activated. This includes consistency checks inside the kernel,
- * runtime anomalies and port-defined checks.
- *
- * @note The default is @p FALSE.
- */
-#define CH_DBG_ENABLE_ASSERTS FALSE
-
-/**
- * @brief Debug option, trace buffer.
- * @details If enabled then the trace buffer is activated.
- *
- * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
- */
-#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
-
-/**
- * @brief Trace buffer entries.
- * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
- * different from @p CH_DBG_TRACE_MASK_DISABLED.
- */
-#define CH_DBG_TRACE_BUFFER_SIZE 128
-
-/**
- * @brief Debug option, stack checks.
- * @details If enabled then a runtime stack check is performed.
- *
- * @note The default is @p FALSE.
- * @note The stack check is performed in a architecture/port dependent way.
- * It may not be implemented or some ports.
- * @note The default failure mode is to halt the system with the global
- * @p panic_msg variable set to @p NULL.
- */
-#define CH_DBG_ENABLE_STACK_CHECK FALSE
-
-/**
- * @brief Debug option, stacks initialization.
- * @details If enabled then the threads working area is filled with a byte
- * value when a thread is created. This can be useful for the
- * runtime measurement of the used stack.
- *
- * @note The default is @p FALSE.
- */
-#define CH_DBG_FILL_THREADS FALSE
-
-/**
- * @brief Debug option, threads profiling.
- * @details If enabled then a field is added to the @p thread_t structure that
- * counts the system ticks occurred while executing the thread.
- *
- * @note The default is @p FALSE.
- * @note This debug option is not currently compatible with the
- * tickless mode.
- */
-#define CH_DBG_THREADS_PROFILING FALSE
-
-/** @} */
-
-/*===========================================================================*/
-/**
- * @name Kernel hooks
- * @{
- */
-/*===========================================================================*/
-
-/**
- * @brief Threads descriptor structure extension.
- * @details User fields added to the end of the @p thread_t structure.
- */
-#define CH_CFG_THREAD_EXTRA_FIELDS \
- /* Add threads custom fields here.*/
-
-/**
- * @brief Threads initialization hook.
- * @details User initialization code added to the @p chThdInit() API.
- *
- * @note It is invoked from within @p chThdInit() and implicitly from all
- * the threads creation APIs.
- */
-#define CH_CFG_THREAD_INIT_HOOK(tp) { \
- /* Add threads initialization code here.*/ \
-}
-
-/**
- * @brief Threads finalization hook.
- * @details User finalization code added to the @p chThdExit() API.
- */
-#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
- /* Add threads finalization code here.*/ \
-}
-
-/**
- * @brief Context switch hook.
- * @details This hook is invoked just before switching between threads.
- */
-#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
- /* Context switch code here.*/ \
-}
-
-/**
- * @brief ISR enter hook.
- */
-#define CH_CFG_IRQ_PROLOGUE_HOOK() { \
- /* IRQ prologue code here.*/ \
-}
-
-/**
- * @brief ISR exit hook.
- */
-#define CH_CFG_IRQ_EPILOGUE_HOOK() { \
- /* IRQ epilogue code here.*/ \
-}
-
-/**
- * @brief Idle thread enter hook.
- * @note This hook is invoked within a critical zone, no OS functions
- * should be invoked from here.
- * @note This macro can be used to activate a power saving mode.
- */
-#define CH_CFG_IDLE_ENTER_HOOK() { \
- /* Idle-enter code here.*/ \
-}
-
-/**
- * @brief Idle thread leave hook.
- * @note This hook is invoked within a critical zone, no OS functions
- * should be invoked from here.
- * @note This macro can be used to deactivate a power saving mode.
- */
-#define CH_CFG_IDLE_LEAVE_HOOK() { \
- /* Idle-leave code here.*/ \
-}
-
-/**
- * @brief Idle Loop hook.
- * @details This hook is continuously invoked by the idle thread loop.
- */
-#define CH_CFG_IDLE_LOOP_HOOK() { \
- /* Idle loop code here.*/ \
-}
-
-/**
- * @brief System tick event hook.
- * @details This hook is invoked in the system tick handler immediately
- * after processing the virtual timers queue.
- */
-#define CH_CFG_SYSTEM_TICK_HOOK() { \
- /* System tick event code here.*/ \
-}
-
-/**
- * @brief System halt hook.
- * @details This hook is invoked in case to a system halting error before
- * the system is halted.
- */
-#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
- /* System halt code here.*/ \
-}
-
-/**
- * @brief Trace hook.
- * @details This hook is invoked each time a new record is written in the
- * trace buffer.
- */
-#define CH_CFG_TRACE_HOOK(tep) { \
- /* Trace code here.*/ \
-}
-
-/** @} */
-
-/*===========================================================================*/
-/* Port-specific settings (override port settings defaulted in chcore.h). */
-/*===========================================================================*/
-
-#endif /* CHCONF_H */
-
-/** @} */
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/chconf.h
+ * @brief Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ * contains the application specific kernel settings.
+ *
+ * @addtogroup config
+ * @details Kernel related settings and hooks.
+ * @{
+ */
+
+#ifndef CHCONF_H
+#define CHCONF_H
+
+#define _CHIBIOS_RT_CONF_
+
+/*===========================================================================*/
+/**
+ * @name System timers settings
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System time counter resolution.
+ * @note Allowed values are 16 or 32 bits.
+ */
+#define CH_CFG_ST_RESOLUTION 32
+
+/**
+ * @brief System tick frequency.
+ * @details Frequency of the system timer that drives the system ticks. This
+ * setting also defines the system tick time unit.
+ */
+#define CH_CFG_ST_FREQUENCY 100000
+
+/**
+ * @brief Time delta constant for the tick-less mode.
+ * @note If this value is zero then the system uses the classic
+ * periodic tick. This value represents the minimum number
+ * of ticks that is safe to specify in a timeout directive.
+ * The value one is not valid, timeouts are rounded up to
+ * this value.
+ */
+#define CH_CFG_ST_TIMEDELTA 0
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel parameters and options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Round robin interval.
+ * @details This constant is the number of system ticks allowed for the
+ * threads before preemption occurs. Setting this value to zero
+ * disables the preemption for threads with equal priority and the
+ * round robin becomes cooperative. Note that higher priority
+ * threads can still preempt, the kernel is always preemptive.
+ * @note Disabling the round robin preemption makes the kernel more compact
+ * and generally faster.
+ * @note The round robin preemption is not supported in tickless mode and
+ * must be set to zero in that case.
+ */
+#define CH_CFG_TIME_QUANTUM 20
+
+/**
+ * @brief Managed RAM size.
+ * @details Size of the RAM area to be managed by the OS. If set to zero
+ * then the whole available RAM is used. The core memory is made
+ * available to the heap allocator and/or can be used directly through
+ * the simplified core memory allocator.
+ *
+ * @note In order to let the OS manage the whole RAM the linker script must
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_CFG_USE_MEMCORE.
+ */
+#define CH_CFG_MEMCORE_SIZE 0
+
+/**
+ * @brief Idle thread automatic spawn suppression.
+ * @details When this option is activated the function @p chSysInit()
+ * does not spawn the idle thread. The application @p main()
+ * function becomes the idle thread and must implement an
+ * infinite loop.
+ */
+#define CH_CFG_NO_IDLE_THREAD FALSE
+
+/* Use __WFI in the idle thread for waiting. Does lower the power
+ * consumption. */
+#define CORTEX_ENABLE_WFI_IDLE TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Performance options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief OS optimization.
+ * @details If enabled then time efficient rather than space efficient code
+ * is used when two possible implementations exist.
+ *
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_OPTIMIZE_SPEED TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Subsystem options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Time Measurement APIs.
+ * @details If enabled then the time measurement APIs are included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_TM FALSE
+
+/**
+ * @brief Threads registry APIs.
+ * @details If enabled then the registry APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_REGISTRY TRUE
+
+/**
+ * @brief Threads synchronization APIs.
+ * @details If enabled then the @p chThdWait() function is included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_WAITEXIT TRUE
+
+/**
+ * @brief Semaphores APIs.
+ * @details If enabled then the Semaphores APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_SEMAPHORES TRUE
+
+/**
+ * @brief Semaphores queuing mode.
+ * @details If enabled then the threads are enqueued on semaphores by
+ * priority rather than in FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
+
+/**
+ * @brief Mutexes APIs.
+ * @details If enabled then the mutexes APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MUTEXES TRUE
+
+/**
+ * @brief Enables recursive behavior on mutexes.
+ * @note Recursive mutexes are heavier and have an increased
+ * memory footprint.
+ *
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
+
+/**
+ * @brief Conditional Variables APIs.
+ * @details If enabled then the conditional variables APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_CONDVARS TRUE
+
+/**
+ * @brief Conditional Variables APIs with timeout.
+ * @details If enabled then the conditional variables APIs with timeout
+ * specification are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_CONDVARS.
+ */
+#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
+
+/**
+ * @brief Events Flags APIs.
+ * @details If enabled then the event flags APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_EVENTS TRUE
+
+/**
+ * @brief Events Flags APIs with timeout.
+ * @details If enabled then the events APIs with timeout specification
+ * are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_EVENTS.
+ */
+#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
+
+/**
+ * @brief Synchronous Messages APIs.
+ * @details If enabled then the synchronous messages APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MESSAGES TRUE
+
+/**
+ * @brief Synchronous Messages queuing mode.
+ * @details If enabled then messages are served by priority rather than in
+ * FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_MESSAGES.
+ */
+#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
+
+/**
+ * @brief Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ * included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_MAILBOXES TRUE
+
+/**
+ * @brief Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMCORE TRUE
+
+/**
+ * @brief Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ * @p CH_CFG_USE_SEMAPHORES.
+ * @note Mutexes are recommended.
+ */
+#define CH_CFG_USE_HEAP TRUE
+
+/**
+ * @brief Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMPOOLS TRUE
+
+/**
+ * @brief Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_WAITEXIT.
+ * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
+ */
+#define CH_CFG_USE_DYNAMIC TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Debug option, kernel statistics.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_STATISTICS FALSE
+
+/**
+ * @brief Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ * at runtime.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_SYSTEM_STATE_CHECK FALSE
+
+/**
+ * @brief Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ * parameters are activated.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_CHECKS FALSE
+
+/**
+ * @brief Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ * activated. This includes consistency checks inside the kernel,
+ * runtime anomalies and port-defined checks.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_ASSERTS FALSE
+
+/**
+ * @brief Debug option, trace buffer.
+ * @details If enabled then the trace buffer is activated.
+ *
+ * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
+
+/**
+ * @brief Trace buffer entries.
+ * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
+ * different from @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_BUFFER_SIZE 128
+
+/**
+ * @brief Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note The default is @p FALSE.
+ * @note The stack check is performed in a architecture/port dependent way.
+ * It may not be implemented or some ports.
+ * @note The default failure mode is to halt the system with the global
+ * @p panic_msg variable set to @p NULL.
+ */
+#define CH_DBG_ENABLE_STACK_CHECK FALSE
+
+/**
+ * @brief Debug option, stacks initialization.
+ * @details If enabled then the threads working area is filled with a byte
+ * value when a thread is created. This can be useful for the
+ * runtime measurement of the used stack.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_FILL_THREADS FALSE
+
+/**
+ * @brief Debug option, threads profiling.
+ * @details If enabled then a field is added to the @p thread_t structure that
+ * counts the system ticks occurred while executing the thread.
+ *
+ * @note The default is @p FALSE.
+ * @note This debug option is not currently compatible with the
+ * tickless mode.
+ */
+#define CH_DBG_THREADS_PROFILING FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel hooks
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Threads descriptor structure extension.
+ * @details User fields added to the end of the @p thread_t structure.
+ */
+#define CH_CFG_THREAD_EXTRA_FIELDS \
+ /* Add threads custom fields here.*/
+
+/**
+ * @brief Threads initialization hook.
+ * @details User initialization code added to the @p chThdInit() API.
+ *
+ * @note It is invoked from within @p chThdInit() and implicitly from all
+ * the threads creation APIs.
+ */
+#define CH_CFG_THREAD_INIT_HOOK(tp) { \
+ /* Add threads initialization code here.*/ \
+}
+
+/**
+ * @brief Threads finalization hook.
+ * @details User finalization code added to the @p chThdExit() API.
+ */
+#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
+ /* Add threads finalization code here.*/ \
+}
+
+/**
+ * @brief Context switch hook.
+ * @details This hook is invoked just before switching between threads.
+ */
+#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
+ /* Context switch code here.*/ \
+}
+
+/**
+ * @brief ISR enter hook.
+ */
+#define CH_CFG_IRQ_PROLOGUE_HOOK() { \
+ /* IRQ prologue code here.*/ \
+}
+
+/**
+ * @brief ISR exit hook.
+ */
+#define CH_CFG_IRQ_EPILOGUE_HOOK() { \
+ /* IRQ epilogue code here.*/ \
+}
+
+/**
+ * @brief Idle thread enter hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to activate a power saving mode.
+ */
+#define CH_CFG_IDLE_ENTER_HOOK() { \
+ /* Idle-enter code here.*/ \
+}
+
+/**
+ * @brief Idle thread leave hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to deactivate a power saving mode.
+ */
+#define CH_CFG_IDLE_LEAVE_HOOK() { \
+ /* Idle-leave code here.*/ \
+}
+
+/**
+ * @brief Idle Loop hook.
+ * @details This hook is continuously invoked by the idle thread loop.
+ */
+#define CH_CFG_IDLE_LOOP_HOOK() { \
+ /* Idle loop code here.*/ \
+}
+
+/**
+ * @brief System tick event hook.
+ * @details This hook is invoked in the system tick handler immediately
+ * after processing the virtual timers queue.
+ */
+#define CH_CFG_SYSTEM_TICK_HOOK() { \
+ /* System tick event code here.*/ \
+}
+
+/**
+ * @brief System halt hook.
+ * @details This hook is invoked in case to a system halting error before
+ * the system is halted.
+ */
+#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
+ /* System halt code here.*/ \
+}
+
+/**
+ * @brief Trace hook.
+ * @details This hook is invoked each time a new record is written in the
+ * trace buffer.
+ */
+#define CH_CFG_TRACE_HOOK(tep) { \
+ /* Trace code here.*/ \
+}
+
+/** @} */
+
+/*===========================================================================*/
+/* Port-specific settings (override port settings defaulted in chcore.h). */
+/*===========================================================================*/
+
+#endif /* CHCONF_H */
+
+/** @} */
diff --git a/keyboards/infinity_chibios/config.h b/keyboards/infinity60/config.h
index cb9022205..f8346fe16 100644
--- a/keyboards/infinity_chibios/config.h
+++ b/keyboards/infinity60/config.h
@@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef CONFIG_H
#define CONFIG_H
+#define PREVENT_STUCK_MODIFIERS
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
@@ -25,11 +26,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER 0x0001
/* in python2: list(u"whatever".encode('utf-16-le')) */
/* at most 32 characters or the ugly hack in usb_main.c borks */
-#define MANUFACTURER "TMK"
-#define USBSTR_MANUFACTURER 'T', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00', '\xc6', '\x00'
-#define PRODUCT "Infinity keyboard/TMK"
-#define USBSTR_PRODUCT 'I', '\x00', 'n', '\x00', 'f', '\x00', 'i', '\x00', 'n', '\x00', 'i', '\x00', 't', '\x00', 'y', '\x00', ' ', '\x00', 'k', '\x00', 'e', '\x00', 'y', '\x00', 'b', '\x00', 'o', '\x00', 'a', '\x00', 'r', '\x00', 'd', '\x00', '/', '\x00', 'T', '\x00', 'M', '\x00', 'K', '\x00'
-
+#define MANUFACTURER "Input Club"
+#define USBSTR_MANUFACTURER 'I', '\x00', 'n', '\x00', 'p', '\x00', 'u', '\x00', 't', '\x00', ' ', '\x00', 'C', '\x00', 'l', '\x00', 'u', '\x00', 'b', '\x00'
+#define PRODUCT "Infinity keyboard/QMK"
+#define USBSTR_PRODUCT 'I', '\x00', 'n', '\x00', 'f', '\x00', 'i', '\x00', 'n', '\x00', 'i', '\x00', 't', '\x00', 'y', '\x00', ' ', '\x00', 'k', '\x00', 'e', '\x00', 'y', '\x00', 'b', '\x00', 'o', '\x00', 'a', '\x00', 'r', '\x00', 'd', '\x00', '/', '\x00', 'Q', '\x00', 'M', '\x00', 'K', '\x00'
/* key matrix size */
#define MATRIX_ROWS 9
#define MATRIX_COLS 7
@@ -50,9 +50,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* Keymap for Infiity prototype */
-#define INFINITY_PROTOTYPE
+/* Keymap for Infinity prototype */
+//#define INFINITY_PROTOTYPE
+/* Keymap for Infinity 1.1a (first revision with LED support) */
+//#define INFINITY_LED
/*
* Feature disable options
diff --git a/keyboards/infinity_chibios/halconf.h b/keyboards/infinity60/halconf.h
index 53538de14..46b37a4f4 100644
--- a/keyboards/infinity_chibios/halconf.h
+++ b/keyboards/infinity60/halconf.h
@@ -1,353 +1,353 @@
-/*
- ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-/**
- * @file templates/halconf.h
- * @brief HAL configuration header.
- * @details HAL configuration file, this file allows to enable or disable the
- * various device drivers from your application. You may also use
- * this file in order to override the device drivers default settings.
- *
- * @addtogroup HAL_CONF
- * @{
- */
-
-#ifndef _HALCONF_H_
-#define _HALCONF_H_
-
-#include "mcuconf.h"
-
-/**
- * @brief Enables the PAL subsystem.
- */
-#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
-#define HAL_USE_PAL TRUE
-#endif
-
-/**
- * @brief Enables the ADC subsystem.
- */
-#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
-#define HAL_USE_ADC FALSE
-#endif
-
-/**
- * @brief Enables the CAN subsystem.
- */
-#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
-#define HAL_USE_CAN FALSE
-#endif
-
-/**
- * @brief Enables the DAC subsystem.
- */
-#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
-#define HAL_USE_DAC FALSE
-#endif
-
-/**
- * @brief Enables the EXT subsystem.
- */
-#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
-#define HAL_USE_EXT FALSE
-#endif
-
-/**
- * @brief Enables the GPT subsystem.
- */
-#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
-#define HAL_USE_GPT FALSE
-#endif
-
-/**
- * @brief Enables the I2C subsystem.
- */
-#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
-#define HAL_USE_I2C FALSE
-#endif
-
-/**
- * @brief Enables the I2S subsystem.
- */
-#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
-#define HAL_USE_I2S FALSE
-#endif
-
-/**
- * @brief Enables the ICU subsystem.
- */
-#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
-#define HAL_USE_ICU FALSE
-#endif
-
-/**
- * @brief Enables the MAC subsystem.
- */
-#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
-#define HAL_USE_MAC FALSE
-#endif
-
-/**
- * @brief Enables the MMC_SPI subsystem.
- */
-#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
-#define HAL_USE_MMC_SPI FALSE
-#endif
-
-/**
- * @brief Enables the PWM subsystem.
- */
-#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
-#define HAL_USE_PWM FALSE
-#endif
-
-/**
- * @brief Enables the RTC subsystem.
- */
-#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
-#define HAL_USE_RTC FALSE
-#endif
-
-/**
- * @brief Enables the SDC subsystem.
- */
-#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
-#define HAL_USE_SDC FALSE
-#endif
-
-/**
- * @brief Enables the SERIAL subsystem.
- */
-#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
-#define HAL_USE_SERIAL FALSE
-#endif
-
-/**
- * @brief Enables the SERIAL over USB subsystem.
- */
-#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
-#define HAL_USE_SERIAL_USB TRUE
-#endif
-
-/**
- * @brief Enables the SPI subsystem.
- */
-#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
-#define HAL_USE_SPI FALSE
-#endif
-
-/**
- * @brief Enables the UART subsystem.
- */
-#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
-#define HAL_USE_UART FALSE
-#endif
-
-/**
- * @brief Enables the USB subsystem.
- */
-#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
-#define HAL_USE_USB TRUE
-#endif
-
-/**
- * @brief Enables the WDG subsystem.
- */
-#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
-#define HAL_USE_WDG FALSE
-#endif
-
-/*===========================================================================*/
-/* ADC driver related settings. */
-/*===========================================================================*/
-
-/**
- * @brief Enables synchronous APIs.
- * @note Disabling this option saves both code and data space.
- */
-#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
-#define ADC_USE_WAIT TRUE
-#endif
-
-/**
- * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
- * @note Disabling this option saves both code and data space.
- */
-#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
-#define ADC_USE_MUTUAL_EXCLUSION TRUE
-#endif
-
-/*===========================================================================*/
-/* CAN driver related settings. */
-/*===========================================================================*/
-
-/**
- * @brief Sleep mode related APIs inclusion switch.
- */
-#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
-#define CAN_USE_SLEEP_MODE TRUE
-#endif
-
-/*===========================================================================*/
-/* I2C driver related settings. */
-/*===========================================================================*/
-
-/**
- * @brief Enables the mutual exclusion APIs on the I2C bus.
- */
-#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
-#define I2C_USE_MUTUAL_EXCLUSION TRUE
-#endif
-
-/*===========================================================================*/
-/* MAC driver related settings. */
-/*===========================================================================*/
-
-/**
- * @brief Enables an event sources for incoming packets.
- */
-#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
-#define MAC_USE_ZERO_COPY FALSE
-#endif
-
-/**
- * @brief Enables an event sources for incoming packets.
- */
-#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
-#define MAC_USE_EVENTS TRUE
-#endif
-
-/*===========================================================================*/
-/* MMC_SPI driver related settings. */
-/*===========================================================================*/
-
-/**
- * @brief Delays insertions.
- * @details If enabled this options inserts delays into the MMC waiting
- * routines releasing some extra CPU time for the threads with
- * lower priority, this may slow down the driver a bit however.
- * This option is recommended also if the SPI driver does not
- * use a DMA channel and heavily loads the CPU.
- */
-#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
-#define MMC_NICE_WAITING TRUE
-#endif
-
-/*===========================================================================*/
-/* SDC driver related settings. */
-/*===========================================================================*/
-
-/**
- * @brief Number of initialization attempts before rejecting the card.
- * @note Attempts are performed at 10mS intervals.
- */
-#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
-#define SDC_INIT_RETRY 100
-#endif
-
-/**
- * @brief Include support for MMC cards.
- * @note MMC support is not yet implemented so this option must be kept
- * at @p FALSE.
- */
-#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
-#define SDC_MMC_SUPPORT FALSE
-#endif
-
-/**
- * @brief Delays insertions.
- * @details If enabled this options inserts delays into the MMC waiting
- * routines releasing some extra CPU time for the threads with
- * lower priority, this may slow down the driver a bit however.
- */
-#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
-#define SDC_NICE_WAITING TRUE
-#endif
-
-/*===========================================================================*/
-/* SERIAL driver related settings. */
-/*===========================================================================*/
-
-/**
- * @brief Default bit rate.
- * @details Configuration parameter, this is the baud rate selected for the
- * default configuration.
- */
-#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
-#define SERIAL_DEFAULT_BITRATE 38400
-#endif
-
-/**
- * @brief Serial buffers size.
- * @details Configuration parameter, you can change the depth of the queue
- * buffers depending on the requirements of your application.
- * @note The default is 64 bytes for both the transmission and receive
- * buffers.
- */
-#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
-#define SERIAL_BUFFERS_SIZE 16
-#endif
-
-/*===========================================================================*/
-/* SERIAL_USB driver related setting. */
-/*===========================================================================*/
-
-/**
- * @brief Serial over USB buffers size.
- * @details Configuration parameter, the buffer size must be a multiple of
- * the USB data endpoint maximum packet size.
- * @note The default is 64 bytes for both the transmission and receive
- * buffers.
- */
-#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
-#define SERIAL_USB_BUFFERS_SIZE 256
-#endif
-
-/*===========================================================================*/
-/* SPI driver related settings. */
-/*===========================================================================*/
-
-/**
- * @brief Enables synchronous APIs.
- * @note Disabling this option saves both code and data space.
- */
-#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
-#define SPI_USE_WAIT TRUE
-#endif
-
-/**
- * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
- * @note Disabling this option saves both code and data space.
- */
-#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
-#define SPI_USE_MUTUAL_EXCLUSION TRUE
-#endif
-
-/*===========================================================================*/
-/* USB driver related settings. */
-/*===========================================================================*/
-
-/**
- * @brief Enables synchronous APIs.
- * @note Disabling this option saves both code and data space.
- */
-#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
-#define USB_USE_WAIT TRUE
-#endif
-
-#endif /* _HALCONF_H_ */
-
-/** @} */
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/halconf.h
+ * @brief HAL configuration header.
+ * @details HAL configuration file, this file allows to enable or disable the
+ * various device drivers from your application. You may also use
+ * this file in order to override the device drivers default settings.
+ *
+ * @addtogroup HAL_CONF
+ * @{
+ */
+
+#ifndef _HALCONF_H_
+#define _HALCONF_H_
+
+#include "mcuconf.h"
+
+/**
+ * @brief Enables the PAL subsystem.
+ */
+#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
+#define HAL_USE_PAL TRUE
+#endif
+
+/**
+ * @brief Enables the ADC subsystem.
+ */
+#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
+#define HAL_USE_ADC FALSE
+#endif
+
+/**
+ * @brief Enables the CAN subsystem.
+ */
+#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
+#define HAL_USE_CAN FALSE
+#endif
+
+/**
+ * @brief Enables the DAC subsystem.
+ */
+#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
+#define HAL_USE_DAC FALSE
+#endif
+
+/**
+ * @brief Enables the EXT subsystem.
+ */
+#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
+#define HAL_USE_EXT FALSE
+#endif
+
+/**
+ * @brief Enables the GPT subsystem.
+ */
+#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
+#define HAL_USE_GPT FALSE
+#endif
+
+/**
+ * @brief Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C FALSE
+#endif
+
+/**
+ * @brief Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S FALSE
+#endif
+
+/**
+ * @brief Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU FALSE
+#endif
+
+/**
+ * @brief Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC FALSE
+#endif
+
+/**
+ * @brief Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM FALSE
+#endif
+
+/**
+ * @brief Enables the RTC subsystem.
+ */
+#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
+#define HAL_USE_RTC FALSE
+#endif
+
+/**
+ * @brief Enables the SDC subsystem.
+ */
+#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
+#define HAL_USE_SDC FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL subsystem.
+ */
+#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL over USB subsystem.
+ */
+#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL_USB TRUE
+#endif
+
+/**
+ * @brief Enables the SPI subsystem.
+ */
+#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the UART subsystem.
+ */
+#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
+#define HAL_USE_UART FALSE
+#endif
+
+/**
+ * @brief Enables the USB subsystem.
+ */
+#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
+#define HAL_USE_USB TRUE
+#endif
+
+/**
+ * @brief Enables the WDG subsystem.
+ */
+#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
+#define HAL_USE_WDG FALSE
+#endif
+
+/*===========================================================================*/
+/* ADC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
+#define ADC_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define ADC_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* CAN driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Sleep mode related APIs inclusion switch.
+ */
+#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
+#define CAN_USE_SLEEP_MODE TRUE
+#endif
+
+/*===========================================================================*/
+/* I2C driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the mutual exclusion APIs on the I2C bus.
+ */
+#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define I2C_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* MAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
+#define MAC_USE_ZERO_COPY FALSE
+#endif
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
+#define MAC_USE_EVENTS TRUE
+#endif
+
+/*===========================================================================*/
+/* MMC_SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ * This option is recommended also if the SPI driver does not
+ * use a DMA channel and heavily loads the CPU.
+ */
+#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
+#define MMC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SDC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Number of initialization attempts before rejecting the card.
+ * @note Attempts are performed at 10mS intervals.
+ */
+#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
+#define SDC_INIT_RETRY 100
+#endif
+
+/**
+ * @brief Include support for MMC cards.
+ * @note MMC support is not yet implemented so this option must be kept
+ * at @p FALSE.
+ */
+#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
+#define SDC_MMC_SUPPORT FALSE
+#endif
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ */
+#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
+#define SDC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SERIAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Default bit rate.
+ * @details Configuration parameter, this is the baud rate selected for the
+ * default configuration.
+ */
+#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
+#define SERIAL_DEFAULT_BITRATE 38400
+#endif
+
+/**
+ * @brief Serial buffers size.
+ * @details Configuration parameter, you can change the depth of the queue
+ * buffers depending on the requirements of your application.
+ * @note The default is 64 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_BUFFERS_SIZE 16
+#endif
+
+/*===========================================================================*/
+/* SERIAL_USB driver related setting. */
+/*===========================================================================*/
+
+/**
+ * @brief Serial over USB buffers size.
+ * @details Configuration parameter, the buffer size must be a multiple of
+ * the USB data endpoint maximum packet size.
+ * @note The default is 64 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_SIZE 256
+#endif
+
+/*===========================================================================*/
+/* SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
+#define SPI_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define SPI_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* USB driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
+#define USB_USE_WAIT TRUE
+#endif
+
+#endif /* _HALCONF_H_ */
+
+/** @} */
diff --git a/keyboards/infinity_chibios/infinity_chibios.c b/keyboards/infinity60/infinity60.c
index 845eda01b..e471250fe 100644
--- a/keyboards/infinity_chibios/infinity_chibios.c
+++ b/keyboards/infinity60/infinity60.c
@@ -14,4 +14,4 @@ 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 "infinity_chibios.h"
+#include "infinity60.h"
diff --git a/keyboards/infinity_chibios/infinity_chibios.h b/keyboards/infinity60/infinity60.h
index a44c68b82..f1ba15e48 100644
--- a/keyboards/infinity_chibios/infinity_chibios.h
+++ b/keyboards/infinity60/infinity60.h
@@ -29,15 +29,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
K54, K64, K74, K84, K05, K15, K25, K35, K45, K55, K65, K75, K85, \
K06, K16, K26, K36, K46, K56, K66, K76 \
) { \
- { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06 }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16 }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26 }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36 }, \
- { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46 }, \
- { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56 }, \
- { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66 }, \
- { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76 }, \
- { KC_##K80, KC_##K81, KC_##K82, KC_##K83, KC_##K84, KC_##K85, KC_##K86 } \
+ { K00, K01, K02, K03, K04, K05, K06 }, \
+ { K10, K11, K12, K13, K14, K15, K16 }, \
+ { K20, K21, K22, K23, K24, K25, K26 }, \
+ { K30, K31, K32, K33, K34, K35, K36 }, \
+ { K40, K41, K42, K43, K44, K45, K46 }, \
+ { K50, K51, K52, K53, K54, K55, K56 }, \
+ { K60, K61, K62, K63, K64, K65, K66 }, \
+ { K70, K71, K72, K73, K74, K75, K76 }, \
+ { K80, K81, K82, K83, K84, K85, K86 } \
}
#else
@@ -50,15 +50,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
K64, K74, K84, K05, K15, K25, K35, K45, K55, K65, K75, K85, K06, \
K16, K26, K36, K46, K56, K66, K76, K86 \
) { \
- { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06 }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16 }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26 }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36 }, \
- { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46 }, \
- { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56 }, \
- { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66 }, \
- { KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74, KC_##K75, KC_##K76 }, \
- { KC_##K80, KC_##K81, KC_##K82, KC_##K83, KC_##K84, KC_##K85, KC_##K86 } \
+ { K00, K01, K02, K03, K04, K05, K06 }, \
+ { K10, K11, K12, K13, K14, K15, K16 }, \
+ { K20, K21, K22, K23, K24, K25, K26 }, \
+ { K30, K31, K32, K33, K34, K35, K36 }, \
+ { K40, K41, K42, K43, K44, K45, K46 }, \
+ { K50, K51, K52, K53, K54, K55, K56 }, \
+ { K60, K61, K62, K63, K64, K65, K66 }, \
+ { K70, K71, K72, K73, K74, K75, K76 }, \
+ { K80, K81, K82, K83, K84, K85, K86 } \
}
#endif
diff --git a/keyboards/infinity_chibios/keymaps/default/keymap.c b/keyboards/infinity60/keymaps/default/keymap.c
index 2acf72849..443412857 100644
--- a/keyboards/infinity_chibios/keymaps/default/keymap.c
+++ b/keyboards/infinity60/keymaps/default/keymap.c
@@ -1,4 +1,4 @@
-#include "infinity_chibios.h"
+#include "infinity60.h"
const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 0: Default Layer
@@ -14,12 +14,12 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | |Gui|Alt | Space |Alt |Gui| | |
* `-----------------------------------------------------------'
*/
- [0] =
- KEYMAP(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,RSFT,FN0, \
- NO, LGUI,LALT, SPC, RALT,RGUI,NO, NO),
+ [0] = KEYMAP(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSPC, \
+ KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_ENT, \
+ KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,MO(1), \
+ KC_NO, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_NO, KC_NO),
/* Layer 1: HHKB mode (HHKB Fn)
* ,-----------------------------------------------------------.
@@ -34,15 +34,15 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | |Gui|Alt | Space |Alt |Gui| | |
* `-----------------------------------------------------------'
*/
- [1] =
- KEYMAP(PWR, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
- CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS, UP, TRNS, BSPC, \
- TRNS,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT,PENT, \
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END, PGDN,DOWN,TRNS,TRNS, \
- TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS),
+ [1] = KEYMAP(
+ KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
+ KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \
+ KC_TRNS,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT,KC_PENT, \
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PPLS,KC_PMNS,KC_END, KC_PGDN,KC_DOWN,KC_TRNS,KC_TRNS, \
+ KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
};
const uint16_t fn_actions[] = {
- [0] = ACTION_LAYER_MOMENTARY(1),
+
};
diff --git a/keyboards/infinity60/keymaps/depariel/keymap.c b/keyboards/infinity60/keymaps/depariel/keymap.c
new file mode 100755
index 000000000..7412b9b9d
--- /dev/null
+++ b/keyboards/infinity60/keymaps/depariel/keymap.c
@@ -0,0 +1,82 @@
+#include "infinity60.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 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| [| ]| Bksp|
+ * |-----------------------------------------------------------|
+ * |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter |
+ * |-----------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn2|
+ * |-----------------------------------------------------------'
+ * |Fn2 |Gui |Alt | Space |RAlt|Prv|PlPs|Next|
+ * `-----------------------------------------------------------'
+ */
+ [0] = KEYMAP(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, LT(5, KC_ENT), \
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, MO(4), \
+ MO(4), KC_LGUI, KC_LALT, LT(3, KC_SPC), KC_RALT, KC_MPRV, KC_MPLY, KC_MNXT),
+
+ /* Layer 1: "Toggle" off SpaceFn for League of Legends
+ */
+ [1] = KEYMAP(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(4), \
+ MO(4), KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_MPRV, KC_MPLY, KC_MNXT),
+
+ /* Layer 2: "Toggle" off SpaceFn for MapleRoyals
+ */
+ [2] = KEYMAP(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_LSFT, \
+ MO(4), KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Layer 3: FN layer 1
+ */
+ [3] = KEYMAP(
+ KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, \
+ KC_NO, KC_BTN1, KC_MS_U, KC_BTN2, LALT(KC_F4), KC_HOME, KC_PGUP, KC_PSCR, KC_SLCK, KC_UP, KC_NO, KC_LPRN, KC_RPRN, KC_DEL, \
+ MO(6), KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_END, KC_PGDN, KC_TILD, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, \
+ LGUI(KC_SPC), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_CALC, KC_MENU, KC_TRNS, TG(4), \
+ KC_TRNS, KC_TRNS, KC_TRNS, LT(3, KC_SPC), KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU),
+
+ /* Layer 4: FN layer 2
+ */
+ [4] = KEYMAP(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PMNS, KC_PPLS, KC_PSLS, TG(2), \
+ KC_CAPS, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_NO, KC_P7, KC_P8, KC_P9, KC_PAST, KC_BSPC, \
+ KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_P4, KC_P5, KC_P6, KC_PENT, \
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_P1, KC_P2, KC_P3, KC_RSFT, MO(4), \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P0, KC_PDOT, KC_NO, TG(1)),
+
+ /* Layer 5: FN layer 3
+ */
+ [5] = KEYMAP(
+ 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_TAB , KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F13, KC_F14, KC_F15, KC_F16, KC_NO, KC_TRNS, \
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F17, KC_F18, KC_F19, KC_F20, LT(5, KC_ENT), \
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F21, KC_F22, KC_F23, KC_F24, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RALT, KC_NO, KC_NO, KC_NO),
+
+ /* Layer 6: FN layer 4
+ */
+ [6] = KEYMAP(
+ 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, \
+ LCTL(LSFT(KC_TAB)), KC_NO, LGUI(KC_UP), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ MO(6), LGUI(KC_LEFT), LGUI(KC_DOWN), LGUI(KC_RGHT), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_TRNS, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
diff --git a/keyboards/infinity60/keymaps/hasu/keymap.c b/keyboards/infinity60/keymaps/hasu/keymap.c
new file mode 100644
index 000000000..d3728869a
--- /dev/null
+++ b/keyboards/infinity60/keymaps/hasu/keymap.c
@@ -0,0 +1,113 @@
+#include "infinity60.h"
+
+const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Layer 0: Default Layer
+ * ,-----------------------------------------------------------.
+ * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| `|BSp|
+ * |-----------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
+ * |-----------------------------------------------------------|
+ * |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter |
+ * |-----------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0|
+ * |-----------------------------------------------------------'
+ * | |Gui|Alt | Space |Alt |Gui| | |
+ * `-----------------------------------------------------------'
+ */
+ [0] = KEYMAP(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS,KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSPC, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(3, KC_SCLN), KC_QUOT,MT(KC_RCTL, KC_ENT), \
+ OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, LT(2, KC_SLSH), KC_RSFT,TG(1), \
+ KC_NO, KC_LGUI,KC_LALT, LT(4, KC_SPC), MO(4), KC_RGUI,KC_NO, KC_NO),
+
+ /* Layer 1: HHKB mode (HHKB Fn)
+ * ,-----------------------------------------------------------.
+ * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
+ * |-----------------------------------------------------------|
+ * |Caps | | | | | | | |Psc|Slk|Pus|Up | |Backs|
+ * |-----------------------------------------------------------|
+ * | |VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig|Enter |
+ * |-----------------------------------------------------------|
+ * | | | | | | | +| -|End|PgD|Dow| | |
+ * `-----------------------------------------------------------'
+ * | |Gui|Alt | Space |Alt |Gui| | |
+ * `-----------------------------------------------------------'
+ */
+ [1] = KEYMAP(
+ KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
+ KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS, KC_UP, KC_TRNS,KC_BSPC, \
+ KC_LCTL,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT,KC_ENT, \
+ KC_LSFT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PPLS,KC_PMNS,KC_END, KC_PGDN,KC_DOWN,KC_RSFT,KC_TRNS, \
+ KC_TRNS,KC_LGUI,KC_LALT, KC_TRNS, KC_RALT,KC_RGUI,KC_TRNS,KC_TRNS),
+
+ /* 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(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
+ KC_TAB, KC_HOME,KC_PGDN,KC_UP, KC_PGUP,KC_END, KC_HOME,KC_PGDN,KC_PGUP,KC_END, KC_NO, KC_NO, KC_NO, KC_BSPC, \
+ KC_LCTL,KC_NO, KC_LEFT,KC_DOWN,KC_RGHT,KC_NO, KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,KC_NO, KC_NO, KC_ENT, \
+ KC_LSFT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_HOME,KC_PGDN,KC_PGUP,KC_END, LT(2, KC_SLSH), KC_RSFT,KC_TRNS, \
+ KC_TRNS,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_TRNS, KC_TRNS),
+
+ /* 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 Wheel
+ */
+ [3] = KEYMAP(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
+ LALT(KC_TAB), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L,KC_WH_D,KC_MS_U, KC_WH_U, KC_WH_R, ALT_T(KC_LEFT), ALT_T(KC_RGHT),LALT(KC_TAB), \
+ KC_LCTL, KC_ACL0,KC_ACL1,KC_ACL2,KC_ACL2,KC_NO, KC_NO, KC_MS_L,KC_MS_D, KC_MS_R, LT(3, KC_SCLN), KC_NO, KC_ENT, \
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN3,KC_BTN2,KC_BTN1,ALT_T(KC_LEFT), ALT_T(KC_RGHT), KC_NO, KC_RSFT, KC_TRNS, \
+ KC_TRNS, KC_LGUI,KC_LALT, KC_BTN1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ /* Layer 4: 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 Wheel
+ */
+ [4] = KEYMAP(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
+ LALT(KC_TAB), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L,KC_WH_D,KC_MS_U, KC_WH_U, KC_WH_R,KC_BTN4,KC_BTN5,LALT(KC_TAB), \
+ KC_LCTL, KC_VOLD,KC_VOLU,KC_MUTE,KC_NO, KC_NO, KC_NO, KC_MS_L,KC_MS_D, KC_MS_R, KC_BTN1,KC_NO, KC_ENT, \
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN3,KC_BTN2,KC_BTN1,ALT_T(KC_LEFT),ALT_T(KC_RGHT),KC_NO, KC_RSFT,KC_TRNS, \
+ KC_TRNS, KC_LGUI,KC_LALT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS),
+
+};
+
+/*
+ * Fn action definition
+ */
+const uint16_t fn_actions[] = {
+
+};
diff --git a/keyboards/infinity_chibios/led.c b/keyboards/infinity60/led.c
index aed66c7c0..aed66c7c0 100644
--- a/keyboards/infinity_chibios/led.c
+++ b/keyboards/infinity60/led.c
diff --git a/keyboards/infinity_chibios/matrix.c b/keyboards/infinity60/matrix.c
index 2c68ea83a..d2f185288 100644
--- a/keyboards/infinity_chibios/matrix.c
+++ b/keyboards/infinity60/matrix.c
@@ -12,9 +12,12 @@
* Infinity Pinusage:
* Column pins are input with internal pull-down. Row pins are output and strobe with high.
* Key is high or 1 when it turns on.
- *
+ * INFINITY PRODUCTION (NO LED)
* col: { PTD1, PTD2, PTD3, PTD4, PTD5, PTD6, PTD7 }
* row: { PTB0, PTB1, PTB2, PTB3, PTB16, PTB17, PTC4, PTC5, PTD0 }
+ * INFINITY PRODUCTION (WITH LED)
+ * col: { PTD1, PTD2, PTD3, PTD4, PTD5, PTD6, PTD7 }
+ * row: { PTC0, PTC1, PTC2, PTC3, PTC4, PTC5, PTC6, PTC7, PTD0 }
*/
/* matrix state(1:on, 0:off) */
static matrix_row_t matrix[MATRIX_ROWS];
@@ -34,6 +37,18 @@ void matrix_init(void)
palSetPadMode(GPIOD, 6, PAL_MODE_INPUT_PULLDOWN);
palSetPadMode(GPIOD, 7, PAL_MODE_INPUT_PULLDOWN);
+#ifdef INFINITY_LED
+ /* Row(strobe) */
+ palSetPadMode(GPIOC, 0, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOC, 1, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOC, 2, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOC, 3, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOC, 4, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOC, 5, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOC, 6, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOC, 7, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOD, 0, PAL_MODE_OUTPUT_PUSHPULL);
+#else
/* Row(strobe) */
palSetPadMode(GPIOB, 0, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOB, 1, PAL_MODE_OUTPUT_PUSHPULL);
@@ -44,7 +59,7 @@ void matrix_init(void)
palSetPadMode(GPIOC, 4, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOC, 5, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOD, 0, PAL_MODE_OUTPUT_PUSHPULL);
-
+#endif
memset(matrix, 0, MATRIX_ROWS);
memset(matrix_debouncing, 0, MATRIX_ROWS);
}
@@ -53,7 +68,20 @@ uint8_t matrix_scan(void)
{
for (int row = 0; row < MATRIX_ROWS; row++) {
matrix_row_t data = 0;
-
+ #ifdef INFINITY_LED
+ // strobe row
+ switch (row) {
+ case 0: palSetPad(GPIOC, 0); break;
+ case 1: palSetPad(GPIOC, 1); break;
+ case 2: palSetPad(GPIOC, 2); break;
+ case 3: palSetPad(GPIOC, 3); break;
+ case 4: palSetPad(GPIOC, 4); break;
+ case 5: palSetPad(GPIOC, 5); break;
+ case 6: palSetPad(GPIOC, 6); break;
+ case 7: palSetPad(GPIOC, 7); break;
+ case 8: palSetPad(GPIOD, 0); break;
+ }
+ #else
// strobe row
switch (row) {
case 0: palSetPad(GPIOB, 0); break;
@@ -66,12 +94,31 @@ uint8_t matrix_scan(void)
case 7: palSetPad(GPIOC, 5); break;
case 8: palSetPad(GPIOD, 0); break;
}
+ #endif
- wait_us(1); // need wait to settle pin state
+ // need wait to settle pin state
+ // if you wait too short, or have a too high update rate
+ // the keyboard might freeze, or there might not be enough
+ // processing power to update the LCD screen properly.
+ // 20us, or two ticks at 100000Hz seems to be OK
+ wait_us(20);
// read col data
data = (palReadPort(GPIOD)>>1);
-
+ #ifdef INFINITY_LED
+ // un-strobe row
+ switch (row) {
+ case 0: palClearPad(GPIOC, 0); break;
+ case 1: palClearPad(GPIOC, 1); break;
+ case 2: palClearPad(GPIOC, 2); break;
+ case 3: palClearPad(GPIOC, 3); break;
+ case 4: palClearPad(GPIOC, 4); break;
+ case 5: palClearPad(GPIOC, 5); break;
+ case 6: palClearPad(GPIOC, 6); break;
+ case 7: palClearPad(GPIOC, 7); break;
+ case 8: palClearPad(GPIOD, 0); break;
+ }
+ #else
// un-strobe row
switch (row) {
case 0: palClearPad(GPIOB, 0); break;
@@ -84,6 +131,7 @@ uint8_t matrix_scan(void)
case 7: palClearPad(GPIOC, 5); break;
case 8: palClearPad(GPIOD, 0); break;
}
+ #endif
if (matrix_debouncing[row] != data) {
matrix_debouncing[row] = data;
diff --git a/keyboards/infinity_chibios/mcuconf.h b/keyboards/infinity60/mcuconf.h
index 66b6ce25d..f453304b7 100644
--- a/keyboards/infinity_chibios/mcuconf.h
+++ b/keyboards/infinity60/mcuconf.h
@@ -1,55 +1,55 @@
-/*
- ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-#ifndef _MCUCONF_H_
-#define _MCUCONF_H_
-
-#define K20x_MCUCONF
-
-/*
- * HAL driver system settings.
- */
-
-/* Select the MCU clocking mode below by enabling the appropriate block. */
-
-#define KINETIS_NO_INIT FALSE
-
-/* FEI mode - 48 MHz with internal 32.768 kHz crystal */
-#define KINETIS_MCG_MODE KINETIS_MCG_MODE_FEI
-#define KINETIS_MCG_FLL_DMX32 1 /* Fine-tune for 32.768 kHz */
-#define KINETIS_MCG_FLL_DRS 1 /* 1464x FLL factor */
-#define KINETIS_SYSCLK_FREQUENCY 47972352UL /* 32.768 kHz * 1464 (~48 MHz) */
-#define KINETIS_CLKDIV1_OUTDIV1 1
-#define KINETIS_CLKDIV1_OUTDIV2 1
-#define KINETIS_CLKDIV1_OUTDIV4 2
-#define KINETIS_BUSCLK_FREQUENCY KINETIS_SYSCLK_FREQUENCY
-#define KINETIS_FLASHCLK_FREQUENCY KINETIS_SYSCLK_FREQUENCY/2
-
-/*
- * SERIAL driver system settings.
- */
-#define KINETIS_SERIAL_USE_UART0 TRUE
-
-/*
- * USB driver settings
- */
-#define KINETIS_USB_USE_USB0 TRUE
-/* Need to redefine this, since the default is for K20x */
-/* This is for Teensy LC; you should comment it out (or change to 5)
- * for Teensy 3.x */
-#define KINETIS_USB_USB0_IRQ_PRIORITY 2
-
-#endif /* _MCUCONF_H_ */
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+#define K20x_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+
+/* Select the MCU clocking mode below by enabling the appropriate block. */
+
+#define KINETIS_NO_INIT FALSE
+
+/* FEI mode - 48 MHz with internal 32.768 kHz crystal */
+#define KINETIS_MCG_MODE KINETIS_MCG_MODE_FEI
+#define KINETIS_MCG_FLL_DMX32 1 /* Fine-tune for 32.768 kHz */
+#define KINETIS_MCG_FLL_DRS 1 /* 1464x FLL factor */
+#define KINETIS_SYSCLK_FREQUENCY 47972352UL /* 32.768 kHz * 1464 (~48 MHz) */
+#define KINETIS_CLKDIV1_OUTDIV1 1
+#define KINETIS_CLKDIV1_OUTDIV2 1
+#define KINETIS_CLKDIV1_OUTDIV4 2
+#define KINETIS_BUSCLK_FREQUENCY KINETIS_SYSCLK_FREQUENCY
+#define KINETIS_FLASHCLK_FREQUENCY KINETIS_SYSCLK_FREQUENCY/2
+
+/*
+ * SERIAL driver system settings.
+ */
+#define KINETIS_SERIAL_USE_UART0 TRUE
+
+/*
+ * USB driver settings
+ */
+#define KINETIS_USB_USE_USB0 TRUE
+/* Need to redefine this, since the default is for K20x */
+/* This is for Teensy LC; you should comment it out (or change to 5)
+ * for Teensy 3.x */
+#define KINETIS_USB_USB0_IRQ_PRIORITY 2
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/infinity60/readme.md b/keyboards/infinity60/readme.md
new file mode 100644
index 000000000..97457b407
--- /dev/null
+++ b/keyboards/infinity60/readme.md
@@ -0,0 +1,29 @@
+Infinity 60% keyboard firmware
+======================
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme](/).
+
+## Keymaps
+
+Several versions of keymaps are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
+
+Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
+
+
+## Compiling
+
+Download or clone the whole firmware and navigate to the keyboards/infinity60 folder. Once your dev env is setup, you'll be able to use the `make` command to both compile your keymap and flash it to your keyboard.
+
+To just compile, which generates the output files in the `.build` folder at the root of the repository, run `make keymap`, where keymap is the name of the keymap that you want to compile.
+
+## Flashing
+
+To flash the firmware to the keyboard
+
+1. First press the flash button on the bottom of the keyboard. If you already have a flah button mapped in a keyboard layout running on the keyboard, you can also use that.
+2. Then run `make keymap-dfu-util`, where keymap is the name of the keymap you want to flash. On Linux based operating systems you might need to run the comamnd as root, for example `sudo make keymap-dfu-util` on Ubuntu.
+
+**Tip** `make keymap-dfu-util` will also compile the keymap if needed, so you can skip the compilation step if you want to.
+
diff --git a/keyboards/infinity_chibios/Makefile b/keyboards/infinity60/rules.mk
index 649b43e64..56d6470b5 100644
--- a/keyboards/infinity_chibios/Makefile
+++ b/keyboards/infinity60/rules.mk
@@ -63,8 +63,4 @@ 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
-CUSTOM_MATRIX ?= yes # Custom matrix file
-
-ifndef QUANTUM_DIR
- include ../../Makefile
-endif \ No newline at end of file
+CUSTOM_MATRIX ?= yes # Custom matrix file \ No newline at end of file
diff --git a/keyboards/infinity_chibios/keymaps/hasu/keymap.c b/keyboards/infinity_chibios/keymaps/hasu/keymap.c
deleted file mode 100644
index e9a212f0e..000000000
--- a/keyboards/infinity_chibios/keymaps/hasu/keymap.c
+++ /dev/null
@@ -1,199 +0,0 @@
-#include "infinity_chibios.h"
-
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Layer 0: Default Layer
- * ,-----------------------------------------------------------.
- * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| `|BSp|
- * |-----------------------------------------------------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
- * |-----------------------------------------------------------|
- * |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter |
- * |-----------------------------------------------------------|
- * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn0|
- * |-----------------------------------------------------------'
- * | |Gui|Alt | Space |Alt |Gui| | |
- * `-----------------------------------------------------------'
- */
- [0] =
- KEYMAP(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, FN3, QUOT,FN6, \
- FN7, Z, X, C, V, B, N, M, COMM,DOT, FN2, RSFT,FN1, \
- NO, LGUI,LALT, FN4, FN5, RGUI,NO, NO),
-
- /* Layer 1: HHKB mode (HHKB Fn)
- * ,-----------------------------------------------------------.
- * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
- * |-----------------------------------------------------------|
- * |Caps | | | | | | | |Psc|Slk|Pus|Up | |Backs|
- * |-----------------------------------------------------------|
- * | |VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig|Enter |
- * |-----------------------------------------------------------|
- * | | | | | | | +| -|End|PgD|Dow| | |
- * `-----------------------------------------------------------'
- * | |Gui|Alt | Space |Alt |Gui| | |
- * `-----------------------------------------------------------'
- */
- [1] =
- KEYMAP(PWR, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
- CAPS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PSCR,SLCK,PAUS, UP, TRNS,BSPC, \
- LCTL,VOLD,VOLU,MUTE,TRNS,TRNS,PAST,PSLS,HOME,PGUP,LEFT,RGHT,ENT, \
- LSFT,TRNS,TRNS,TRNS,TRNS,TRNS,PPLS,PMNS,END, PGDN,DOWN,RSFT,TRNS, \
- TRNS,LGUI,LALT, TRNS, RALT,RGUI,TRNS,TRNS),
-
- /* 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(GRV, 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, ENT, \
- LSFT,NO, NO, NO, NO, NO, HOME,PGDN,PGUP,END, FN2, RSFT,TRNS, \
- TRNS,LGUI,LALT, SPC, RALT,RGUI,TRNS,TRNS),
-
- /* 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 Wheel
- */
- [3] = \
- KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
- FN8, NO, NO, NO, NO, NO, WH_L,WH_D,MS_U,WH_U,WH_R,FN9, FN10,FN8, \
- LCTL,ACL0,ACL1,ACL2,ACL2,NO, NO, MS_L,MS_D,MS_R,FN3, NO, ENT, \
- LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,FN9, FN10,NO, RSFT,TRNS, \
- TRNS,LGUI,LALT, BTN1, TRNS,TRNS,TRNS,TRNS),
-
- /* Layer 4: 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 Wheel
- */
- [4] = \
- KEYMAP(GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
- FN8, NO, NO, NO, NO, NO, WH_L,WH_D,MS_U,WH_U,WH_R,BTN4,BTN5,FN8, \
- LCTL,VOLD,VOLU,MUTE,NO, NO, NO, MS_L,MS_D,MS_R,BTN1,NO, ENT, \
- LSFT,NO, NO, NO, NO, BTN3,BTN2,BTN1,FN9, FN10,NO, RSFT,TRNS, \
- TRNS,LGUI,LALT, TRNS, TRNS,TRNS,TRNS,TRNS),
-
-};
-
-/* id for user defined functions */
-enum function_id {
- LSHIFT_LPAREN,
-};
-
-enum macro_id {
- HELLO,
- VOLUP,
- ALT_TAB,
-};
-
-/*
- * Fn action definition
- */
-const uint16_t fn_actions[] = {
- [0] = ACTION_DEFAULT_LAYER_SET(0), // Default layer(not used)
- [1] = ACTION_LAYER_TAP_TOGGLE(1), // HHKB layer(toggle with 5 taps)
- [2] = ACTION_LAYER_TAP_KEY(2, KC_SLASH), // Cursor layer with Slash*
- [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(4), // Mousekey layer(IJKL)
- [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
- [9] = ACTION_MODS_KEY(MOD_LALT, KC_LEFT),
- [10] = ACTION_MODS_KEY(MOD_LALT, KC_RIGHT),
-};
-
-/*
- * Macro definition
- */
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- switch (id) {
- case HELLO:
- return (record->event.pressed ?
- MACRO( I(0), T(H), T(E), T(L), T(L), W(255), T(O), END ) :
- MACRO_NONE );
- case VOLUP:
- return (record->event.pressed ?
- MACRO( D(VOLU), U(VOLU), END ) :
- MACRO_NONE );
- case ALT_TAB:
- return (record->event.pressed ?
- MACRO( D(LALT), D(TAB), END ) :
- MACRO( U(TAB), END ));
- }
- return MACRO_NONE;
-}
-
-
-
-/*
- * user defined action function
- */
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- if (record->event.pressed) dprint("P"); else dprint("R");
- dprintf("%d", record->tap.count);
- if (record->tap.interrupted) dprint("i");
- dprint("\n");
-
- switch (id) {
- case LSHIFT_LPAREN:
- // Shift parentheses example: LShft + tap '('
- // http://stevelosh.com/blog/2012/10/a-modern-space-cadet/#shift-parentheses
- // http://geekhack.org/index.php?topic=41989.msg1304899#msg1304899
- if (record->event.pressed) {
- if (record->tap.count > 0 && !record->tap.interrupted) {
- if (record->tap.interrupted) {
- dprint("tap interrupted\n");
- register_mods(MOD_BIT(KC_LSHIFT));
- }
- } else {
- register_mods(MOD_BIT(KC_LSHIFT));
- }
- } else {
- if (record->tap.count > 0 && !(record->tap.interrupted)) {
- add_weak_mods(MOD_BIT(KC_LSHIFT));
- send_keyboard_report();
- register_code(KC_9);
- unregister_code(KC_9);
- del_weak_mods(MOD_BIT(KC_LSHIFT));
- send_keyboard_report();
- record->tap.count = 0; // ad hoc: cancel tap
- } else {
- unregister_mods(MOD_BIT(KC_LSHIFT));
- }
- }
- break;
- }
-}
diff --git a/keyboards/infinity_ergodox/infinity_ergodox.h b/keyboards/infinity_ergodox/infinity_ergodox.h
deleted file mode 100644
index de7267594..000000000
--- a/keyboards/infinity_ergodox/infinity_ergodox.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_
-#define KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_
-
-#include "quantum.h"
-
-#define KEYMAP( \
- A80, A70, A60, A50, A40, A30, A20, \
- A81, A71, A61, A51, A41, A31, A21, \
- A82, A72, A62, A52, A42, A32, \
- A83, A73, A63, A53, A43, A33, A23, \
- A84, A74, A64, A54, A44, \
- A13, A03, \
- A04, \
- A34, A24, A14, \
- B20, B30, B40, B50, B60, B70, B80, \
- B21, B31, B41, B51, B61, B71, B81, \
- B32, B42, B52, B62, B72, B82, \
- B23, B33, B43, B53, B63, B73, B83, \
- B44, B54, B64, B74, B84, \
- B03, B13, \
- B04, \
- B14, B24, B34 \
-) { \
- { KC_NO, KC_NO, KC_NO, KC_##A03, KC_##A04 }, \
- { KC_NO, KC_NO, KC_NO, KC_##A13, KC_##A14 }, \
- { KC_##A20, KC_##A21, KC_NO, KC_##A23, KC_##A24 }, \
- { KC_##A30, KC_##A31, KC_##A32, KC_##A33, KC_##A34 }, \
- { KC_##A40, KC_##A41, KC_##A42, KC_##A43, KC_##A44 }, \
- { KC_##A50, KC_##A51, KC_##A52, KC_##A53, KC_##A54 }, \
- { KC_##A60, KC_##A61, KC_##A62, KC_##A63, KC_##A64 }, \
- { KC_##A70, KC_##A71, KC_##A72, KC_##A73, KC_##A74 }, \
- { KC_##A80, KC_##A81, KC_##A82, KC_##A83, KC_##A84 }, \
- { KC_NO, KC_NO, KC_NO, KC_##B03, KC_##B04 }, \
- { KC_NO, KC_NO, KC_NO, KC_##B13, KC_##B14 }, \
- { KC_##B20, KC_##B21, KC_NO, KC_##B23, KC_##B24 }, \
- { KC_##B30, KC_##B31, KC_##B32, KC_##B33, KC_##B34 }, \
- { KC_##B40, KC_##B41, KC_##B42, KC_##B43, KC_##B44 }, \
- { KC_##B50, KC_##B51, KC_##B52, KC_##B53, KC_##B54 }, \
- { KC_##B60, KC_##B61, KC_##B62, KC_##B63, KC_##B64 }, \
- { KC_##B70, KC_##B71, KC_##B72, KC_##B73, KC_##B74 }, \
- { KC_##B80, KC_##B81, KC_##B82, KC_##B83, KC_##B84 } \
-}
-
-#endif /* KEYBOARDS_INFINITY_ERGODOX_INFINITY_ERGODOX_H_ */
diff --git a/keyboards/infinity_ergodox/keymaps/default/keymap.c b/keyboards/infinity_ergodox/keymaps/default/keymap.c
deleted file mode 100644
index f1e6b1c8a..000000000
--- a/keyboards/infinity_ergodox/keymaps/default/keymap.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
-Copyright 2016 Fred Sundvik <fsundvik@gmail.com>
-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 "infinity_ergodox.h"
-
-// Workaround for old keymap format
-#define KC_RESET RESET
-
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- KEYMAP( // layer 0 : default
- // left hand
- EQL, 1, 2, 3, 4, 5, ESC,
- BSLS,Q, W, E, R, T, FN1,
- TAB, A, S, D, F, G,
- LSFT,Z, X, C, V, B, FN0,
- LGUI,GRV, BSLS,LEFT,RGHT,
- LCTL,LALT,
- HOME,
- BSPC,DEL, END,
- // right hand
- FN2, 6, 7, 8, 9, 0, MINS,
- LBRC,Y, U, I, O, P, RBRC,
- H, J, K, L, SCLN,QUOT,
- FN0, N, M, COMM,DOT, SLSH,RSFT,
- LEFT,DOWN,UP, RGHT,RGUI,
- RALT,RCTL,
- PGUP,
- PGDN,ENT, SPC
- ),
-
- KEYMAP( // layer 1 : function and symbol keys
- // left hand
- TRNS,F1, F2, F3, F4, F5, F11,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN3,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,
- TRNS,
- TRNS,TRNS,TRNS,
- // right hand
- F12, F6, F7, F8, F9, F10, TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,
- TRNS,
- TRNS,TRNS,TRNS
- ),
-
- KEYMAP( // layer 2 : keyboard functions
- // left hand
- RESET,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, FN3,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,
- TRNS,
- TRNS,TRNS,TRNS,
- // right hand
- TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,
- TRNS,
- TRNS,TRNS,TRNS
- ),
-
- KEYMAP( // layer 3: numpad
- // left hand
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS,TRNS,
- TRNS,
- TRNS,TRNS,TRNS,
- // right hand
- TRNS,NLCK,PSLS,PAST,PAST,PMNS,BSPC,
- TRNS,NO, P7, P8, P9, PMNS,BSPC,
- NO, P4, P5, P6, PPLS,PENT,
- TRNS,NO, P1, P2, P3, PPLS,PENT,
- P0, PDOT,SLSH,PENT,PENT,
- TRNS,TRNS,
- TRNS,
- TRNS,TRNS,TRNS
- ),
-};
-const uint16_t fn_actions[] = {
- ACTION_LAYER_MOMENTARY(1), // FN0 - switch to Layer1
- ACTION_LAYER_SET(2, ON_PRESS), // FN1 - set Layer2
- ACTION_LAYER_TOGGLE(3), // FN2 - toggle Layer3 aka Numpad layer
- ACTION_LAYER_SET(0, ON_PRESS), // FN3 - set Layer0
-};
diff --git a/keyboards/infinity_ergodox/keymaps/default/visualizer.c b/keyboards/infinity_ergodox/keymaps/default/visualizer.c
deleted file mode 100644
index c0d335ce6..000000000
--- a/keyboards/infinity_ergodox/keymaps/default/visualizer.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
-Copyright 2016 Fred Sundvik <fsundvik@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/>.
-*/
-
-// Currently we are assuming that both the backlight and LCD are enabled
-// But it's entirely possible to write a custom visualizer that use only
-// one of them
-#ifndef LCD_BACKLIGHT_ENABLE
-#error This visualizer needs that LCD backlight is enabled
-#endif
-
-#ifndef LCD_ENABLE
-#error This visualizer needs that LCD is enabled
-#endif
-
-#include "visualizer.h"
-#include "led_test.h"
-
-static const char* welcome_text[] = {"TMK", "Infinity Ergodox"};
-
-// Just an example how to write custom keyframe functions, we could have moved
-// all this into the init function
-bool display_welcome(keyframe_animation_t* animation, visualizer_state_t* state) {
- (void)animation;
- // Read the uGFX documentation for information how to use the displays
- // http://wiki.ugfx.org/index.php/Main_Page
- gdispClear(White);
- // You can use static variables for things that can't be found in the animation
- // or state structs
- gdispDrawString(0, 3, welcome_text[0], state->font_dejavusansbold12, Black);
- gdispDrawString(0, 15, welcome_text[1], state->font_dejavusansbold12, Black);
- // Always remember to flush the display
- gdispFlush();
- // you could set the backlight color as well, but we won't do it here, since
- // it's part of the following animation
- // lcd_backlight_color(hue, saturation, intensity);
- // We don't need constant updates, just drawing the screen once is enough
- return false;
-}
-
-// Feel free to modify the animations below, or even add new ones if needed
-
-// Don't worry, if the startup animation is long, you can use the keyboard like normal
-// during that time
-static keyframe_animation_t startup_animation = {
- .num_frames = 4,
- .loop = false,
- .frame_lengths = {0, gfxMillisecondsToTicks(1000), gfxMillisecondsToTicks(5000), 0},
- .frame_functions = {
- display_welcome,
- keyframe_animate_backlight_color,
- keyframe_no_operation,
- enable_visualization
- },
-};
-
-// The color animation animates the LCD color when you change layers
-static keyframe_animation_t color_animation = {
- .num_frames = 2,
- .loop = false,
- // Note that there's a 200 ms no-operation frame,
- // this prevents the color from changing when activating the layer
- // momentarily
- .frame_lengths = {gfxMillisecondsToTicks(200), gfxMillisecondsToTicks(500)},
- .frame_functions = {keyframe_no_operation, keyframe_animate_backlight_color},
-};
-
-// The LCD animation alternates between the layer name display and a
-// bitmap that displays all active layers
-static keyframe_animation_t lcd_animation = {
- .num_frames = 2,
- .loop = true,
- .frame_lengths = {gfxMillisecondsToTicks(2000), gfxMillisecondsToTicks(2000)},
- .frame_functions = {keyframe_display_layer_text, keyframe_display_layer_bitmap},
-};
-
-static keyframe_animation_t suspend_animation = {
- .num_frames = 3,
- .loop = false,
- .frame_lengths = {0, gfxMillisecondsToTicks(1000), 0},
- .frame_functions = {
- keyframe_display_layer_text,
- keyframe_animate_backlight_color,
- keyframe_disable_lcd_and_backlight,
- },
-};
-
-static keyframe_animation_t resume_animation = {
- .num_frames = 5,
- .loop = false,
- .frame_lengths = {0, 0, gfxMillisecondsToTicks(1000), gfxMillisecondsToTicks(5000), 0},
- .frame_functions = {
- keyframe_enable_lcd_and_backlight,
- display_welcome,
- keyframe_animate_backlight_color,
- keyframe_no_operation,
- enable_visualization,
- },
-};
-
-void initialize_user_visualizer(visualizer_state_t* state) {
- // The brightness will be dynamically adjustable in the future
- // But for now, change it here.
- lcd_backlight_brightness(0x50);
- state->current_lcd_color = LCD_COLOR(0x00, 0x00, 0xFF);
- state->target_lcd_color = LCD_COLOR(0x10, 0xFF, 0xFF);
- start_keyframe_animation(&startup_animation);
- start_keyframe_animation(&led_test_animation);
-}
-
-void update_user_visualizer_state(visualizer_state_t* state) {
- // Add more tests, change the colors and layer texts here
- // Usually you want to check the high bits (higher layers first)
- // because that's the order layers are processed for keypresses
- // You can for check for example:
- // state->status.layer
- // state->status.default_layer
- // state->status.leds (see led.h for available statuses)
- if (state->status.layer & 0x8) {
- state->target_lcd_color = LCD_COLOR(0xC0, 0xB0, 0xFF);
- state->layer_text = "Numpad";
- }
- else if (state->status.layer & 0x4) {
- state->target_lcd_color = LCD_COLOR(0, 0xB0, 0xFF);
- state->layer_text = "KBD functions";
- }
- else if (state->status.layer & 0x2) {
- state->target_lcd_color = LCD_COLOR(0x80, 0xB0, 0xFF);
- state->layer_text = "Function keys";
- }
- else {
- state->target_lcd_color = LCD_COLOR(0x40, 0xB0, 0xFF);
- state->layer_text = "Default";
- }
- // You can also stop existing animations, and start your custom ones here
- // remember that you should normally have only one animation for the LCD
- // and one for the background. But you can also combine them if you want.
- start_keyframe_animation(&lcd_animation);
- start_keyframe_animation(&color_animation);
-}
-
-void user_visualizer_suspend(visualizer_state_t* state) {
- state->layer_text = "Suspending...";
- uint8_t hue = LCD_HUE(state->current_lcd_color);
- uint8_t sat = LCD_SAT(state->current_lcd_color);
- state->target_lcd_color = LCD_COLOR(hue, sat, 0);
- start_keyframe_animation(&suspend_animation);
-}
-
-void user_visualizer_resume(visualizer_state_t* state) {
- state->current_lcd_color = LCD_COLOR(0x00, 0x00, 0x00);
- state->target_lcd_color = LCD_COLOR(0x10, 0xFF, 0xFF);
- start_keyframe_animation(&resume_animation);
- start_keyframe_animation(&led_test_animation);
-}
diff --git a/keyboards/infinity_ergodox/led.c b/keyboards/infinity_ergodox/led.c
deleted file mode 100644
index 77195bb35..000000000
--- a/keyboards/infinity_ergodox/led.c
+++ /dev/null
@@ -1,49 +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 "hal.h"
-
-#include "led.h"
-
-
-void led_set(uint8_t usb_led) {
-// The LCD backlight functionality conflicts with this simple
-// red backlight
-#if !defined(LCD_BACKLIGHT_ENABLE) && defined(STATUS_LED_ENABLE)
- // PTC1: LCD Backlight Red(0:on/1:off)
- GPIOC->PDDR |= (1<<1);
- PORTC->PCR[1] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1);
- if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
- GPIOC->PCOR |= (1<<1);
- } else {
- GPIOC->PSOR |= (1<<1);
- }
-#elif !defined(LCD_BACKLIGHT_ENABLE)
- (void)usb_led;
- GPIOC->PDDR |= (1<<1);
- PORTC->PCR[1] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1);
- GPIOC->PSOR |= (1<<1);
- GPIOC->PDDR |= (1<<2);
- PORTC->PCR[2] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1);
- GPIOC->PSOR |= (1<<2);
- GPIOC->PDDR |= (1<<3);
- PORTC->PCR[3] |= PORTx_PCRn_DSE | PORTx_PCRn_MUX(1);
- GPIOC->PSOR |= (1<<3);
-#else
- (void)usb_led;
-#endif
-}
diff --git a/keyboards/jd40/Makefile b/keyboards/jd40/Makefile
new file mode 100644
index 000000000..57b2ef62e
--- /dev/null
+++ b/keyboards/jd40/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../Makefile
+endif
diff --git a/keyboards/jd40/config.h b/keyboards/jd40/config.h
new file mode 100644
index 000000000..047be5707
--- /dev/null
+++ b/keyboards/jd40/config.h
@@ -0,0 +1,79 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER geekhack
+#define PRODUCT jd40v2
+#define DESCRIPTION t.m.k. keyboard firmware for JD40 MKII
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/*
+ * 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, F5, B4 }
+#define MATRIX_COL_PINS { F4, D7, B5, B6, C6, C7, D4, D6, D5, D0, D1, D2 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* 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
+
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#define RGB_DI_PIN D3
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+
+#endif
diff --git a/keyboards/jd40/jd40.c b/keyboards/jd40/jd40.c
new file mode 100644
index 000000000..fa06356d9
--- /dev/null
+++ b/keyboards/jd40/jd40.c
@@ -0,0 +1,26 @@
+#include "jd40.h"
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+
+ // if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ // gh60_caps_led_on();
+ // } else {
+ // gh60_caps_led_off();
+ // }
+
+ // if (usb_led & (1<<USB_LED_NUM_LOCK)) {
+ // gh60_esc_led_on();
+ // } else {
+ // gh60_esc_led_off();
+ // }
+
+ // if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {
+ // gh60_fn_led_on();
+ // } else {
+ // gh60_fn_led_off();
+ // }
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/jd40/jd40.h b/keyboards/jd40/jd40.h
new file mode 100644
index 000000000..77a122299
--- /dev/null
+++ b/keyboards/jd40/jd40.h
@@ -0,0 +1,45 @@
+#ifndef JD40_H
+#define JD40_H
+
+#include "quantum.h"
+#include "led.h"
+
+/* GH60 LEDs
+ * GPIO pads
+ * 0 F7 WASD LEDs
+ * 1 F6 ESC LED
+ * 2 F5 FN LED
+ * 3 F4 POKER Arrow LEDs
+ * B2 Capslock LED
+ * B0 not connected
+ */
+
+ /*
+inline void gh60_caps_led_on(void) { DDRB |= (1<<2); PORTB &= ~(1<<2); }
+inline void gh60_poker_leds_on(void) { DDRF |= (1<<4); PORTF &= ~(1<<4); }
+inline void gh60_fn_led_on(void) { DDRF |= (1<<5); PORTF &= ~(1<<5); }
+inline void gh60_esc_led_on(void) { DDRF |= (1<<6); PORTF &= ~(1<<6); }
+inline void gh60_wasd_leds_on(void) { DDRF |= (1<<7); PORTF &= ~(1<<7); }
+
+inline void gh60_caps_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }
+inline void gh60_poker_leds_off(void) { DDRF &= ~(1<<4); PORTF &= ~(1<<4); }
+inline void gh60_fn_led_off(void) { DDRF &= ~(1<<5); PORTF &= ~(1<<5); }
+inline void gh60_esc_led_off(void) { DDRF &= ~(1<<6); PORTF &= ~(1<<6); }
+inline void gh60_wasd_leds_off(void) { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }
+*/
+
+/* JD40 MKII keymap definition macro
+ */
+#define KEYMAP( \
+ K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, \
+ K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, \
+ K24, K25, K26, K27, K28, K29, K30, K31, K32, K33, K34, \
+ K35, K36, K37, K38, K39, K40, K41, K42, K43, K44 \
+) { \
+ { KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K10, KC_##K11, KC_##K12 }, \
+ { KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_NO }, \
+ { KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_NO }, \
+ { KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_NO, KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_NO } \
+}
+
+#endif
diff --git a/keyboards/jd40/keymaps/default/keymap.c b/keyboards/jd40/keymaps/default/keymap.c
new file mode 100644
index 000000000..79ac146c9
--- /dev/null
+++ b/keyboards/jd40/keymaps/default/keymap.c
@@ -0,0 +1,164 @@
+#include "jd40.h"
+#include "action_layer.h"
+
+#define _BL 0
+#define _AL 1
+#define _FL 2
+#define _UL 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BL] = KEYMAP(
+ F12, Q, W, E, R, T, Y, U, I, O, P, BSPC,
+ TAB, A, S, D, F, G, H, J, K, L, ENT,
+ LSFT, Z, X, C, V, B, N, M, COMM, UP, DOT,
+ LCTL, LGUI, LALT, FN0, SPC, SPC, FN0, LEFT, DOWN, RIGHT ),
+
+ [_AL] = KEYMAP(
+ GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, DEL,
+ CAPS, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, SCLN, PGUP, QUOT,
+ TRNS, TRNS, TRNS, TRNS, FN3, FN3, TRNS, HOME, PGDN, END ),
+
+ [_FL] = 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 ),
+
+ [_UL] = KEYMAP(
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+ TRNS, FN4, FN5, FN11, FN10, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS ),
+};
+
+enum function_id {
+ RGBLED_TOGGLE,
+ RGBLED_STEP_MODE,
+ RGBLED_INCREASE_HUE,
+ RGBLED_DECREASE_HUE,
+ RGBLED_INCREASE_SAT,
+ RGBLED_DECREASE_SAT,
+ RGBLED_INCREASE_VAL,
+ RGBLED_DECREASE_VAL,
+ SHIFT_ESC,
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_MOMENTARY(1), // Momentary Fn overlay
+ [1] = ACTION_LAYER_TOGGLE(2), // Toggle Arrow Layer overlay
+ [2] = ACTION_LAYER_TAP_KEY(2, KC_CAPS), // Tap to toggle caps lock and hold to activate function layer
+ [3] = ACTION_LAYER_TOGGLE(3), // Toggle Underglow Layer overlay
+ [4] = ACTION_FUNCTION(RGBLED_TOGGLE), //Turn on/off underglow
+ [5] = ACTION_FUNCTION(RGBLED_STEP_MODE), // Change underglow mode
+ [6] = ACTION_FUNCTION(RGBLED_INCREASE_HUE),
+ [7] = ACTION_FUNCTION(RGBLED_DECREASE_HUE),
+ [8] = ACTION_FUNCTION(RGBLED_INCREASE_SAT),
+ [9] = ACTION_FUNCTION(RGBLED_DECREASE_SAT),
+ [10] = ACTION_FUNCTION(RGBLED_INCREASE_VAL),
+ [11] = ACTION_FUNCTION(RGBLED_DECREASE_VAL),
+ [12] = ACTION_FUNCTION(SHIFT_ESC),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+void matrix_scan_user(void) {
+
+// Layer LED indicators
+// ESC led on when in function layer, WASD cluster leds enabled when on arrow cluster
+ uint32_t layer = layer_state;
+ if (layer & (1<<1)) {
+ //gh60_wasd_leds_on();
+ } else {
+ //gh60_wasd_leds_off();
+ }
+
+ if (layer & (1<<2)) {
+ //gh60_esc_led_on();
+ } else {
+ //gh60_esc_led_off();
+ }
+};
+
+#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ switch (id) {
+ case RGBLED_TOGGLE:
+ //led operations
+ if (record->event.pressed) {
+ rgblight_toggle();
+ }
+ break;
+ case RGBLED_INCREASE_HUE:
+ if (record->event.pressed) {
+ rgblight_increase_hue();
+ }
+ break;
+ case RGBLED_DECREASE_HUE:
+ if (record->event.pressed) {
+ rgblight_decrease_hue();
+ }
+ break;
+ case RGBLED_INCREASE_SAT:
+ if (record->event.pressed) {
+ rgblight_increase_sat();
+ }
+ break;
+ case RGBLED_DECREASE_SAT:
+ if (record->event.pressed) {
+ rgblight_decrease_sat();
+ }
+ break;
+ case RGBLED_INCREASE_VAL:
+ if (record->event.pressed) {
+ rgblight_increase_val();
+ }
+ break;
+ case RGBLED_DECREASE_VAL:
+ if (record->event.pressed) {
+ rgblight_decrease_val();
+ }
+ break;
+ case RGBLED_STEP_MODE:
+ if (record->event.pressed) {
+ rgblight_step();
+ }
+ break;
+ static uint8_t shift_esc_shift_mask;
+ // Shift + ESC = ~
+ case SHIFT_ESC:
+ shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
+ if (record->event.pressed) {
+ if (shift_esc_shift_mask) {
+ add_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ add_key(KC_ESC);
+ send_keyboard_report();
+ }
+ } else {
+ if (shift_esc_shift_mask) {
+ del_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ del_key(KC_ESC);
+ send_keyboard_report();
+ }
+ }
+ break;
+ }
+};
diff --git a/keyboards/jd40/readme.md b/keyboards/jd40/readme.md
new file mode 100644
index 000000000..7daa0980e
--- /dev/null
+++ b/keyboards/jd40/readme.md
@@ -0,0 +1,17 @@
+## jd40 mkii keyboard firmware
+
+ Pins:
+ MATRIX_ROW_PINS { F0, F1, F5, B4 }
+ MATRIX_COL_PINS { F4, D7, B5, B6, C6, C7, D4, D6, D5, D0, D1, D2 }
+ RGB_DI_PIN D3
+
+======================
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/jd40 folder.
+Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Amtel Flip to program your .hex file.
diff --git a/keyboards/jd40/rules.mk b/keyboards/jd40/rules.mk
new file mode 100644
index 000000000..2f18fdf10
--- /dev/null
+++ b/keyboards/jd40/rules.mk
@@ -0,0 +1,69 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# 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
+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 ?= yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE ?= yes # USB 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 ?= YES # MIDI controls
+# UNICODE_ENABLE ?= YES # Unicode
+# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE ?= yes # Enable RGB Underglow \ No newline at end of file
diff --git a/keyboards/jd45/Makefile b/keyboards/jd45/Makefile
index 75d544f16..4e2a6f00f 100644
--- a/keyboards/jd45/Makefile
+++ b/keyboards/jd45/Makefile
@@ -1,71 +1,3 @@
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-# 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
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
-# NKRO_ENABLE ?= yes # USB Nkey Rollover - not yet supported in LUFA
-BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
-MIDI_ENABLE ?= YES # MIDI controls
-# UNICODE_ENABLE ?= YES # Unicode
-BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../Makefile
-endif
+endif \ No newline at end of file
diff --git a/keyboards/jd45/keymaps/jeebak/config.h b/keyboards/jd45/keymaps/jeebak/config.h
new file mode 100644
index 000000000..53a1f0a30
--- /dev/null
+++ b/keyboards/jd45/keymaps/jeebak/config.h
@@ -0,0 +1,16 @@
+#include "../../config.h"
+
+/**
+ *JD45 keymap definition macro
+ */
+#define KEYMAP_JD45( \
+ K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, \
+ K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, \
+ K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, \
+ K38, K39, K40, K41, K42, K43, K44, K45, K46, K47 \
+) { \
+ { K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13 }, \
+ { K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, KC_NO }, \
+ { K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, KC_NO }, \
+ { K38, K39, K40, K41, K42, KC_NO, K43, KC_NO, K44, K45, K46, K47, KC_NO } \
+}
diff --git a/keyboards/jd45/keymaps/jeebak/keymap.c b/keyboards/jd45/keymaps/jeebak/keymap.c
new file mode 100644
index 000000000..8d26cbde1
--- /dev/null
+++ b/keyboards/jd45/keymaps/jeebak/keymap.c
@@ -0,0 +1,423 @@
+#include "jd45.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _PLOVER 5
+#define _TOUCHCURSOR 6
+#define _MOUSECURSOR 7
+#define _ADJUST 16
+
+// Keycodes
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ PLOVER,
+ LOWER,
+ RAISE,
+ BACKLIT,
+ EXT_PLV
+};
+
+enum macro_keycodes {
+ KC_ALT_TAB,
+ KC_CMD_TAB,
+ KC_CTL_TAB,
+ KC_CMD_SLSH,
+ KC_AG_FIND,
+ KC_AG_AGAIN,
+ KC_AG_UNDO,
+ KC_AG_CUT,
+ KC_AG_COPY,
+ KC_AG_PASTE,
+ KC_AG_DESK_L,
+ KC_AG_DESK_R,
+ KC_AG_TAB_C,
+ KC_AG_TAB_N,
+ KC_AG_TAB_R,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Custom macros
+#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
+#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
+#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper
+#define GUI_SEM GUI_T(KC_SCLN) // Tap for Semicolon, hold for GUI
+#define ALT_QUO ALT_T(KC_QUOT) // Tap for Quote, hold for Alt
+// Requires KC_TRNS/_______ for the trigger key in the destination layer
+#define LT_TC LT(_TOUCHCURSOR, KC_SPC) // L-ayer T-ap T-ouch C-ursor
+#define LT_MC(kc) LT(_MOUSECURSOR, kc) // L-ayer T-ap M-ouse C-ursor
+#define ALT_TAB M(KC_ALT_TAB) // Macro for Alt-Tab
+#define CMD_TAB M(KC_CMD_TAB) // Macro for Cmd-Tab
+#define CTL_TAB M(KC_CTL_TAB) // Macro for Ctl-Tab
+#define CMD_SLSH M(KC_CMD_SLSH) // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility)
+#define AG_FIND M(KC_AG_FIND) // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings
+#define AG_AGAIN M(KC_AG_AGAIN)
+#define AG_UNDO M(KC_AG_UNDO)
+#define AG_CUT M(KC_AG_CUT)
+#define AG_COPY M(KC_AG_COPY)
+#define AG_PASTE M(KC_AG_PASTE)
+#define AG_D_L M(KC_AG_DESK_L) // For Virtual Desktop Switching: Left, and
+#define AG_D_R M(KC_AG_DESK_R) // Right
+#define AG_T_C M(KC_AG_TAB_C) // For Chrome, etc. Tab Close,
+#define AG_T_N M(KC_AG_TAB_N) // Tab New, and
+#define AG_T_R M(KC_AG_TAB_R) // Tab Reopen Closed
+
+/* Qwerty
+ *
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |Hyper/Tab| Q | W | E | R | T | Y | U | I | O | P | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * | Ctrl/Esc | A | S | MC/D | F | G | H | J | K | L |GUI/; | Alt/" |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | Shift | Z | X | C | V | B | N | M | , | . | / | Sft/Ent |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | RGUI | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol- | Vol+ | Play |
+ * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QWERTY] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+ HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_BSPC,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+ CTL_ESC , KC_A, KC_S,LT_MC(KC_D), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, GUI_SEM, ALT_QUO ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ KC_LSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ KC_RGUI , KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLD , KC_VOLU , KC_MPLY),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Colemak
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |Hyper/Tab| Q | W | F | P | G | J | L | U | Y | ; | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * | Ctrl/Esc | A | R | MC/S | T | D | H | N | E | I | O | " |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | Shift | Z | X | C | V | B | K | M | , | . | / | Sft/Ent |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | RGUI | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol- | Vol+ | Play |
+ * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+[_COLEMAK] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+ HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, KC_BSPC,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+ CTL_ESC , KC_A, KC_R,LT_MC(KC_S), KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ KC_LSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ KC_RGUI , KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLD , KC_VOLU , KC_MPLY),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Dvorak
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |Hyper/Tab| " | , | . | P | Y | F | G | C | R | L | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * | Ctrl/Esc | A | O | MC/E | U | I | D | H | T | N | S | / |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | Shift | ; | Q | J | K | X | B | M | W | V | Z | Sft/Ent |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | RGUI | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol- | Vol+ | Play |
+ * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+[_DVORAK] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+ HPR_TAB,KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, KC_BSPC,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+ CTL_ESC , KC_A, KC_O,LT_MC(KC_E), KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ KC_LSFT , KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ KC_RGUI , KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLD , KC_VOLU , KC_MPLY),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Lower
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * | [ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | "|" |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | ] | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | \ |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Brite | | | | | | | Prev | Next | Mute |
+ * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+[_LOWER] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+ KC_TILD,KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, KC_BSPC,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+ KC_LBRC , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ KC_RBRC , KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ BACKLIT , _______, _______, _______, _______ , _______ , _______, KC_MPRV, KC_MNXT, KC_MUTE),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Raise
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * | $ | 4 | 5 | 6 | . | + | . | 4 | 5 | 6 | * | "|" |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | = | 7 | 8 | 9 | 0 | - | . | 1 | 2 | 3 | / | \ |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Brite | | | | | | | Prev | Next | Mute |
+ * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+[_RAISE] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+ KC_0 , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_BSPC,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+ KC_DLR , KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ASTR, KC_PIPE ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ KC_EQL , KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_DOT, KC_1, KC_2, KC_3, KC_SLSH, KC_BSLS ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ BACKLIT , _______, _______, _______, _______ , _______ , _______, KC_MPRV, KC_MNXT, KC_MUTE),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* TouchCursor layer (http://martin-stone.github.io/touchcursor/) plus personal customizations
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * | AltTab |CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | | |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * | | Alt |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L| Desk_R |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | | Undo | Cut | Copy |Paste | ` | PgDn | Del |Tab_N |Tab_R |iTerm2| |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | | | | | | | | | | |
+ * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ *
+ * The KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND, and KC_AGAIN keycodes don't
+ * seem to work on Mac. Presumably they'll work under Windows.
+ */
+
+[_TOUCHCURSOR] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+ ALT_TAB,CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______, _______,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+ _______ ,KC_LALT, KC_SPC, AG_T_C, AG_FIND,AG_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, AG_D_L, AG_D_R ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ _______ ,AG_UNDO, AG_CUT, AG_COPY,AG_PASTE, KC_GRV, KC_PGDN, KC_DEL, AG_T_N, AG_T_R,CMD_SLSH, _______ ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ _______ , _______, _______, _______, _______ , _______ , _______, _______, _______, _______),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Mouse Layer
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * | | |ACCL0 | | | | |WHL_L | Up |WHL_R | BTN2 | | |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * | |ACCL2 | BTN2 | | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 | BTN5 |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | | | | | BTN3 | |WHL_Dn| BTN1 | | | BTN3 | |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | | | | | | | | | | |
+ * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+
+[_MOUSECURSOR] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+ _______,_______, KC_ACL0, _______, _______, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______, _______,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+ _______ ,KC_ACL2, KC_BTN2, _______, KC_BTN1, KC_ACL1, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4, KC_BTN5 ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ _______ ,_______, _______, _______, KC_BTN3, _______, KC_WH_D, KC_BTN1, _______, _______, KC_BTN3, _______ ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ _______ , _______, _______, _______, _______, _______, _______, _______, _______, _______),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Plover layer (http://opensteno.org)
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * | # | # | # | # | # | # | # | # | # | # | # | # | # |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * | | S | T | P | H | * | * | F | P | L | T | D |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | TogOut | S | K | W | R | * | * | R | B | G | S | Z |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Exit | | A | O | | | E | U | | |
+ * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+
+[_PLOVER] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+ KC_1 , KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+ XXXXXXX , KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ XXXXXXX , KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ EXT_PLV , XXXXXXX, KC_C, KC_V, XXXXXXX , XXXXXXX , KC_N, KC_M, XXXXXXX, XXXXXXX),
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+/* Adjust (Lower + Raise)
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * | | | | | | | | | | | | | Del |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * | | | | | |AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | | | | | | | | | | | | |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | | | | | | | | | | Reset |
+ * `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+[_ADJUST] = KEYMAP_JD45(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+ _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+ _______ ,_______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______ ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ _______ ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ _______ , _______, _______, _______, _______ , _______ , _______, _______, _______, RESET)
+/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ default_layer_set(1UL<<_DVORAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ case PLOVER:
+ if (record->event.pressed) {
+ layer_off(_RAISE);
+ layer_off(_LOWER);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ break;
+ case EXT_PLV:
+ if (record->event.pressed) {
+ layer_off(_PLOVER);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+/*
+ * Macro definition
+ */
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+
+ bool use_cmd = true; // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc.
+ // Compare to MAGIC_SWAP_ALT_GUI and MAGIC_UNSWAP_ALT_GUI configs, set in:
+ // quantum/quantum.c
+ if(keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1) {
+ use_cmd = false; // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc.
+ }
+
+ switch (id) {
+ case KC_ALT_TAB:
+ if(use_cmd) { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); }
+ else { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); }
+ case KC_CMD_TAB:
+ if(use_cmd) { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); }
+ else { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); }
+
+ case KC_CTL_TAB:
+ return (record->event.pressed ? MACRO( D(LCTRL), D(TAB), END ) : MACRO( U(TAB), END ));
+ case KC_CMD_SLSH:
+ return (record->event.pressed ? MACRO( D(LGUI), D(SLSH),END ) : MACRO( U(SLSH),END ));
+
+ case KC_AG_FIND:
+ return use_cmd ? MACRODOWN( D(LGUI), T(F), END ) : MACRODOWN( D(LCTRL), T(F), END );
+ case KC_AG_AGAIN:
+ return use_cmd ? MACRODOWN( D(LGUI), T(G), END ) : MACRODOWN( D(LCTRL), T(G), END );
+ case KC_AG_UNDO:
+ return use_cmd ? MACRODOWN( D(LGUI), T(Z), END ) : MACRODOWN( D(LCTRL), T(Z), END );
+ case KC_AG_CUT:
+ return use_cmd ? MACRODOWN( D(LGUI), T(X), END ) : MACRODOWN( D(LCTRL), T(X), END );
+ case KC_AG_COPY:
+ return use_cmd ? MACRODOWN( D(LGUI), T(C), END ) : MACRODOWN( D(LCTRL), T(C), END );
+ case KC_AG_PASTE:
+ return use_cmd ? MACRODOWN( D(LGUI), T(V), END ) : MACRODOWN( D(LCTRL), T(V), END );
+
+ case KC_AG_DESK_L:
+ return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(SCLN), END ) : MACRODOWN( D(LALT), D(LCTRL), T(SCLN), END );
+ case KC_AG_DESK_R:
+ return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(QUOT), END ) : MACRODOWN( D(LALT), D(LCTRL), T(QUOT), END );
+
+ case KC_AG_TAB_C:
+ return use_cmd ? MACRODOWN( D(LGUI), T(W), END ) : MACRODOWN( D(LCTRL), T(W), END );
+ case KC_AG_TAB_N:
+ return use_cmd ? MACRODOWN( D(LGUI), T(T), END ) : MACRODOWN( D(LCTRL), T(T), END );
+ case KC_AG_TAB_R:
+ return use_cmd ? MACRODOWN( D(LGUI), D(LSHIFT), T(T), END ) : MACRODOWN( D(LCTRL), D(LSHIFT), T(T), END );
+ }
+
+ return MACRO_NONE;
+}
diff --git a/keyboards/jd45/keymaps/jeebak/readme.md b/keyboards/jd45/keymaps/jeebak/readme.md
new file mode 100644
index 000000000..2e45a46d9
--- /dev/null
+++ b/keyboards/jd45/keymaps/jeebak/readme.md
@@ -0,0 +1,129 @@
+jeebak's JD45 layout
+=======================
+NOTE: This is a port of jeebak's planck layout, for jd45.
+
+This WIP keymap attempts to minimize fingers straying away from the home row.
+To aid in this endeavor, when additional modifyer keys to switch layers are
+needed, they will be mapped to home row keys. The `keymap.c` file will contain
+the exact changes. The diagrams in this README shows the highlights of the
+changes from the default mappings.
+
+I also decided to change all calls to `persistant_default_layer_set()` to
+`default_layer_set()` since this is my personal perference.
+
+## Macros
+```
+#define ALT_TAB M(KC_ALT_TAB)
+```
+
+## Base Layers (Qwerty/Colemak/Dvorak)
+These base layers are mostly the same as the default mappings. The interesting
+changes are shown below.
+
+- The `Ctrl/Esc`, will emit an `Escape` when tapped, and act as a `Control` key when held,
+- `GUI/;` as `;` and `GUI`,
+- `Alt/"` as `"` and `Alt`,
+- `Sft/Ent` as `Enter` and `Shift`, and
+- `Hyper/Tab` as `Tab` and `Hyper`
+
+A `TODO` item is to see if it can also act as a `CapsLock` when double-tapped.
+The arrow keys, which have been moved to the
+[TouchCursor](http://martin-stone.github.io/touchcursor/) layer, have been
+replaced with the Media keys as shown. The `MC/kc` key activates the
+`MouseCursor` layer when held, and emits the corresponding `kc` for its layer,
+when tapped.
+```
+ ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ |Hyper/Tab| Q | W | E | R | T | Y | U | I | O | P | [ | Bksp |
+ |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ | Ctrl/Esc | A | S | MC/D | F | G | H | J | K | L |GUI/; | Alt/" |
+ |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ | Shift | Z | X | C | V | B | N | M | , | . | / | Sft/Ent |
+ |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ | RGUI | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol- | Vol+ | Play |
+ `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+```
+
+## Lower Layer (Symbols and Function Keys)
+The symbols and functions keys are essentially the same as the default mapping.
+The most notable changes are that the symbol keys from the `RAISE` layer have
+been moved here. The remaining Media keys replace those that are now on the
+base layers. The `BACKLIT` key has also been moved here.
+```
+ ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | | Bksp |
+ |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ | [ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | "|" |
+ |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ | ] | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | \ |
+ |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ | Brite | | | | | | | Prev | Next | Mute |
+ `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+```
+
+## Raise Layer (Numbers and Arithmetic Operators)
+All of the numbers and arithmetic operators are available on this layer. Some
+keys are duplicated for the convenience of their positions. The `0` and `$`
+keys at the far left are for quick access to beginning and end of line in vim.
+```
+ ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | Bksp |
+ |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ | $ | 4 | 5 | 6 | . | + | . | 4 | 5 | 6 | * | "|" |
+ |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ | = | 7 | 8 | 9 | 0 | - | . | 1 | 2 | 3 | / | \ |
+ |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ | Brite | | | | | | | Prev | Next | Mute |
+ `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+```
+
+## TouchCursor layer plus personal customizations
+[TouchCursor](http://martin-stone.github.io/touchcursor/) uses the `Space` key
+as the modifier, with the `IJKL` home row keys representing the inverted-T of
+the arrow keys. All of the default TouchCursor keymappings for the right hand
+are represented below. My personalizations include all of the keys shown for
+the left hand. Having the `Alt` and `Shift` keys (as well as the `Control` key
+from the base layers) readily accessible from the home row allows quick word
+jumps and highlighting when used in conjunction with the arrow keys. The
+`Alt-Tab` macro is not only useful under Windows, but also under Mac when used
+with alternative switchers like [HyperSwitch](https://bahoom.com/hyperswitch).
+The `Cmd-Tab` and `Ctrl-Tab` sequences are duplicated for easy access while in
+this layer. The `KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND,` and `KC_AGAIN`
+keycodes do not seem to work. There are macros in place that'll "automatically"
+choose the correct version (`Cmd-Tab` vs. `Alt-Tab`, `Cmd-C` vs. `Ctrl-C`,
+etc.) depending on which layout you've currently selected (`AG_NORM` or
+`AG_SWAP`) in the `_ADJUST` layer. The `Desk_L` and `Desk_R` macros are what I
+use to switch between Virtual Desktops Left/Right. The `Tab_C`, `Tab_N` and
+`Tab_R` are for "Close Tab," "New Tab" and "Reopen Closed Tab" for apps such as
+Google Chrome.
+```
+ ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ | AltTab |CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | | |
+ |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ | | Alt |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L| Desk_R |
+ |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ | | Undo | Cut | Copy |Paste | ` | PgDn | Del |Tab_N |Tab_R |iTerm2| |
+ |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ | | | | | | | | | | |
+ `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+```
+
+## Mouse Layer
+The Mouse layer, closely mimics the layout/behaviour of the TouchCursor layer.
+The `D` key (on QWERTY) is used to activate this layer. All 16 keycodes for the
+mouse from the `doc/keycode.txt` file are represented, and logically located,
+IMHO. The left and right click buttons are duplicated; on the right hand side,
+for a quick click here and there, and again on the left hand side for when the
+buttons need to be held for dragging things or highlighting text, thus allowing
+the right hand to be free to use the up/down/left/right actions.
+```
+ ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ | | |ACCL0 | | | | |WHL_L | Up |WHL_R | BTN2 | | |
+ |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ | |ACCL2 | BTN2 | | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 | BTN5 |
+ |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ | | | | | BTN3 | |WHL_Dn| BTN1 | | | BTN3 | |
+ |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ | | | | | | | | | | |
+ `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+```
diff --git a/keyboards/jd45/readme.md b/keyboards/jd45/readme.md
new file mode 100644
index 000000000..2822666e8
--- /dev/null
+++ b/keyboards/jd45/readme.md
@@ -0,0 +1,4 @@
+JD45 keyboard firmware
+======================
+
+TODO: to be updated.
diff --git a/keyboards/jd45/rules.mk b/keyboards/jd45/rules.mk
new file mode 100644
index 000000000..2f1e266a1
--- /dev/null
+++ b/keyboards/jd45/rules.mk
@@ -0,0 +1,67 @@
+
+
+# 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
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
+# NKRO_ENABLE ?= yes # USB Nkey Rollover - not yet supported in LUFA
+BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
+MIDI_ENABLE ?= YES # MIDI controls
+# UNICODE_ENABLE ?= YES # Unicode
+BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID \ No newline at end of file
diff --git a/keyboards/kc60/Makefile b/keyboards/kc60/Makefile
index b00a488b9..57b2ef62e 100644
--- a/keyboards/kc60/Makefile
+++ b/keyboards/kc60/Makefile
@@ -1,76 +1,3 @@
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= 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 ?= no # 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
-
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../Makefile
endif
-
diff --git a/keyboards/kc60/config.h b/keyboards/kc60/config.h
index c4a9b9ff8..29695d0b9 100644
--- a/keyboards/kc60/config.h
+++ b/keyboards/kc60/config.h
@@ -62,7 +62,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define MATRIX_HAS_GHOST
/* number of backlight levels */
-#define BACKLIGHT_LEVELS 3
+#define BACKLIGHT_LEVELS 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
diff --git a/keyboards/kc60/kc60.h b/keyboards/kc60/kc60.h
index 34eab4b2a..c3a0165c0 100644
--- a/keyboards/kc60/kc60.h
+++ b/keyboards/kc60/kc60.h
@@ -3,21 +3,92 @@
#include "quantum.h"
+// K49 key is for the key at row 1 and column 15 when you split the backspace in 2 1U key.
+
// This a shortcut to help you visually see your layout.
// The first section contains all of the arguements
// The second converts the arguments into a multi-dimensional array
+/*
+ * ,-----------------------------------------------------------------------------------------.
+ * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D | K49 |
+ * |-----------------------------------------------------------------------------------------+
+ * | K10 | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C | K1D |
+ * |-----------------------------------------------------------------------------------------+
+ * | K20 | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C |
+ * |-----------------------------------------------------------------------------------------+
+ * | K30 | K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B | K3D | K3C |
+ * |-----------------------------------------------------------------------------------------+
+ * | K40 | K41 | K42 | K45 | K4A | K4B | K4C | K4D |
+ * `-----------------------------------------------------------------------------------------'
+ */
#define KEYMAP( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
- K40, K41, K42, K45, K4A, K4B, K4C, K4D \
+ K40, K41, K42, K45, K49, K4A, K4B, K4C, K4D \
) { \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
- { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO,K4A, K4B, K4C, K4D } \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D } \
}
#endif
+
+/* Default layout
+ * ,-----------------------------------------------------------------------------------------.
+ * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D |
+ * |-----------------------------------------------------------------------------------------+
+ * | K10 | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C | K1D |
+ * |-----------------------------------------------------------------------------------------+
+ * | K20 | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C |
+ * |-----------------------------------------------------------------------------------------+
+ * | K30 | K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B | K3C |
+ * |-----------------------------------------------------------------------------------------+
+ * | K40 | K41 | K42 | K45 | K4A | K4B | K4C | K4D |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+/* Mini Lshift
+ * ,-----------------------------------------------------------------------------------------.
+ * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D |
+ * |-----------------------------------------------------------------------------------------+
+ * | K10 | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C | K1D |
+ * |-----------------------------------------------------------------------------------------+
+ * | K20 | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C |
+ * |-----------------------------------------------------------------------------------------+
+ * | K30 |K31| K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B | K3C |
+ * |-----------------------------------------------------------------------------------------+
+ * | K40 | K41 | K42 | K45 | K4A | K4B | K4C | K4D |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+/* Mini Rshift
+ * ,-----------------------------------------------------------------------------------------.
+ * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D |
+ * |-----------------------------------------------------------------------------------------+
+ * | K10 | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C | K1D |
+ * |-----------------------------------------------------------------------------------------+
+ * | K20 | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C |
+ * |-----------------------------------------------------------------------------------------+
+ * | K30 | K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B | K3C | K3D |
+ * |-----------------------------------------------------------------------------------------+
+ * | K40 | K41 | K42 | K45 | K4A | K4B | K4C | K4D |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+/* Mini Enter
+ * ,-----------------------------------------------------------------------------------------.
+ * | K00 | K01 | K02 | K03 | K04 | K05 | K06 | K07 | K08 | K09 | K0A | K0B | K0C | K0D |
+ * |-----------------------------------------------------------------------------------------+
+ * | K10 | K11 | K12 | K13 | K14 | K15 | K16 | K17 | K18 | K19 | K1A | K1B | K1C | K1D |
+ * |-----------------------------------------------------------------------------------------+
+ * | K20 | K21 | K22 | K23 | K24 | K25 | K26 | K17 | K28 | K29 | K2A | K2B | K2C | K2D |
+ * |-----------------------------------------------------------------------------------------+
+ * | K30 | K32 | K33 | K34 | K35 | K36 | K37 | K38 | K39 | K3A | K3B | K3C |
+ * |-----------------------------------------------------------------------------------------+
+ * | K40 | K41 | K42 | K45 | K4A | K4B | K4C | K4D |
+ * `-----------------------------------------------------------------------------------------'
+ */ \ No newline at end of file
diff --git a/keyboards/kc60/keymaps/dbroqua/keymap.c b/keyboards/kc60/keymaps/dbroqua/keymap.c
new file mode 100644
index 000000000..8b5efd0ce
--- /dev/null
+++ b/keyboards/kc60/keymaps/dbroqua/keymap.c
@@ -0,0 +1,103 @@
+// 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 "kc60.h"
+
+#define _QWERTY 0
+#define _FNCAPS 1
+#define _FNRIGHTSHIFT 2
+
+// Fillers to make layering more clear
+#define ______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Func macro definitions.
+#define S_LED FUNC(0)
+#define S_LEDI FUNC(1)
+#define S_LEDD FUNC(2)
+
+// Enable these functions using FUNC(n) macro.
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_BACKLIGHT_TOGGLE(),
+ [1] = ACTION_BACKLIGHT_INCREASE(),
+ [2] = ACTION_BACKLIGHT_DECREASE()
+ };
+
+/*
+ * | | |
+ * | | |
+ * | | |
+ * | | |
+ * | |
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ * |-----------------------------------------------------------------------------------------+
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp |
+ * |-----------------------------------------------------------------------------------------+
+ * | Caps/FN1| A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / | Up | FN2 |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl | Gui | Alt | Space | AltGr | Left | Down | Right |
+ * `-----------------------------------------------------------------------------------------'
+ */
+ [0] = KEYMAP( /* Basic QWERTY */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
+ LT(_FNCAPS, KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_FNRIGHTSHIFT), KC_UP, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_GRV, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT \
+ ),
+
+/* Layer 1
+ * ,-----------------------------------------------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | Psc | | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | Led | Led+| Led-| | Mute| Vol+| Vol-| | | | Play | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | Prev | Stop | Next |
+ * `-----------------------------------------------------------------------------------------'
+ */
+ [_FNCAPS] = KEYMAP( /* Layer 1 */
+ ______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, \
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \
+ ______, ______, ______, ______, ______, ______, ______, KC_PSCR,______, ______, ______, ______, ______, ______, \
+ ______, ______, S_LED, S_LEDI, S_LEDD,______,KC_MUTE,KC_VOLU,KC_VOLD,______, ______, ______, ______,KC_MPLY, \
+ ______, ______, ______, ______, KC_DEL, ______, KC_MPRV, KC_MSTP, KC_MNXT \
+ ),
+
+/* Layer 2
+ * ,-----------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | | | | PgUp | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | Home | PgDown| End |
+ * `-----------------------------------------------------------------------------------------'
+ */
+ [_FNRIGHTSHIFT] = KEYMAP( /* Layer 2 */
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_PGUP, \
+ ______, ______, ______, ______, ______, ______, KC_HOME,KC_PGDN,KC_END \
+ ),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ return MACRO_NONE;
+};
diff --git a/keyboards/kc60/keymaps/dbroqua/readme.md b/keyboards/kc60/keymaps/dbroqua/readme.md
new file mode 100644
index 000000000..b71d10ab0
--- /dev/null
+++ b/keyboards/kc60/keymaps/dbroqua/readme.md
@@ -0,0 +1,11 @@
+# Dbroqua Layout
+
+* Online keyboard layout editor: http://www.keyboard-layout-editor.com/#/gists/24fa7821d4955ec3c76037c8e159a199
+* Online keyboard layout editor (caps layer): http://www.keyboard-layout-editor.com/#/gists/4136d4d1555d6f0d9403c21aaf50fd37
+* Online keyboard layout editor (fn2 layer): http://www.keyboard-layout-editor.com/#/gists/cf4955f73f339020dbb41c15364e7e4f
+
+# Programming Instructions:
+Enter into programming mode and run the following command.
+```
+$ sudo KEYMAP=dbroqua make dfu
+``` \ No newline at end of file
diff --git a/keyboards/kc60/keymaps/dbroqua_hhkb/keymap.c b/keyboards/kc60/keymaps/dbroqua_hhkb/keymap.c
new file mode 100644
index 000000000..5d7c7f38a
--- /dev/null
+++ b/keyboards/kc60/keymaps/dbroqua_hhkb/keymap.c
@@ -0,0 +1,73 @@
+// 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 "kc60.h"
+
+#define _QWERTY 0
+#define _FN 1
+
+// Fillers to make layering more clear
+#define ______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Func macro definitions.
+#define S_LED FUNC(0)
+#define S_LEDI FUNC(1)
+#define S_LEDD FUNC(2)
+
+// Enable these functions using FUNC(n) macro.
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_BACKLIGHT_TOGGLE(),
+ [1] = ACTION_BACKLIGHT_INCREASE(),
+ [2] = ACTION_BACKLIGHT_DECREASE()
+ };
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ * |-----------------------------------------------------------------------------------------+
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / | RShift | FN |
+ * |-----------------------------------------------------------------------------------------+
+ * | LGUI | LAlt | Space | RAlt | RGUI |
+ * `-----------------------------------------------------------------'
+ */
+ [0] = KEYMAP( /* Basic QWERTY */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_FN), KC_RSFT, \
+ ______, KC_LGUI, KC_LALT, KC_SPC, KC_GRV, KC_RALT, KC_RGUI, ______, ______ \
+ ),
+
+/* Layer 1
+ * ,-----------------------------------------------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
+ * |-----------------------------------------------------------------------------------------+
+ * | | Led | Led-| Led+| | | | | Psc | Slck| Paus| Up | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | Vol-| Vol+| Mute| | | * | / | Home| PgUp| Left|Right| |
+ * |-----------------------------------------------------------------------------------------+
+ * | | Prev| Play| Next| | | + | - | End |PgDn| Down| | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | Stop | |
+ * `-----------------------------------------------------------------'
+ */
+ [_FN] = KEYMAP( /* Layer 1 */
+ ______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, \
+ ______, S_LED, S_LEDI, S_LEDD, ______, ______, ______, ______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, ______, ______, \
+ ______, KC_VOLD, KC_VOLU, KC_MUTE, ______, ______, KC_PAST, KC_PSLS,KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, ______, ______, \
+ ______, ______, KC_MPRV, KC_MPLY, KC_MNXT,______,______,KC_PPLS,KC_PMNS,KC_END, KC_PGDN, KC_DOWN, ______,______, \
+ ______, ______, ______, ______, KC_DEL, KC_MSTP, ______, ______, ______ \
+ )
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ return MACRO_NONE;
+};
diff --git a/keyboards/kc60/keymaps/dbroqua_hhkb/readme.md b/keyboards/kc60/keymaps/dbroqua_hhkb/readme.md
new file mode 100644
index 000000000..be99a3bc7
--- /dev/null
+++ b/keyboards/kc60/keymaps/dbroqua_hhkb/readme.md
@@ -0,0 +1,9 @@
+# Dbroqua HHKB like Layout
+
+Like the HHKB but with a KC60 PCB :D.
+
+# Programming Instructions:
+Enter into programming mode and run the following command.
+```
+$ sudo KEYMAP=dbroqua_hhkb make dfu
+``` \ No newline at end of file
diff --git a/keyboards/kc60/keymaps/default/keymap.c b/keyboards/kc60/keymaps/default/keymap.c
index 6f8352c69..293ff3ab4 100644
--- a/keyboards/kc60/keymaps/default/keymap.c
+++ b/keyboards/kc60/keymaps/default/keymap.c
@@ -9,7 +9,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, \
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL, RESET \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_NO, KC_RGUI, KC_RALT, KC_RCTL, RESET \
),
};
diff --git a/keyboards/kc60/keymaps/sgoodwin/keymap.c b/keyboards/kc60/keymaps/sgoodwin/keymap.c
index 99e95c232..3192b2514 100644
--- a/keyboards/kc60/keymaps/sgoodwin/keymap.c
+++ b/keyboards/kc60/keymaps/sgoodwin/keymap.c
@@ -13,21 +13,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, \
MO(2), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_NO, KC_ENT, \
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, \
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL, DF(1) \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_NO, KC_RGUI, KC_RALT, KC_RCTL, DF(1) \
),
[1] = KEYMAP( /* Basic QWERTY */
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
MO(2), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, \
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL, DF(0) \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_NO, KC_RGUI, KC_RALT, KC_RCTL, DF(0) \
),
[2] = KEYMAP( /* KBP v60-like arrows, media keys, etc */
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, BL_INC, BL_DEC, BL_STEP, \
KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_TRNS, \
KC_TRNS, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, DEBUG, RESET, KC_TRNS, KC_NO \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_NO, DEBUG, RESET, KC_TRNS, KC_NO \
),
};
diff --git a/keyboards/kc60/keymaps/stanleylai/keymap.c b/keyboards/kc60/keymaps/stanleylai/keymap.c
index 057c73bf4..212fa88bd 100644
--- a/keyboards/kc60/keymaps/stanleylai/keymap.c
+++ b/keyboards/kc60/keymaps/stanleylai/keymap.c
@@ -22,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
LT(_FL, KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NO, KC_ENT, \
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, MO(_FL), KC_UP, \
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI,KC_LEFT, KC_DOWN, KC_RGHT),
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_NO, KC_RGUI,KC_LEFT, KC_DOWN, KC_RGHT),
// Function layer
[_FL] = KEYMAP(
@@ -30,7 +30,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_NO, KC_MPRV,KC_UP, KC_MNXT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR,KC_SLCK, KC_PAUS, KC_INS, \
KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
KC_TRNS,KC_NO, KC_MUTE,KC_VOLD,KC_VOLU,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, LT(_RGBL, KC_PGUP),\
- KC_TRNS,KC_TRNS,KC_TRNS, KC_MPLY, KC_TRNS,KC_HOME, KC_PGDN, KC_END),
+ KC_TRNS,KC_TRNS,KC_TRNS, KC_MPLY, KC_NO, KC_TRNS,KC_HOME, KC_PGDN, KC_END),
// RGB Layer
[_RGBL] = KEYMAP(
@@ -39,13 +39,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_NO, RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,BL_STEP,BL_TOGG, KC_TRNS, KC_TRNS,\
- KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS),
+ KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_NO, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS),
#else
RESET, 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_TRNS,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, BL_STEP,BL_TOGG, KC_TRNS, KC_TRNS,\
- KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS),
+ KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_NO, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS),
#endif
};
diff --git a/keyboards/kc60/keymaps/wigguno/keymap.c b/keyboards/kc60/keymaps/wigguno/keymap.c
index 50b1d0f98..dca2826eb 100644
--- a/keyboards/kc60/keymaps/wigguno/keymap.c
+++ b/keyboards/kc60/keymaps/wigguno/keymap.c
@@ -24,7 +24,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, \
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_NO, KC_RALT, MO(1), KC_RGUI, KC_RCTL \
),
/*
@@ -47,7 +47,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, BL_DEC, BL_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, \
- RESET, KC_TRNS, KC_TRNS, BL_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
+ RESET, KC_TRNS, KC_TRNS, BL_TOGG, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
),
};
diff --git a/keyboards/kc60/keymaps/workman-dead/kc60-wm-dead.png b/keyboards/kc60/keymaps/workman-dead/kc60-wm-dead.png
new file mode 100644
index 000000000..cc6a630a5
--- /dev/null
+++ b/keyboards/kc60/keymaps/workman-dead/kc60-wm-dead.png
Binary files differ
diff --git a/keyboards/kc60/keymaps/workman-dead/keymap.c b/keyboards/kc60/keymaps/workman-dead/keymap.c
new file mode 100644
index 000000000..9e3b9bb65
--- /dev/null
+++ b/keyboards/kc60/keymaps/workman-dead/keymap.c
@@ -0,0 +1,183 @@
+#include "kc60.h"
+
+#define _WM 0
+#define _QW 1
+#define _DK 2
+#define _FUN 3
+#define _MS 4
+
+#define _______ KC_NO
+#define XXXXXXX KC_TRNS
+
+#define _DK_ACT 0
+#define _DK_REL 1
+#define _KC_COMS 2
+#define _KC_CENT 3
+
+#define DK_ACT M(_DK_ACT) // activate dead key layer
+#define DK_REL M(_DK_REL) // release dead key layer
+#define KC_COMS M(_KC_COMS) // comma + space
+#define KC_CENT M(_KC_CENT) // comma + enter
+#define KC_TABM LT(_MS, KC_TAB) // press for tab, hold for mouse layer
+#define KC_SPFN LT(_FUN, KC_SPC) // press for space, hold for function layer (aka spacefn)
+#define KC_DFQW DF(_QW) // set default layer to qwerty
+#define KC_DFWM DF(_WM) // set default layer to workman
+#define KC_CMDQ LGUI(KC_Q) // command + q
+#define KC_CMDD LGUI(KC_D) // command + d
+#define KC_CMDA LGUI(KC_A) // command + a
+#define KC_CMDS LGUI(KC_S) // command + s
+#define KC_CMDZ LGUI(KC_Z) // command + z
+#define KC_CMDX LGUI(KC_X) // command + x
+#define KC_CMDC LGUI(KC_C) // command + c
+#define KC_CMDV LGUI(KC_V) // command + v
+#define KC_CSTB S(RCTL(KC_TAB)) // shift + control + tab
+#define KC_C_TB RCTL(KC_TAB) // control + tab
+#define KC_C_LF RCTL(KC_LEFT) // control + left
+#define KC_C_RT RCTL(KC_RGHT) // control + right
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// Workman
+/*
+* ,-----------------------------------------------------------.
+* |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Bsp |
+* |-----------------------------------------------------------|
+* |Tab/M| Q| D| R| W| B| J| F| U| P| ;| [| ]| \ |
+* |-----------------------------------------------------------|
+* |Ctrl | A| S| H| T| G| Y| N| E| O| I| '| Return |
+* |-----------------------------------------------------------|
+* |Shift | Z| X| M| C| V| K| L| ,| .| /| Shift |
+* |-----------------------------------------------------------|
+* |Ctrl | Alt | GUI | Space/FN | Alt | GUI | Ctrl | qwerty |
+* `-----------------------------------------------------------'
+*/
+[_WM] = KEYMAP( /* Workman */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TABM, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_LCTL, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT, _______, KC_ENT, \
+ KC_LSFT, _______, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, DK_ACT, KC_DOT, KC_SLSH, _______, KC_RSFT, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPFN, _______, KC_RALT, KC_RGUI, KC_RCTL, KC_DFQW),
+
+// QWERTY
+/*
+* ,-----------------------------------------------------------.
+* |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Bsp |
+* |-----------------------------------------------------------|
+* |Tab/M| Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |
+* |-----------------------------------------------------------|
+* |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| Return |
+* |-----------------------------------------------------------|
+* |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift |
+* |-----------------------------------------------------------|
+* |Ctrl | Alt | GUI | Space/FN | Alt | GUI | Ctrl | workman |
+* `-----------------------------------------------------------'
+*/
+[_QW] = KEYMAP( /* QWERTY */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TABM, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, _______, KC_ENT, \
+ KC_LSFT, _______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, DK_ACT, KC_DOT, KC_SLSH, _______, KC_RSFT, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPFN, _______, KC_RALT, KC_RGUI, KC_RCTL, KC_DFWM),
+
+// dead key layer
+/*
+* ,-----------------------------------------------------------.
+* | | | | | | | | | | | | | | Bsp |
+* |-----------------------------------------------------------|
+* | | %| &| ?| +| @| $| _| [| ]| !| ~| ^| |
+* |-----------------------------------------------------------|
+* | | #| (| =| 0| {| }| 1| *| )| -| `| Return |
+* |-----------------------------------------------------------|
+* | | 6| 7| 8| 9| || \| 2| 3| 4| 5| |
+* |-----------------------------------------------------------|
+* |Ctrl | Alt | GUI | , | Alt | GUI | Ctrl | |
+* `-----------------------------------------------------------'
+*/
+[_DK] = KEYMAP( /* dead key layer */
+ XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSPC, \
+ XXXXXXX, KC_PERC, KC_AMPR, KC_QUES, KC_PLUS, KC_AT, KC_DLR, KC_UNDS, KC_LBRC, KC_RBRC, KC_EXLM, KC_TILD, KC_CIRC, _______, \
+ _______, KC_HASH, KC_LPRN, KC_EQL, KC_0, KC_LCBR, KC_RCBR, KC_1, KC_ASTR, KC_RPRN, KC_MINS, KC_GRV, _______, KC_CENT, \
+ _______, _______, KC_6, KC_7, KC_8, KC_9, KC_PIPE, KC_BSLS, KC_2, DK_REL, KC_4, KC_5, _______, _______, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_COMS, _______, KC_RALT, KC_RGUI, KC_RCTL, _______),
+
+// function layer
+/*
+* ,-----------------------------------------------------------.
+* | | F1| F2| F3| F4| F5| F6| F7| F8| F9| F10| F11| F12|Del |
+* |-----------------------------------------------------------|
+* |Esc | Cq| Cd|cstb|ctb| | |pgd| up|pgu| | | |ins |
+* |-----------------------------------------------------------|
+* |Shift | Ca| Cs|clt|crt| | | lt| dw| rt|home|end| Bsp |
+* |-----------------------------------------------------------|
+* |Shift | Cz| Cx| | Cc| Cv| V-| V+|mute| | | |
+* |-----------------------------------------------------------|
+* |Ctrl | Alt | GUI | | Alt | GUI | Ctrl | Reset |
+* `-----------------------------------------------------------'
+*/
+[_FUN] = KEYMAP( /* function layer */
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ KC_ESC, KC_CMDQ, KC_CMDD, KC_CSTB, KC_C_TB, _______, _______, KC_PGDN, KC_UP, KC_PGUP, _______, _______, _______, KC_INS, \
+ KC_LSFT, KC_CMDA, KC_CMDS, KC_C_LF, KC_C_RT, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, KC_END, _______, KC_BSPC, \
+ KC_LSFT, _______, KC_CMDZ, KC_CMDX, _______, KC_CMDC, KC_CMDV, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, _______, KC_RALT, KC_RGUI, KC_RCTL, RESET),
+
+// mouse layer
+/*
+* ,-----------------------------------------------------------.
+* | | | | | | | | | | | | | | |
+* |-----------------------------------------------------------|
+* | |fast|med|slow| | | | | up| | | | | |
+* |-----------------------------------------------------------|
+* | | | | | | | | lt| dw| rt| rc| | |
+* |-----------------------------------------------------------|
+* | | | | | | | | | | | | |
+* |-----------------------------------------------------------|
+* | | | | lc | | | | |
+* `-----------------------------------------------------------'
+*/
+[_MS] = KEYMAP( /* mouse layer */
+ XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ XXXXXXX, KC_ACL2, KC_ACL1, KC_ACL0, _______, _______, _______, _______, KC_MS_U, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN2, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, KC_BTN1, _______, _______, _______, _______, _______),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case _KC_COMS:
+ if (record->event.pressed) {
+ return MACRO(T(COMM), T(SPC), END); // comma + space
+ }
+ break;
+ case _KC_CENT:
+ if (record->event.pressed) {
+ return MACRO(T(COMM), T(ENT), END); // comma + enter
+ }
+ break;
+ case _DK_ACT:
+ if (record->event.pressed) {
+ if (keyboard_report->mods & MOD_BIT(KC_LSFT) || keyboard_report->mods & MOD_BIT(KC_RSFT)) { // act as comma when shift is pressed (eg <)
+ register_code(KC_COMM);
+ } else { // activate oneshot dead key layer otherwise
+ layer_on(_DK);
+ set_oneshot_layer(_DK, ONESHOT_START);
+ }
+ } else { // make sure to deactive dead key layer on key release
+ clear_oneshot_layer_state(ONESHOT_PRESSED);
+ unregister_code(KC_COMM);
+ }
+ break;
+ case _DK_REL:
+ if (record->event.pressed) { // act as 3 on keypress
+ register_code(KC_3);
+ } else { // make sure to deactive dead key layer on key release
+ clear_oneshot_layer_state(ONESHOT_PRESSED);
+ unregister_code(KC_3);
+ }
+ break;
+ }
+
+ return MACRO_NONE;
+};
diff --git a/keyboards/kc60/keymaps/workman-dead/readme.md b/keyboards/kc60/keymaps/workman-dead/readme.md
new file mode 100644
index 000000000..f1fcdc960
--- /dev/null
+++ b/keyboards/kc60/keymaps/workman-dead/readme.md
@@ -0,0 +1,17 @@
+# Workman dead with spacefn (kc60 @ QMK)
+
+## Layout reference
+![workman dead with spacefn](./kc60-wm-dead.png)
+
+## Build
+
+To build this keymap, simply run `make KEYMAP=workman-dead`.
+
+## Notes
+
+* the default layout is `workman` (try it out, it's awesome!), but it can be changed to `qwerty` with the `rebel` key (the function layer won't change though)
+* `comma` acts as a dead key, that means tapping/holding it will activate the **oneshot** `dead key` layer (marked red in the reference)
+* hold `space` to access the `function` layer (marked blue in the reference)
+* hold `tab` to activate the mouse layer
+* the `function` layer contains mostly osx specific shortcuts
+* on the right side of the bottom row `alt` and `super` are switched compared to a standard layout
diff --git a/keyboards/kc60/keymaps/ws2812/config.h b/keyboards/kc60/keymaps/ws2812/config.h
index 2f39ea8e5..43abf6228 100644
--- a/keyboards/kc60/keymaps/ws2812/config.h
+++ b/keyboards/kc60/keymaps/ws2812/config.h
@@ -2,7 +2,7 @@
/* WS2812B RGB Underglow LED */
#define RGB_DI_PIN F5 // Based on wiring depicted in ws2812_wiring.jpg
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 16 // Number of LEDs. Change this to match your use case.
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
diff --git a/keyboards/kc60/keymaps/ws2812/keymap.c b/keyboards/kc60/keymaps/ws2812/keymap.c
index 1c0574df0..ae11ebf91 100644
--- a/keyboards/kc60/keymaps/ws2812/keymap.c
+++ b/keyboards/kc60/keymaps/ws2812/keymap.c
@@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NO, KC_ENT, \
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_NO, KC_RSFT, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT,KC_RGUI, MO(_FL), KC_RCTL),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_NO, KC_RALT,KC_RGUI, MO(_FL), KC_RCTL),
/* Keymap _FL: Function Layer
* ,-----------------------------------------------------------.
@@ -53,13 +53,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \
KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, RESET),
#else
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \
KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, RESET),
#endif
};
diff --git a/keyboards/kc60/led.c b/keyboards/kc60/led.c
new file mode 100644
index 000000000..50659d724
--- /dev/null
+++ b/keyboards/kc60/led.c
@@ -0,0 +1,31 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <avr/io.h>
+#include "stdint.h"
+#include "led.h"
+
+
+void led_set(uint8_t usb_led)
+{
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ // output low
+ DDRB |= (1<<2);
+ PORTB &= ~(1<<2);
+ } else {
+ // Hi-Z
+ DDRB &= ~(1<<2);
+ PORTB &= ~(1<<2);
+ }
+} \ No newline at end of file
diff --git a/keyboards/kc60/readme.md b/keyboards/kc60/readme.md
index acc0df68d..da84f6159 100644
--- a/keyboards/kc60/readme.md
+++ b/keyboards/kc60/readme.md
@@ -10,18 +10,27 @@ Download or clone the whole firmware and navigate to the keyboards/kc60 folder.
Depending on which keymap you would like to use, you will have to compile slightly differently.
### Default
-To build with the default keymap, simply run `make`.
+To build with the default keymap, simply run `make default`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create 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:
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
```
-$ make KEYMAP=[default|jack|<name>]
+$ make [default|jack|<name>]
```
+
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
## WS2812 Support
![Image of KC60 with RGB Underglow](keymaps/ws2812/ws2812_example.jpg)
-Build with WS2812 Support by running `make KEYMAP=ws2812`.
+Build with WS2812 Support by running `make ws2812`.
+
+## Warning
+For those who want to use 2x1U instead of classic backspace you need to use K0D and K49 like this:
+* K0D represents the key at the right of =.
+* K49 represents the last key of the row (is wired at the right of the space key on the PCB)
+
+In kc60.h I've put several definitions' examples of possible layouts proposed by online editor (http://123.57.250.164:9128/).
diff --git a/keyboards/kc60/rules.mk b/keyboards/kc60/rules.mk
new file mode 100644
index 000000000..a935ed19e
--- /dev/null
+++ b/keyboards/kc60/rules.mk
@@ -0,0 +1,71 @@
+# project specific files
+SRC = led.c
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= 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 ?= no # 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
diff --git a/keyboards/kinesis/Makefile b/keyboards/kinesis/Makefile
new file mode 100644
index 000000000..4e2a6f00f
--- /dev/null
+++ b/keyboards/kinesis/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/kinesis/config.h b/keyboards/kinesis/config.h
new file mode 100644
index 000000000..8f1fdbdb6
--- /dev/null
+++ b/keyboards/kinesis/config.h
@@ -0,0 +1,174 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER You
+#define PRODUCT kinesis-advantage
+#define DESCRIPTION A custom keyboard
+
+// Mouse
+#define MOUSEKEY_DELAY 20
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_MAX_SPEED 4
+#define MOUSEKEY_TIME_TO_MAX 20
+#define MOUSEKEY_WHEEL_MAX_SPEED 1
+#define MOUSEKEY_WHEEL_DELTA 1
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 1
+
+/* key matrix size */
+#define MATRIX_ROWS 16
+#define MATRIX_COLS 8
+
+/*
+ * 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)
+ *
+*/
+//Passed through the port multipler, so 4 pins =16
+#define MATRIX_ROW_PINS { F0,F1, F2, F3 }
+
+// May be upside down.
+#define MATRIX_COL_PINS { B0,B1, B2, B3, B4, B5, B6, B7 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* 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 */
+
+/* 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/keyboards/kinesis/docs/kicad/kinesis-cache.lib b/keyboards/kinesis/docs/kicad/kinesis-cache.lib
new file mode 100644
index 000000000..f798d39d6
--- /dev/null
+++ b/keyboards/kinesis/docs/kicad/kinesis-cache.lib
@@ -0,0 +1,232 @@
+EESchema-LIBRARY Version 2.3 Date: Wednesday, November 12, 2014 'pmt' 10:15:19 pm
+#encoding utf-8
+#
+# AT90S4414-P
+#
+DEF AT90S4414-P IC 0 40 Y Y 1 F N
+F0 "IC" -850 1880 40 H V L BNN
+F1 "AT90S4414-P" 450 -1950 40 H V L BNN
+F2 "DIL40" 0 0 30 H V C CIN
+F3 "~" 0 0 60 H V C CNN
+ALIAS AT90S8515-P
+$FPLIST
+ 40DIP-ELL600
+ 40dip600
+$ENDFPLIST
+DRAW
+S -850 1850 850 -1850 0 1 10 f
+X (T0)PB0 1 1000 700 150 L 40 40 1 1 B
+X (T1)PB1 2 1000 600 150 L 40 40 1 1 B
+X (AIN0)PB2 3 1000 500 150 L 40 40 1 1 B
+X (AIN1)PB3 4 1000 400 150 L 40 40 1 1 B
+X (~SS~)PB4 5 1000 300 150 L 40 40 1 1 B
+X (MOSI)PB5 6 1000 200 150 L 40 40 1 1 B
+X (MISO)PB6 7 1000 100 150 L 40 40 1 1 B
+X (SCK)PB7 8 1000 0 150 L 40 40 1 1 B
+X ~RESET 9 -1000 1700 150 R 40 40 1 1 I
+X (RXD)PD0 10 1000 -1000 150 L 40 40 1 1 B
+X GND 20 0 -2000 150 U 40 40 1 1 W
+X ALE 30 1000 850 150 L 40 40 1 1 O
+X VCC 40 0 2000 150 D 40 40 1 1 W
+X (TXD)PD1 11 1000 -1100 150 L 40 40 1 1 B
+X (A8)PC0 21 1000 -150 150 L 40 40 1 1 B
+X ICP 31 -1000 -1400 150 R 40 40 1 1 I
+X (INT0)PD2 12 1000 -1200 150 L 40 40 1 1 B
+X (A9)PC1 22 1000 -250 150 L 40 40 1 1 B
+X (AD7)PA7 32 1000 1000 150 L 40 40 1 1 B
+X (INT1)PD3 13 1000 -1300 150 L 40 40 1 1 B
+X (A10)PC2 23 1000 -350 150 L 40 40 1 1 B
+X (AD6)PA6 33 1000 1100 150 L 40 40 1 1 B
+X PD4 14 1000 -1400 150 L 40 40 1 1 B
+X (A11)PC3 24 1000 -450 150 L 40 40 1 1 B
+X (AD5)PA5 34 1000 1200 150 L 40 40 1 1 B
+X (OC1A)PD5 15 1000 -1500 150 L 40 40 1 1 B
+X (A12)PC4 25 1000 -550 150 L 40 40 1 1 B
+X (AD4)PA4 35 1000 1300 150 L 40 40 1 1 B
+X (~WR~)PD6 16 1000 -1600 150 L 40 40 1 1 B
+X (A13)PC5 26 1000 -650 150 L 40 40 1 1 B
+X (AD3)PA3 36 1000 1400 150 L 40 40 1 1 B
+X (~RD~)PD7 17 1000 -1700 150 L 40 40 1 1 B
+X (A14)PC6 27 1000 -750 150 L 40 40 1 1 B
+X (AD2)PA2 37 1000 1500 150 L 40 40 1 1 B
+X XTAL2 18 -1000 1200 150 R 40 40 1 1 B
+X (A15)PC7 28 1000 -850 150 L 40 40 1 1 B
+X (AD1)PA1 38 1000 1600 150 L 40 40 1 1 B
+X XTAL1 19 -1000 800 150 R 40 40 1 1 B
+X OC1B 29 -1000 -1500 150 R 40 40 1 1 W
+X (AD0)PA0 39 1000 1700 150 L 40 40 1 1 B
+ENDDRAW
+ENDDEF
+#
+# ATMEGA16U4-A
+#
+DEF ATMEGA16U4-A U 0 40 Y Y 1 F N
+F0 "U" -950 1700 40 H V C CNN
+F1 "ATMEGA16U4-A" 700 -1500 40 H V C CNN
+F2 "TQFP44" 0 0 35 H V C CIN
+F3 "~" 1100 1100 60 H V C CNN
+ALIAS ATMEGA16U4RC-A ATMEGA32U4-A ATMEGA32U4RC-A
+$FPLIST
+ TQFP44
+$ENDFPLIST
+DRAW
+S -1000 1650 950 -1450 0 1 10 f
+X (INT6/AIN0)PE6 1 1100 -650 150 L 40 40 1 1 B
+X UVCC 2 -450 1800 150 D 40 40 1 1 W
+X D- 3 -1150 100 150 R 40 40 1 1 B
+X D+ 4 -1150 200 150 R 40 40 1 1 B
+X UGND 5 -400 -1600 150 U 40 40 1 1 P
+X UCAP 6 -1150 -50 150 R 40 40 1 1 P
+X VBUS 7 -1150 350 150 R 40 40 1 1 P
+X (SS/PCINT0)PB0 8 1100 1550 150 L 40 40 1 1 B
+X (SCLK/PCINT1)PB1 9 1100 1450 150 L 40 40 1 1 B
+X (PDI/MOSI/PCINT2)PB2 10 1100 1350 150 L 40 40 1 1 B
+X (RXD/INT2)PD2 20 1100 150 150 L 40 40 1 1 B
+X (ADC13/OC1B/OC4B/PCINT13)PB6 30 1100 950 150 L 40 40 1 1 B
+X (ADC1)PF1 40 1100 -950 150 L 40 40 1 1 B
+X (PDO/MISO/PCINT3)PB3 11 1100 1250 150 L 40 40 1 1 B
+X (TXD/INT3)PD3 21 1100 50 150 L 40 40 1 1 B
+X (OC3A/~OC4A~)PC6 31 1100 650 150 L 40 40 1 1 B
+X (ADC0)PF0 41 1100 -850 150 L 40 40 1 1 B
+X (OC0A/OC1C/~RTS~/PCINT7)PB7 12 1100 850 150 L 40 40 1 1 B
+X (XCK1/~CTS~)PD5 22 1100 -150 150 L 40 40 1 1 B
+X (ICP3/CLK0/OC4A)PC7 32 1100 550 150 L 40 40 1 1 B
+X AREF 42 -1150 -850 150 R 40 40 1 1 P
+X ~RESET~ 13 -1150 1550 150 R 40 40 1 1 I
+X GND 23 -50 -1600 150 U 40 40 1 1 W
+X (~HWB~)PE2 33 1100 -550 150 L 40 40 1 1 B
+X GND 43 150 -1600 150 U 40 40 1 1 W
+X VCC 14 -200 1800 150 D 40 40 1 1 W
+X AVCC 24 150 1800 150 D 40 40 1 1 W
+X VCC 34 -100 1800 150 D 40 40 1 1 W
+X AVCC 44 250 1800 150 D 40 40 1 1 W
+X GND 15 -150 -1600 150 U 40 40 1 1 W
+X (ICP2/ADC8)PD4 25 1100 -50 150 L 40 40 1 1 B
+X GND 35 50 -1600 150 U 40 40 1 1 W
+X XTAL2 16 -1150 950 150 R 40 40 1 1 O
+X (T1/~OC4D~/ADC9)PD6 26 1100 -250 150 L 40 40 1 1 B
+X (ADC7/TDI)PF7 36 1100 -1350 150 L 40 40 1 1 B
+X XTAL1 17 -1150 1150 150 R 40 40 1 1 I
+X (T0/OC4D/ADC10)PD7 27 1100 -350 150 L 40 40 1 1 B
+X (ADC6/TDO)PF6 37 1100 -1250 150 L 40 40 1 1 B
+X (OC0B/SCL/INT0)PD0 18 1100 350 150 L 40 40 1 1 B
+X (ADC11/PCINT4)PB4 28 1100 1150 150 L 40 40 1 1 B
+X (ADC5/TMS)PF5 38 1100 -1150 150 L 40 40 1 1 B
+X (SDA/INT1)PD1 19 1100 250 150 L 40 40 1 1 B
+X (ADC12/OC1A/~OC4B~/PCINT12)PB5 29 1100 1050 150 L 40 40 1 1 B
+X (ADC4/TCK)PF4 39 1100 -1050 150 L 40 40 1 1 B
+ENDDRAW
+ENDDEF
+#
+# C
+#
+DEF C C 0 10 N Y 1 F N
+F0 "C" 0 100 40 H V L CNN
+F1 "C" 6 -85 40 H V L CNN
+F2 "~" 38 -150 30 H V C CNN
+F3 "~" 0 0 60 H V C CNN
+$FPLIST
+ SM*
+ C?
+ C1-1
+$ENDFPLIST
+DRAW
+P 2 0 1 20 -80 -30 80 -30 N
+P 2 0 1 20 -80 30 80 30 N
+X ~ 1 0 200 170 D 40 40 1 1 P
+X ~ 2 0 -200 170 U 40 40 1 1 P
+ENDDRAW
+ENDDEF
+#
+# CONN_7
+#
+DEF CONN_7 P 0 40 Y N 1 F N
+F0 "P" -30 0 60 V V C CNN
+F1 "CONN_7" 70 0 60 V V C CNN
+F2 "~" 0 0 60 H V C CNN
+F3 "~" 0 0 60 H V C CNN
+DRAW
+S -100 350 150 -350 0 1 0 N
+X P1 1 -350 300 250 R 50 50 1 1 P I
+X P2 2 -350 200 250 R 50 50 1 1 P I
+X P3 3 -350 100 250 R 50 50 1 1 P I
+X P4 4 -350 0 250 R 50 50 1 1 P I
+X P5 5 -350 -100 250 R 50 50 1 1 P I
+X P6 6 -350 -200 250 R 50 50 1 1 P I
+X P7 7 -350 -300 250 R 50 50 1 1 P I
+ENDDRAW
+ENDDEF
+#
+# GND
+#
+DEF ~GND #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 0 30 H I C CNN
+F1 "GND" 0 -70 30 H I C CNN
+F2 "~" 0 0 60 H V C CNN
+F3 "~" 0 0 60 H V C CNN
+DRAW
+P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N
+X GND 1 0 0 0 U 30 30 1 1 W N
+ENDDRAW
+ENDDEF
+#
+# R
+#
+DEF R R 0 0 N Y 1 F N
+F0 "R" 80 0 40 V V C CNN
+F1 "R" 7 1 40 V V C CNN
+F2 "~" -70 0 30 V V C CNN
+F3 "~" 0 0 30 H V C CNN
+$FPLIST
+ R?
+ SM0603
+ SM0805
+ R?-*
+ SM1206
+$ENDFPLIST
+DRAW
+S -40 150 40 -150 0 1 12 N
+X ~ 1 0 250 100 D 60 60 1 1 P
+X ~ 2 0 -250 100 U 60 60 1 1 P
+ENDDRAW
+ENDDEF
+#
+# USB-MINI-B
+#
+DEF USB-MINI-B CON 0 40 Y Y 1 F N
+F0 "CON" -250 450 60 H V C CNN
+F1 "USB-MINI-B" -50 -500 60 H V C CNN
+F2 "~" 0 0 60 H V C CNN
+F3 "~" 0 0 60 H V C CNN
+$FPLIST
+ USB-Mini-B-Jack
+$ENDFPLIST
+DRAW
+S -350 400 350 -400 0 1 0 N
+X VBUS 1 -550 300 200 R 50 50 1 1 W
+X D- 2 -550 150 200 R 50 50 1 1 B
+X D+ 3 -550 0 200 R 50 50 1 1 B
+X ID 4 -550 -150 200 R 50 50 1 1 B
+X GND 5 -550 -300 200 R 50 50 1 1 W
+X SHELL1 6 550 300 200 L 50 50 1 1 B
+X SHELL2 7 550 150 200 L 50 50 1 1 B
+X SHELL3 8 550 -150 200 L 50 50 1 1 B
+X SHELL4 9 550 -300 200 L 50 50 1 1 B
+ENDDRAW
+ENDDEF
+#
+# VCC
+#
+DEF VCC #PWR 0 0 Y Y 1 F P
+F0 "#PWR" 0 100 30 H I C CNN
+F1 "VCC" 0 100 30 H V C CNN
+F2 "~" 0 0 60 H V C CNN
+F3 "~" 0 0 60 H V C CNN
+DRAW
+X VCC 1 0 0 0 U 20 20 0 0 W N
+C 0 50 20 0 1 0 N
+P 3 0 1 0 0 0 0 30 0 30 N
+ENDDRAW
+ENDDEF
+#
+#End Library
diff --git a/keyboards/kinesis/docs/kicad/kinesis.pro b/keyboards/kinesis/docs/kicad/kinesis.pro
new file mode 100644
index 000000000..9f130b509
--- /dev/null
+++ b/keyboards/kinesis/docs/kicad/kinesis.pro
@@ -0,0 +1,83 @@
+update=Wednesday, November 05, 2014 'pmt' 12:08:47 pm
+version=1
+last_client=pcbnew
+[cvpcb]
+version=1
+NetIExt=net
+[cvpcb/libraries]
+EquName1=devcms
+[general]
+version=1
+[eeschema]
+version=1
+PageLayoutDescrFile=
+SubpartIdSeparator=0
+SubpartFirstId=65
+LibDir=../../../lib/kicad/library
+NetFmtName=
+RptD_X=0
+RptD_Y=100
+RptLab=1
+LabSize=60
+[eeschema/libraries]
+LibName1=power
+LibName2=device
+LibName3=transistors
+LibName4=conn
+LibName5=linear
+LibName6=regul
+LibName7=74xx
+LibName8=cmos4000
+LibName9=adc-dac
+LibName10=memory
+LibName11=xilinx
+LibName12=special
+LibName13=microcontrollers
+LibName14=dsp
+LibName15=microchip
+LibName16=analog_switches
+LibName17=motorola
+LibName18=texas
+LibName19=intel
+LibName20=audio
+LibName21=interface
+LibName22=digital-audio
+LibName23=philips
+LibName24=display
+LibName25=cypress
+LibName26=siliconi
+LibName27=opto
+LibName28=atmel
+LibName29=contrib
+LibName30=valves
+LibName31=custom
+[pcbnew]
+version=1
+LastNetListRead=
+UseCmpFile=1
+PadDrill=1.016000000000
+PadDrillOvalY=1.016000000000
+PadSizeH=1.524000000000
+PadSizeV=1.524000000000
+PcbTextSizeV=1.500000000000
+PcbTextSizeH=1.500000000000
+PcbTextThickness=0.300000000000
+ModuleTextSizeV=1.000000000000
+ModuleTextSizeH=1.000000000000
+ModuleTextSizeThickness=0.150000000000
+SolderMaskClearance=0.000000000000
+SolderMaskMinWidth=0.000000000000
+DrawSegmentWidth=0.200000000000
+BoardOutlineThickness=0.100000000000
+ModuleOutlineThickness=0.150000000000
+[pcbnew/libraries]
+LibDir=../../../lib/kicad/modules
+LibName1=custom
+LibName2=Sockets
+LibName3=Connect
+LibName4=Discret
+LibName5=Divers
+LibName6=Display
+LibName7=LEDs
+LibName8=SMD_Packages
+LibName9=Sockets_DIP
diff --git a/keyboards/kinesis/docs/kicad/kinesis.sch b/keyboards/kinesis/docs/kicad/kinesis.sch
new file mode 100644
index 000000000..f75335aa0
--- /dev/null
+++ b/keyboards/kinesis/docs/kicad/kinesis.sch
@@ -0,0 +1,634 @@
+EESchema Schematic File Version 2
+LIBS:power
+LIBS:device
+LIBS:transistors
+LIBS:conn
+LIBS:linear
+LIBS:regul
+LIBS:74xx
+LIBS:cmos4000
+LIBS:adc-dac
+LIBS:memory
+LIBS:xilinx
+LIBS:special
+LIBS:microcontrollers
+LIBS:dsp
+LIBS:microchip
+LIBS:analog_switches
+LIBS:motorola
+LIBS:texas
+LIBS:intel
+LIBS:audio
+LIBS:interface
+LIBS:digital-audio
+LIBS:philips
+LIBS:display
+LIBS:cypress
+LIBS:siliconi
+LIBS:opto
+LIBS:atmel
+LIBS:contrib
+LIBS:valves
+LIBS:custom
+LIBS:kinesis-cache
+EELAYER 27 0
+EELAYER END
+$Descr A4 11693 8268
+encoding utf-8
+Sheet 1 1
+Title ""
+Date "13 nov 2014"
+Rev ""
+Comp ""
+Comment1 ""
+Comment2 ""
+Comment3 ""
+Comment4 ""
+$EndDescr
+$Comp
+L C C4
+U 1 1 545804FB
+P 2850 4250
+F 0 "C4" H 2850 4350 40 0000 L CNN
+F 1 "1uF" H 2856 4165 40 0000 L CNN
+F 2 "~" H 2888 4100 30 0000 C CNN
+F 3 "~" H 2850 4250 60 0000 C CNN
+ 1 2850 4250
+ -1 0 0 1
+$EndComp
+$Comp
+L R R3
+U 1 1 545805E8
+P 2500 4000
+F 0 "R3" V 2580 4000 40 0000 C CNN
+F 1 "22" V 2507 4001 40 0000 C CNN
+F 2 "~" V 2430 4000 30 0000 C CNN
+F 3 "~" H 2500 4000 30 0000 C CNN
+ 1 2500 4000
+ 0 -1 -1 0
+$EndComp
+$Comp
+L R R2
+U 1 1 545805FA
+P 2500 3800
+F 0 "R2" V 2580 3800 40 0000 C CNN
+F 1 "22" V 2507 3801 40 0000 C CNN
+F 2 "~" V 2430 3800 30 0000 C CNN
+F 3 "~" H 2500 3800 30 0000 C CNN
+ 1 2500 3800
+ 0 -1 -1 0
+$EndComp
+Entry Wire Line
+ 6450 2450 6550 2550
+Entry Wire Line
+ 6450 2550 6550 2650
+Entry Wire Line
+ 6450 2650 6550 2750
+Entry Wire Line
+ 6450 2750 6550 2850
+Entry Wire Line
+ 6450 2950 6550 3050
+Entry Wire Line
+ 6450 3050 6550 3150
+Entry Wire Line
+ 6450 2850 6550 2950
+Entry Wire Line
+ 6450 3150 6550 3250
+Wire Wire Line
+ 10250 1800 10750 1800
+Entry Wire Line
+ 10750 1800 10850 1900
+Entry Wire Line
+ 10750 1900 10850 2000
+Entry Wire Line
+ 10750 2000 10850 2100
+Entry Wire Line
+ 10750 2800 10850 2900
+Entry Wire Line
+ 10750 2900 10850 3000
+Entry Wire Line
+ 10750 3000 10850 3100
+Entry Wire Line
+ 10750 3100 10850 3200
+Entry Wire Line
+ 10750 3200 10850 3300
+Entry Wire Line
+ 10750 3300 10850 3400
+$Comp
+L AT90S8515-P IC2
+U 1 1 545A62EA
+P 9250 3500
+F 0 "IC2" H 8400 5380 40 0000 L BNN
+F 1 "AT90S8515-P" H 9700 1550 40 0000 L BNN
+F 2 "DIL40" H 9250 3500 30 0000 C CIN
+F 3 "" H 9250 3500 60 0000 C CNN
+ 1 9250 3500
+ 1 0 0 -1
+$EndComp
+NoConn ~ 10250 2650
+Entry Wire Line
+ 10750 3650 10850 3750
+Entry Wire Line
+ 10750 3750 10850 3850
+Entry Wire Line
+ 10750 3850 10850 3950
+Entry Wire Line
+ 10750 3950 10850 4050
+Entry Wire Line
+ 10750 4050 10850 4150
+Entry Wire Line
+ 10750 4150 10850 4250
+Entry Wire Line
+ 10750 4350 10850 4450
+Entry Wire Line
+ 10750 4250 10850 4350
+NoConn ~ 8250 4900
+NoConn ~ 8250 5000
+NoConn ~ 8250 1800
+Wire Wire Line
+ 10250 1900 10750 1900
+Wire Wire Line
+ 10250 2000 10750 2000
+Wire Wire Line
+ 10250 2100 10750 2100
+Wire Wire Line
+ 10250 2200 10750 2200
+Wire Wire Line
+ 10250 2300 10750 2300
+Wire Wire Line
+ 10250 2400 10750 2400
+Wire Wire Line
+ 10250 2500 10750 2500
+Text Label 10350 1800 0 60 ~ 0
+A
+Text Label 10350 1900 0 60 ~ 0
+B
+Text Label 10350 2000 0 60 ~ 0
+C
+Text Label 10350 2100 0 60 ~ 0
+G
+Wire Wire Line
+ 10250 2800 10750 2800
+Wire Wire Line
+ 10250 2900 10750 2900
+Wire Wire Line
+ 10250 3000 10750 3000
+Wire Wire Line
+ 10250 3100 10750 3100
+Wire Wire Line
+ 10250 3200 10750 3200
+Wire Wire Line
+ 10250 3300 10750 3300
+Wire Wire Line
+ 10250 3400 10750 3400
+Wire Wire Line
+ 10250 3500 10750 3500
+Text Label 10350 2800 0 60 ~ 0
+DL2
+Text Label 10350 2900 0 60 ~ 0
+DR1
+Text Label 10350 3000 0 60 ~ 0
+DR2
+Text Label 10350 3100 0 60 ~ 0
+DL1
+Text Label 10350 3400 0 60 ~ 0
+SCL
+Text Label 10350 3500 0 60 ~ 0
+SDA
+Wire Wire Line
+ 10250 3650 10750 3650
+Wire Wire Line
+ 10250 3750 10750 3750
+Wire Wire Line
+ 10250 3850 10750 3850
+Wire Wire Line
+ 10250 3950 10750 3950
+Wire Wire Line
+ 10250 4050 10750 4050
+Wire Wire Line
+ 10250 4150 10750 4150
+Wire Wire Line
+ 10250 4250 10750 4250
+Wire Wire Line
+ 10250 4350 10750 4350
+Text Label 10350 3650 0 60 ~ 0
+R1
+Text Label 10350 3750 0 60 ~ 0
+R2
+Text Label 10350 3850 0 60 ~ 0
+R3
+Text Label 10350 3950 0 60 ~ 0
+R4
+Text Label 10350 4050 0 60 ~ 0
+R5
+Text Label 10350 4150 0 60 ~ 0
+R6
+Text Label 10350 4250 0 60 ~ 0
+R7
+Text Label 10350 4350 0 60 ~ 0
+R8
+Wire Wire Line
+ 10250 4500 10750 4500
+Wire Wire Line
+ 10250 4600 10750 4600
+Wire Wire Line
+ 10250 4700 10750 4700
+Wire Wire Line
+ 10250 4800 10750 4800
+Wire Wire Line
+ 10250 4900 10750 4900
+Wire Wire Line
+ 10250 5000 10750 5000
+Wire Wire Line
+ 10250 5100 10750 5100
+Wire Wire Line
+ 10250 5200 10750 5200
+Text Label 10350 4600 0 60 ~ 0
+FS1
+Text Label 10350 5000 0 60 ~ 0
+FS3
+Text Label 10350 5200 0 60 ~ 0
+FS2
+$Comp
+L GND #PWR01
+U 1 1 545A7377
+P 9250 5600
+F 0 "#PWR01" H 9250 5600 30 0001 C CNN
+F 1 "GND" H 9250 5530 30 0001 C CNN
+F 2 "" H 9250 5600 60 0000 C CNN
+F 3 "" H 9250 5600 60 0000 C CNN
+ 1 9250 5600
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 9250 5500 9250 5600
+Text Label 10350 4700 0 60 ~ 0
+CLOCK
+Text Label 10350 4800 0 60 ~ 0
+DATA
+NoConn ~ 10750 4700
+NoConn ~ 10750 4800
+Text Label 10350 3200 0 60 ~ 0
+KP
+Text Label 10350 3300 0 60 ~ 0
+PGM
+Text Label 10350 2500 0 60 ~ 0
+BUZZ
+NoConn ~ 8250 2300
+NoConn ~ 8250 2700
+$Comp
+L GND #PWR02
+U 1 1 545A7565
+P 4750 5700
+F 0 "#PWR02" H 4750 5700 30 0001 C CNN
+F 1 "GND" H 4750 5630 30 0001 C CNN
+F 2 "" H 4750 5700 60 0000 C CNN
+F 3 "" H 4750 5700 60 0000 C CNN
+ 1 4750 5700
+ 1 0 0 -1
+$EndComp
+Entry Wire Line
+ 6450 3650 6550 3750
+Entry Wire Line
+ 6450 3750 6550 3850
+Entry Wire Line
+ 6450 4150 6550 4250
+Entry Wire Line
+ 6450 4250 6550 4350
+Entry Wire Line
+ 6450 4050 6550 4150
+Entry Wire Line
+ 6450 4350 6550 4450
+NoConn ~ 3750 2850
+Wire Wire Line
+ 1200 2000 6450 2000
+NoConn ~ 3750 3050
+Wire Wire Line
+ 2750 3800 3750 3800
+Wire Wire Line
+ 2750 3900 3750 3900
+Wire Wire Line
+ 2750 3900 2750 4000
+Wire Bus Line
+ 6550 2100 6550 6050
+Wire Bus Line
+ 10850 1600 10850 6050
+Text Label 6050 4350 0 60 ~ 0
+DL1
+Text Label 6050 4250 0 60 ~ 0
+DR2
+Text Label 6050 4150 0 60 ~ 0
+DR1
+Text Label 6050 4050 0 60 ~ 0
+DL2
+Text Label 6050 2450 0 60 ~ 0
+R1
+Text Label 6050 2550 0 60 ~ 0
+R2
+Text Label 6050 2650 0 60 ~ 0
+R3
+Text Label 6050 2750 0 60 ~ 0
+R4
+Text Label 6050 2850 0 60 ~ 0
+R5
+Text Label 6050 2950 0 60 ~ 0
+R6
+Text Label 6050 3050 0 60 ~ 0
+R7
+Text Label 6050 3150 0 60 ~ 0
+R8
+Text Label 6050 5050 0 60 ~ 0
+A
+Text Label 6050 5150 0 60 ~ 0
+B
+Text Label 6050 5250 0 60 ~ 0
+C
+Text Label 6050 5350 0 60 ~ 0
+G
+Text Label 1300 3800 0 60 ~ 0
+D+
+Text Label 1300 4000 0 60 ~ 0
+D-
+NoConn ~ 10750 2200
+NoConn ~ 10750 2300
+NoConn ~ 10750 2400
+Text Label 10350 4500 0 60 ~ 0
+GND
+NoConn ~ 10750 4900
+NoConn ~ 10750 5100
+Text Label 6050 3450 0 60 ~ 0
+KP
+Text Label 6050 3350 0 60 ~ 0
+PGM
+$Comp
+L ATMEGA32U4-A U1
+U 1 1 5462E0B1
+P 4900 4000
+F 0 "U1" H 3950 5700 40 0000 C CNN
+F 1 "ATMEGA32U4-A" H 5600 2500 40 0000 C CNN
+F 2 "TQFP44" H 4900 4000 35 0000 C CIN
+F 3 "" H 6000 5100 60 0000 C CNN
+ 1 4900 4000
+ 1 0 0 -1
+$EndComp
+Wire Wire Line
+ 3750 4850 3750 5600
+Wire Wire Line
+ 4450 2200 5150 2200
+Connection ~ 4700 2200
+Connection ~ 4800 2200
+Connection ~ 5050 2200
+Connection ~ 4800 2000
+Wire Wire Line
+ 6000 2450 6450 2450
+Wire Wire Line
+ 6000 2550 6450 2550
+Wire Wire Line
+ 6000 2650 6450 2650
+Wire Wire Line
+ 6000 2750 6450 2750
+Wire Wire Line
+ 6000 2850 6450 2850
+Wire Wire Line
+ 6000 2950 6450 2950
+Wire Wire Line
+ 6000 3050 6450 3050
+Wire Wire Line
+ 6000 3150 6450 3150
+Wire Wire Line
+ 6000 5050 6450 5050
+Wire Wire Line
+ 6000 5150 6450 5150
+Wire Wire Line
+ 6000 5250 6450 5250
+Wire Wire Line
+ 6000 4050 6450 4050
+Wire Wire Line
+ 6000 4150 6450 4150
+Wire Wire Line
+ 6000 4250 6450 4250
+Wire Wire Line
+ 6000 4350 6450 4350
+Wire Wire Line
+ 6000 4550 6450 4550
+Entry Wire Line
+ 6450 3350 6550 3450
+Entry Wire Line
+ 6450 3450 6550 3550
+Entry Wire Line
+ 6450 5050 6550 5150
+Entry Wire Line
+ 6450 5150 6550 5250
+Entry Wire Line
+ 6450 5250 6550 5350
+Entry Wire Line
+ 6450 5350 6550 5450
+Entry Wire Line
+ 6450 4650 6550 4750
+Wire Wire Line
+ 6000 3350 6450 3350
+Wire Wire Line
+ 6000 3450 6450 3450
+Wire Wire Line
+ 1200 5600 6450 5600
+Connection ~ 4950 5600
+Connection ~ 4850 5600
+Wire Wire Line
+ 4750 5600 4750 5700
+Connection ~ 4750 5600
+Connection ~ 4500 5600
+Text Label 6050 4550 0 60 ~ 0
+HWB
+Wire Wire Line
+ 6000 5350 6450 5350
+Wire Wire Line
+ 6000 3650 6450 3650
+Wire Wire Line
+ 6000 3750 6450 3750
+Text Label 6050 3650 0 60 ~ 0
+SCL
+Text Label 6050 3750 0 60 ~ 0
+SDA
+Wire Wire Line
+ 6000 3850 6450 3850
+Wire Wire Line
+ 6000 3950 6450 3950
+Wire Wire Line
+ 6000 4650 6450 4650
+Text Label 6050 4650 0 60 ~ 0
+BUZZ
+NoConn ~ 10750 4600
+NoConn ~ 10750 5000
+NoConn ~ 10750 5200
+Entry Wire Line
+ 10750 3400 10850 3500
+Entry Wire Line
+ 10750 3500 10850 3600
+Entry Wire Line
+ 10750 4500 10850 4600
+Wire Wire Line
+ 2850 4050 3750 4050
+Text Label 2950 4050 0 60 ~ 0
+UCAP
+Wire Wire Line
+ 6000 4850 6450 4850
+Wire Wire Line
+ 6000 4950 6450 4950
+NoConn ~ 6450 4850
+NoConn ~ 6450 4950
+NoConn ~ 6450 4550
+$Comp
+L USB-MINI-B CON1
+U 1 1 546431C1
+P 2100 5050
+F 0 "CON1" H 1850 5500 60 0000 C CNN
+F 1 "USB-MINI-B" H 2050 4550 60 0000 C CNN
+F 2 "" H 2100 5050 60 0000 C CNN
+F 3 "" H 2100 5050 60 0000 C CNN
+ 1 2100 5050
+ 0 1 1 0
+$EndComp
+$Comp
+L VCC #PWR03
+U 1 1 54643698
+P 2400 4400
+F 0 "#PWR03" H 2400 4500 30 0001 C CNN
+F 1 "VCC" H 2400 4500 30 0000 C CNN
+F 2 "" H 2400 4400 60 0000 C CNN
+F 3 "" H 2400 4400 60 0000 C CNN
+ 1 2400 4400
+ 1 0 0 -1
+$EndComp
+Text Notes 2600 2750 0 60 ~ 0
+Teensy 2.0\n(not fully drawn)
+$Comp
+L CONN_7 B7K-PH-K-S1
+U 1 1 54643939
+P 1950 6900
+F 0 "B7K-PH-K-S1" V 1920 6900 60 0000 C CNN
+F 1 "CONN_7" V 2020 6900 60 0000 C CNN
+F 2 "" H 1950 6900 60 0000 C CNN
+F 3 "" H 1950 6900 60 0000 C CNN
+ 1 1950 6900
+ 1 0 0 -1
+$EndComp
+Connection ~ 3750 5600
+Connection ~ 2400 5600
+Connection ~ 2250 5600
+Connection ~ 1950 5600
+Wire Wire Line
+ 2400 4400 2400 4500
+Wire Wire Line
+ 2250 4000 2250 4500
+Wire Wire Line
+ 1200 3800 2250 3800
+Wire Wire Line
+ 2100 3800 2100 4500
+Wire Wire Line
+ 2850 4450 2850 5600
+Connection ~ 2850 5600
+Entry Wire Line
+ 1100 6800 1200 6900
+Entry Wire Line
+ 1100 6900 1200 7000
+Entry Wire Line
+ 1100 7000 1200 7100
+Entry Wire Line
+ 1100 6700 1200 6800
+Wire Wire Line
+ 1200 6600 1600 6600
+Wire Wire Line
+ 1200 6700 1600 6700
+Wire Wire Line
+ 1200 6800 1600 6800
+Wire Wire Line
+ 1200 6900 1600 6900
+Wire Wire Line
+ 1200 7000 1600 7000
+Wire Wire Line
+ 1200 7100 1600 7100
+Wire Wire Line
+ 1200 7200 1600 7200
+Text Label 1300 6600 0 60 ~ 0
+FS2
+Text Label 1300 6700 0 60 ~ 0
+FS1
+Text Label 1300 6800 0 60 ~ 0
+VCC
+Text Label 1300 6900 0 60 ~ 0
+D-
+Text Label 1300 7000 0 60 ~ 0
+D+
+Text Label 1300 7100 0 60 ~ 0
+GND
+Text Label 1300 7200 0 60 ~ 0
+FS3
+NoConn ~ 3750 2450
+Wire Wire Line
+ 3600 2000 3600 3650
+Wire Wire Line
+ 3600 3650 3750 3650
+NoConn ~ 1950 4500
+Wire Bus Line
+ 1100 1900 1100 7100
+NoConn ~ 1200 6600
+NoConn ~ 1200 6700
+NoConn ~ 1200 7200
+Connection ~ 2100 3800
+Wire Wire Line
+ 1200 4000 2250 4000
+Entry Wire Line
+ 1100 3700 1200 3800
+Entry Wire Line
+ 1100 3900 1200 4000
+Text Label 10350 1500 0 60 ~ 0
+VCC
+Entry Wire Line
+ 1100 1900 1200 2000
+Text Label 1250 2000 0 60 ~ 0
+VCC
+Entry Wire Line
+ 1100 5500 1200 5600
+Connection ~ 1800 5600
+Text Label 1300 5600 0 60 ~ 0
+GND
+Wire Wire Line
+ 9250 5500 10750 5500
+Entry Wire Line
+ 10750 5500 10850 5600
+Text Label 10350 5500 0 60 ~ 0
+GND
+Wire Wire Line
+ 9250 1500 10750 1500
+Entry Wire Line
+ 10750 1500 10850 1600
+Connection ~ 3600 2000
+Wire Wire Line
+ 4800 2000 4800 2200
+Entry Wire Line
+ 6450 2000 6550 2100
+Text Label 6050 2000 0 60 ~ 0
+VCC
+Connection ~ 5050 5600
+Entry Wire Line
+ 6450 5600 6550 5700
+Text Label 6050 5600 0 60 ~ 0
+GND
+NoConn ~ 6450 3850
+NoConn ~ 6450 3950
+Wire Wire Line
+ 1800 4500 1500 4500
+Wire Wire Line
+ 1500 4500 1500 5600
+Connection ~ 1500 5600
+Entry Wire Line
+ 10750 2500 10850 2600
+Entry Wire Line
+ 10750 2100 10850 2200
+Text Notes 1000 5300 1 60 ~ 0
+Sacrificial USB cable from header to Teensy
+Text Notes 7850 5950 0 60 ~ 0
+Ribbon cable between Teensy pins and socket
+Wire Bus Line
+ 10850 6050 6550 6050
+$EndSCHEMATC
diff --git a/keyboards/kinesis/docs/photos/P1050573.jpg b/keyboards/kinesis/docs/photos/P1050573.jpg
new file mode 100644
index 000000000..027ab9efb
--- /dev/null
+++ b/keyboards/kinesis/docs/photos/P1050573.jpg
Binary files differ
diff --git a/keyboards/kinesis/docs/photos/P1050574.jpg b/keyboards/kinesis/docs/photos/P1050574.jpg
new file mode 100644
index 000000000..d49c492b8
--- /dev/null
+++ b/keyboards/kinesis/docs/photos/P1050574.jpg
Binary files differ
diff --git a/keyboards/kinesis/docs/photos/P1050575.jpg b/keyboards/kinesis/docs/photos/P1050575.jpg
new file mode 100644
index 000000000..50cc9897c
--- /dev/null
+++ b/keyboards/kinesis/docs/photos/P1050575.jpg
Binary files differ
diff --git a/keyboards/kinesis/docs/readme.txt b/keyboards/kinesis/docs/readme.txt
new file mode 100644
index 000000000..af33ac490
--- /dev/null
+++ b/keyboards/kinesis/docs/readme.txt
@@ -0,0 +1,52 @@
+This directory of documentation was copied from https://github.com/wjanssens/tmk_keyboard/tree/master/keyboard/kinesis
+and is probably Copyright 2014 Warren Janssens <warren.janssens@gmail.com>
+and probably released under GPL v2, which may be recovered at <http://www.gnu.org/licenses/>.
+
+Row configuration
+PF0 A
+PF1 B
+PF2 C
+PF3 G 0 = U4, 1 = U5
+
+Column configuration
+ 4y0 4y1 4y2 4y3 4y4 4y5 4y6 4y7 5y0 5y1 5y2 5y3 5y4 5y5 5y6 5y7
+ r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16
+PB0 21 c1 f6 f8 f7 5 4 3 2 1 =+
+PB1 22 c2 f3 f5 f4 t r e w q TAB
+PB2 23 c3 ESC f2 f1 g f d s a CL
+PB3 24 c4 f9 f11 f10 b v c x z LS UP DN [{ ]}
+PB4 25 c5 f12 SL PS RT LT §± `~ 6 7 8 9 0 -_
+PB5 26 c6 PB PGM KPD y u i o p \
+PB6 27 c7 LC DL BS RC EN SP h j k l ;: '"
+PB7 28 c8 RA PU PD n m ,< .> /? RS
+ */
+
+
+40 pin connector
+
+ DL2 1 40 VCC
+ DR1 2 39 A
+ DR2 3 38 B
+ DL1 4 37 C
+ KPD 5 36 G
+ PGM 6 35
+ SCL 7 34
+ SDA 8 33
+ RST 9 32 BUZZ
+ WP 10 31 EA
+ FS1 11 30 ALE
+ CLOCK 12 29 PSEN
+ DATA 13 28 r8
+ 14 27 r7
+ FS3 15 26 r6
+ 16 25 r5
+ FS2 17 24 r4
+ XTAL1 18 23 r3
+ XTAL2 19 22 r2
+ GND 20 21 r1
+
+
+references:
+https://github.com/chrisandreae/keyboard-firmware
+
+
diff --git a/keyboards/kinesis/docs/schematic.png b/keyboards/kinesis/docs/schematic.png
new file mode 100644
index 000000000..fa9405a1f
--- /dev/null
+++ b/keyboards/kinesis/docs/schematic.png
Binary files differ
diff --git a/keyboards/kinesis/keymaps/default/Makefile b/keyboards/kinesis/keymaps/default/Makefile
new file mode 100644
index 000000000..9d3df5964
--- /dev/null
+++ b/keyboards/kinesis/keymaps/default/Makefile
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = 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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/kinesis/keymaps/default/config.h b/keyboards/kinesis/keymaps/default/config.h
new file mode 100644
index 000000000..8893d122e
--- /dev/null
+++ b/keyboards/kinesis/keymaps/default/config.h
@@ -0,0 +1,8 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+
+#endif
diff --git a/keyboards/kinesis/keymaps/default/keymap.c b/keyboards/kinesis/keymaps/default/keymap.c
new file mode 100644
index 000000000..3bf80699c
--- /dev/null
+++ b/keyboards/kinesis/keymaps/default/keymap.c
@@ -0,0 +1,116 @@
+#include "kinesis.h"
+#include "action_layer.h"
+
+#define QWERTY 0 // Base qerty
+#define SYMB 1// Symbol layer
+
+// An almost entirely blank keymap. Test layers with the upper right hand key - 1 in normal mode, reset in layer 2.
+
+
+/****************************************************************************************************
+*
+* Keymap: Default Layer in Qwerty
+*
+* ,-------------------------------------------------------------------------------------------------------------------.
+* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | PSCR | SLCK | PAUS | FN0 | BOOT |
+* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
+* | =+ | 1! | 2@ | 3# | 4$ | 5% | | 6^ | 7& | 8* | 9( | 0) | -_ |
+* |--------+------+------+------+------+------| +------+------+------+------+------+--------|
+* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \| |
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* | Caps | A | S | D | F | G | | H | J | K | L | ;: | '" |
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* | Shift | Z | X | C | V | B | | N | M | ,. | .> | /? | Shift |
+* `--------+------+------+------+------+------- `------+------+------+------+------+--------'
+* | `~ | INS | Left | Right| | Up | Down | [{ | ]} |
+* `---------------------------' `---------------------------'
+* ,-------------. ,-------------.
+* | Ctrl | Alt | | Gui | Ctrl |
+* ,------|------|------| |------+------+------.
+* | | | Home | | PgUp | | |
+* | BkSp | Del |------| |------|Return| Space|
+* | | | End | | PgDn | | |
+* `--------------------' `--------------------'
+*/
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[QWERTY] = KEYMAP(
+ KC_ESC, KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8,
+ KC_EQL, KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,
+ KC_TAB, KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,
+ KC_CAPS,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,
+ KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,
+ KC_GRV ,KC_INS ,KC_LEFT,KC_RGHT,
+ KC_LCTL,KC_LALT,
+ KC_HOME,
+ KC_BSPC,KC_DEL ,KC_END ,
+ KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_PSCR ,KC_SLCK ,KC_PAUS, KC_FN0, KC_1,
+ KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS,
+ KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_BSLS,
+ KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN,KC_QUOT,
+ KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_RSFT,
+ KC_UP ,KC_DOWN,KC_LBRC,KC_RBRC,
+ KC_RGUI,KC_RCTL,
+ KC_PGUP,
+ KC_PGDN,KC_ENTER ,KC_SPC
+ ),
+[SYMB] = KEYMAP(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_FN0, RESET,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_TAP_TOGGLE(SYMB) , // FN1 - Momentary Layer 1 (Symbols)
+
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/kinesis/keymaps/default/readme.md b/keyboards/kinesis/keymaps/default/readme.md
new file mode 100644
index 000000000..da033be1e
--- /dev/null
+++ b/keyboards/kinesis/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for kinesis-advantage
diff --git a/keyboards/kinesis/keymaps/programmer/Makefile b/keyboards/kinesis/keymaps/programmer/Makefile
new file mode 100644
index 000000000..9d3df5964
--- /dev/null
+++ b/keyboards/kinesis/keymaps/programmer/Makefile
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = 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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/kinesis/keymaps/programmer/config.h b/keyboards/kinesis/keymaps/programmer/config.h
new file mode 100644
index 000000000..8893d122e
--- /dev/null
+++ b/keyboards/kinesis/keymaps/programmer/config.h
@@ -0,0 +1,8 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+
+#endif
diff --git a/keyboards/kinesis/keymaps/programmer/keymap.c b/keyboards/kinesis/keymaps/programmer/keymap.c
new file mode 100644
index 000000000..83fb7bd5f
--- /dev/null
+++ b/keyboards/kinesis/keymaps/programmer/keymap.c
@@ -0,0 +1,245 @@
+#include "kinesis.h"
+#include "action_layer.h"
+#include "mousekey.h"
+
+#define QWERTY 0 // Base qerty
+#define SYMB 1// Symbol layer
+#define MOUSE 2//
+
+
+
+
+/* Macros */
+enum {
+ NONE = 0,
+ // Diagonal mouse movement
+ A_MUL,
+ A_MUR,
+ A_MDL,
+ A_MDR,
+};
+
+
+// Borrowing very heavily from
+// https://github.com/alvicstep/tmk_keyboard
+/****************************************************************************************************
+*
+* Keymap: Default Layer in Qwerty
+*
+* ,-------------------------------------------------------------------------------------------------------------------.
+* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | FN0 | FN1 | FN2 | | bOOT |
+* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
+* | =+ | 1! | 2@ | 3# | 4$ | 5% | | 6^ | 7& | 8* | 9( | 0) | -_ |
+* |--------+------+------+------+------+------| +------+------+------+------+------+--------|
+* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \| |
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* |MouseFN1| A | S | D | F | G | | H | J | K | L | ;: | '" |
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* | Shift | Z | X | C | V | B | | N | M | ,. | .> | /? | Shift |
+* `--------+------+------+------+------+------- `------+------+------+------+------+--------'
+* | `~ | ESC |MOUSE1|MOUSE2| | [{ | ]} | ESC | GUI |
+* `---------------------------' `---------------------------'
+* ,-------------. ,-------------.
+* | Ctrl | Alt | | Gui | Ctrl |
+* ,------|------|------| |------+------+------.
+* | | | Home | | PgUp | | |
+* | BkSp | Del |------| |------|Return| Space|
+* | | | End | | PgDn | | |
+* `--------------------' `--------------------'
+*/
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[QWERTY] = KEYMAP(
+ KC_ESC, KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8,
+ KC_EQL, KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,
+ KC_TAB, KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,
+ KC_FN1 ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,
+ KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,
+ KC_GRV ,KC_ESC, KC_BTN1,KC_BTN2,
+ KC_LCTL,KC_LALT,
+ KC_HOME,
+ KC_BSPC,KC_DEL ,KC_FN0 ,
+ KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_FN0 ,KC_FN1 ,KC_FN2, KC_NO, RESET,
+ KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS,
+ KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_BSLS,
+ KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN,KC_QUOT,
+ KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_RSFT,
+ KC_LBRC,KC_RBRC, KC_ESC, KC_RGUI,
+ KC_RGUI,KC_RCTL,
+ KC_PGUP,
+ KC_PGDN,KC_ENTER ,KC_SPC
+ ),
+[SYMB] = KEYMAP(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_FN0, KC_2,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+/* Keymap: Movement and function layer
+*
+* ,-------------------------------------------------------------------------------------------------------------------.
+* | Caps | F1 | F2 | F3 | F4 | F5 | F6 | F8 | F9 | F10 | F12 | FN0 | FN1 | FN2 | Tada | bOOT |
+* |--------+------+------+------+------+------+---------------------------+------+------+------+------+------+--------|
+* | =+ | ! | @ | # | $ | % | | ^ | & | * | ( | ) |MS Fast |
+* |--------+------+------+------+------+------| +------+------+------+------+------+--------|
+* | Tab | | | Up | |PgUp | | MwU |MS_UL | MS_U |MS_UR | | Ms Norm|
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* |MouseFN1| C^A | Left | Down |Right | C^E | | | MS_L |Mouse1| MS_R | |MS Slow |
+* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+* | | GuiZ | GUI X| GUI C| GUI_V|PgDown| | MWD | MDown|MS Dwn|MS_DR | ? | |
+* `--------+------+------+------+------+------- `------+------+------+------+------+--------'
+* | `~ | ESC | < | > | | { | } | ESC | |
+* `---------------------------' `---------------------------'
+* ,-------------. ,-------------.
+* | Ctrl | Alt | | Gui | Ctrl |
+* ,------|------|------| |------+------+------.
+* | | | Home | | PgUp | | |
+* | BkSp | Del |------| |------|Mouse1|Mouse2|
+* | | | End | | PgDn |LClick|Rclick|
+* `--------------------' `--------------------'
+*/
+
+
+[MOUSE] = KEYMAP(
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_EXLM ,KC_AT, KC_HASH, KC_DLR ,KC_PERC ,
+ KC_TRNS, KC_NO, KC_NO, KC_UP, KC_NO, KC_PGUP,
+ KC_FN1, LCTL(KC_A),KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_E),
+ KC_TRNS, LGUI(KC_Z),LGUI(KC_X),LGUI(KC_C),LGUI(KC_V),KC_PGDN,
+ KC_TRNS, KC_TRNS, KC_LABK, KC_RABK,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_FN0,RESET,
+ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_ACL2,
+ KC_WH_U, M(A_MUL), KC_MS_U, M(A_MUR), KC_NO, KC_ACL1,
+ KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_ACL0,
+ KC_WH_D, M(A_MDL), KC_MS_D, M(A_MDR), KC_TRNS, KC_TRNS,
+ KC_LCBR, KC_RCBR, KC_ESC, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_BTN1, KC_BTN2
+ ),
+
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_TAP_TOGGLE(MOUSE) , // FN1 - Momentary Layer 1 (Symbols)
+ [1] = ACTION_LAYER_TOGGLE(MOUSE) , // FN1 - Momentary Layer 1 (Symbols)
+ [2] = ACTION_LAYER_TAP_TOGGLE(SYMB) , // FN1 - Momentary Layer 1 (Symbols)
+
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+
+ // from algernon's ErgoDox EZ layout,
+ case A_MUL:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_UP);
+ mousekey_on(KC_MS_LEFT);
+ } else {
+ mousekey_off(KC_MS_UP);
+ mousekey_off(KC_MS_LEFT);
+ }
+ mousekey_send();
+ break;
+
+ case A_MUR:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_UP);
+ mousekey_on(KC_MS_RIGHT);
+ } else {
+ mousekey_off(KC_MS_UP);
+ mousekey_off(KC_MS_RIGHT);
+ }
+ mousekey_send();
+ break;
+
+ case A_MDL:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_DOWN);
+ mousekey_on(KC_MS_LEFT);
+ } else {
+ mousekey_off(KC_MS_DOWN);
+ mousekey_off(KC_MS_LEFT);
+ }
+ mousekey_send();
+ break;
+
+ case A_MDR:
+ if (record->event.pressed) {
+ mousekey_on(KC_MS_DOWN);
+ mousekey_on(KC_MS_RIGHT);
+ } else {
+ mousekey_off(KC_MS_DOWN);
+ mousekey_off(KC_MS_RIGHT);
+ }
+ mousekey_send();
+ break;
+ }
+ return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+
+
+}
+
+void matrix_scan_user(void) {
+ int8_t layer = biton32(layer_state);
+
+ switch (layer) {
+ case 1:
+ all_led_off();
+ break;
+ case 2:
+ if (!(host_keyboard_leds() & (1 << USB_LED_CAPS_LOCK))) {
+ all_led_off();
+ caps_lock_led_on();
+ }
+ break;
+ case 0:
+ all_led_off();
+ num_lock_led_on();
+ break;
+ default:
+ break;
+ }
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/kinesis/keymaps/programmer/readme.md b/keyboards/kinesis/keymaps/programmer/readme.md
new file mode 100644
index 000000000..76356a687
--- /dev/null
+++ b/keyboards/kinesis/keymaps/programmer/readme.md
@@ -0,0 +1,2 @@
+# a programmer friendly keymap for the kinesis-advantage
+# not really baked yet.
diff --git a/keyboards/kinesis/kinesis.c b/keyboards/kinesis/kinesis.c
new file mode 100644
index 000000000..1fee90e6f
--- /dev/null
+++ b/keyboards/kinesis/kinesis.c
@@ -0,0 +1,106 @@
+#include "kinesis.h"
+
+// begin section origin https://github.com/alvicstep/tmk_keyboard
+
+
+void all_led_off(void)
+{
+ PORTD = 0b11111111;
+}
+
+void all_led_on(void)
+{
+ PORTD = 0b00000000;
+}
+void num_lock_led_on(void)
+{
+ PORTD = 0b11101111;
+}
+
+void caps_lock_led_on(void)
+{
+ PORTD = 0b01111111;
+}
+
+void scroll_lock_led_on(void)
+{
+ PORTD = 0b11011111;
+}
+void keypad_led_on(void)
+{
+ PORTD = 0b10111111;
+}
+void blink_all_leds(void)
+{
+ all_led_on();
+ _delay_ms(500);
+
+ all_led_off();
+ _delay_ms(100);
+
+ caps_lock_led_on();
+ _delay_ms(100);
+
+ num_lock_led_on();
+ _delay_ms(100);
+
+ scroll_lock_led_on();
+ _delay_ms(100);
+
+ keypad_led_on();
+ _delay_ms(100);
+
+ //back
+
+ scroll_lock_led_on();
+ _delay_ms(100);
+
+ num_lock_led_on();
+ _delay_ms(100);
+
+ caps_lock_led_on();
+ _delay_ms(100);
+
+ all_led_off();
+}
+
+// End section origin https://github.com/alvicstep/tmk_keyboard
+
+ void matrix_init_kb(void) {
+ blink_all_leds();
+ matrix_init_user();
+}
+
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+//Copyright 2014 Warren Janssens <warren.janssens@gmail.com>
+ uint8_t leds = 0xF0;
+ if (usb_led & 1 << USB_LED_NUM_LOCK)
+ leds &= ~0x10;
+ if (usb_led & 1 << USB_LED_CAPS_LOCK)
+ leds &= ~0x80;
+ if (usb_led & 1 << USB_LED_SCROLL_LOCK)
+ leds &= ~0x20;
+ PORTD = (PORTD & 0x0F) | leds;
+
+ led_set_user(usb_led);
+
+}
+
+
diff --git a/keyboards/kinesis/kinesis.h b/keyboards/kinesis/kinesis.h
new file mode 100644
index 000000000..c04fbda15
--- /dev/null
+++ b/keyboards/kinesis/kinesis.h
@@ -0,0 +1,67 @@
+#ifndef KINESIS_H
+#define KINESIS_H
+
+#include "quantum.h"
+
+
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+
+#define KEYMAP( \
+ k02,k22,k12,k01,k21,k11,k00,k20,k10, \
+ k80,k70,k60,k50,k40,k30, \
+ k81,k71,k61,k51,k41,k31, \
+ k82,k72,k62,k52,k42,k32, \
+ k83,k73,k63,k53,k43,k33, \
+ k74,k64,k54,k34, \
+ k36,k35, \
+ k55, \
+ k56,k46,k75, \
+ k03,k23,k13,k04,k24,k14,k05,k85,k84, \
+ k94,kA4,kB4,kD4,kE4,kF4, \
+ k95,kA5,kB5,kD5,kE5,kF5, \
+ k96,kA6,kB6,kD6,kE6,kF6, \
+ k97,kA7,kB7,kD7,kE7,kF7, \
+ k93,kB3,kD3,kE3, \
+ k47,k66, \
+ k67, \
+ k87,k76,k86 \
+) { \
+ { k00, k01, k02, k03, k04, k05, KC_NO, KC_NO }, \
+ { k10, k11, k12, k13, k14, KC_NO, KC_NO, KC_NO }, \
+ { k20, k21, k22, k23, k24, KC_NO, KC_NO, KC_NO }, \
+ { k30, k31, k32, k33, k34, k35, k36, KC_NO }, \
+ { k40, k41, k42, k43, KC_NO, KC_NO, k46, k47 }, \
+ { k50, k51, k52, k53, k54, k55, k56, KC_NO }, \
+ { k60, k61, k62, k63, k64, KC_NO, k66, k67 }, \
+ { k70, k71, k72, k73, k74, k75, k76, KC_NO }, \
+ { k80, k81, k82, k83, KC_NO ,KC_NO, k86, k87}, \
+ { KC_NO, KC_NO ,KC_NO ,k93, k94, k95, k96, k97}, \
+ { KC_NO, KC_NO ,KC_NO ,KC_NO, kA4, kA5, kA6, kA7}, \
+ { KC_NO, KC_NO ,KC_NO ,kB3, kB4, kB5, kB6, kB7}, \
+ { KC_NO, KC_NO ,KC_NO ,KC_NO, KC_NO, KC_NO, k84, k85}, \
+ { KC_NO, KC_NO ,KC_NO ,kD3, kD4, kD5, kD6, kD7}, \
+ { KC_NO, KC_NO ,KC_NO ,kE3, kE4, kE5, kE6, kE7}, \
+ { KC_NO, KC_NO ,KC_NO ,KC_NO, kF4, kF5, kF6, kF7} \
+}
+
+
+/* 4y0 A 4y1 B 4y2 4y3 D 4y4 E 4y5 F 4y6 G 4y7 H 5y0 I 5y1 J 5y2 K 5y3 L 5y4 M 5y5 N 5y6 O 5y7 P */
+
+/*
+ 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ A B C D E F G H I J K L M N O P
+ 4y0 4y1 4y2 4y3 4y4 4y5 4y6 4y7 5y0 5y1 5y2 5y3 5y4 5y5 5y6 5y7
+ r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15
+0 PB0 21 c0 f6 f8 f7 5 4 3 2 1 =+
+1 PB1 22 c1 f3 f5 f4 t r e w q TAB
+2 PB2 23 c2 ESC f2 f1 g f d s a CL
+3 PB3 24 c3 f9 f11 f10 b v c x z LS UP DN [{ ]}
+4 PB4 25 c4 f12 SL PS RT LT §± `~ 6 7 8 9 0 -_
+5 PB5 26 c5 PB PGM KPD LA HM END y u i o p \
+6 PB6 27 c6 LC DEL BS RC ENT SP h j k l ;: '"
+7 PB7 28 c7 RA PU PD n m ,< .> /? RS
+*/
+
+
+#endif
diff --git a/keyboards/kinesis/matrix.c b/keyboards/kinesis/matrix.c
new file mode 100644
index 000000000..cb0d5ad7d
--- /dev/null
+++ b/keyboards/kinesis/matrix.c
@@ -0,0 +1,228 @@
+/*
+Copyright 2014 Warren Janssens <warren.janssens@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 "action_layer.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "led.h"
+#include "config.h"
+
+#ifndef DEBOUNCE
+# define DEBOUNCE 5
+#endif
+static uint8_t debouncing = DEBOUNCE;
+
+/* matrix state(1:on, 0:off) */
+static uint8_t matrix[MATRIX_ROWS];
+static uint8_t matrix_debouncing[MATRIX_ROWS];
+
+static matrix_row_t read_row(uint8_t row);
+static void unselect_rows(void);
+static void select_rows(uint8_t row);
+
+__attribute__ ((weak))
+void matrix_init_quantum(void) {
+ matrix_init_kb();
+}
+
+__attribute__ ((weak))
+void matrix_scan_quantum(void) {
+ matrix_scan_kb();
+}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+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;
+
+ //dprint("matrix_init"); dprintln();
+ // output high (leds)
+ DDRD = 0xFF;
+ PORTD = 0xFF;
+
+ // output low (multiplexers)
+ DDRF = 0xFF;
+ PORTF = 0x00;
+
+ // input with pullup (matrix)
+ DDRB = 0x00;
+ PORTB = 0xFF;
+
+ // input with pullup (program and keypad buttons)
+ DDRC = 0x00;
+ PORTC = 0xFF;
+
+ // initialize row and col
+ unselect_rows();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ matrix_debouncing[i] = 0;
+ }
+
+}
+
+uint8_t matrix_scan(void)
+{
+
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ select_rows(i);
+ uint8_t row = read_row(i);
+ if (matrix_debouncing[i] != row) {
+ matrix_debouncing[i] = row;
+ if (debouncing) {
+ debug("bounce!: "); debug_hex(debouncing); debug("\n");
+ }
+ debouncing = DEBOUNCE;
+ }
+ unselect_rows();
+ }
+
+ if (debouncing) {
+ if (--debouncing) {
+ _delay_ms(1);
+ } else {
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = matrix_debouncing[i];
+ }
+ }
+ }
+ matrix_scan_quantum();
+ return 1;
+}
+
+bool matrix_is_modified(void)
+{
+ if (debouncing) return false;
+ return true;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline
+matrix_row_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 += bitpop16(matrix[i]);
+ }
+ return count;
+}
+
+static matrix_row_t read_row(uint8_t row)
+{
+ _delay_us(30); // without this wait read unstable value.
+
+ //keypad and program buttons
+ if (row == 12)
+ {
+ return ~(PINC | 0b00111111);
+ }
+ return ~PINB;
+}
+
+static void unselect_rows(void)
+{
+ // set A,B,C,G to 0 (F4 - F7)
+ PORTF &= 0x0F;
+}
+
+static void select_rows(uint8_t row)
+{
+ // set A,B,C,G to row value
+ PORTF |= row << 4;
+}
+
+
+/* Row pin configuration
+PF0 A
+PF1 B
+PF2 C
+PF3 G 0 = U4, 1 = U5
+
+ 4y0 4y1 4y2 4y3 4y4 4y5 4y6 4y7 5y0 5y1 5y2 5y3 5y4 5y5 5y6 5y7
+ r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16
+PB0 21 c1 f6 f8 f7 5 4 3 2 1 =+
+PB1 22 c2 f3 f5 f4 t r e w q TAB
+PB2 23 c3 ESC f2 f1 g f d s a CL
+PB3 24 c4 f9 f11 f10 b v c x z LS UP DN [{ ]}
+PB4 25 c5 f12 SL PS RT LT §± `~ 6 7 8 9 0 -_
+PB5 26 c6 PB PGM KPD y u i o p \
+PB6 27 c7 LC DL BS RC EN SP h j k l ;: '"
+PB7 28 c8 RA PU PD n m ,< .> /? RS
+ */
+
+
diff --git a/keyboards/kinesis/readme.md b/keyboards/kinesis/readme.md
new file mode 100644
index 000000000..79c86581e
--- /dev/null
+++ b/keyboards/kinesis/readme.md
@@ -0,0 +1,42 @@
+kinesis-advantage keyboard firmware
+======================
+
+## Kinesis specific information
+This is a port of https://github.com/alvicstep/tmk_keyboard,
+which is a fork of https://github.com/wjanssens/tmk_keyboard,
+which is based on work from https://github.com/chrisandreae/keyboard-firmware
+
+If you replace the kinesis CPU as described in the doc folder, then this code should allow you to use QMK.
+I've tested with a Teensy 2++, remember to change the CPU if you use a 32u4 instead.
+
+Not yet implemented:
+- Kinesis EEProm reading or writing
+- Audio - this should be simple if we remove hardcoded pins from audio.h and switch to E7
+
+
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/kinesis-advantage 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 default`.
+
+### Other Keymaps
+
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
+```
+$ make [default|jack|<name>]
+```
+
+Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
diff --git a/keyboards/kinesis/rules.mk b/keyboards/kinesis/rules.mk
new file mode 100644
index 000000000..a4a2b7d15
--- /dev/null
+++ b/keyboards/kinesis/rules.mk
@@ -0,0 +1,73 @@
+
+## Project specific files
+
+SRC= matrix.c
+
+# MCU name
+MCU = at90usb1286
+#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=1024
+
+
+# Build Options
+# 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 ?= no # Console for debug(+400)
+COMMAND_ENABLE ?= no
+# 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 ?= no # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
+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 should be port E6, current quantum library hardcodes C6, which we use for programming
+CUSTOM_MATRIX=yes # need to do our own thing with the matrix
diff --git a/keyboards/kitten_paw/Makefile b/keyboards/kitten_paw/Makefile
new file mode 100644
index 000000000..57b2ef62e
--- /dev/null
+++ b/keyboards/kitten_paw/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../Makefile
+endif
diff --git a/keyboards/kitten_paw/config.h b/keyboards/kitten_paw/config.h
new file mode 100644
index 000000000..d7089734a
--- /dev/null
+++ b/keyboards/kitten_paw/config.h
@@ -0,0 +1,162 @@
+/*
+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 0x6050
+#define DEVICE_VER 0x0104
+#define MANUFACTURER Costar
+#define PRODUCT Majestouch
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 18
+
+/*
+ * 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 { D0, D5 }
+//#define MATRIX_COL_PINS { F1, F0, B0 }
+//#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* 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 */
+
+/* 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/keyboards/kitten_paw/keymaps/default/keymap.c b/keyboards/kitten_paw/keymaps/default/keymap.c
new file mode 100644
index 000000000..64aa672d0
--- /dev/null
+++ b/keyboards/kitten_paw/keymaps/default/keymap.c
@@ -0,0 +1,51 @@
+#include "kitten_paw.h"
+
+enum layers {
+ DEFAULT,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [DEFAULT] = KEYMAP(\
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END,KC_PGDN, KC_P7, KC_P8, KC_P9,KC_PPLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \
+ KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT)
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+} \ No newline at end of file
diff --git a/keyboards/kitten_paw/keymaps/ickerwx/config.h b/keyboards/kitten_paw/keymaps/ickerwx/config.h
new file mode 100644
index 000000000..04a2d253c
--- /dev/null
+++ b/keyboards/kitten_paw/keymaps/ickerwx/config.h
@@ -0,0 +1,31 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+#undef MOUSEKEY_MOVE_MAX
+#define MOUSEKEY_MOVE_MAX 127
+#undef MOUSEKEY_WHEEL_MAX
+#define MOUSEKEY_WHEEL_MAX 110
+#undef MOUSEKEY_MOVE_DELTA
+#define MOUSEKEY_MOVE_DELTA 5
+#undef MOUSEKEY_WHEEL_DELTA
+#define MOUSEKEY_WHEEL_DELTA 1
+#undef MOUSEKEY_DELAY
+#define MOUSEKEY_DELAY 50
+#undef MOUSEKEY_INTERVAL
+#define MOUSEKEY_INTERVAL 20
+#undef MOUSEKEY_MAX_SPEED
+#define MOUSEKEY_MAX_SPEED 4
+#undef MOUSEKEY_TIME_TO_MAX
+#define MOUSEKEY_TIME_TO_MAX 30
+#undef MOUSEKEY_WHEEL_MAX_SPEED
+#define MOUSEKEY_WHEEL_MAX_SPEED 3
+#undef MOUSEKEY_WHEEL_TIME_TO_MAX
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 1000
+#undef ONESHOT_TIMEOUT
+#define ONESHOT_TIMEOUT 500
+#undef TAPPING_TOGGLE
+#define TAPPING_TOGGLE 2
+
+#endif
diff --git a/keyboards/kitten_paw/keymaps/ickerwx/keymap.c b/keyboards/kitten_paw/keymaps/ickerwx/keymap.c
new file mode 100644
index 000000000..9a00c80dc
--- /dev/null
+++ b/keyboards/kitten_paw/keymaps/ickerwx/keymap.c
@@ -0,0 +1,242 @@
+#include "kitten_paw.h"
+#include "mousekey.h"
+
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+#define C(kc) LCTL(KC_##kc)
+#define RA(kc) RALT(KC_##kc)
+#define KC_SLCT KC_SELECT
+#define MEDAPP LT(MEDIA, KC_APP)
+#undef S
+#define S(kc) LSFT(KC_##kc)
+
+uint8_t current_layer_global = 255;
+
+enum layers {
+ DEFAULT,
+ PROG1,
+ PROG2,
+ MEDIA,
+ MOUSE1,
+ MOUSE2,
+ MISC,
+};
+
+enum function_id {
+ LSHFT_PAREN,
+ RSHFT_PAREN,
+ LCTRL_BRACKET,
+ RCTRL_BRACKET,
+ LALT_CURLY,
+ RALT_CURLY,
+ CTRL_CLICK
+};
+
+enum macro_id {
+ GRV,
+ CFLEX
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [DEFAULT] = KEYMAP(\
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END,KC_PGDN, KC_P7, KC_P8, KC_P9,KC_PPLS, \
+ F(0), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \
+ F(8),KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, F(9), KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \
+ F(1),KC_LGUI, F(3), LT(MISC, KC_SPC), F(4), F(5), MEDAPP, F(2), KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT),
+ /* Layer 1: Programming Layer 1, emulating US l ayout */
+ [PROG1] = KEYMAP(\
+ KC_ESC,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
+ M(GRV),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_SLSH, S(0),_______, _______,_______,_______, _______,_______,_______,_______, \
+ _______,_______,_______,_______,_______,_______, KC_Z,_______,_______,_______,_______, RA(8), RA(9),RA(MINS), _______,_______,_______, _______,_______,_______,_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,S(COMM),S(BSLS), _______, _______,_______,_______, \
+ MO(PROG2),_______, KC_Y,_______,_______,_______,_______,_______,_______,_______,_______, S(7), MO(PROG2), _______, _______,_______,_______,_______, \
+ _______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______, _______,_______),
+ /* Layer 2: programming layer 2
+ all keys that are not FN keys are sent as LSFT+key on this layer
+ */
+ [PROG2] = KEYMAP(\
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
+ RA(RBRC),_______, RA(Q),KC_BSLS,_______,_______,M(CFLEX), S(6),S(RBRC), S(8), S(9),S(SLSH),KC_RBRC,_______, _______,_______,_______, _______,_______,_______,_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, RA(7), RA(0),RA(NUBS), _______,_______,_______, _______,_______,_______,_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, S(DOT), S(2), _______, _______,_______,_______, \
+ _______,S(NUBS),_______,_______,_______,_______,_______,_______,_______,KC_NUBS,S(NUBS),S(MINS), _______, _______, _______,_______,_______,_______, \
+ _______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______, _______,_______),
+ /* Layer 3: media layer */
+ [MEDIA] = KEYMAP(\
+ KC_PWR,KC_SLEP,KC_WAKE,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX, \
+ XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, KC_MPRV,KC_MPLY,KC_MNXT, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \
+ XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, KC_VOLD,KC_MUTE,KC_VOLU, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \
+ XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,XXXXXXX, \
+ XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, KC_EJCT, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, \
+ XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,_______,XXXXXXX, KC_MRWD,KC_MSTP,KC_MFFD, XXXXXXX,XXXXXXX),
+ /* Layer 4: Mouse layer */
+ [MOUSE1] = KEYMAP(\
+ F(6),_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
+ _______,KC_ACL0,KC_ACL1,KC_ACL2,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \
+ _______,KC_BTN4,KC_WH_D,KC_MS_U,KC_WH_U,_______, C(Z),_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \
+ _______,KC_BTN5,KC_MS_L,KC_MS_D,KC_MS_R, F(7),KC_WH_L,KC_WH_D,KC_WH_U,KC_WH_R,_______,_______, _______, _______,_______,_______, \
+ MO(MOUSE2),_______, C(Y), C(X), C(C), C(V),_______,KC_BTN2,KC_BTN3,C(PGUP),C(PGDN),_______, KC_RSFT, _______, _______,_______,_______,_______, \
+ KC_LCTL,_______,KC_LALT, KC_BTN1, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, _______,_______,_______, _______,_______),
+ /* Layer 5: Mouse layer 2*/
+ [MOUSE2] = KEYMAP(\
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \
+ _______,_______,KC_BTN2,KC_WH_U,KC_BTN3,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \
+ _______,_______,KC_WH_L,KC_WH_D,KC_WH_R,_______,KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R,_______,_______, _______, _______,_______,_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______,_______,_______, \
+ _______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______, _______,_______),
+ /* Layer 6: Misc layer */
+ [MISC] = KEYMAP(\
+ _______, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______,_______,_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \
+ _______,KC_SLCT, C(W), KC_UP,_______,_______,_______,_______,KC_BSPC, KC_DEL,_______,_______,_______,_______, _______,_______,_______, _______,_______,_______,_______, \
+ _______,_______,KC_LEFT,KC_DOWN,KC_RGHT,_______,KC_HOME,KC_PGDN,KC_PGUP,_______,_______,_______, _______, _______,_______,_______, \
+ KC_LSFT,_______, C(Y), C(X), C(C), C(V), KC_SPC, KC_END,_______,C(PGUP),C(PGDN),_______, _______, _______, _______,_______,_______,_______, \
+ _______,_______,_______, LT(MISC, KC_SPC), _______,_______,_______,_______, _______,_______,_______, _______,_______),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_TAP_TOGGLE(MOUSE1), // tap-toggle mouse layer (4)
+ [1] = ACTION_FUNCTION_TAP(LCTRL_BRACKET), // tap to print [
+ [2] = ACTION_FUNCTION_TAP(RCTRL_BRACKET), // tap to print ]
+ [3] = ACTION_FUNCTION_TAP(LALT_CURLY), // tap to print {
+ [4] = ACTION_FUNCTION_TAP(RALT_CURLY), // tap to print }
+ [5] = ACTION_LAYER_TAP_TOGGLE(PROG1), // tap-toggle programming layer 1
+ [6] = ACTION_LAYER_SET_CLEAR(DEFAULT),
+ [7] = ACTION_FUNCTION_TAP(CTRL_CLICK),
+ [8] = ACTION_FUNCTION_TAP(LSHFT_PAREN), // tap to print (
+ [9] = ACTION_FUNCTION_TAP(RSHFT_PAREN), // tap to print )
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case GRV: // macro to print accent grave
+ return (record->event.pressed ?
+ MACRO( D(LSFT), T(EQL), U(RALT), T(SPC), END) :
+ MACRO_NONE );
+ case CFLEX: // print accent circonflex
+ return (record->event.pressed ?
+ MACRO( T(GRV), T(SPC), END ) :
+ MACRO_NONE );
+ }
+ return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+ uint8_t layer;
+ layer = biton32(layer_state);
+
+ if (current_layer_global != layer) {
+ current_layer_global = layer;
+
+ // unset CAPSLOCK and SCROLL LOCK LEDs
+ led_set_kb(host_keyboard_leds() & ~(1<<USB_LED_CAPS_LOCK));
+ led_set_kb(host_keyboard_leds() & ~(1<<USB_LED_SCROLL_LOCK));
+ // set SCROLL LOCK LED when the mouse layer is active, CAPS LOCK when PROG layer is active
+ if (layer == MOUSE1 || layer == MOUSE2) {
+ led_set_kb(host_keyboard_leds() | (1<<USB_LED_SCROLL_LOCK));
+ } else if (layer == PROG1 || layer == PROG2) {
+ led_set_kb(host_keyboard_leds() | (1<<USB_LED_CAPS_LOCK));
+ }
+ }
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
+
+void tap_helper(keyrecord_t *record, uint16_t orig_mod, uint16_t macro_mod, uint16_t macro_kc ) {
+ if (record->event.pressed) {
+ if (record->tap.count > 0 && !record->tap.interrupted) {
+ if (record->tap.interrupted) {
+ register_mods(MOD_BIT(orig_mod));
+ }
+ } else {
+ register_mods(MOD_BIT(orig_mod));
+ }
+ } else {
+ if (record->tap.count > 0 && !(record->tap.interrupted)) {
+ add_weak_mods(MOD_BIT(macro_mod));
+ send_keyboard_report();
+ register_code(macro_kc);
+ unregister_code(macro_kc);
+ del_weak_mods(MOD_BIT(macro_mod));
+ send_keyboard_report();
+ record->tap.count = 0; // ad hoc: cancel tap
+ } else {
+ unregister_mods(MOD_BIT(orig_mod));
+ }
+ }
+}
+
+/* if LCTRL is tabbed, print (, or ) if RCTRL is tabbed, same for LALT/RALT and [/] */
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ // The code is copied from keymap_hasu.c in the tmk keyboards hhkb folder
+ switch (id) {
+ case LCTRL_BRACKET:
+ tap_helper(record, KC_LCTL, KC_RALT, KC_8);
+ break;
+ case RCTRL_BRACKET:
+ tap_helper(record, KC_RCTL, KC_RALT, KC_9);
+ break;
+ case LALT_CURLY:
+ tap_helper(record, KC_LALT, KC_RALT, KC_7);
+ break;
+ case RALT_CURLY:
+ tap_helper(record, KC_RALT, KC_RALT, KC_0);
+ break;
+ case LSHFT_PAREN:
+ tap_helper(record, KC_LSFT, KC_LSFT, KC_8);
+ break;
+ case RSHFT_PAREN:
+ tap_helper(record, KC_RSFT, KC_LSFT, KC_9);
+ break;
+ case CTRL_CLICK:
+ if (record->event.pressed) {
+ mousekey_clear();
+ register_mods(MOD_BIT(KC_LCTL));
+ send_keyboard_report();
+ wait_ms(5);
+ mousekey_on(KC_BTN1);
+ mousekey_send();
+ wait_ms(10);
+ mousekey_off(KC_BTN1);
+ mousekey_send();
+ wait_ms(5);
+ unregister_mods(MOD_BIT(KC_LCTL));
+ send_keyboard_report();
+ }
+ break;
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint8_t layer;
+ layer = biton32(layer_state);
+ if (layer == PROG2) {
+ if (keycode >= KC_A && keycode <= KC_EXSEL && \
+ !( // do not send LSFT + these keycodes, they are needed for emulating the US layout
+ keycode == KC_NONUS_BSLASH ||
+ keycode == KC_RBRC ||
+ keycode == KC_BSLS ||
+ keycode == KC_GRV
+ )) {
+ // LSFT is the modifier for this layer, so we set LSFT for every key to get the expected behavior
+ if (record->event.pressed) {
+ register_mods(MOD_LSFT);
+ } else {
+ unregister_mods(MOD_LSFT);
+ }
+ }
+ }
+ return true;
+}
diff --git a/keyboards/kitten_paw/keymaps/ickerwx/readme.md b/keyboards/kitten_paw/keymaps/ickerwx/readme.md
new file mode 100644
index 000000000..0d23be4ea
--- /dev/null
+++ b/keyboards/kitten_paw/keymaps/ickerwx/readme.md
@@ -0,0 +1,18 @@
+# My personal keymap for the Kitten Paw controller
+
+This keymap only works correctly when you have your OS configured with a German keymap. Use the keymap however you like. It's most likely a living thing that will never be quite finished.
+
+## Description of the layers
+Layer 0 (DEFAULT) works just like you would expect a keyboard to work, mostly, except:
+Caps Lock switches to the mouse layer, RGUI and APP are switches to the programming layer and media layer.
+Mouse and programming layer switches can be held or double-tapped to lock.
+Holding space switches to the MISC layer where I currently accumulate useful shortcuts.
+Tapping left and right Shift, Ctrl and Alt will send (), [] and {} respectively.
+
+Layers 1 and 2 (PROG1 and PROG2) emulate the US layout while still using a German OS keymap setting. I was annoyed of having to change the OS settings every time I wanted to use the US layout for coding, so I made these layers to behave just like the US layout even though the OS still uses German. The shift keys were a bit tricky, I had to use them as MO(PROG2) switches, so to get the actual expected behavior I enable LSFT for almost every keypress on PROG2 in ```process_record_user```. Since the shift keys are MO() function keys, they do not print () at the moment, which sucks. I'm working on it.
+
+Layer 3 (MEDIA) just has a couple of media keys on it, mainly around the cursor keys and nav key cluster.
+
+Layers 4 and 5 (MOUSE1 and MOUSE2) are mouse layers. Move the cursor using ESDF, scroll using HJKL, Space for left click, N and M for right and middle click. There's more, look at the keymap.
+
+Layer 6 is a layer I don't have a good name for, so I call it MISC. You'll find cursor keys at ESDF, other navigation keys around the HJKL cluster and F12 to F24 on the F-keys. For now. \ No newline at end of file
diff --git a/keyboards/kitten_paw/kitten_paw.c b/keyboards/kitten_paw/kitten_paw.c
new file mode 100644
index 000000000..92f64b06b
--- /dev/null
+++ b/keyboards/kitten_paw/kitten_paw.c
@@ -0,0 +1,43 @@
+#include "kitten_paw.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+ CONFIG_LED_IO;
+ CONFIG_LED_IO;
+ print_dec(usb_led);
+ if (usb_led & (1<<USB_LED_CAPS_LOCK))
+ USB_LED_CAPS_LOCK_ON;
+ else
+ USB_LED_CAPS_LOCK_OFF;
+
+ if (usb_led & (1<<USB_LED_NUM_LOCK))
+ USB_LED_NUM_LOCK_ON;
+ else
+ USB_LED_NUM_LOCK_OFF;
+ if (usb_led & (1<<USB_LED_SCROLL_LOCK))
+ USB_LED_SCROLL_LOCK_ON;
+ else
+ USB_LED_SCROLL_LOCK_OFF;
+ led_set_user(usb_led);
+}
diff --git a/keyboards/kitten_paw/kitten_paw.h b/keyboards/kitten_paw/kitten_paw.h
new file mode 100644
index 000000000..189b721b9
--- /dev/null
+++ b/keyboards/kitten_paw/kitten_paw.h
@@ -0,0 +1,58 @@
+#ifndef KITTEN_PAW_H
+#define KITTEN_PAW_H
+
+#include "quantum.h"
+
+#define CONFIG_LED_IO \
+ DDRB |= (1<<7); \
+ DDRC |= (1<<5) | (1<<6);
+
+#define USB_LED_CAPS_LOCK_ON PORTC &= ~(1<<6)
+#define USB_LED_CAPS_LOCK_OFF PORTC |= (1<<6)
+#define USB_LED_NUM_LOCK_ON PORTB &= ~(1<<7)
+#define USB_LED_NUM_LOCK_OFF PORTB |= (1<<7)
+#define USB_LED_SCROLL_LOCK_ON PORTC &= ~(1<<5)
+#define USB_LED_SCROLL_LOCK_OFF PORTC |= (1<<5)
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+/*
+ Matrix col/row mapping
+
+ ,----. ,-------------------. ,-------------------. ,-------------------. ,--------------.
+ | J6 | | I4 | H4 | H2 | H6 | | A7 | E6 | D2 | D4 | | B4 | B7 | B6 | B0 | | C7 | C5 | A5 |
+ `----' `-------------------' `-------------------' `-------------------' `--------------'
+ ,-------------------------------------------------------------------------. ,--------------. ,-------------------.
+ | J4 | J7 | I7 | H7 | G7 | G4 | F4 | F7 | E7 | D7 | R7 | R4 | E4 | B2 | | L4 | O4 | Q4 | | K1 | L1 | Q1 | Q0 |
+ |-------------------------------------------------------------------------| |--------------| |-------------------|
+ | J2 | J5 | I5 | H5 | G5 | G2 | F2 | F5 | E5 | D5 | R5 | R2 | E2 | B3 | | K4 | O7 | Q7 | | K5 | L5 | Q5 | O5 |
+ |-------------------------------------------------------------------------| '--------------' |-------------- |
+ | O5 | J3 | I3 | H3 | G3 | G6 | F6 | F3 | E3 | D3 | R3 | R6 | B1 | | K2 | L2 | Q2 | |
+ |-------------------------------------------------------------------------| ,----. |-------------------|
+ | N2 | J1 | I1 | H1 | G1 | G0 | F0 | F1 | E1 | D1 | R0 | N3 | | O6 | | K3 | L3 | Q3 | O3 |
+ |-------------------------------------------------------------------------| ,--------------. |-------------- |
+ | A4 | P2 | C6 | K6 | C0 | M3 | D0 | A1 | | O0 | K0 | L0 | | L6 | Q6 | |
+ `-------------------------------------------------------------------------' `--------------' `-------------------'
+*/
+
+#define KEYMAP( \
+ KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
+ KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, KK1, KL1, KQ1, KQ0, \
+ KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, KK5, KL5, KQ5, KO5, \
+ KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, KK2, KL2, KQ2, \
+ KN2, KI6, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, KK3, KL3, KQ3, KO3, \
+ KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0, KL6, KQ6 \
+) \
+{ \
+ {KC_NO, KB0, KC0, KD0,KC_NO, KF0, KG0,KC_NO,KC_NO,KC_NO, KK0, KL0,KC_NO,KC_NO, KO0,KC_NO, KQ0, KR0}, \
+ { KA1, KB1,KC_NO, KD1, KE1, KF1, KG1, KH1, KI1, KJ1, KK1, KL1,KC_NO,KC_NO,KC_NO,KC_NO, KQ1,KC_NO}, \
+ {KC_NO, KB2,KC_NO, KD2, KE2, KF2, KG2, KH2, KI2, KJ2, KK2, KL2,KC_NO, KN2,KC_NO, KP2, KQ2, KR2}, \
+ {KC_NO, KB3,KC_NO, KD3, KE3, KF3, KG3, KH3, KI3, KJ3, KK3, KL3, KM3, KN3, KO3,KC_NO, KQ3, KR3}, \
+ { KA4, KB4,KC_NO, KD4, KE4, KF4, KG4, KH4, KI4, KJ4, KK4, KL4,KC_NO,KC_NO, KO4,KC_NO, KQ4, KR4}, \
+ { KA5,KC_NO, KC5, KD5, KE5, KF5, KG5, KH5, KI5, KJ5, KK5, KL5,KC_NO,KC_NO, KO5,KC_NO, KQ5, KR5}, \
+ {KC_NO, KB6, KC6,KC_NO, KE6, KF6, KG6, KH6, KI6, KJ6, KK6, KL6,KC_NO,KC_NO, KO6,KC_NO, KQ6, KR6}, \
+ { KA7, KB7, KC7, KD7, KE7, KF7, KG7, KH7, KI7, KJ7,KC_NO,KC_NO,KC_NO,KC_NO, KO7,KC_NO, KQ7, KR7} \
+}
+
+#endif
diff --git a/keyboards/kitten_paw/matrix.c b/keyboards/kitten_paw/matrix.c
new file mode 100644
index 000000000..d436ad56c
--- /dev/null
+++ b/keyboards/kitten_paw/matrix.c
@@ -0,0 +1,165 @@
+/*
+ Copyright 2014 Ralf Schmitt <ralf@bunkertor.net>
+
+ 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 "debug.h"
+#include "util.h"
+#include "matrix.h"
+
+#ifndef DEBOUNCING_DELAY
+# define DEBOUNCING_DELAY 5
+#endif
+static uint8_t debouncing = DEBOUNCING_DELAY;
+
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+static uint8_t read_rows(void);
+static void select_col(uint8_t col);
+
+inline uint8_t matrix_rows(void) {
+ return MATRIX_ROWS;
+}
+
+inline uint8_t matrix_cols(void) {
+ return MATRIX_COLS;
+}
+
+/* Column pin configuration
+ *
+ * col: 0 1 2 3 4 5 6 7
+ * pin: PC7 PD5 PD3 PD1 PC2 PD6 PD4 PD2
+ *
+ * Rrr pin configuration
+ *
+ * These rrrs uses one 74HC154 4 to 16 bit demultiplexer (low
+ * active), together with 2 rrrs driven directly from the micro
+ * controller, to control the 18 rrrs. The rrrs are driven from
+ * pins B6,5,4,3,2,1,0.
+ */
+void matrix_init(void) {
+ DDRC &= ~0b10000100; // Row input pins
+ DDRD &= ~0b01111110;
+ PORTC |= 0b10000100;
+ PORTD |= 0b01111110;
+
+ DDRB |= 0b01111111; // Column output pins
+
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ matrix_debouncing[i] = 0;
+ }
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void) {
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ select_col(col);
+ _delay_us(3);
+ uint8_t rows = read_rows();
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
+ bool curr_bit = rows & (1<<row);
+ if (prev_bit != curr_bit) {
+ matrix_debouncing[row] ^= ((matrix_row_t)1<<col);
+ debouncing = DEBOUNCING_DELAY;
+ }
+ }
+ }
+
+ if (debouncing) {
+ if (--debouncing) {
+ _delay_ms(1);
+ }
+ else {
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = matrix_debouncing[i];
+ }
+ }
+ }
+ matrix_scan_quantum();
+ return 1;
+}
+
+bool matrix_is_modified(void) {
+ if (debouncing)
+ return false;
+ else
+ return true;
+}
+
+inline bool matrix_is_on(uint8_t row, uint8_t col) {
+ return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline matrix_row_t matrix_get_row(uint8_t row) {
+ return matrix[row];
+}
+
+void matrix_print(void) {
+ print("\nr/c 0123456789ABCDEF\n");
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ xprintf("%02X: %032lb\n", row, bitrev32(matrix_get_row(row)));
+ }
+}
+
+uint8_t matrix_key_count(void) {
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += bitpop32(matrix[i]);
+ }
+ return count;
+}
+
+static uint8_t read_rows(void) {
+ return
+ (PINC&(1<<7) ? 0 : (1<<0)) |
+ (PIND&(1<<5) ? 0 : (1<<1)) |
+ (PIND&(1<<3) ? 0 : (1<<2)) |
+ (PIND&(1<<1) ? 0 : (1<<3)) |
+ (PINC&(1<<2) ? 0 : (1<<4)) |
+ (PIND&(1<<2) ? 0 : (1<<5)) |
+ (PIND&(1<<4) ? 0 : (1<<6)) |
+ (PIND&(1<<6) ? 0 : (1<<7));
+}
+
+static void select_col(uint8_t col) {
+ switch (col) {
+ case 0: PORTB = (PORTB & ~0b01111111) | 0b01100100; break;
+ case 1: PORTB = (PORTB & ~0b01111111) | 0b01101100; break;
+ case 2: PORTB = (PORTB & ~0b01111111) | 0b01100010; break;
+ case 3: PORTB = (PORTB & ~0b01111111) | 0b01111010; break;
+ case 4: PORTB = (PORTB & ~0b01111111) | 0b01100110; break;
+ case 5: PORTB = (PORTB & ~0b01111111) | 0b01110110; break;
+ case 6: PORTB = (PORTB & ~0b01111111) | 0b01101110; break;
+ case 7: PORTB = (PORTB & ~0b01111111) | 0b01111110; break;
+ case 8: PORTB = (PORTB & ~0b01111111) | 0b01000001; break;
+ case 9: PORTB = (PORTB & ~0b01111111) | 0b00100001; break;
+ case 10: PORTB = (PORTB & ~0b01111111) | 0b01101010; break;
+ case 11: PORTB = (PORTB & ~0b01111111) | 0b01110010; break;
+ case 12: PORTB = (PORTB & ~0b01111111) | 0b01111100; break;
+ case 13: PORTB = (PORTB & ~0b01111111) | 0b01110100; break;
+ case 14: PORTB = (PORTB & ~0b01111111) | 0b01111000; break;
+ case 15: PORTB = (PORTB & ~0b01111111) | 0b01110000; break;
+ case 16: PORTB = (PORTB & ~0b01111111) | 0b01100000; break;
+ case 17: PORTB = (PORTB & ~0b01111111) | 0b01101000; break;
+ }
+}
diff --git a/keyboards/kitten_paw/readme.md b/keyboards/kitten_paw/readme.md
new file mode 100644
index 000000000..a6ef2a067
--- /dev/null
+++ b/keyboards/kitten_paw/readme.md
@@ -0,0 +1,32 @@
+kitten_paw keyboard firmware
+======================
+This is the firmware for the 2016 revision of the Kitten Paw controller by Bathroom Epiphanies.
+Most of the boilerplate code is the work of [BathroomEpiphanies](https://github.com/BathroomEpiphanies).
+
+NKRO doesn't work at the moment, I don't know if I will take the time to find out how to fix this, so far 6KRO is enough for me.
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/kitten_paw 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 a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant 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 **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
diff --git a/keyboards/kitten_paw/rules.mk b/keyboards/kitten_paw/rules.mk
new file mode 100644
index 000000000..b0c909d11
--- /dev/null
+++ b/keyboards/kitten_paw/rules.mk
@@ -0,0 +1,72 @@
+
+
+# MCU name
+#MCU = at90usb1287
+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)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+ OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+# 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 ?= no # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
+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
+
+CUSTOM_MATRIX = yes
+SRC += matrix.c
diff --git a/keyboards/lets_split/Makefile b/keyboards/lets_split/Makefile
index b9f07636b..4e2a6f00f 100644
--- a/keyboards/lets_split/Makefile
+++ b/keyboards/lets_split/Makefile
@@ -1,78 +1,3 @@
-SRC += matrix.c \
- i2c.c \
- split_util.c \
- serial.c
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= no # Console for debug(+400)
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
-NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality
-MIDI_ENABLE ?= no # MIDI controls
-AUDIO_ENABLE ?= yes # Audio output on port C6
-UNICODE_ENABLE ?= no # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
-
-CUSTOM_MATRIX = yes
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../Makefile
endif \ No newline at end of file
diff --git a/keyboards/lets_split/config.h b/keyboards/lets_split/config.h
index 833818ce6..4db45ab0b 100644
--- a/keyboards/lets_split/config.h
+++ b/keyboards/lets_split/config.h
@@ -28,24 +28,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PRODUCT Lets Split
#define DESCRIPTION A split keyboard for the cheap makers
-/* key matrix size */
-// Rows are doubled-up
-#define MATRIX_ROWS 8
-#define MATRIX_COLS 6
-
-// wiring of each half
-#define MATRIX_ROW_PINS { B5, B4, E6, D7 }
-#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 }
-
-#define CATERINA_BOOTLOADER
-
-// #define USE_I2C
-
-// #define EE_HANDS
-
-#define I2C_MASTER_LEFT
-// #define I2C_MASTER_RIGHT
-
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
@@ -68,24 +50,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* ws2812 RGB LED */
-#define RGB_DI_PIN D2
-#define RGBLIGHT_TIMER
-#define RGBLED_NUM 28 // Number of LEDs
-#define RGBLIGHT_HUE_STEP 10
-#define RGBLIGHT_SAT_STEP 17
-#define RGBLIGHT_VAL_STEP 17
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
/* disable debug print */
-// #define NO_DEBUG
+//#define NO_DEBUG
/* disable print */
-// #define NO_PRINT
+//#define NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
@@ -94,4 +63,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-#endif \ No newline at end of file
+#ifdef SUBPROJECT_rev1
+ #include "rev1/config.h"
+#endif
+#ifdef SUBPROJECT_rev2
+ #include "rev2/config.h"
+#endif
+#endif
diff --git a/keyboards/lets_split/i2c.c b/keyboards/lets_split/i2c.c
index c72789403..084c890c4 100644
--- a/keyboards/lets_split/i2c.c
+++ b/keyboards/lets_split/i2c.c
@@ -6,6 +6,8 @@
#include <stdbool.h>
#include "i2c.h"
+#ifdef USE_I2C
+
// Limits the amount of we wait for any one i2c transaction.
// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
// 9 bits, a single transaction will take around 90μs to complete.
@@ -157,3 +159,4 @@ ISR(TWI_vect) {
// Reset everything, so we are ready for the next TWI interrupt
TWCR |= (1<<TWIE) | (1<<TWINT) | (ack<<TWEA) | (1<<TWEN);
}
+#endif
diff --git a/keyboards/lets_split/imgs/letssplitv2.svg b/keyboards/lets_split/imgs/letssplitv2.svg
new file mode 100644
index 000000000..ce80db726
--- /dev/null
+++ b/keyboards/lets_split/imgs/letssplitv2.svg
@@ -0,0 +1,5817 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="541.41699pt"
+ height="541.41602pt"
+ viewBox="0 0 541.417 541.416"
+ xml:space="preserve"
+ id="svg2242"
+ sodipodi:version="0.32"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="letssplitv2.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.1"
+ style="display:inline"><metadata
+ id="metadata2286"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
+ id="defs2284"><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ id="perspective37556" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ id="perspective16301" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 270.7085 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="541.41699 : 270.7085 : 1"
+ inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+ id="perspective12409" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ id="perspective9337" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ id="perspective8562" /><inkscape:perspective
+ id="perspective3083"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective23419"
+ inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+ inkscape:vp_z="541.41699 : 270.7085 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 270.7085 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective27913"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ id="perspective27913-5" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 270.7085 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="541.41699 : 270.7085 : 1"
+ inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+ id="perspective23419-6" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ id="perspective3083-3" /><inkscape:perspective
+ id="perspective8562-2"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective9337-7"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective12409-1"
+ inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+ inkscape:vp_z="541.41699 : 270.7085 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 270.7085 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective16301-9"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective37556-9"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective5074"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective5377"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective5377-5"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective6033"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective2989"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective3039"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective51596"
+ inkscape:persp3d-origin="1417.3237 : 465.35417 : 1"
+ inkscape:vp_z="2834.6475 : 698.03125 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 698.03125 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective51446"
+ inkscape:persp3d-origin="270.70999 : 180.47333 : 1"
+ inkscape:vp_z="541.41998 : 270.70999 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 270.70999 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective37556-1"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective16301-3"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective12409-3"
+ inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+ inkscape:vp_z="541.41699 : 270.7085 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 270.7085 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective9337-3"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective8562-08"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ id="perspective3083-9" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 270.7085 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="541.41699 : 270.7085 : 1"
+ inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+ id="perspective23419-4" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ id="perspective27913-9" /><inkscape:perspective
+ id="perspective27913-5-1"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective23419-6-7"
+ inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+ inkscape:vp_z="541.41699 : 270.7085 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 270.7085 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective3083-3-75"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ id="perspective8562-2-1" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ id="perspective9337-7-1" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 270.7085 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="541.41699 : 270.7085 : 1"
+ inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+ id="perspective12409-1-4" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ id="perspective16301-9-00" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ id="perspective37556-9-7" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 698.03125 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1396.0651 : 698.03125 : 1"
+ inkscape:persp3d-origin="698.03253 : 465.35417 : 1"
+ id="perspective46224" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 270.70999 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="541.41998 : 270.70999 : 1"
+ inkscape:persp3d-origin="270.70999 : 180.47333 : 1"
+ id="perspective56159" /><inkscape:perspective
+ id="perspective37556-9-4"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective16301-9-0"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective12409-1-3"
+ inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+ inkscape:vp_z="541.41699 : 270.7085 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 270.7085 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective9337-7-4"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective8562-2-3"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ id="perspective3083-3-7" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 270.7085 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="541.41699 : 270.7085 : 1"
+ inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+ id="perspective23419-6-5" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ id="perspective27913-5-6" /><inkscape:perspective
+ id="perspective27913-0"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective23419-8"
+ inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+ inkscape:vp_z="541.41699 : 270.7085 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 270.7085 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective3083-7"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ id="perspective8562-6" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ id="perspective9337-5" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 270.7085 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="541.41699 : 270.7085 : 1"
+ inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+ id="perspective12409-0" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ id="perspective16301-0" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ id="perspective37556-7" /><inkscape:perspective
+ id="perspective37556-9-49"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective16301-9-2"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective12409-1-9"
+ inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+ inkscape:vp_z="541.41699 : 270.7085 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 270.7085 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective9337-7-40"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective8562-2-0"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ id="perspective3083-3-6" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 270.7085 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="541.41699 : 270.7085 : 1"
+ inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+ id="perspective23419-6-3" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ id="perspective27913-5-8" /><inkscape:perspective
+ id="perspective27913-3"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective23419-0"
+ inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+ inkscape:vp_z="541.41699 : 270.7085 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 270.7085 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ id="perspective3083-30"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ sodipodi:type="inkscape:persp3d" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ id="perspective8562-0" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ id="perspective9337-1" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 270.7085 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="541.41699 : 270.7085 : 1"
+ inkscape:persp3d-origin="270.7085 : 180.47233 : 1"
+ id="perspective12409-00" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ id="perspective16301-7" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 338.38501 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="676.77124 : 338.38501 : 1"
+ inkscape:persp3d-origin="338.38562 : 225.59001 : 1"
+ id="perspective37556-3" /><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ id="perspective3083-79" /><marker
+ orient="auto"
+ id="DistanceX"
+ style="overflow:visible"
+ refX="0.0"
+ refY="0.0"><path
+ id="path9"
+ d="M 3,-3 L -3,3 M 0,-5 L 0,5"
+ style="stroke:#000000; stroke-width:0.5" /></marker><pattern
+ id="Hatch"
+ x="0"
+ y="0"
+ patternUnits="userSpaceOnUse"
+ width="8"
+ height="8"><path
+ id="path12"
+ d="M8 4 l-4,4"
+ stroke-width="0.25"
+ stroke="#000000"
+ linecap="square" /><path
+ id="path14"
+ d="M6 2 l-4,4"
+ stroke-width="0.25"
+ stroke="#000000"
+ linecap="square" /><path
+ id="path16"
+ d="M4 0 l-4,4"
+ stroke-width="0.25"
+ stroke="#000000"
+ linecap="square" /></pattern><symbol
+ id="*Model_Space" /><symbol
+ id="*Paper_Space" /><symbol
+ id="*Paper_Space0" /><marker
+ orient="auto"
+ id="DistanceX-8"
+ style="overflow:visible"
+ refX="0.0"
+ refY="0.0"><path
+ id="path9-7"
+ d="M 3,-3 L -3,3 M 0,-5 L 0,5"
+ style="stroke:#000000; stroke-width:0.5" /></marker><pattern
+ id="Hatch-9"
+ x="0"
+ y="0"
+ patternUnits="userSpaceOnUse"
+ width="8"
+ height="8"><path
+ id="path12-5"
+ d="M8 4 l-4,4"
+ stroke-width="0.25"
+ stroke="#000000"
+ linecap="square" /><path
+ id="path14-5"
+ d="M6 2 l-4,4"
+ stroke-width="0.25"
+ stroke="#000000"
+ linecap="square" /><path
+ id="path16-2"
+ d="M4 0 l-4,4"
+ stroke-width="0.25"
+ stroke="#000000"
+ linecap="square" /></pattern><symbol
+ id="*Model_Space-0" /><symbol
+ id="*Paper_Space-5" /><symbol
+ id="*Paper_Space0-0" /></defs><sodipodi:namedview
+ inkscape:window-height="1019"
+ inkscape:window-width="1920"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:zoom="1.1519406"
+ inkscape:cx="274.80199"
+ inkscape:cy="339.22443"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:current-layer="g21-5"
+ showgrid="false"
+ inkscape:window-maximized="1"
+ inkscape:document-units="mm"
+ units="mm" /><g
+ inkscape:groupmode="layer"
+ id="layer7"
+ inkscape:label="Design Template"
+ style="display:inline"
+ sodipodi:insensitive="true"><g
+ id="layer7-8"
+ inkscape:label="Design Template"
+ transform="translate(0.7799525,0.1277278)" /><g
+ id="layer6"
+ inkscape:label="Design Template"
+ transform="translate(0.5338379,0.419927)" /><g
+ id="Layer_x0020_1-6"
+ style="fill:#f6921e;fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4"
+ transform="translate(681.42836,-160.06815)"><g
+ id="g4698-5"
+ transform="translate(-46.145191,-43.270487)" /></g><rect
+ id="rect21823"
+ height="541.41736"
+ width="541.41736"
+ x="0.89512694"
+ y="0.57997072"
+ style="fill:#f6921e" /><rect
+ id="rect21825"
+ height="513.0722"
+ width="513.07129"
+ y="14.753002"
+ x="15.068135"
+ style="fill:#ffffff" /><g
+ id="layer5"
+ inkscape:label="Your Design"
+ transform="translate(681.42836,-160.06815)" /><g
+ id="layer9-1"
+ inkscape:label="Your Design"
+ transform="translate(0.7799525,0.1277278)" /><g
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:11.19999981px;line-height:164.99999762%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1"
+ id="text4741"><path
+ d="m 570.64175,344.07065 1.80469,0 0,-6.22891 -1.96329,0.39375 0,-1.00625 1.95235,-0.39375 1.10469,0 0,7.23516 1.80468,0 0,0.92969 -4.70312,0 0,-0.92969"
+ id="path3154"
+ inkscape:connector-curvature="0" /><path
+ d="m 577.28081,336.5019 0.875,0 c 0.54687,0.86042 0.95521,1.70261 1.225,2.52656 0.27343,0.82396 0.41015,1.64245 0.41016,2.45547 -10e-6,0.81667 -0.13673,1.6388 -0.41016,2.46641 -0.26979,0.8276 -0.67813,1.66979 -1.225,2.52656 l -0.875,0 c 0.48489,-0.8349 0.84583,-1.66432 1.08281,-2.48828 0.24063,-0.82761 0.36094,-1.6625 0.36094,-2.50469 0,-0.84218 -0.12031,-1.67343 -0.36094,-2.49375 -0.23698,-0.82031 -0.59792,-1.64973 -1.08281,-2.48828"
+ id="path3156"
+ inkscape:connector-curvature="0" /><path
+ d="m 586.52847,337.7433 0,6.34922 1.33437,0 c 1.12656,0 1.95052,-0.2552 2.47188,-0.76562 0.52499,-0.51042 0.78749,-1.31614 0.7875,-2.41719 -10e-6,-1.09374 -0.26251,-1.894 -0.7875,-2.40078 -0.52136,-0.51041 -1.34532,-0.76562 -2.47188,-0.76563 l -1.33437,0 m -1.10469,-0.90781 2.26953,0 c 1.58229,1e-5 2.74348,0.32996 3.48359,0.98985 0.7401,0.65625 1.11015,1.68438 1.11016,3.08437 -10e-6,1.4073 -0.37188,2.44089 -1.11562,3.10078 -0.74376,0.6599 -1.90313,0.98985 -3.47813,0.98985 l -2.26953,0 0,-8.16485"
+ id="path3158"
+ inkscape:connector-curvature="0" /><path
+ d="m 599.23784,341.68627 0,0.49219 -4.62656,0 c 0.0438,0.69271 0.25156,1.22136 0.62344,1.58594 0.37551,0.36094 0.89687,0.54141 1.56406,0.5414 0.38645,1e-5 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.73099,0.26979 -1.11015,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97708,0 -1.75182,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85312,-1.33801 -0.85312,-2.30781 0,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82396,10e-6 1.47474,0.26615 1.95235,0.79844 0.48124,0.52865 0.72186,1.2487 0.72187,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29897,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,10e-6 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+ id="path3160"
+ inkscape:connector-curvature="0" /><path
+ d="m 600.8894,336.49096 1.00625,0 0,8.50938 -1.00625,0 0,-8.50938"
+ id="path3162"
+ inkscape:connector-curvature="0" /><path
+ d="m 609.23472,341.68627 0,0.49219 -4.62657,0 c 0.0437,0.69271 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.54141 1.56406,0.5414 0.38646,1e-5 0.76016,-0.0474 1.1211,-0.14218 0.36458,-0.0948 0.72551,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.73099,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.7638,0.12031 -1.1539,0.12031 -0.97709,0 -1.75183,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85313,-1.33801 -0.85313,-2.30781 0,-1.0026 0.2698,-1.79739 0.80938,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47473,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19218,-0.49219 -0.56147,10e-6 -1.01173,0.1586 -1.35079,0.47579 -0.33541,0.31719 -0.52864,0.7638 -0.57968,1.33984 l 3.5875,-0.005"
+ id="path3164"
+ inkscape:connector-curvature="0" /><path
+ d="m 611.88159,337.13627 0,1.73907 2.07266,0 0,0.78203 -2.07266,0 0,3.325 c 0,0.49948 0.0675,0.82031 0.20235,0.9625 0.13853,0.14219 0.41744,0.21328 0.83671,0.21328 l 1.0336,0 0,0.84219 -1.0336,0 c -0.77656,0 -1.3125,-0.14401 -1.60781,-0.43204 -0.29531,-0.29166 -0.44297,-0.82031 -0.44297,-1.58593 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73907 1.01172,0"
+ id="path3166"
+ inkscape:connector-curvature="0" /><path
+ d="m 620.52222,341.68627 0,0.49219 -4.62657,0 c 0.0437,0.69271 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.54141 1.56406,0.5414 0.38646,1e-5 0.76015,-0.0474 1.1211,-0.14218 0.36457,-0.0948 0.72551,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.7638,0.12031 -1.1539,0.12031 -0.97709,0 -1.75183,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85313,-1.33801 -0.85313,-2.30781 0,-1.0026 0.26979,-1.79739 0.80938,-2.38437 0.54322,-0.59062 1.27421,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47473,0.26615 1.95234,0.79844 0.48124,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,10e-6 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52864,0.7638 -0.57968,1.33984 l 3.5875,-0.005"
+ id="path3168"
+ inkscape:connector-curvature="0" /><path
+ d="m 626.73471,337.13627 0,1.73907 2.07266,0 0,0.78203 -2.07266,0 0,3.325 c 0,0.49948 0.0675,0.82031 0.20235,0.9625 0.13854,0.14219 0.41744,0.21328 0.83672,0.21328 l 1.03359,0 0,0.84219 -1.03359,0 c -0.77657,0 -1.3125,-0.14401 -1.60782,-0.43204 -0.29531,-0.29166 -0.44297,-0.82031 -0.44296,-1.58593 l 0,-3.325 -0.73829,0 0,-0.78203 0.73829,0 0,-1.73907 1.01171,0"
+ id="path3170"
+ inkscape:connector-curvature="0" /><path
+ d="m 635.22769,341.30346 0,3.69688 -1.00625,0 0,-3.66407 c -10e-6,-0.57968 -0.11303,-1.01353 -0.33907,-1.30156 -0.22604,-0.28801 -0.56511,-0.43203 -1.01718,-0.43203 -0.54324,0 -0.97162,0.17318 -1.28516,0.51953 -0.31354,0.34636 -0.47032,0.81849 -0.47031,1.41641 l 0,3.46172 -1.01172,0 0,-8.50938 1.01172,0 0,3.33594 c 0.24062,-0.36823 0.52317,-0.64349 0.84765,-0.82578 0.32812,-0.18229 0.70547,-0.27343 1.13203,-0.27344 0.70365,10e-6 1.23594,0.21876 1.59688,0.65625 0.36093,0.43386 0.5414,1.0737 0.54141,1.91953"
+ id="path3172"
+ inkscape:connector-curvature="0" /><path
+ d="m 642.48472,341.68627 0,0.49219 -4.62657,0 c 0.0437,0.69271 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.54141 1.56406,0.5414 0.38646,1e-5 0.76016,-0.0474 1.1211,-0.14218 0.36458,-0.0948 0.72551,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.73099,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.7638,0.12031 -1.1539,0.12031 -0.97709,0 -1.75183,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85313,-1.33801 -0.85313,-2.30781 0,-1.0026 0.2698,-1.79739 0.80938,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47473,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19218,-0.49219 -0.56147,10e-6 -1.01173,0.1586 -1.35079,0.47579 -0.33541,0.31719 -0.52864,0.7638 -0.57968,1.33984 l 3.5875,-0.005"
+ id="path3174"
+ inkscape:connector-curvature="0" /><path
+ d="m 652.94097,341.68627 0,0.49219 -4.62656,0 c 0.0438,0.69271 0.25156,1.22136 0.62343,1.58594 0.37552,0.36094 0.89688,0.54141 1.56407,0.5414 0.38645,1e-5 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.73099,0.26979 -1.11015,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97709,0 -1.75182,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85312,-1.33801 -0.85312,-2.30781 0,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47474,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29897,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,10e-6 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+ id="path3176"
+ inkscape:connector-curvature="0" /><path
+ d="m 659.49799,338.87534 -2.21484,2.98046 2.32969,3.14454 -1.18672,0 -1.78281,-2.40625 -1.78282,2.40625 -1.18671,0 2.3789,-3.20469 -2.17656,-2.92031 1.18672,0 1.62422,2.18203 1.62422,-2.18203 1.18671,0"
+ id="path3178"
+ inkscape:connector-curvature="0" /><path
+ d="m 663.82925,341.92143 c -0.81302,0 -1.3763,0.093 -1.68984,0.27891 -0.31355,0.18594 -0.47032,0.50312 -0.47032,0.95156 0,0.35729 0.11667,0.64167 0.35,0.85312 0.23698,0.20782 0.55781,0.31172 0.9625,0.31172 0.55781,0 1.00443,-0.19687 1.33985,-0.59062 0.33906,-0.3974 0.50859,-0.92422 0.50859,-1.58047 l 0,-0.22422 -1.00078,0 m 2.00703,-0.41563 0,3.49454 -1.00625,0 0,-0.92969 c -0.22969,0.37187 -0.51589,0.64713 -0.85859,0.82578 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62709,0 -1.12657,-0.175 -1.49844,-0.525 -0.36823,-0.35365 -0.55235,-0.82578 -0.55235,-1.41641 0,-0.68906 0.22969,-1.20859 0.68907,-1.55859 0.46302,-0.35 1.15208,-0.525 2.06718,-0.525 l 1.41094,0 0,-0.0984 c 0,-0.46301 -0.15313,-0.82031 -0.45937,-1.07187 -0.30261,-0.25521 -0.72917,-0.38281 -1.27969,-0.38282 -0.35,10e-6 -0.69089,0.0419 -1.02266,0.12579 -0.33177,0.0839 -0.65078,0.20964 -0.95703,0.37734 l 0,-0.92969 c 0.36823,-0.14218 0.72552,-0.24791 1.07188,-0.31719 0.34635,-0.0729 0.68359,-0.10936 1.01172,-0.10937 0.88593,1e-5 1.54765,0.22969 1.98515,0.68906 0.4375,0.45938 0.65625,1.15574 0.65625,2.08906"
+ id="path3180"
+ inkscape:connector-curvature="0" /><path
+ d="m 672.68315,340.05112 c 0.25156,-0.45208 0.55234,-0.78567 0.90234,-1.00078 0.35,-0.2151 0.76198,-0.32265 1.23594,-0.32266 0.63801,10e-6 1.1302,0.22422 1.47656,0.67266 0.34635,0.44479 0.51953,1.07917 0.51954,1.90312 l 0,3.69688 -1.01172,0 0,-3.66407 c -10e-6,-0.58697 -0.10392,-1.02265 -0.31172,-1.30703 -0.20782,-0.28437 -0.52501,-0.42656 -0.95156,-0.42656 -0.52137,0 -0.93334,0.17318 -1.23594,0.51953 -0.30261,0.34636 -0.45391,0.81849 -0.45391,1.41641 l 0,3.46172 -1.01172,0 0,-3.66407 c 0,-0.59062 -0.10391,-1.02629 -0.31172,-1.30703 -0.20781,-0.28437 -0.52865,-0.42656 -0.9625,-0.42656 -0.51406,0 -0.92239,0.175 -1.225,0.525 -0.3026,0.34636 -0.4539,0.81667 -0.4539,1.41094 l 0,3.46172 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.22968,-0.37552 0.50494,-0.6526 0.82578,-0.83125 0.32083,-0.17864 0.70182,-0.26796 1.14297,-0.26797 0.44479,10e-6 0.82213,0.11303 1.13203,0.33906 0.31354,0.22605 0.54505,0.55417 0.69453,0.98438"
+ id="path3182"
+ inkscape:connector-curvature="0" /><path
+ d="m 679.80347,344.08159 0,3.24843 -1.01172,0 0,-8.45468 1.01172,0 0,0.92968 c 0.21145,-0.36457 0.4776,-0.63437 0.79843,-0.80937 0.32448,-0.17864 0.71094,-0.26796 1.15938,-0.26797 0.74374,10e-6 1.34713,0.29532 1.81015,0.88594 0.46666,0.59063 0.7,1.36719 0.7,2.32968 0,0.96251 -0.23334,1.73907 -0.7,2.32969 -0.46302,0.59063 -1.06641,0.88594 -1.81015,0.88594 -0.44844,0 -0.8349,-0.0875 -1.15938,-0.2625 -0.32083,-0.17865 -0.58698,-0.45026 -0.79843,-0.81484 m 3.42343,-2.13829 c 0,-0.7401 -0.15313,-1.31978 -0.45937,-1.73906 -0.30261,-0.42291 -0.72006,-0.63437 -1.25235,-0.63437 -0.53229,0 -0.95156,0.21146 -1.25781,0.63437 -0.3026,0.41928 -0.45391,0.99896 -0.4539,1.73906 -10e-6,0.74011 0.1513,1.32162 0.4539,1.74454 0.30625,0.41927 0.72552,0.6289 1.25781,0.6289 0.53229,0 0.94974,-0.20963 1.25235,-0.6289 0.30624,-0.42292 0.45937,-1.00443 0.45937,-1.74454"
+ id="path3184"
+ inkscape:connector-curvature="0" /><path
+ d="m 685.9394,336.49096 1.00625,0 0,8.50938 -1.00625,0 0,-8.50938"
+ id="path3186"
+ inkscape:connector-curvature="0" /><path
+ d="m 694.28471,341.68627 0,0.49219 -4.62656,0 c 0.0438,0.69271 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.54141 1.56406,0.5414 0.38645,1e-5 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08282,-0.42657 l 0,0.95157 c -0.36095,0.15312 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97708,0 -1.75182,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85312,-1.33801 -0.85312,-2.30781 0,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82396,10e-6 1.47474,0.26615 1.95235,0.79844 0.48124,0.52865 0.72187,1.2487 0.72187,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,10e-6 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+ id="path3188"
+ inkscape:connector-curvature="0" /><path
+ d="m 703.89879,341.9433 c -10e-6,-0.7401 -0.15313,-1.31978 -0.45938,-1.73906 -0.30261,-0.42291 -0.72006,-0.63437 -1.25234,-0.63437 -0.5323,0 -0.95157,0.21146 -1.25782,0.63437 -0.3026,0.41928 -0.4539,0.99896 -0.4539,1.73906 0,0.74011 0.1513,1.32162 0.4539,1.74454 0.30625,0.41927 0.72552,0.6289 1.25782,0.6289 0.53228,0 0.94973,-0.20963 1.25234,-0.6289 0.30625,-0.42292 0.45937,-1.00443 0.45938,-1.74454 m -3.42344,-2.13828 c 0.21145,-0.36457 0.4776,-0.63437 0.79844,-0.80937 0.32447,-0.17864 0.71093,-0.26796 1.15937,-0.26797 0.74375,10e-6 1.34713,0.29532 1.81016,0.88594 0.46666,0.59063 0.69999,1.36719 0.7,2.32968 -10e-6,0.96251 -0.23334,1.73907 -0.7,2.32969 -0.46303,0.59063 -1.06641,0.88594 -1.81016,0.88594 -0.44844,0 -0.8349,-0.0875 -1.15937,-0.2625 -0.32084,-0.17865 -0.58699,-0.45026 -0.79844,-0.81484 l 0,0.91875 -1.01172,0 0,-8.50938 1.01172,0 0,3.31406"
+ id="path3190"
+ inkscape:connector-curvature="0" /><path
+ d="m 706.61129,338.87534 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38438 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+ id="path3192"
+ inkscape:connector-curvature="0" /><path
+ d="m 713.26675,339.81596 c -0.11302,-0.0656 -0.23698,-0.11301 -0.37187,-0.14219 -0.13126,-0.0328 -0.27709,-0.0492 -0.4375,-0.0492 -0.56876,10e-6 -1.00626,0.18595 -1.3125,0.55782 -0.30261,0.36823 -0.45391,0.8987 -0.45391,1.5914 l 0,3.22657 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.21146,-0.37187 0.48672,-0.64713 0.82578,-0.82578 0.33906,-0.18229 0.75104,-0.27343 1.23594,-0.27344 0.0693,10e-6 0.14583,0.005 0.22969,0.0164 0.0838,0.007 0.17681,0.02 0.2789,0.0383 l 0.005,1.03359"
+ id="path3194"
+ inkscape:connector-curvature="0" /><path
+ d="m 718.17769,339.80502 0,-3.31406 1.00625,0 0,8.50938 -1.00625,0 0,-0.91875 c -0.21146,0.36458 -0.47943,0.63619 -0.80391,0.81484 -0.32084,0.175 -0.70729,0.2625 -1.15937,0.2625 -0.74011,0 -1.34349,-0.29531 -1.81016,-0.88594 -0.46302,-0.59062 -0.69453,-1.36718 -0.69453,-2.32969 0,-0.96249 0.23151,-1.73905 0.69453,-2.32968 0.46667,-0.59062 1.07005,-0.88593 1.81016,-0.88594 0.45208,10e-6 0.83853,0.0893 1.15937,0.26797 0.32448,0.175 0.59245,0.4448 0.80391,0.80937 m -3.42891,2.13828 c 0,0.74011 0.1513,1.32162 0.45391,1.74454 0.30625,0.41927 0.72552,0.6289 1.25781,0.6289 0.53229,0 0.95156,-0.20963 1.25781,-0.6289 0.30625,-0.42292 0.45937,-1.00443 0.45938,-1.74454 -10e-6,-0.7401 -0.15313,-1.31978 -0.45938,-1.73906 -0.30625,-0.42291 -0.72552,-0.63437 -1.25781,-0.63437 -0.53229,0 -0.95156,0.21146 -1.25781,0.63437 -0.30261,0.41928 -0.45391,0.99896 -0.45391,1.73906"
+ id="path3196"
+ inkscape:connector-curvature="0" /><path
+ d="m 728.86362,339.80502 0,-3.31406 1.00625,0 0,8.50938 -1.00625,0 0,-0.91875 c -0.21147,0.36458 -0.47943,0.63619 -0.80391,0.81484 -0.32084,0.175 -0.70729,0.2625 -1.15937,0.2625 -0.74011,0 -1.3435,-0.29531 -1.81016,-0.88594 -0.46302,-0.59062 -0.69453,-1.36718 -0.69453,-2.32969 0,-0.96249 0.23151,-1.73905 0.69453,-2.32968 0.46666,-0.59062 1.07005,-0.88593 1.81016,-0.88594 0.45208,10e-6 0.83853,0.0893 1.15937,0.26797 0.32448,0.175 0.59244,0.4448 0.80391,0.80937 m -3.42891,2.13828 c 0,0.74011 0.1513,1.32162 0.45391,1.74454 0.30624,0.41927 0.72551,0.6289 1.25781,0.6289 0.53229,0 0.95156,-0.20963 1.25781,-0.6289 0.30625,-0.42292 0.45937,-1.00443 0.45938,-1.74454 -10e-6,-0.7401 -0.15313,-1.31978 -0.45938,-1.73906 -0.30625,-0.42291 -0.72552,-0.63437 -1.25781,-0.63437 -0.5323,0 -0.95157,0.21146 -1.25781,0.63437 -0.30261,0.41928 -0.45391,0.99896 -0.45391,1.73906"
+ id="path3198"
+ inkscape:connector-curvature="0" /><path
+ d="m 737.18159,341.68627 0,0.49219 -4.62657,0 c 0.0437,0.69271 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.54141 1.56406,0.5414 0.38646,1e-5 0.76015,-0.0474 1.1211,-0.14218 0.36457,-0.0948 0.72551,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.7638,0.12031 -1.1539,0.12031 -0.97709,0 -1.75183,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85313,-1.33801 -0.85313,-2.30781 0,-1.0026 0.26979,-1.79739 0.80938,-2.38437 0.54323,-0.59062 1.27421,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47473,0.26615 1.95234,0.79844 0.48124,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,10e-6 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52864,0.7638 -0.57968,1.33984 l 3.5875,-0.005"
+ id="path3200"
+ inkscape:connector-curvature="0" /><path
+ d="m 742.73784,339.0558 0,0.95157 c -0.28438,-0.14583 -0.5797,-0.25521 -0.88594,-0.32813 -0.30626,-0.0729 -0.62344,-0.10937 -0.95156,-0.10937 -0.49949,0 -0.87501,0.0766 -1.12657,0.22968 -0.24792,0.15313 -0.37187,0.38282 -0.37187,0.68907 0,0.23333 0.0893,0.41745 0.26797,0.55234 0.17864,0.13125 0.53775,0.25704 1.07734,0.37734 l 0.34453,0.0766 c 0.71458,0.15313 1.22135,0.37005 1.52031,0.65078 0.3026,0.27708 0.45391,0.66537 0.45391,1.16484 0,0.56875 -0.22605,1.01901 -0.67812,1.35078 -0.44845,0.33177 -1.06641,0.49766 -1.85391,0.49766 -0.32813,0 -0.67084,-0.0328 -1.02813,-0.0984 -0.35364,-0.062 -0.72734,-0.15677 -1.12109,-0.28437 l 0,-1.03907 c 0.37187,0.19323 0.73828,0.33907 1.09922,0.4375 0.36093,0.0948 0.71823,0.14219 1.07187,0.14219 0.47396,0 0.83854,-0.0802 1.09375,-0.24062 0.25521,-0.16406 0.38281,-0.39375 0.38282,-0.68907 -10e-6,-0.27343 -0.093,-0.48307 -0.27891,-0.6289 -0.18229,-0.14583 -0.58516,-0.2862 -1.20859,-0.4211 l -0.35,-0.082 c -0.62344,-0.13124 -1.0737,-0.33176 -1.35078,-0.60156 -0.27709,-0.27343 -0.41563,-0.64713 -0.41563,-1.12109 0,-0.57604 0.20417,-1.02083 0.6125,-1.33438 0.40833,-0.31353 0.98802,-0.4703 1.73906,-0.47031 0.37187,1e-5 0.72187,0.0273 1.05,0.082 0.32812,0.0547 0.63073,0.13673 0.90782,0.24609"
+ id="path3202"
+ inkscape:connector-curvature="0" /><path
+ d="m 744.67379,338.87534 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38438 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+ id="path3204"
+ inkscape:connector-curvature="0" /><path
+ d="m 751.8105,341.86674 c 0,-0.72916 -0.15131,-1.29426 -0.45391,-1.69531 -0.29896,-0.40104 -0.72005,-0.60156 -1.26328,-0.60156 -0.53958,0 -0.96068,0.20052 -1.26328,0.60156 -0.29896,0.40105 -0.44844,0.96615 -0.44844,1.69531 0,0.72553 0.14948,1.28881 0.44844,1.68985 0.3026,0.40104 0.7237,0.60156 1.26328,0.60156 0.54323,0 0.96432,-0.20052 1.26328,-0.60156 0.3026,-0.40104 0.45391,-0.96432 0.45391,-1.68985 m 1.00625,2.37344 c -10e-6,1.04271 -0.23152,1.81745 -0.69453,2.32422 -0.46303,0.51041 -1.17214,0.76562 -2.12734,0.76562 -0.35365,0 -0.68725,-0.0273 -1.00079,-0.082 -0.31354,-0.051 -0.61797,-0.13125 -0.91328,-0.24062 l 0,-0.97891 c 0.29531,0.16042 0.58698,0.27891 0.875,0.35547 0.28802,0.0766 0.58151,0.11484 0.88047,0.11484 0.65989,0 1.1539,-0.17318 1.48203,-0.51953 0.32812,-0.34271 0.49219,-0.86224 0.49219,-1.55859 l 0,-0.49766 c -0.20782,0.36094 -0.47396,0.63073 -0.79844,0.80938 -0.32448,0.17864 -0.71276,0.26797 -1.16484,0.26797 -0.75104,0 -1.35625,-0.2862 -1.81563,-0.8586 -0.45937,-0.57239 -0.68906,-1.33072 -0.68906,-2.275 0,-0.94791 0.22969,-1.70807 0.68906,-2.28047 0.45938,-0.57239 1.06459,-0.85858 1.81563,-0.85859 0.45208,10e-6 0.84036,0.0893 1.16484,0.26797 0.32448,0.17865 0.59062,0.44844 0.79844,0.80937 l 0,-0.92968 1.00625,0 0,5.36484"
+ id="path3206"
+ inkscape:connector-curvature="0" /><path
+ d="m 759.98081,341.30346 0,3.69688 -1.00625,0 0,-3.66407 c 0,-0.57968 -0.11302,-1.01353 -0.33906,-1.30156 -0.22605,-0.28801 -0.56511,-0.43203 -1.01719,-0.43203 -0.54323,0 -0.97161,0.17318 -1.28515,0.51953 -0.31355,0.34636 -0.47032,0.81849 -0.47032,1.41641 l 0,3.46172 -1.01171,0 0,-6.125 1.01171,0 0,0.95156 c 0.24063,-0.36823 0.52318,-0.64349 0.84766,-0.82578 0.32812,-0.18229 0.70547,-0.27343 1.13203,-0.27344 0.70364,10e-6 1.23593,0.21876 1.59688,0.65625 0.36093,0.43386 0.5414,1.0737 0.5414,1.91953"
+ id="path3208"
+ inkscape:connector-curvature="0" /><path
+ d="m 765.56441,336.49096 1.00625,0 0,8.50938 -1.00625,0 0,-8.50938"
+ id="path3210"
+ inkscape:connector-curvature="0" /><path
+ d="m 771.45425,341.92143 c -0.81302,0 -1.3763,0.093 -1.68984,0.27891 -0.31355,0.18594 -0.47032,0.50312 -0.47032,0.95156 0,0.35729 0.11667,0.64167 0.35,0.85312 0.23698,0.20782 0.55781,0.31172 0.9625,0.31172 0.55781,0 1.00443,-0.19687 1.33985,-0.59062 0.33906,-0.3974 0.50859,-0.92422 0.50859,-1.58047 l 0,-0.22422 -1.00078,0 m 2.00703,-0.41563 0,3.49454 -1.00625,0 0,-0.92969 c -0.22969,0.37187 -0.51589,0.64713 -0.85859,0.82578 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62709,0 -1.12657,-0.175 -1.49844,-0.525 -0.36823,-0.35365 -0.55235,-0.82578 -0.55235,-1.41641 0,-0.68906 0.22969,-1.20859 0.68907,-1.55859 0.46302,-0.35 1.15208,-0.525 2.06718,-0.525 l 1.41094,0 0,-0.0984 c 0,-0.46301 -0.15313,-0.82031 -0.45937,-1.07187 -0.30261,-0.25521 -0.72917,-0.38281 -1.27969,-0.38282 -0.35,10e-6 -0.69089,0.0419 -1.02266,0.12579 -0.33177,0.0839 -0.65078,0.20964 -0.95703,0.37734 l 0,-0.92969 c 0.36823,-0.14218 0.72552,-0.24791 1.07188,-0.31719 0.34635,-0.0729 0.68359,-0.10936 1.01172,-0.10937 0.88593,1e-5 1.54765,0.22969 1.98515,0.68906 0.4375,0.45938 0.65625,1.15574 0.65625,2.08906"
+ id="path3212"
+ inkscape:connector-curvature="0" /><path
+ d="m 778.08784,345.56909 c -0.28438,0.72916 -0.56146,1.20494 -0.83125,1.42734 -0.2698,0.22239 -0.63073,0.33359 -1.08281,0.33359 l -0.80391,0 0,-0.84218 0.59062,0 c 0.27709,-1e-5 0.49219,-0.0656 0.64532,-0.19688 0.15312,-0.13125 0.32265,-0.44115 0.50859,-0.92969 l 0.18047,-0.45937 -2.47734,-6.02656 1.0664,0 1.91406,4.79062 1.91407,-4.79062 1.0664,0 -2.69062,6.69375"
+ id="path3214"
+ inkscape:connector-curvature="0" /><path
+ d="m 787.40659,341.68627 0,0.49219 -4.62656,0 c 0.0438,0.69271 0.25156,1.22136 0.62344,1.58594 0.37551,0.36094 0.89687,0.54141 1.56406,0.5414 0.38645,1e-5 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08282,-0.42657 l 0,0.95157 c -0.36095,0.15312 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97708,0 -1.75182,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85312,-1.33801 -0.85312,-2.30781 0,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82396,10e-6 1.47474,0.26615 1.95235,0.79844 0.48124,0.52865 0.72187,1.2487 0.72187,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,10e-6 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+ id="path3216"
+ inkscape:connector-curvature="0" /><path
+ d="m 792.60737,339.81596 c -0.11302,-0.0656 -0.23698,-0.11301 -0.37187,-0.14219 -0.13126,-0.0328 -0.27709,-0.0492 -0.4375,-0.0492 -0.56876,10e-6 -1.00625,0.18595 -1.3125,0.55782 -0.30261,0.36823 -0.45391,0.8987 -0.45391,1.5914 l 0,3.22657 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.21146,-0.37187 0.48672,-0.64713 0.82578,-0.82578 0.33906,-0.18229 0.75104,-0.27343 1.23594,-0.27344 0.0693,10e-6 0.14583,0.005 0.22969,0.0164 0.0838,0.007 0.17682,0.02 0.2789,0.0383 l 0.005,1.03359"
+ id="path3218"
+ inkscape:connector-curvature="0" /><path
+ d="m 800.34018,336.49096 0,0.83672 -0.9625,0 c -0.36094,1e-5 -0.6125,0.0729 -0.75469,0.21875 -0.13854,0.14584 -0.20781,0.40834 -0.20781,0.7875 l 0,0.54141 1.65703,0 0,0.78203 -1.65703,0 0,5.34297 -1.01172,0 0,-5.34297 -0.9625,0 0,-0.78203 0.9625,0 0,-0.42657 c 0,-0.68176 0.15859,-1.17759 0.47578,-1.4875 0.31719,-0.31353 0.82031,-0.4703 1.50938,-0.47031 l 0.95156,0"
+ id="path3220"
+ inkscape:connector-curvature="0" /><path
+ d="m 804.72612,339.81596 c -0.11303,-0.0656 -0.23699,-0.11301 -0.37188,-0.14219 -0.13125,-0.0328 -0.27709,-0.0492 -0.4375,-0.0492 -0.56875,10e-6 -1.00625,0.18595 -1.3125,0.55782 -0.3026,0.36823 -0.45391,0.8987 -0.4539,1.5914 l 0,3.22657 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.21145,-0.37187 0.48671,-0.64713 0.82578,-0.82578 0.33906,-0.18229 0.75103,-0.27343 1.23593,-0.27344 0.0693,10e-6 0.14583,0.005 0.22969,0.0164 0.0838,0.007 0.17682,0.02 0.27891,0.0383 l 0.005,1.03359"
+ id="path3222"
+ inkscape:connector-curvature="0" /><path
+ d="m 807.93628,339.5808 c -0.53959,10e-6 -0.96615,0.21147 -1.27969,0.63438 -0.31354,0.41927 -0.47032,0.99532 -0.47031,1.72812 -10e-6,0.73282 0.15494,1.31068 0.46484,1.7336 0.31354,0.41927 0.74192,0.62891 1.28516,0.6289 0.53593,1e-5 0.96067,-0.21145 1.27421,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47032,-1.72813 -10e-6,-0.72551 -0.15678,-1.29973 -0.47032,-1.72265 -0.31354,-0.42656 -0.73828,-0.63984 -1.27421,-0.63985 m 0,-0.85312 c 0.87499,10e-6 1.56223,0.28438 2.06171,0.85312 0.49948,0.56876 0.74922,1.35626 0.74922,2.3625 0,1.00261 -0.24974,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06171,0.85313 -0.87865,0 -1.56771,-0.28438 -2.06719,-0.85313 -0.49584,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00624 0.24791,-1.79374 0.74375,-2.3625 0.49948,-0.56874 1.18854,-0.85311 2.06719,-0.85312"
+ id="path3224"
+ inkscape:connector-curvature="0" /><path
+ d="m 817.18941,340.05112 c 0.25155,-0.45208 0.55233,-0.78567 0.90234,-1.00078 0.34999,-0.2151 0.76197,-0.32265 1.23594,-0.32266 0.63801,10e-6 1.1302,0.22422 1.47656,0.67266 0.34635,0.44479 0.51952,1.07917 0.51953,1.90312 l 0,3.69688 -1.01172,0 0,-3.66407 c -10e-6,-0.58697 -0.10391,-1.02265 -0.31172,-1.30703 -0.20782,-0.28437 -0.525,-0.42656 -0.95156,-0.42656 -0.52136,0 -0.93334,0.17318 -1.23594,0.51953 -0.30261,0.34636 -0.45391,0.81849 -0.4539,1.41641 l 0,3.46172 -1.01172,0 0,-3.66407 c -10e-6,-0.59062 -0.10391,-1.02629 -0.31172,-1.30703 -0.20782,-0.28437 -0.52865,-0.42656 -0.9625,-0.42656 -0.51406,0 -0.9224,0.175 -1.225,0.525 -0.30261,0.34636 -0.45391,0.81667 -0.45391,1.41094 l 0,3.46172 -1.01171,0 0,-6.125 1.01171,0 0,0.95156 c 0.22969,-0.37552 0.50495,-0.6526 0.82579,-0.83125 0.32083,-0.17864 0.70182,-0.26796 1.14296,-0.26797 0.44479,10e-6 0.82214,0.11303 1.13204,0.33906 0.31353,0.22605 0.54504,0.55417 0.69453,0.98438"
+ id="path3226"
+ inkscape:connector-curvature="0" /><path
+ d="m 827.89722,337.13627 0,1.73907 2.07265,0 0,0.78203 -2.07265,0 0,3.325 c -10e-6,0.49948 0.0674,0.82031 0.20234,0.9625 0.13854,0.14219 0.41745,0.21328 0.83672,0.21328 l 1.03359,0 0,0.84219 -1.03359,0 c -0.77657,0 -1.3125,-0.14401 -1.60781,-0.43204 -0.29532,-0.29166 -0.44297,-0.82031 -0.44297,-1.58593 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73907 1.01172,0"
+ id="path3228"
+ inkscape:connector-curvature="0" /><path
+ d="m 836.39019,341.30346 0,3.69688 -1.00625,0 0,-3.66407 c 0,-0.57968 -0.11302,-1.01353 -0.33906,-1.30156 -0.22605,-0.28801 -0.56511,-0.43203 -1.01719,-0.43203 -0.54323,0 -0.97162,0.17318 -1.28515,0.51953 -0.31355,0.34636 -0.47032,0.81849 -0.47032,1.41641 l 0,3.46172 -1.01172,0 0,-8.50938 1.01172,0 0,3.33594 c 0.24063,-0.36823 0.52318,-0.64349 0.84766,-0.82578 0.32812,-0.18229 0.70546,-0.27343 1.13203,-0.27344 0.70364,10e-6 1.23593,0.21876 1.59688,0.65625 0.36093,0.43386 0.5414,1.0737 0.5414,1.91953"
+ id="path3230"
+ inkscape:connector-curvature="0" /><path
+ d="m 838.40816,338.87534 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38438 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+ id="path3232"
+ inkscape:connector-curvature="0" /><path
+ d="m 845.41908,339.0558 0,0.95157 c -0.28438,-0.14583 -0.57969,-0.25521 -0.88594,-0.32813 -0.30625,-0.0729 -0.62344,-0.10937 -0.95156,-0.10937 -0.49948,0 -0.875,0.0766 -1.12656,0.22968 -0.24792,0.15313 -0.37188,0.38282 -0.37188,0.68907 0,0.23333 0.0893,0.41745 0.26797,0.55234 0.17864,0.13125 0.53776,0.25704 1.07734,0.37734 l 0.34454,0.0766 c 0.71458,0.15313 1.22135,0.37005 1.52031,0.65078 0.3026,0.27708 0.4539,0.66537 0.4539,1.16484 0,0.56875 -0.22604,1.01901 -0.67812,1.35078 -0.44844,0.33177 -1.06641,0.49766 -1.85391,0.49766 -0.32812,0 -0.67083,-0.0328 -1.02812,-0.0984 -0.35365,-0.062 -0.72735,-0.15677 -1.1211,-0.28437 l 0,-1.03907 c 0.37188,0.19323 0.73828,0.33907 1.09922,0.4375 0.36094,0.0948 0.71823,0.14219 1.07188,0.14219 0.47395,0 0.83854,-0.0802 1.09375,-0.24062 0.2552,-0.16406 0.38281,-0.39375 0.38281,-0.68907 0,-0.27343 -0.093,-0.48307 -0.27891,-0.6289 -0.18229,-0.14583 -0.58516,-0.2862 -1.20859,-0.4211 l -0.35,-0.082 c -0.62344,-0.13124 -1.0737,-0.33176 -1.35078,-0.60156 -0.27708,-0.27343 -0.41563,-0.64713 -0.41563,-1.12109 0,-0.57604 0.20417,-1.02083 0.6125,-1.33438 0.40834,-0.31353 0.98802,-0.4703 1.73907,-0.47031 0.37187,1e-5 0.72187,0.0273 1.05,0.082 0.32812,0.0547 0.63072,0.13673 0.90781,0.24609"
+ id="path3234"
+ inkscape:connector-curvature="0" /><path
+ d="m 854.02142,336.49096 0,0.83672 -0.9625,0 c -0.36094,1e-5 -0.6125,0.0729 -0.75468,0.21875 -0.13855,0.14584 -0.20782,0.40834 -0.20782,0.7875 l 0,0.54141 1.65703,0 0,0.78203 -1.65703,0 0,5.34297 -1.01172,0 0,-5.34297 -0.9625,0 0,-0.78203 0.9625,0 0,-0.42657 c 0,-0.68176 0.1586,-1.17759 0.47579,-1.4875 0.31718,-0.31353 0.82031,-0.4703 1.50937,-0.47031 l 0.95156,0"
+ id="path3236"
+ inkscape:connector-curvature="0" /><path
+ d="m 854.85814,338.87534 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38438 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+ id="path3238"
+ inkscape:connector-curvature="0" /><path
+ d="m 857.9644,336.49096 1.00625,0 0,8.50938 -1.00625,0 0,-8.50938"
+ id="path3240"
+ inkscape:connector-curvature="0" /><path
+ d="m 866.30973,341.68627 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22136 0.62343,1.58594 0.37552,0.36094 0.89688,0.54141 1.56407,0.5414 0.38645,1e-5 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.73099,0.26979 -1.11015,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97709,0 -1.75182,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85312,-1.33801 -0.85312,-2.30781 0,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47473,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46484,-1.31797 -0.29897,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,10e-6 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+ id="path3242"
+ inkscape:connector-curvature="0" /><path
+ d="m 872.52222,337.13627 0,1.73907 2.07265,0 0,0.78203 -2.07265,0 0,3.325 c -10e-6,0.49948 0.0674,0.82031 0.20234,0.9625 0.13854,0.14219 0.41745,0.21328 0.83672,0.21328 l 1.03359,0 0,0.84219 -1.03359,0 c -0.77657,0 -1.3125,-0.14401 -1.60781,-0.43204 -0.29532,-0.29166 -0.44297,-0.82031 -0.44297,-1.58593 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73907 1.01172,0"
+ id="path3244"
+ inkscape:connector-curvature="0" /><path
+ d="m 878.29722,339.5808 c -0.53958,10e-6 -0.96615,0.21147 -1.27968,0.63438 -0.31355,0.41927 -0.47032,0.99532 -0.47032,1.72812 0,0.73282 0.15495,1.31068 0.46485,1.7336 0.31354,0.41927 0.74192,0.62891 1.28515,0.6289 0.53594,1e-5 0.96068,-0.21145 1.27422,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47031,-1.72813 0,-0.72551 -0.15677,-1.29973 -0.47031,-1.72265 -0.31354,-0.42656 -0.73828,-0.63984 -1.27422,-0.63985 m 0,-0.85312 c 0.875,10e-6 1.56224,0.28438 2.06172,0.85312 0.49947,0.56876 0.74921,1.35626 0.74922,2.3625 -10e-6,1.00261 -0.24975,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06172,0.85313 -0.87865,0 -1.56771,-0.28438 -2.06718,-0.85313 -0.49584,-0.57239 -0.74376,-1.35989 -0.74375,-2.3625 -1e-5,-1.00624 0.24791,-1.79374 0.74375,-2.3625 0.49947,-0.56874 1.18853,-0.85311 2.06718,-0.85312"
+ id="path3246"
+ inkscape:connector-curvature="0" /><path
+ d="m 889.11985,341.92143 c -0.81302,0 -1.3763,0.093 -1.68984,0.27891 -0.31354,0.18594 -0.47031,0.50312 -0.47031,0.95156 0,0.35729 0.11666,0.64167 0.35,0.85312 0.23698,0.20782 0.55781,0.31172 0.9625,0.31172 0.55781,0 1.00442,-0.19687 1.33984,-0.59062 0.33906,-0.3974 0.50859,-0.92422 0.5086,-1.58047 l 0,-0.22422 -1.00079,0 m 2.00704,-0.41563 0,3.49454 -1.00625,0 0,-0.92969 c -0.2297,0.37187 -0.51589,0.64713 -0.8586,0.82578 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62709,0 -1.12656,-0.175 -1.49844,-0.525 -0.36823,-0.35365 -0.55234,-0.82578 -0.55234,-1.41641 0,-0.68906 0.22969,-1.20859 0.68906,-1.55859 0.46302,-0.35 1.15208,-0.525 2.06719,-0.525 l 1.41094,0 0,-0.0984 c -10e-6,-0.46301 -0.15313,-0.82031 -0.45938,-1.07187 -0.30261,-0.25521 -0.72917,-0.38281 -1.27969,-0.38282 -0.35,10e-6 -0.69088,0.0419 -1.02265,0.12579 -0.33178,0.0839 -0.65079,0.20964 -0.95703,0.37734 l 0,-0.92969 c 0.36822,-0.14218 0.72551,-0.24791 1.07187,-0.31719 0.34635,-0.0729 0.68359,-0.10936 1.01172,-0.10937 0.88593,1e-5 1.54765,0.22969 1.98516,0.68906 0.43749,0.45938 0.65624,1.15574 0.65625,2.08906"
+ id="path3248"
+ inkscape:connector-curvature="0" /><path
+ d="m 892.48316,338.87534 1.06641,0 1.91406,5.14062 1.91406,-5.14062 1.06641,0 -2.29688,6.125 -1.36718,0 -2.29688,-6.125"
+ id="path3250"
+ inkscape:connector-curvature="0" /><path
+ d="m 902.20659,339.5808 c -0.53959,10e-6 -0.96615,0.21147 -1.27969,0.63438 -0.31355,0.41927 -0.47032,0.99532 -0.47031,1.72812 -10e-6,0.73282 0.15494,1.31068 0.46484,1.7336 0.31354,0.41927 0.74192,0.62891 1.28516,0.6289 0.53593,1e-5 0.96067,-0.21145 1.27421,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47032,-1.72813 -10e-6,-0.72551 -0.15678,-1.29973 -0.47032,-1.72265 -0.31354,-0.42656 -0.73828,-0.63984 -1.27421,-0.63985 m 0,-0.85312 c 0.87499,10e-6 1.56223,0.28438 2.06171,0.85312 0.49948,0.56876 0.74922,1.35626 0.74922,2.3625 0,1.00261 -0.24974,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06171,0.85313 -0.87865,0 -1.56771,-0.28438 -2.06719,-0.85313 -0.49584,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00624 0.24791,-1.79374 0.74375,-2.3625 0.49948,-0.56874 1.18854,-0.85311 2.06719,-0.85312"
+ id="path3252"
+ inkscape:connector-curvature="0" /><path
+ d="m 906.68001,338.87534 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38438 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+ id="path3254"
+ inkscape:connector-curvature="0" /><path
+ d="m 913.81674,339.80502 0,-3.31406 1.00625,0 0,8.50938 -1.00625,0 0,-0.91875 c -0.21146,0.36458 -0.47943,0.63619 -0.8039,0.81484 -0.32084,0.175 -0.7073,0.2625 -1.15938,0.2625 -0.74011,0 -1.34349,-0.29531 -1.81016,-0.88594 -0.46302,-0.59062 -0.69453,-1.36718 -0.69453,-2.32969 0,-0.96249 0.23151,-1.73905 0.69453,-2.32968 0.46667,-0.59062 1.07005,-0.88593 1.81016,-0.88594 0.45208,10e-6 0.83854,0.0893 1.15938,0.26797 0.32447,0.175 0.59244,0.4448 0.8039,0.80937 m -3.4289,2.13828 c -10e-6,0.74011 0.1513,1.32162 0.4539,1.74454 0.30625,0.41927 0.72552,0.6289 1.25781,0.6289 0.53229,0 0.95156,-0.20963 1.25782,-0.6289 0.30624,-0.42292 0.45937,-1.00443 0.45937,-1.74454 0,-0.7401 -0.15313,-1.31978 -0.45937,-1.73906 -0.30626,-0.42291 -0.72553,-0.63437 -1.25782,-0.63437 -0.53229,0 -0.95156,0.21146 -1.25781,0.63437 -0.3026,0.41928 -0.45391,0.99896 -0.4539,1.73906"
+ id="path3256"
+ inkscape:connector-curvature="0" /><path
+ d="m 921.45657,337.13627 0,1.73907 2.07266,0 0,0.78203 -2.07266,0 0,3.325 c 0,0.49948 0.0674,0.82031 0.20235,0.9625 0.13854,0.14219 0.41744,0.21328 0.83672,0.21328 l 1.03359,0 0,0.84219 -1.03359,0 c -0.77657,0 -1.31251,-0.14401 -1.60782,-0.43204 -0.29531,-0.29166 -0.44297,-0.82031 -0.44297,-1.58593 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73907 1.01172,0"
+ id="path3258"
+ inkscape:connector-curvature="0" /><path
+ d="m 929.94955,341.30346 0,3.69688 -1.00625,0 0,-3.66407 c -10e-6,-0.57968 -0.11303,-1.01353 -0.33906,-1.30156 -0.22605,-0.28801 -0.56511,-0.43203 -1.01719,-0.43203 -0.54323,0 -0.97162,0.17318 -1.28516,0.51953 -0.31354,0.34636 -0.47031,0.81849 -0.47031,1.41641 l 0,3.46172 -1.01172,0 0,-8.50938 1.01172,0 0,3.33594 c 0.24062,-0.36823 0.52317,-0.64349 0.84766,-0.82578 0.32812,-0.18229 0.70546,-0.27343 1.13203,-0.27344 0.70364,10e-6 1.23593,0.21876 1.59687,0.65625 0.36093,0.43386 0.5414,1.0737 0.54141,1.91953"
+ id="path3260"
+ inkscape:connector-curvature="0" /><path
+ d="m 937.20658,341.68627 0,0.49219 -4.62656,0 c 0.0438,0.69271 0.25156,1.22136 0.62343,1.58594 0.37552,0.36094 0.89688,0.54141 1.56407,0.5414 0.38645,1e-5 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.73099,0.26979 -1.11015,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97709,0 -1.75182,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85312,-1.33801 -0.85312,-2.30781 0,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47474,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46484,-1.31797 -0.29897,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,10e-6 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+ id="path3262"
+ inkscape:connector-curvature="0" /><path
+ d="m 946.8316,339.11049 0,0.94063 c -0.28438,-0.15677 -0.57058,-0.27344 -0.8586,-0.35 -0.28438,-0.0802 -0.5724,-0.12031 -0.86406,-0.12032 -0.65261,10e-6 -1.15938,0.20782 -1.52031,0.62344 -0.36094,0.41199 -0.54141,0.99167 -0.54141,1.73906 0,0.7474 0.18047,1.32891 0.54141,1.74454 0.36093,0.41198 0.8677,0.61797 1.52031,0.61796 0.29166,1e-5 0.57968,-0.0383 0.86406,-0.11484 0.28802,-0.0802 0.57422,-0.1987 0.8586,-0.35547 l 0,0.92969 c -0.28074,0.13125 -0.5724,0.22969 -0.875,0.29531 -0.29896,0.0656 -0.61797,0.0984 -0.95703,0.0984 -0.9224,0 -1.65521,-0.28984 -2.19844,-0.86953 -0.54323,-0.57969 -0.81485,-1.36172 -0.81484,-2.3461 -1e-5,-0.99895 0.27343,-1.78463 0.82031,-2.35703 0.55052,-0.57239 1.30338,-0.85858 2.25859,-0.85859 0.30989,10e-6 0.6125,0.0328 0.90781,0.0984 0.29531,0.062 0.58151,0.15677 0.8586,0.28437"
+ id="path3264"
+ inkscape:connector-curvature="0" /><path
+ d="m 950.96595,339.5808 c -0.53958,10e-6 -0.96614,0.21147 -1.27968,0.63438 -0.31355,0.41927 -0.47032,0.99532 -0.47032,1.72812 0,0.73282 0.15495,1.31068 0.46485,1.7336 0.31354,0.41927 0.74192,0.62891 1.28515,0.6289 0.53594,1e-5 0.96068,-0.21145 1.27422,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47032,-1.72813 -1e-5,-0.72551 -0.15678,-1.29973 -0.47032,-1.72265 -0.31354,-0.42656 -0.73828,-0.63984 -1.27422,-0.63985 m 0,-0.85312 c 0.875,10e-6 1.56224,0.28438 2.06172,0.85312 0.49948,0.56876 0.74922,1.35626 0.74922,2.3625 0,1.00261 -0.24974,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06172,0.85313 -0.87864,0 -1.56771,-0.28438 -2.06718,-0.85313 -0.49584,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00624 0.24791,-1.79374 0.74375,-2.3625 0.49947,-0.56874 1.18854,-0.85311 2.06718,-0.85312"
+ id="path3266"
+ inkscape:connector-curvature="0" /><path
+ d="m 959.3441,339.0558 0,0.95157 c -0.28438,-0.14583 -0.57969,-0.25521 -0.88594,-0.32813 -0.30625,-0.0729 -0.62344,-0.10937 -0.95156,-0.10937 -0.49948,0 -0.875,0.0766 -1.12656,0.22968 -0.24792,0.15313 -0.37188,0.38282 -0.37188,0.68907 0,0.23333 0.0893,0.41745 0.26797,0.55234 0.17864,0.13125 0.53776,0.25704 1.07734,0.37734 l 0.34453,0.0766 c 0.71458,0.15313 1.22135,0.37005 1.52032,0.65078 0.3026,0.27708 0.4539,0.66537 0.4539,1.16484 0,0.56875 -0.22604,1.01901 -0.67812,1.35078 -0.44844,0.33177 -1.06641,0.49766 -1.85391,0.49766 -0.32813,0 -0.67083,-0.0328 -1.02812,-0.0984 -0.35365,-0.062 -0.72735,-0.15677 -1.1211,-0.28437 l 0,-1.03907 c 0.37188,0.19323 0.73828,0.33907 1.09922,0.4375 0.36094,0.0948 0.71823,0.14219 1.07188,0.14219 0.47395,0 0.83853,-0.0802 1.09375,-0.24062 0.2552,-0.16406 0.3828,-0.39375 0.38281,-0.68907 -1e-5,-0.27343 -0.093,-0.48307 -0.27891,-0.6289 -0.18229,-0.14583 -0.58516,-0.2862 -1.20859,-0.4211 l -0.35,-0.082 c -0.62344,-0.13124 -1.0737,-0.33176 -1.35078,-0.60156 -0.27709,-0.27343 -0.41563,-0.64713 -0.41563,-1.12109 0,-0.57604 0.20417,-1.02083 0.6125,-1.33438 0.40833,-0.31353 0.98802,-0.4703 1.73907,-0.47031 0.37187,1e-5 0.72187,0.0273 1.05,0.082 0.32812,0.0547 0.63072,0.13673 0.90781,0.24609"
+ id="path3268"
+ inkscape:connector-curvature="0" /><path
+ d="m 962.27533,337.13627 0,1.73907 2.07266,0 0,0.78203 -2.07266,0 0,3.325 c 0,0.49948 0.0674,0.82031 0.20234,0.9625 0.13854,0.14219 0.41745,0.21328 0.83672,0.21328 l 1.0336,0 0,0.84219 -1.0336,0 c -0.77656,0 -1.3125,-0.14401 -1.60781,-0.43204 -0.29531,-0.29166 -0.44297,-0.82031 -0.44297,-1.58593 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73907 1.01172,0"
+ id="path3270"
+ inkscape:connector-curvature="0" /><path
+ d="m 972.34329,336.49096 0,0.83672 -0.9625,0 c -0.36094,1e-5 -0.6125,0.0729 -0.75469,0.21875 -0.13854,0.14584 -0.20781,0.40834 -0.20781,0.7875 l 0,0.54141 1.65703,0 0,0.78203 -1.65703,0 0,5.34297 -1.01172,0 0,-5.34297 -0.9625,0 0,-0.78203 0.9625,0 0,-0.42657 c 0,-0.68176 0.1586,-1.17759 0.47578,-1.4875 0.31719,-0.31353 0.82031,-0.4703 1.50938,-0.47031 l 0.95156,0"
+ id="path3272"
+ inkscape:connector-curvature="0" /><path
+ d="m 975.55345,339.5808 c -0.53959,10e-6 -0.96615,0.21147 -1.27969,0.63438 -0.31354,0.41927 -0.47031,0.99532 -0.47031,1.72812 0,0.73282 0.15494,1.31068 0.46484,1.7336 0.31354,0.41927 0.74193,0.62891 1.28516,0.6289 0.53593,1e-5 0.96067,-0.21145 1.27422,-0.63437 0.31353,-0.42292 0.4703,-0.99896 0.47031,-1.72813 -1e-5,-0.72551 -0.15678,-1.29973 -0.47031,-1.72265 -0.31355,-0.42656 -0.73829,-0.63984 -1.27422,-0.63985 m 0,-0.85312 c 0.87499,10e-6 1.56223,0.28438 2.06172,0.85312 0.49947,0.56876 0.74921,1.35626 0.74922,2.3625 -10e-6,1.00261 -0.24975,1.79011 -0.74922,2.3625 -0.49949,0.56875 -1.18673,0.85313 -2.06172,0.85313 -0.87865,0 -1.56771,-0.28438 -2.06719,-0.85313 -0.49583,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00624 0.24792,-1.79374 0.74375,-2.3625 0.49948,-0.56874 1.18854,-0.85311 2.06719,-0.85312"
+ id="path3274"
+ inkscape:connector-curvature="0" /><path
+ d="m 983.57612,339.81596 c -0.11302,-0.0656 -0.23698,-0.11301 -0.37187,-0.14219 -0.13126,-0.0328 -0.27709,-0.0492 -0.4375,-0.0492 -0.56876,10e-6 -1.00625,0.18595 -1.3125,0.55782 -0.30261,0.36823 -0.45391,0.8987 -0.45391,1.5914 l 0,3.22657 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.21146,-0.37187 0.48672,-0.64713 0.82578,-0.82578 0.33906,-0.18229 0.75104,-0.27343 1.23594,-0.27344 0.0693,10e-6 0.14583,0.005 0.22969,0.0164 0.0838,0.007 0.17682,0.02 0.2789,0.0383 l 0.005,1.03359"
+ id="path3276"
+ inkscape:connector-curvature="0" /><path
+ d="m 988.20815,338.87534 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38438 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+ id="path3278"
+ inkscape:connector-curvature="0" /><path
+ d="m 992.30972,337.13627 0,1.73907 2.07266,0 0,0.78203 -2.07266,0 0,3.325 c 0,0.49948 0.0675,0.82031 0.20235,0.9625 0.13854,0.14219 0.41744,0.21328 0.83672,0.21328 l 1.03359,0 0,0.84219 -1.03359,0 c -0.77657,0 -1.31251,-0.14401 -1.60782,-0.43204 -0.29531,-0.29166 -0.44297,-0.82031 -0.44297,-1.58593 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73907 1.01172,0"
+ id="path3280"
+ inkscape:connector-curvature="0" /><path
+ d="m 995.85345,343.61127 1.1539,0 0,1.38907 -1.1539,0 0,-1.38907"
+ id="path3282"
+ inkscape:connector-curvature="0" /><path
+ d="m 571.4019,362.55065 3.85547,0 0,0.92969 -5.18437,0 0,-0.92969 c 0.41927,-0.43386 0.98984,-1.01536 1.71172,-1.74453 0.72551,-0.73281 1.18124,-1.20495 1.36718,-1.41641 0.35365,-0.39739 0.59974,-0.73281 0.73829,-1.00625 0.14218,-0.27708 0.21327,-0.54869 0.21328,-0.81484 -10e-6,-0.43385 -0.15313,-0.7875 -0.45938,-1.06094 -0.30261,-0.27343 -0.69818,-0.41015 -1.18672,-0.41016 -0.34635,1e-5 -0.71276,0.0602 -1.09922,0.18047 -0.38281,0.12032 -0.79297,0.30261 -1.23046,0.54688 l 0,-1.11563 c 0.44479,-0.17864 0.86041,-0.31353 1.24687,-0.40469 0.38646,-0.0911 0.7401,-0.13671 1.06094,-0.13671 0.84583,0 1.52031,0.21146 2.02344,0.63437 0.50311,0.42292 0.75468,0.98803 0.75468,1.69531 0,0.33543 -0.0638,0.65444 -0.1914,0.95703 -0.12397,0.29897 -0.35183,0.65261 -0.6836,1.06094 -0.0911,0.10573 -0.38099,0.41198 -0.86953,0.91875 -0.48854,0.50313 -1.17761,1.2086 -2.06719,2.11641"
+ id="path3284"
+ inkscape:connector-curvature="0" /><path
+ d="m 577.28081,354.9819 0.875,0 c 0.54687,0.86042 0.95521,1.70261 1.225,2.52656 0.27343,0.82396 0.41015,1.64245 0.41016,2.45547 -10e-6,0.81667 -0.13673,1.6388 -0.41016,2.46641 -0.26979,0.8276 -0.67813,1.66979 -1.225,2.52656 l -0.875,0 c 0.48489,-0.8349 0.84583,-1.66433 1.08281,-2.48828 0.24063,-0.82761 0.36094,-1.6625 0.36094,-2.50469 0,-0.84218 -0.12031,-1.67343 -0.36094,-2.49375 -0.23698,-0.82031 -0.59792,-1.64973 -1.08281,-2.48828"
+ id="path3286"
+ inkscape:connector-curvature="0" /><path
+ d="m 590.31831,355.58346 0,1.07734 c -0.41928,-0.20051 -0.81485,-0.34999 -1.18672,-0.44843 -0.37188,-0.0984 -0.73099,-0.14765 -1.07734,-0.14766 -0.60157,1e-5 -1.06641,0.11667 -1.39453,0.35 -0.32448,0.23334 -0.48672,0.56511 -0.48672,0.99531 0,0.36095 0.10755,0.63438 0.32265,0.82032 0.21875,0.18229 0.63073,0.32995 1.23594,0.44296 l 0.66719,0.13672 c 0.82395,0.15678 1.43098,0.43386 1.82109,0.83125 0.39375,0.39376 0.59062,0.9224 0.59063,1.58594 -1e-5,0.79115 -0.26615,1.39089 -0.79844,1.79922 -0.52865,0.40833 -1.30521,0.6125 -2.32969,0.6125 -0.38646,0 -0.79844,-0.0437 -1.23593,-0.13125 -0.43386,-0.0875 -0.88412,-0.21693 -1.35079,-0.38828 l 0,-1.1375 c 0.44844,0.25156 0.88776,0.44114 1.31797,0.56875 0.43021,0.1276 0.85312,0.1914 1.26875,0.1914 0.63073,0 1.11745,-0.12395 1.46016,-0.37187 0.3427,-0.24792 0.51406,-0.60156 0.51406,-1.06094 0,-0.40104 -0.12396,-0.71458 -0.37187,-0.94062 -0.24428,-0.22604 -0.64714,-0.39557 -1.2086,-0.5086 l -0.67265,-0.13125 c -0.82396,-0.16406 -1.42006,-0.42109 -1.78828,-0.77109 -0.36823,-0.35 -0.55235,-0.83671 -0.55235,-1.46016 0,-0.72187 0.25339,-1.29061 0.76016,-1.70625 0.51041,-0.41561 1.21223,-0.62343 2.10547,-0.62343 0.3828,0 0.77291,0.0346 1.17031,0.1039 0.39739,0.0693 0.8039,0.17319 1.21953,0.31172"
+ id="path3288"
+ inkscape:connector-curvature="0" /><path
+ d="m 595.273,360.40143 c -0.81303,0 -1.37631,0.093 -1.68985,0.27891 -0.31354,0.18594 -0.47031,0.50312 -0.47031,0.95156 0,0.35729 0.11667,0.64167 0.35,0.85312 0.23698,0.20782 0.55781,0.31172 0.9625,0.31172 0.55781,0 1.00442,-0.19687 1.33985,-0.59062 0.33905,-0.3974 0.50858,-0.92422 0.50859,-1.58047 l 0,-0.22422 -1.00078,0 m 2.00703,-0.41563 0,3.49454 -1.00625,0 0,-0.92969 c -0.22969,0.37187 -0.51589,0.64713 -0.85859,0.82578 -0.34272,0.175 -0.76199,0.2625 -1.25782,0.2625 -0.62708,0 -1.12656,-0.175 -1.49843,-0.525 -0.36823,-0.35365 -0.55235,-0.82578 -0.55235,-1.41641 0,-0.68906 0.22969,-1.20859 0.68906,-1.55859 0.46302,-0.35 1.15208,-0.525 2.06719,-0.525 l 1.41094,0 0,-0.0984 c -10e-6,-0.46301 -0.15313,-0.82031 -0.45938,-1.07187 -0.3026,-0.25521 -0.72917,-0.38281 -1.27968,-0.38282 -0.35001,1e-5 -0.69089,0.0419 -1.02266,0.12579 -0.33177,0.0838 -0.65078,0.20964 -0.95703,0.37734 l 0,-0.92969 c 0.36823,-0.14218 0.72552,-0.24791 1.07187,-0.31719 0.34636,-0.0729 0.68359,-0.10936 1.01172,-0.10937 0.88594,1e-5 1.54765,0.22969 1.98516,0.68906 0.43749,0.45938 0.65624,1.15574 0.65625,2.08906"
+ id="path3290"
+ inkscape:connector-curvature="0" /><path
+ d="m 598.63628,357.35534 1.0664,0 1.91407,5.14062 1.91406,-5.14062 1.06641,0 -2.29688,6.125 -1.36719,0 -2.29687,-6.125"
+ id="path3292"
+ inkscape:connector-curvature="0" /><path
+ d="m 611.22534,360.16627 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22136 0.62344,1.58594 0.37551,0.36094 0.89687,0.5414 1.56406,0.5414 0.38645,0 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.73099,0.26979 -1.11015,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97708,0 -1.75182,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85312,-1.33801 -0.85312,-2.30781 0,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82396,1e-5 1.47474,0.26615 1.95235,0.79844 0.48124,0.52865 0.72186,1.2487 0.72187,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29897,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,1e-5 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+ id="path3294"
+ inkscape:connector-curvature="0" /><path
+ d="m 618.99097,364.04909 c -0.28438,0.72916 -0.56146,1.20494 -0.83125,1.42734 -0.2698,0.22239 -0.63073,0.33359 -1.08281,0.33359 l -0.80391,0 0,-0.84218 0.59062,0 c 0.27709,-1e-5 0.49219,-0.0656 0.64532,-0.19688 0.15312,-0.13125 0.32265,-0.44115 0.50859,-0.92969 l 0.18047,-0.45937 -2.47734,-6.02656 1.0664,0 1.91406,4.79062 1.91407,-4.79062 1.0664,0 -2.69062,6.69375"
+ id="path3296"
+ inkscape:connector-curvature="0" /><path
+ d="m 625.44409,358.0608 c -0.53958,1e-5 -0.96615,0.21147 -1.27968,0.63438 -0.31355,0.41927 -0.47032,0.99532 -0.47032,1.72812 0,0.73282 0.15495,1.31068 0.46485,1.7336 0.31354,0.41927 0.74192,0.6289 1.28515,0.6289 0.53594,0 0.96068,-0.21145 1.27422,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47031,-1.72813 0,-0.72551 -0.15677,-1.29973 -0.47031,-1.72265 -0.31354,-0.42656 -0.73828,-0.63984 -1.27422,-0.63985 m 0,-0.85312 c 0.875,1e-5 1.56224,0.28438 2.06172,0.85312 0.49947,0.56876 0.74921,1.35626 0.74922,2.3625 -1e-5,1.00261 -0.24975,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06172,0.85313 -0.87865,0 -1.56771,-0.28438 -2.06718,-0.85313 -0.49584,-0.57239 -0.74376,-1.35989 -0.74375,-2.3625 -10e-6,-1.00624 0.24791,-1.79374 0.74375,-2.3625 0.49947,-0.56874 1.18853,-0.85311 2.06718,-0.85312"
+ id="path3298"
+ inkscape:connector-curvature="0" /><path
+ d="m 629.81362,361.06315 0,-3.70781 1.00625,0 0,3.66953 c 0,0.57969 0.11302,1.01536 0.33907,1.30703 0.22603,0.28802 0.5651,0.43203 1.01718,0.43203 0.54323,0 0.97161,-0.17318 1.28516,-0.51953 0.31718,-0.34635 0.47578,-0.81849 0.47578,-1.41641 l 0,-3.47265 1.00625,0 0,6.125 -1.00625,0 0,-0.94063 c -0.24428,0.37188 -0.52865,0.64896 -0.85312,0.83125 -0.32084,0.17865 -0.69454,0.26797 -1.1211,0.26797 -0.70365,0 -1.23776,-0.21875 -1.60234,-0.65625 -0.36459,-0.4375 -0.54688,-1.07734 -0.54688,-1.91953"
+ id="path3300"
+ inkscape:connector-curvature="0" /><path
+ d="m 640.57612,358.29596 c -0.11302,-0.0656 -0.23698,-0.11302 -0.37187,-0.14219 -0.13126,-0.0328 -0.27709,-0.0492 -0.4375,-0.0492 -0.56876,10e-6 -1.00625,0.18595 -1.3125,0.55782 -0.30261,0.36823 -0.45391,0.8987 -0.45391,1.5914 l 0,3.22657 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.21146,-0.37187 0.48672,-0.64713 0.82578,-0.82578 0.33906,-0.18229 0.75104,-0.27343 1.23594,-0.27344 0.0693,1e-5 0.14583,0.005 0.22969,0.0164 0.0838,0.007 0.17682,0.0201 0.2789,0.0383 l 0.005,1.03359"
+ id="path3302"
+ inkscape:connector-curvature="0" /><path
+ d="m 649.23862,358.28502 0,-3.31406 1.00625,0 0,8.50938 -1.00625,0 0,-0.91875 c -0.21146,0.36458 -0.47943,0.63619 -0.8039,0.81484 -0.32084,0.175 -0.7073,0.2625 -1.15938,0.2625 -0.7401,0 -1.34349,-0.29531 -1.81015,-0.88594 -0.46302,-0.59062 -0.69453,-1.36718 -0.69453,-2.32969 0,-0.96249 0.23151,-1.73905 0.69453,-2.32968 0.46666,-0.59062 1.07005,-0.88593 1.81015,-0.88594 0.45208,1e-5 0.83854,0.0893 1.15938,0.26797 0.32447,0.175 0.59244,0.44479 0.8039,0.80937 m -3.4289,2.13828 c 0,0.74011 0.1513,1.32162 0.4539,1.74454 0.30625,0.41927 0.72552,0.6289 1.25782,0.6289 0.53228,0 0.95156,-0.20963 1.25781,-0.6289 0.30624,-0.42292 0.45937,-1.00443 0.45937,-1.74454 0,-0.7401 -0.15313,-1.31978 -0.45937,-1.73906 -0.30625,-0.42291 -0.72553,-0.63437 -1.25781,-0.63437 -0.5323,0 -0.95157,0.21146 -1.25782,0.63437 -0.3026,0.41928 -0.4539,0.99896 -0.4539,1.73906"
+ id="path3304"
+ inkscape:connector-curvature="0" /><path
+ d="m 657.55659,360.16627 0,0.49219 -4.62656,0 c 0.0438,0.69271 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.5414 1.56406,0.5414 0.38645,0 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08282,-0.42657 l 0,0.95157 c -0.36095,0.15312 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97708,0 -1.75182,-0.28438 -2.32421,-0.85313 -0.56876,-0.56874 -0.85313,-1.33801 -0.85313,-2.30781 0,-1.0026 0.26979,-1.79739 0.80938,-2.38437 0.54322,-0.59062 1.27421,-0.88593 2.19296,-0.88594 0.82396,1e-5 1.47474,0.26615 1.95235,0.79844 0.48124,0.52865 0.72187,1.2487 0.72187,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,1e-5 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+ id="path3306"
+ inkscape:connector-curvature="0" /><path
+ d="m 663.11284,357.5358 0,0.95157 c -0.28438,-0.14583 -0.57969,-0.25521 -0.88593,-0.32813 -0.30626,-0.0729 -0.62345,-0.10937 -0.95157,-0.10937 -0.49948,0 -0.875,0.0766 -1.12656,0.22968 -0.24792,0.15313 -0.37188,0.38282 -0.37187,0.68907 -1e-5,0.23333 0.0893,0.41745 0.26796,0.55234 0.17865,0.13125 0.53776,0.25704 1.07735,0.37734 l 0.34453,0.0766 c 0.71458,0.15312 1.22135,0.37005 1.52031,0.65078 0.3026,0.27708 0.4539,0.66536 0.45391,1.16484 -10e-6,0.56875 -0.22605,1.01901 -0.67813,1.35078 -0.44844,0.33177 -1.06641,0.49766 -1.8539,0.49766 -0.32813,0 -0.67084,-0.0328 -1.02813,-0.0984 -0.35365,-0.062 -0.72734,-0.15677 -1.12109,-0.28437 l 0,-1.03907 c 0.37187,0.19323 0.73828,0.33907 1.09922,0.4375 0.36093,0.0948 0.71822,0.14219 1.07187,0.14219 0.47396,0 0.83854,-0.0802 1.09375,-0.24062 0.25521,-0.16407 0.38281,-0.39375 0.38281,-0.68907 0,-0.27343 -0.093,-0.48307 -0.2789,-0.6289 -0.1823,-0.14583 -0.58516,-0.2862 -1.2086,-0.4211 l -0.35,-0.082 c -0.62343,-0.13124 -1.07369,-0.33177 -1.35078,-0.60156 -0.27708,-0.27343 -0.41562,-0.64713 -0.41562,-1.12109 0,-0.57604 0.20416,-1.02083 0.6125,-1.33438 0.40833,-0.31353 0.98802,-0.4703 1.73906,-0.47031 0.37187,10e-6 0.72187,0.0274 1.05,0.082 0.32812,0.0547 0.63073,0.13673 0.90781,0.24609"
+ id="path3308"
+ inkscape:connector-curvature="0" /><path
+ d="m 665.04878,357.35534 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38438 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+ id="path3310"
+ inkscape:connector-curvature="0" /><path
+ d="m 672.18549,360.34674 c 0,-0.72916 -0.1513,-1.29426 -0.4539,-1.69531 -0.29897,-0.40104 -0.72006,-0.60156 -1.26328,-0.60156 -0.53959,0 -0.96068,0.20052 -1.26329,0.60156 -0.29896,0.40105 -0.44843,0.96615 -0.44843,1.69531 0,0.72552 0.14947,1.28881 0.44843,1.68985 0.30261,0.40104 0.7237,0.60156 1.26329,0.60156 0.54322,0 0.96431,-0.20052 1.26328,-0.60156 0.3026,-0.40104 0.4539,-0.96433 0.4539,-1.68985 m 1.00625,2.37344 c 0,1.04271 -0.23151,1.81745 -0.69453,2.32422 -0.46302,0.51041 -1.17214,0.76562 -2.12734,0.76562 -0.35365,0 -0.68724,-0.0273 -1.00078,-0.082 -0.31355,-0.051 -0.61797,-0.13125 -0.91328,-0.24062 l 0,-0.97891 c 0.29531,0.16042 0.58697,0.27891 0.875,0.35547 0.28801,0.0766 0.5815,0.11484 0.88046,0.11484 0.6599,0 1.15391,-0.17318 1.48204,-0.51953 0.32812,-0.34271 0.49218,-0.86224 0.49218,-1.55859 l 0,-0.49766 c -0.20781,0.36094 -0.47396,0.63073 -0.79843,0.80938 -0.32449,0.17864 -0.71277,0.26797 -1.16485,0.26797 -0.75104,0 -1.35625,-0.2862 -1.81562,-0.8586 -0.45938,-0.57239 -0.68907,-1.33073 -0.68907,-2.275 0,-0.94791 0.22969,-1.70807 0.68907,-2.28047 0.45937,-0.57239 1.06458,-0.85858 1.81562,-0.85859 0.45208,10e-6 0.84036,0.0893 1.16485,0.26797 0.32447,0.17865 0.59062,0.44844 0.79843,0.80937 l 0,-0.92968 1.00625,0 0,5.36484"
+ id="path3312"
+ inkscape:connector-curvature="0" /><path
+ d="m 680.35581,359.78346 0,3.69688 -1.00625,0 0,-3.66407 c -10e-6,-0.57968 -0.11303,-1.01353 -0.33907,-1.30156 -0.22604,-0.28802 -0.56511,-0.43203 -1.01718,-0.43203 -0.54324,0 -0.97162,0.17318 -1.28516,0.51953 -0.31354,0.34636 -0.47031,0.81849 -0.47031,1.41641 l 0,3.46172 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.24062,-0.36823 0.52317,-0.64349 0.84765,-0.82578 0.32813,-0.18229 0.70547,-0.27343 1.13203,-0.27344 0.70365,1e-5 1.23594,0.21876 1.59688,0.65625 0.36093,0.43386 0.5414,1.0737 0.54141,1.91953"
+ id="path3314"
+ inkscape:connector-curvature="0" /><path
+ d="m 688.723,360.40143 c -0.81303,0 -1.37631,0.093 -1.68985,0.27891 -0.31354,0.18594 -0.47031,0.50312 -0.47031,0.95156 0,0.35729 0.11667,0.64167 0.35,0.85312 0.23698,0.20782 0.55781,0.31172 0.9625,0.31172 0.55781,0 1.00442,-0.19687 1.33984,-0.59062 0.33906,-0.3974 0.50859,-0.92422 0.5086,-1.58047 l 0,-0.22422 -1.00078,0 m 2.00703,-0.41563 0,3.49454 -1.00625,0 0,-0.92969 c -0.22969,0.37187 -0.51589,0.64713 -0.8586,0.82578 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62708,0 -1.12656,-0.175 -1.49844,-0.525 -0.36823,-0.35365 -0.55234,-0.82578 -0.55234,-1.41641 0,-0.68906 0.22969,-1.20859 0.68906,-1.55859 0.46302,-0.35 1.15208,-0.525 2.06719,-0.525 l 1.41094,0 0,-0.0984 c -1e-5,-0.46301 -0.15313,-0.82031 -0.45938,-1.07187 -0.30261,-0.25521 -0.72917,-0.38281 -1.27968,-0.38282 -0.35001,1e-5 -0.69089,0.0419 -1.02266,0.12579 -0.33177,0.0838 -0.65078,0.20964 -0.95703,0.37734 l 0,-0.92969 c 0.36823,-0.14218 0.72552,-0.24791 1.07187,-0.31719 0.34635,-0.0729 0.68359,-0.10936 1.01172,-0.10937 0.88593,1e-5 1.54765,0.22969 1.98516,0.68906 0.43749,0.45938 0.65624,1.15574 0.65625,2.08906"
+ id="path3316"
+ inkscape:connector-curvature="0" /><path
+ d="m 696.71284,357.5358 0,0.95157 c -0.28438,-0.14583 -0.57969,-0.25521 -0.88594,-0.32813 -0.30625,-0.0729 -0.62344,-0.10937 -0.95156,-0.10937 -0.49948,0 -0.875,0.0766 -1.12656,0.22968 -0.24792,0.15313 -0.37188,0.38282 -0.37188,0.68907 0,0.23333 0.0893,0.41745 0.26797,0.55234 0.17865,0.13125 0.53776,0.25704 1.07735,0.37734 l 0.34453,0.0766 c 0.71458,0.15312 1.22135,0.37005 1.52031,0.65078 0.3026,0.27708 0.4539,0.66536 0.45391,1.16484 -10e-6,0.56875 -0.22605,1.01901 -0.67813,1.35078 -0.44844,0.33177 -1.06641,0.49766 -1.8539,0.49766 -0.32813,0 -0.67084,-0.0328 -1.02813,-0.0984 -0.35365,-0.062 -0.72734,-0.15677 -1.12109,-0.28437 l 0,-1.03907 c 0.37187,0.19323 0.73828,0.33907 1.09922,0.4375 0.36093,0.0948 0.71822,0.14219 1.07187,0.14219 0.47396,0 0.83854,-0.0802 1.09375,-0.24062 0.2552,-0.16407 0.38281,-0.39375 0.38281,-0.68907 0,-0.27343 -0.093,-0.48307 -0.2789,-0.6289 -0.1823,-0.14583 -0.58516,-0.2862 -1.2086,-0.4211 l -0.35,-0.082 c -0.62344,-0.13124 -1.0737,-0.33177 -1.35078,-0.60156 -0.27708,-0.27343 -0.41562,-0.64713 -0.41562,-1.12109 0,-0.57604 0.20416,-1.02083 0.6125,-1.33438 0.40833,-0.31353 0.98802,-0.4703 1.73906,-0.47031 0.37187,10e-6 0.72187,0.0274 1.05,0.082 0.32812,0.0547 0.63072,0.13673 0.90781,0.24609"
+ id="path3318"
+ inkscape:connector-curvature="0" /><path
+ d="m 704.998,360.40143 c -0.81303,0 -1.37631,0.093 -1.68985,0.27891 -0.31354,0.18594 -0.47031,0.50312 -0.47031,0.95156 0,0.35729 0.11667,0.64167 0.35,0.85312 0.23698,0.20782 0.55781,0.31172 0.9625,0.31172 0.55781,0 1.00442,-0.19687 1.33985,-0.59062 0.33905,-0.3974 0.50858,-0.92422 0.50859,-1.58047 l 0,-0.22422 -1.00078,0 m 2.00703,-0.41563 0,3.49454 -1.00625,0 0,-0.92969 c -0.22969,0.37187 -0.51589,0.64713 -0.85859,0.82578 -0.34272,0.175 -0.76199,0.2625 -1.25782,0.2625 -0.62708,0 -1.12656,-0.175 -1.49843,-0.525 -0.36823,-0.35365 -0.55235,-0.82578 -0.55235,-1.41641 0,-0.68906 0.22969,-1.20859 0.68906,-1.55859 0.46302,-0.35 1.15209,-0.525 2.06719,-0.525 l 1.41094,0 0,-0.0984 c -10e-6,-0.46301 -0.15313,-0.82031 -0.45938,-1.07187 -0.3026,-0.25521 -0.72917,-0.38281 -1.27968,-0.38282 -0.35001,1e-5 -0.69089,0.0419 -1.02266,0.12579 -0.33177,0.0838 -0.65078,0.20964 -0.95703,0.37734 l 0,-0.92969 c 0.36823,-0.14218 0.72552,-0.24791 1.07187,-0.31719 0.34636,-0.0729 0.6836,-0.10936 1.01172,-0.10937 0.88594,1e-5 1.54765,0.22969 1.98516,0.68906 0.43749,0.45938 0.65624,1.15574 0.65625,2.08906"
+ id="path3320"
+ inkscape:connector-curvature="0" /><path
+ d="m 714.17455,359.78346 0,3.69688 -1.00625,0 0,-3.66407 c 0,-0.57968 -0.11302,-1.01353 -0.33906,-1.30156 -0.22604,-0.28802 -0.56511,-0.43203 -1.01719,-0.43203 -0.54323,0 -0.97161,0.17318 -1.28515,0.51953 -0.31355,0.34636 -0.47032,0.81849 -0.47031,1.41641 l 0,3.46172 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.24062,-0.36823 0.52317,-0.64349 0.84765,-0.82578 0.32812,-0.18229 0.70547,-0.27343 1.13203,-0.27344 0.70364,1e-5 1.23594,0.21876 1.59688,0.65625 0.36093,0.43386 0.5414,1.0737 0.5414,1.91953"
+ id="path3322"
+ inkscape:connector-curvature="0" /><path
+ d="m 724.69643,355.58346 0,1.07734 c -0.41927,-0.20051 -0.81485,-0.34999 -1.18672,-0.44843 -0.37188,-0.0984 -0.73099,-0.14765 -1.07734,-0.14766 -0.60157,1e-5 -1.06641,0.11667 -1.39453,0.35 -0.32448,0.23334 -0.48672,0.56511 -0.48672,0.99531 0,0.36095 0.10755,0.63438 0.32266,0.82032 0.21874,0.18229 0.63072,0.32995 1.23593,0.44296 l 0.66719,0.13672 c 0.82395,0.15678 1.43099,0.43386 1.82109,0.83125 0.39375,0.39376 0.59062,0.9224 0.59063,1.58594 -10e-6,0.79115 -0.26615,1.39089 -0.79844,1.79922 -0.52865,0.40833 -1.30521,0.6125 -2.32969,0.6125 -0.38646,0 -0.79844,-0.0437 -1.23593,-0.13125 -0.43386,-0.0875 -0.88412,-0.21693 -1.35078,-0.38828 l 0,-1.1375 c 0.44843,0.25156 0.88775,0.44114 1.31796,0.56875 0.43021,0.1276 0.85313,0.1914 1.26875,0.1914 0.63073,0 1.11745,-0.12395 1.46016,-0.37187 0.3427,-0.24792 0.51406,-0.60156 0.51406,-1.06094 0,-0.40104 -0.12396,-0.71458 -0.37187,-0.94062 -0.24428,-0.22604 -0.64714,-0.39557 -1.2086,-0.5086 l -0.67265,-0.13125 c -0.82396,-0.16406 -1.42006,-0.42109 -1.78828,-0.77109 -0.36823,-0.35 -0.55235,-0.83671 -0.55235,-1.46016 0,-0.72187 0.25339,-1.29061 0.76016,-1.70625 0.51041,-0.41561 1.21224,-0.62343 2.10547,-0.62343 0.38281,0 0.77291,0.0346 1.17031,0.1039 0.39739,0.0693 0.8039,0.17319 1.21953,0.31172"
+ id="path3324"
+ inkscape:connector-curvature="0" /><path
+ d="m 729.01674,363.48034 -3.11718,-8.16485 1.1539,0 2.58672,6.87422 2.59219,-6.87422 1.14844,0 -3.11172,8.16485 -1.25235,0"
+ id="path3326"
+ inkscape:connector-curvature="0" /><path
+ d="m 740.13471,362.31549 0,-2.19297 -1.80468,0 0,-0.90781 2.89843,0 0,3.50547 c -0.42657,0.3026 -0.89688,0.53229 -1.41093,0.68906 -0.51407,0.15313 -1.06277,0.22969 -1.6461,0.22969 -1.27604,0 -2.275,-0.37188 -2.99687,-1.11563 -0.71823,-0.74739 -1.07735,-1.78645 -1.07735,-3.11718 0,-1.33437 0.35912,-2.37343 1.07735,-3.11719 0.72187,-0.74739 1.72083,-1.12109 2.99687,-1.12109 0.53229,0 1.03724,0.0656 1.51485,0.19687 0.48124,0.13126 0.92421,0.32449 1.3289,0.57969 l 0,1.17578 c -0.40834,-0.34635 -0.84219,-0.60703 -1.30156,-0.78203 -0.45938,-0.17499 -0.94245,-0.26249 -1.44922,-0.2625 -0.99896,1e-5 -1.75,0.27891 -2.25312,0.83672 -0.49948,0.55781 -0.74922,1.38906 -0.74922,2.49375 0,1.10104 0.24974,1.93047 0.74922,2.48828 0.50312,0.55781 1.25416,0.83672 2.25312,0.83672 0.3901,0 0.73828,-0.0328 1.04453,-0.0984 0.30625,-0.0693 0.58151,-0.175 0.82578,-0.31719"
+ id="path3328"
+ inkscape:connector-curvature="0" /><path
+ d="m 749.87456,354.97096 0,0.83672 -0.9625,0 c -0.36094,10e-6 -0.61251,0.0729 -0.75469,0.21875 -0.13854,0.14584 -0.20781,0.40834 -0.20781,0.7875 l 0,0.54141 1.65703,0 0,0.78203 -1.65703,0 0,5.34297 -1.01172,0 0,-5.34297 -0.9625,0 0,-0.78203 0.9625,0 0,-0.42657 c 0,-0.68176 0.15859,-1.17759 0.47578,-1.4875 0.31719,-0.31353 0.82031,-0.4703 1.50937,-0.47031 l 0.95157,0"
+ id="path3330"
+ inkscape:connector-curvature="0" /><path
+ d="m 750.71128,357.35534 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38438 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+ id="path3332"
+ inkscape:connector-curvature="0" /><path
+ d="m 753.81752,354.97096 1.00625,0 0,8.50938 -1.00625,0 0,-8.50938"
+ id="path3334"
+ inkscape:connector-curvature="0" /><path
+ d="m 762.16285,360.16627 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22136 0.62343,1.58594 0.37552,0.36094 0.89687,0.5414 1.56407,0.5414 0.38645,0 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72551,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.73099,0.26979 -1.11015,0.35 -0.37918,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97709,0 -1.75183,-0.28438 -2.32422,-0.85313 -0.56875,-0.56874 -0.85313,-1.33801 -0.85312,-2.30781 -1e-5,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82395,1e-5 1.47473,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69635,-0.49218 -1.19218,-0.49219 -0.56146,1e-5 -1.01172,0.1586 -1.35078,0.47579 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+ id="path3336"
+ inkscape:connector-curvature="0" /><path
+ d="m 763.9566,362.09127 1.1539,0 0,1.38907 -1.1539,0 0,-1.38907"
+ id="path3338"
+ inkscape:connector-curvature="0" /><path
+ d="m 573.79722,377.55799 c 0.52864,0.11303 0.94062,0.34818 1.23593,0.70547 0.29896,0.35729 0.44844,0.79844 0.44844,1.32344 0,0.80573 -0.27709,1.42916 -0.83125,1.87031 -0.55417,0.44115 -1.34167,0.66172 -2.3625,0.66172 -0.34271,0 -0.69635,-0.0346 -1.06094,-0.10391 -0.36093,-0.0656 -0.73463,-0.16588 -1.12109,-0.30078 l 0,-1.06641 c 0.30625,0.17865 0.64167,0.31355 1.00625,0.40469 0.36458,0.0911 0.74557,0.13672 1.14297,0.13672 0.6927,0 1.21953,-0.13672 1.58047,-0.41016 0.36458,-0.27343 0.54687,-0.67083 0.54687,-1.19218 0,-0.48125 -0.16953,-0.85677 -0.50859,-1.12657 -0.33542,-0.27343 -0.80391,-0.41015 -1.40547,-0.41015 l -0.95156,0 0,-0.90781 0.99531,0 c 0.54323,0 0.95885,-0.10755 1.24688,-0.32266 0.28801,-0.21875 0.43202,-0.53229 0.43203,-0.94063 -10e-6,-0.41926 -0.14949,-0.74009 -0.44844,-0.9625 -0.29532,-0.22603 -0.72006,-0.33905 -1.27422,-0.33906 -0.30261,1e-5 -0.62709,0.0328 -0.97344,0.0984 -0.34635,0.0656 -0.72734,0.16772 -1.14297,0.30625 l 0,-0.98438 c 0.41927,-0.11665 0.8112,-0.20415 1.17579,-0.2625 0.36822,-0.0583 0.71458,-0.0875 1.03906,-0.0875 0.83854,1e-5 1.50208,0.19142 1.99062,0.57422 0.48854,0.37918 0.73281,0.89324 0.73282,1.54219 -1e-5,0.45209 -0.12944,0.8349 -0.38829,1.14844 -0.25886,0.3099 -0.62708,0.525 -1.10468,0.64531"
+ id="path3340"
+ inkscape:connector-curvature="0" /><path
+ d="m 577.28081,373.4619 0.875,0 c 0.54687,0.86042 0.95521,1.70261 1.225,2.52656 0.27343,0.82396 0.41015,1.64245 0.41016,2.45547 -10e-6,0.81667 -0.13673,1.6388 -0.41016,2.4664 -0.26979,0.82761 -0.67813,1.6698 -1.225,2.52657 l -0.875,0 c 0.48489,-0.8349 0.84583,-1.66433 1.08281,-2.48828 0.24063,-0.82761 0.36094,-1.6625 0.36094,-2.50469 0,-0.84218 -0.12031,-1.67343 -0.36094,-2.49375 -0.23698,-0.82031 -0.59792,-1.64973 -1.08281,-2.48828"
+ id="path3342"
+ inkscape:connector-curvature="0" /><path
+ d="m 585.298,373.79549 1.11015,0 0,4.96016 c 0,0.875 0.1586,1.50573 0.47579,1.89218 0.31718,0.38282 0.83124,0.57422 1.54218,0.57422 0.70729,0 1.21953,-0.1914 1.53672,-0.57422 0.31718,-0.38645 0.47578,-1.01718 0.47578,-1.89218 l 0,-4.96016 1.11016,0 0,5.09688 c -10e-6,1.06458 -0.26433,1.86849 -0.79297,2.41171 -0.52501,0.54323 -1.30157,0.81485 -2.32969,0.81485 -1.03177,0 -1.81198,-0.27162 -2.34062,-0.81485 -0.525,-0.54322 -0.7875,-1.34713 -0.7875,-2.41171 l 0,-5.09688"
+ id="path3344"
+ inkscape:connector-curvature="0" /><path
+ d="m 594.55659,381.04158 0,3.24844 -1.01172,0 0,-8.45469 1.01172,0 0,0.92969 c 0.21146,-0.36458 0.4776,-0.63437 0.79844,-0.80937 0.32447,-0.17864 0.71093,-0.26797 1.15937,-0.26797 0.74375,0 1.34713,0.29532 1.81016,0.88594 0.46666,0.59063 0.69999,1.36719 0.7,2.32968 -10e-6,0.96251 -0.23334,1.73907 -0.7,2.32969 -0.46303,0.59063 -1.06641,0.88594 -1.81016,0.88594 -0.44844,0 -0.8349,-0.0875 -1.15937,-0.2625 -0.32084,-0.17865 -0.58698,-0.45026 -0.79844,-0.81485 m 3.42344,-2.13828 c -1e-5,-0.7401 -0.15313,-1.31978 -0.45938,-1.73906 -0.30261,-0.42291 -0.72005,-0.63437 -1.25234,-0.63437 -0.53229,0 -0.95157,0.21146 -1.25781,0.63437 -0.30261,0.41928 -0.45391,0.99896 -0.45391,1.73906 0,0.74011 0.1513,1.32162 0.45391,1.74453 0.30624,0.41928 0.72552,0.62891 1.25781,0.62891 0.53229,0 0.94973,-0.20963 1.25234,-0.62891 0.30625,-0.42291 0.45937,-1.00442 0.45938,-1.74453"
+ id="path3346"
+ inkscape:connector-curvature="0" /><path
+ d="m 600.69253,373.45096 1.00625,0 0,8.50937 -1.00625,0 0,-8.50937"
+ id="path3348"
+ inkscape:connector-curvature="0" /><path
+ d="m 606.17222,376.5408 c -0.53959,1e-5 -0.96615,0.21147 -1.27969,0.63438 -0.31355,0.41927 -0.47032,0.99531 -0.47031,1.72812 -1e-5,0.73282 0.15494,1.31068 0.46484,1.7336 0.31354,0.41927 0.74192,0.6289 1.28516,0.6289 0.53593,0 0.96067,-0.21145 1.27421,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47032,-1.72813 -10e-6,-0.72551 -0.15678,-1.29973 -0.47032,-1.72265 -0.31354,-0.42656 -0.73828,-0.63984 -1.27421,-0.63985 m 0,-0.85312 c 0.87499,0 1.56223,0.28438 2.06171,0.85312 0.49948,0.56876 0.74922,1.35626 0.74922,2.3625 0,1.00261 -0.24974,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06171,0.85313 -0.87865,0 -1.56771,-0.28438 -2.06719,-0.85313 -0.49584,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00624 0.24791,-1.79374 0.74375,-2.3625 0.49948,-0.56874 1.18854,-0.85312 2.06719,-0.85312"
+ id="path3350"
+ inkscape:connector-curvature="0" /><path
+ d="m 613.42925,378.88143 c -0.81302,0 -1.37631,0.093 -1.68984,0.2789 -0.31355,0.18594 -0.47032,0.50313 -0.47032,0.95157 0,0.35729 0.11667,0.64166 0.35,0.85312 0.23698,0.20782 0.55781,0.31172 0.9625,0.31172 0.55781,0 1.00443,-0.19687 1.33985,-0.59062 0.33905,-0.3974 0.50859,-0.92422 0.50859,-1.58047 l 0,-0.22422 -1.00078,0 m 2.00703,-0.41563 0,3.49453 -1.00625,0 0,-0.92968 c -0.22969,0.37187 -0.51589,0.64713 -0.85859,0.82578 -0.34271,0.175 -0.76199,0.2625 -1.25782,0.2625 -0.62708,0 -1.12656,-0.175 -1.49843,-0.525 -0.36823,-0.35365 -0.55235,-0.82578 -0.55235,-1.41641 0,-0.68906 0.22969,-1.20859 0.68907,-1.55859 0.46301,-0.35 1.15208,-0.525 2.06718,-0.525 l 1.41094,0 0,-0.0984 c 0,-0.46302 -0.15313,-0.82031 -0.45937,-1.07187 -0.30261,-0.25521 -0.72917,-0.38281 -1.27969,-0.38282 -0.35,10e-6 -0.69089,0.0419 -1.02266,0.12578 -0.33177,0.0839 -0.65078,0.20965 -0.95703,0.37735 l 0,-0.92969 c 0.36823,-0.14218 0.72552,-0.24791 1.07188,-0.31719 0.34635,-0.0729 0.68359,-0.10937 1.01171,-0.10937 0.88594,0 1.54766,0.22969 1.98516,0.68906 0.4375,0.45938 0.65624,1.15573 0.65625,2.08906"
+ id="path3352"
+ inkscape:connector-curvature="0" /><path
+ d="m 621.54487,376.76502 0,-3.31406 1.00625,0 0,8.50937 -1.00625,0 0,-0.91875 c -0.21146,0.36459 -0.47943,0.6362 -0.8039,0.81485 -0.32084,0.175 -0.7073,0.2625 -1.15938,0.2625 -0.74011,0 -1.34349,-0.29531 -1.81016,-0.88594 -0.46302,-0.59062 -0.69453,-1.36718 -0.69453,-2.32969 0,-0.96249 0.23151,-1.73905 0.69453,-2.32968 0.46667,-0.59062 1.07005,-0.88594 1.81016,-0.88594 0.45208,0 0.83854,0.0893 1.15938,0.26797 0.32447,0.175 0.59244,0.44479 0.8039,0.80937 m -3.4289,2.13828 c -10e-6,0.74011 0.1513,1.32162 0.4539,1.74453 0.30625,0.41928 0.72552,0.62891 1.25781,0.62891 0.53229,0 0.95156,-0.20963 1.25782,-0.62891 0.30624,-0.42291 0.45937,-1.00442 0.45937,-1.74453 0,-0.7401 -0.15313,-1.31978 -0.45937,-1.73906 -0.30626,-0.42291 -0.72553,-0.63437 -1.25782,-0.63437 -0.53229,0 -0.95156,0.21146 -1.25781,0.63437 -0.3026,0.41928 -0.45391,0.99896 -0.4539,1.73906"
+ id="path3354"
+ inkscape:connector-curvature="0" /><path
+ d="m 629.18472,374.09627 0,1.73906 2.07265,0 0,0.78204 -2.07265,0 0,3.325 c -10e-6,0.49948 0.0674,0.82031 0.20234,0.9625 0.13854,0.14218 0.41744,0.21328 0.83672,0.21328 l 1.03359,0 0,0.84218 -1.03359,0 c -0.77657,0 -1.3125,-0.14401 -1.60781,-0.43203 -0.29532,-0.29166 -0.44297,-0.82031 -0.44297,-1.58593 l 0,-3.325 -0.73828,0 0,-0.78204 0.73828,0 0,-1.73906 1.01172,0"
+ id="path3356"
+ inkscape:connector-curvature="0" /><path
+ d="m 637.67769,378.26346 0,3.69687 -1.00625,0 0,-3.66406 c -10e-6,-0.57968 -0.11303,-1.01353 -0.33907,-1.30156 -0.22604,-0.28802 -0.5651,-0.43203 -1.01718,-0.43203 -0.54324,0 -0.97162,0.17318 -1.28516,0.51953 -0.31354,0.34636 -0.47031,0.81849 -0.47031,1.41641 l 0,3.46171 -1.01172,0 0,-8.50937 1.01172,0 0,3.33594 c 0.24062,-0.36823 0.52317,-0.64349 0.84765,-0.82578 0.32813,-0.18229 0.70547,-0.27344 1.13203,-0.27344 0.70365,0 1.23594,0.21875 1.59688,0.65625 0.36093,0.43386 0.5414,1.0737 0.54141,1.91953"
+ id="path3358"
+ inkscape:connector-curvature="0" /><path
+ d="m 639.69565,375.83533 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38437 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+ id="path3360"
+ inkscape:connector-curvature="0" /><path
+ d="m 646.70659,376.0158 0,0.95157 c -0.28438,-0.14583 -0.57969,-0.25521 -0.88593,-0.32813 -0.30626,-0.0729 -0.62345,-0.10937 -0.95157,-0.10937 -0.49948,0 -0.875,0.0766 -1.12656,0.22968 -0.24792,0.15313 -0.37188,0.38282 -0.37187,0.68907 -1e-5,0.23333 0.0893,0.41745 0.26796,0.55234 0.17865,0.13125 0.53776,0.25703 1.07735,0.37734 l 0.34453,0.0766 c 0.71458,0.15312 1.22135,0.37005 1.52031,0.65078 0.3026,0.27708 0.4539,0.66536 0.45391,1.16484 -10e-6,0.56875 -0.22605,1.01901 -0.67813,1.35078 -0.44844,0.33177 -1.06641,0.49766 -1.8539,0.49766 -0.32813,0 -0.67084,-0.0328 -1.02813,-0.0984 -0.35365,-0.062 -0.72734,-0.15677 -1.12109,-0.28437 l 0,-1.03907 c 0.37187,0.19323 0.73828,0.33907 1.09922,0.4375 0.36093,0.0948 0.71822,0.14219 1.07187,0.14219 0.47396,0 0.83854,-0.0802 1.09375,-0.24062 0.25521,-0.16407 0.38281,-0.39375 0.38281,-0.68907 0,-0.27343 -0.093,-0.48307 -0.2789,-0.6289 -0.1823,-0.14583 -0.58516,-0.2862 -1.2086,-0.4211 l -0.35,-0.082 c -0.62343,-0.13125 -1.07369,-0.33177 -1.35078,-0.60156 -0.27708,-0.27343 -0.41562,-0.64713 -0.41562,-1.12109 0,-0.57604 0.20416,-1.02083 0.6125,-1.33438 0.40833,-0.31353 0.98802,-0.47031 1.73906,-0.47031 0.37187,0 0.72187,0.0274 1.05,0.082 0.32812,0.0547 0.63073,0.13672 0.90781,0.24609"
+ id="path3362"
+ inkscape:connector-curvature="0" /><path
+ d="m 656.23862,376.76502 0,-3.31406 1.00625,0 0,8.50937 -1.00625,0 0,-0.91875 c -0.21146,0.36459 -0.47943,0.6362 -0.8039,0.81485 -0.32084,0.175 -0.7073,0.2625 -1.15938,0.2625 -0.7401,0 -1.34349,-0.29531 -1.81015,-0.88594 -0.46302,-0.59062 -0.69453,-1.36718 -0.69453,-2.32969 0,-0.96249 0.23151,-1.73905 0.69453,-2.32968 0.46666,-0.59062 1.07005,-0.88594 1.81015,-0.88594 0.45208,0 0.83854,0.0893 1.15938,0.26797 0.32447,0.175 0.59244,0.44479 0.8039,0.80937 m -3.4289,2.13828 c 0,0.74011 0.1513,1.32162 0.4539,1.74453 0.30625,0.41928 0.72552,0.62891 1.25782,0.62891 0.53228,0 0.95156,-0.20963 1.25781,-0.62891 0.30624,-0.42291 0.45937,-1.00442 0.45937,-1.74453 0,-0.7401 -0.15313,-1.31978 -0.45937,-1.73906 -0.30625,-0.42291 -0.72553,-0.63437 -1.25781,-0.63437 -0.5323,0 -0.95157,0.21146 -1.25782,0.63437 -0.3026,0.41928 -0.4539,0.99896 -0.4539,1.73906"
+ id="path3364"
+ inkscape:connector-curvature="0" /><path
+ d="m 664.55659,378.64627 0,0.49219 -4.62656,0 c 0.0438,0.69271 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.5414 1.56406,0.5414 0.38645,0 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08282,-0.42657 l 0,0.95157 c -0.36095,0.15312 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97708,0 -1.75182,-0.28438 -2.32421,-0.85313 -0.56876,-0.56875 -0.85313,-1.33802 -0.85313,-2.30781 0,-1.0026 0.26979,-1.79739 0.80938,-2.38437 0.54322,-0.59062 1.27421,-0.88594 2.19296,-0.88594 0.82396,0 1.47474,0.26615 1.95235,0.79844 0.48124,0.52865 0.72187,1.2487 0.72187,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,1e-5 -1.01172,0.1586 -1.35078,0.47578 -0.33542,0.3172 -0.52865,0.76381 -0.57969,1.33985 l 3.5875,-0.005"
+ id="path3366"
+ inkscape:connector-curvature="0" /><path
+ d="m 670.11284,376.0158 0,0.95157 c -0.28438,-0.14583 -0.57969,-0.25521 -0.88593,-0.32813 -0.30626,-0.0729 -0.62345,-0.10937 -0.95157,-0.10937 -0.49948,0 -0.875,0.0766 -1.12656,0.22968 -0.24792,0.15313 -0.37188,0.38282 -0.37187,0.68907 -1e-5,0.23333 0.0893,0.41745 0.26796,0.55234 0.17865,0.13125 0.53776,0.25703 1.07735,0.37734 l 0.34453,0.0766 c 0.71458,0.15312 1.22135,0.37005 1.52031,0.65078 0.3026,0.27708 0.4539,0.66536 0.45391,1.16484 -10e-6,0.56875 -0.22605,1.01901 -0.67813,1.35078 -0.44844,0.33177 -1.06641,0.49766 -1.8539,0.49766 -0.32813,0 -0.67084,-0.0328 -1.02813,-0.0984 -0.35365,-0.062 -0.72734,-0.15677 -1.12109,-0.28437 l 0,-1.03907 c 0.37187,0.19323 0.73828,0.33907 1.09922,0.4375 0.36093,0.0948 0.71822,0.14219 1.07187,0.14219 0.47396,0 0.83854,-0.0802 1.09375,-0.24062 0.25521,-0.16407 0.38281,-0.39375 0.38281,-0.68907 0,-0.27343 -0.093,-0.48307 -0.2789,-0.6289 -0.1823,-0.14583 -0.58516,-0.2862 -1.2086,-0.4211 l -0.35,-0.082 c -0.62343,-0.13125 -1.07369,-0.33177 -1.35078,-0.60156 -0.27708,-0.27343 -0.41562,-0.64713 -0.41562,-1.12109 0,-0.57604 0.20416,-1.02083 0.6125,-1.33438 0.40833,-0.31353 0.98802,-0.47031 1.73906,-0.47031 0.37187,0 0.72187,0.0274 1.05,0.082 0.32812,0.0547 0.63073,0.13672 0.90781,0.24609"
+ id="path3368"
+ inkscape:connector-curvature="0" /><path
+ d="m 672.04878,375.83533 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38437 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+ id="path3370"
+ inkscape:connector-curvature="0" /><path
+ d="m 679.1855,378.82674 c 0,-0.72916 -0.15131,-1.29427 -0.45391,-1.69531 -0.29896,-0.40104 -0.72005,-0.60156 -1.26328,-0.60156 -0.53958,0 -0.96068,0.20052 -1.26328,0.60156 -0.29896,0.40104 -0.44844,0.96615 -0.44844,1.69531 0,0.72552 0.14948,1.2888 0.44844,1.68984 0.3026,0.40105 0.7237,0.60157 1.26328,0.60157 0.54323,0 0.96432,-0.20052 1.26328,-0.60157 0.3026,-0.40104 0.45391,-0.96432 0.45391,-1.68984 m 1.00625,2.37344 c -10e-6,1.04271 -0.23152,1.81745 -0.69453,2.32422 -0.46303,0.51041 -1.17214,0.76562 -2.12734,0.76562 -0.35365,0 -0.68725,-0.0273 -1.00079,-0.082 -0.31354,-0.051 -0.61797,-0.13125 -0.91328,-0.24062 l 0,-0.97891 c 0.29531,0.16041 0.58698,0.2789 0.875,0.35547 0.28802,0.0766 0.58151,0.11484 0.88047,0.11484 0.65989,0 1.1539,-0.17318 1.48203,-0.51953 0.32812,-0.34271 0.49219,-0.86224 0.49219,-1.55859 l 0,-0.49766 c -0.20782,0.36094 -0.47396,0.63073 -0.79844,0.80938 -0.32448,0.17864 -0.71276,0.26796 -1.16484,0.26796 -0.75104,0 -1.35625,-0.28619 -1.81563,-0.85859 -0.45937,-0.57239 -0.68906,-1.33073 -0.68906,-2.275 0,-0.94791 0.22969,-1.70807 0.68906,-2.28047 0.45938,-0.57239 1.06459,-0.85859 1.81563,-0.85859 0.45208,0 0.84036,0.0893 1.16484,0.26797 0.32448,0.17865 0.59062,0.44844 0.79844,0.80937 l 0,-0.92969 1.00625,0 0,5.36485"
+ id="path3372"
+ inkscape:connector-curvature="0" /><path
+ d="m 687.35581,378.26346 0,3.69687 -1.00625,0 0,-3.66406 c 0,-0.57968 -0.11302,-1.01353 -0.33906,-1.30156 -0.22605,-0.28802 -0.56511,-0.43203 -1.01719,-0.43203 -0.54323,0 -0.97161,0.17318 -1.28515,0.51953 -0.31355,0.34636 -0.47032,0.81849 -0.47032,1.41641 l 0,3.46171 -1.01171,0 0,-6.125 1.01171,0 0,0.95157 c 0.24063,-0.36823 0.52318,-0.64349 0.84766,-0.82578 0.32812,-0.18229 0.70547,-0.27344 1.13203,-0.27344 0.70364,0 1.23593,0.21875 1.59688,0.65625 0.36093,0.43386 0.5414,1.0737 0.5414,1.91953"
+ id="path3374"
+ inkscape:connector-curvature="0" /><path
+ d="m 698.03081,378.26346 0,3.69687 -1.00625,0 0,-3.66406 c -10e-6,-0.57968 -0.11303,-1.01353 -0.33906,-1.30156 -0.22605,-0.28802 -0.56511,-0.43203 -1.01719,-0.43203 -0.54323,0 -0.97162,0.17318 -1.28516,0.51953 -0.31354,0.34636 -0.47031,0.81849 -0.47031,1.41641 l 0,3.46171 -1.01172,0 0,-8.50937 1.01172,0 0,3.33594 c 0.24062,-0.36823 0.52317,-0.64349 0.84766,-0.82578 0.32812,-0.18229 0.70546,-0.27344 1.13203,-0.27344 0.70364,0 1.23593,0.21875 1.59687,0.65625 0.36093,0.43386 0.5414,1.0737 0.54141,1.91953"
+ id="path3376"
+ inkscape:connector-curvature="0" /><path
+ d="m 705.28785,378.64627 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22136 0.62343,1.58594 0.37552,0.36094 0.89687,0.5414 1.56407,0.5414 0.38645,0 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72551,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.73099,0.26979 -1.11015,0.35 -0.37918,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97709,0 -1.75183,-0.28438 -2.32422,-0.85313 -0.56875,-0.56875 -0.85313,-1.33802 -0.85312,-2.30781 -1e-5,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88594 2.19297,-0.88594 0.82395,0 1.47473,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69635,-0.49218 -1.19218,-0.49219 -0.56146,1e-5 -1.01172,0.1586 -1.35078,0.47578 -0.33542,0.3172 -0.52865,0.76381 -0.57969,1.33985 l 3.5875,-0.005"
+ id="path3378"
+ inkscape:connector-curvature="0" /><path
+ d="m 710.48863,376.77596 c -0.11303,-0.0656 -0.23698,-0.11302 -0.37188,-0.14219 -0.13125,-0.0328 -0.27708,-0.0492 -0.4375,-0.0492 -0.56875,1e-5 -1.00625,0.18595 -1.3125,0.55782 -0.3026,0.36823 -0.4539,0.8987 -0.4539,1.5914 l 0,3.22656 -1.01172,0 0,-6.125 1.01172,0 0,0.95157 c 0.21145,-0.37187 0.48671,-0.64713 0.82578,-0.82578 0.33906,-0.18229 0.75104,-0.27344 1.23594,-0.27344 0.0693,0 0.14583,0.005 0.22968,0.0164 0.0838,0.007 0.17682,0.0201 0.27891,0.0383 l 0.005,1.03359"
+ id="path3380"
+ inkscape:connector-curvature="0" /><path
+ d="m 716.5644,378.64627 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22136 0.62343,1.58594 0.37552,0.36094 0.89687,0.5414 1.56407,0.5414 0.38645,0 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72551,-0.23698 1.08281,-0.42657 l 0,0.95157 c -0.36094,0.15312 -0.73099,0.26979 -1.11015,0.35 -0.37918,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97709,0 -1.75183,-0.28438 -2.32422,-0.85313 -0.56875,-0.56875 -0.85312,-1.33802 -0.85312,-2.30781 0,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88594 2.19297,-0.88594 0.82395,0 1.47473,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69635,-0.49218 -1.19218,-0.49219 -0.56146,1e-5 -1.01172,0.1586 -1.35078,0.47578 -0.33542,0.3172 -0.52865,0.76381 -0.57969,1.33985 l 3.5875,-0.005"
+ id="path3382"
+ inkscape:connector-curvature="0" /><path
+ d="m 718.48393,380.57127 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906 m 0,-4.40234 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906"
+ id="path3384"
+ inkscape:connector-curvature="0" /><path
+ d="m 724.99175,375.83533 1.00625,0 1.25781,4.77969 1.25235,-4.77969 1.18672,0 1.25781,4.77969 1.25234,-4.77969 1.00625,0 -1.60234,6.125 -1.18672,0 -1.31797,-5.02031 -1.32344,5.02031 -1.18672,0 -1.60234,-6.125"
+ id="path3386"
+ inkscape:connector-curvature="0" /><path
+ d="m 734.15737,375.83533 1.00625,0 1.25781,4.77969 1.25235,-4.77969 1.18671,0 1.25782,4.77969 1.25234,-4.77969 1.00625,0 -1.60234,6.125 -1.18672,0 -1.31797,-5.02031 -1.32344,5.02031 -1.18672,0 -1.60234,-6.125"
+ id="path3388"
+ inkscape:connector-curvature="0" /><path
+ d="m 743.32299,375.83533 1.00625,0 1.25781,4.77969 1.25235,-4.77969 1.18671,0 1.25782,4.77969 1.25234,-4.77969 1.00625,0 -1.60234,6.125 -1.18672,0 -1.31797,-5.02031 -1.32344,5.02031 -1.18672,0 -1.60234,-6.125"
+ id="path3390"
+ inkscape:connector-curvature="0" /><path
+ d="m 752.19877,380.57127 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906"
+ id="path3392"
+ inkscape:connector-curvature="0" /><path
+ d="m 756.60659,381.04158 0,3.24844 -1.01172,0 0,-8.45469 1.01172,0 0,0.92969 c 0.21145,-0.36458 0.4776,-0.63437 0.79844,-0.80937 0.32447,-0.17864 0.71093,-0.26797 1.15937,-0.26797 0.74375,0 1.34713,0.29532 1.81016,0.88594 0.46666,0.59063 0.69999,1.36719 0.7,2.32968 -10e-6,0.96251 -0.23334,1.73907 -0.7,2.32969 -0.46303,0.59063 -1.06641,0.88594 -1.81016,0.88594 -0.44844,0 -0.8349,-0.0875 -1.15937,-0.2625 -0.32084,-0.17865 -0.58699,-0.45026 -0.79844,-0.81485 m 3.42344,-2.13828 c -10e-6,-0.7401 -0.15313,-1.31978 -0.45938,-1.73906 -0.30261,-0.42291 -0.72006,-0.63437 -1.25234,-0.63437 -0.5323,0 -0.95157,0.21146 -1.25782,0.63437 -0.3026,0.41928 -0.4539,0.99896 -0.4539,1.73906 0,0.74011 0.1513,1.32162 0.4539,1.74453 0.30625,0.41928 0.72552,0.62891 1.25782,0.62891 0.53228,0 0.94973,-0.20963 1.25234,-0.62891 0.30625,-0.42291 0.45937,-1.00442 0.45938,-1.74453"
+ id="path3394"
+ inkscape:connector-curvature="0" /><path
+ d="m 765.11596,376.5408 c -0.53958,1e-5 -0.96614,0.21147 -1.27968,0.63438 -0.31355,0.41927 -0.47032,0.99531 -0.47032,1.72812 0,0.73282 0.15495,1.31068 0.46485,1.7336 0.31354,0.41927 0.74192,0.6289 1.28515,0.6289 0.53594,0 0.96068,-0.21145 1.27422,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47031,-1.72813 0,-0.72551 -0.15677,-1.29973 -0.47031,-1.72265 -0.31354,-0.42656 -0.73828,-0.63984 -1.27422,-0.63985 m 0,-0.85312 c 0.875,0 1.56224,0.28438 2.06172,0.85312 0.49948,0.56876 0.74921,1.35626 0.74922,2.3625 -1e-5,1.00261 -0.24974,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06172,0.85313 -0.87864,0 -1.56771,-0.28438 -2.06718,-0.85313 -0.49584,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00624 0.24791,-1.79374 0.74375,-2.3625 0.49947,-0.56874 1.18854,-0.85312 2.06718,-0.85312"
+ id="path3396"
+ inkscape:connector-curvature="0" /><path
+ d="m 774.68081,378.26346 0,3.69687 -1.00625,0 0,-3.66406 c 0,-0.57968 -0.11303,-1.01353 -0.33906,-1.30156 -0.22605,-0.28802 -0.56511,-0.43203 -1.01719,-0.43203 -0.54323,0 -0.97162,0.17318 -1.28516,0.51953 -0.31354,0.34636 -0.47031,0.81849 -0.47031,1.41641 l 0,3.46171 -1.01172,0 0,-6.125 1.01172,0 0,0.95157 c 0.24062,-0.36823 0.52318,-0.64349 0.84766,-0.82578 0.32812,-0.18229 0.70546,-0.27344 1.13203,-0.27344 0.70364,0 1.23593,0.21875 1.59687,0.65625 0.36094,0.43386 0.5414,1.0737 0.54141,1.91953"
+ id="path3398"
+ inkscape:connector-curvature="0" /><path
+ d="m 779.07222,376.5408 c -0.53959,1e-5 -0.96615,0.21147 -1.27969,0.63438 -0.31354,0.41927 -0.47031,0.99531 -0.47031,1.72812 0,0.73282 0.15494,1.31068 0.46484,1.7336 0.31354,0.41927 0.74192,0.6289 1.28516,0.6289 0.53593,0 0.96067,-0.21145 1.27422,-0.63437 0.31353,-0.42292 0.4703,-0.99896 0.47031,-1.72813 -10e-6,-0.72551 -0.15678,-1.29973 -0.47031,-1.72265 -0.31355,-0.42656 -0.73829,-0.63984 -1.27422,-0.63985 m 0,-0.85312 c 0.87499,0 1.56223,0.28438 2.06172,0.85312 0.49947,0.56876 0.74921,1.35626 0.74921,2.3625 0,1.00261 -0.24974,1.79011 -0.74921,2.3625 -0.49949,0.56875 -1.18673,0.85313 -2.06172,0.85313 -0.87865,0 -1.56771,-0.28438 -2.06719,-0.85313 -0.49583,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00624 0.24792,-1.79374 0.74375,-2.3625 0.49948,-0.56874 1.18854,-0.85312 2.06719,-0.85312"
+ id="path3400"
+ inkscape:connector-curvature="0" /><path
+ d="m 783.50738,373.45096 1.01171,0 0,5.02578 3.00235,-2.64141 1.28515,0 -3.24843,2.86563 3.38515,3.25937 -1.3125,0 -3.11172,-2.9914 0,2.9914 -1.01171,0 0,-8.50937"
+ id="path3402"
+ inkscape:connector-curvature="0" /><path
+ d="m 792.02221,376.5408 c -0.53958,1e-5 -0.96614,0.21147 -1.27968,0.63438 -0.31355,0.41927 -0.47032,0.99531 -0.47032,1.72812 0,0.73282 0.15495,1.31068 0.46485,1.7336 0.31354,0.41927 0.74192,0.6289 1.28515,0.6289 0.53594,0 0.96068,-0.21145 1.27422,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47031,-1.72813 0,-0.72551 -0.15677,-1.29973 -0.47031,-1.72265 -0.31354,-0.42656 -0.73828,-0.63984 -1.27422,-0.63985 m 0,-0.85312 c 0.875,0 1.56224,0.28438 2.06172,0.85312 0.49948,0.56876 0.74921,1.35626 0.74922,2.3625 -1e-5,1.00261 -0.24974,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06172,0.85313 -0.87864,0 -1.56771,-0.28438 -2.06718,-0.85313 -0.49584,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00624 0.24791,-1.79374 0.74375,-2.3625 0.49947,-0.56874 1.18854,-0.85312 2.06718,-0.85312"
+ id="path3404"
+ inkscape:connector-curvature="0" /><path
+ d="m 796.4519,380.57127 1.1539,0 0,1.38906 -1.1539,0 0,-1.38906"
+ id="path3406"
+ inkscape:connector-curvature="0" /><path
+ d="m 804.29409,376.07049 0,0.94063 c -0.28438,-0.15677 -0.57058,-0.27344 -0.85859,-0.35 -0.28438,-0.0802 -0.5724,-0.12031 -0.86406,-0.12032 -0.65261,1e-5 -1.15938,0.20782 -1.52032,0.62344 -0.36094,0.41198 -0.5414,0.99167 -0.5414,1.73906 0,0.7474 0.18046,1.32891 0.5414,1.74453 0.36094,0.41198 0.86771,0.61797 1.52032,0.61797 0.29166,0 0.57968,-0.0383 0.86406,-0.11484 0.28801,-0.0802 0.57421,-0.1987 0.85859,-0.35547 l 0,0.92969 c -0.28073,0.13125 -0.5724,0.22969 -0.875,0.29531 -0.29896,0.0656 -0.61797,0.0984 -0.95703,0.0984 -0.9224,0 -1.65521,-0.28985 -2.19844,-0.86953 -0.54323,-0.57969 -0.81484,-1.36172 -0.81484,-2.3461 0,-0.99895 0.27344,-1.78463 0.82031,-2.35703 0.55052,-0.57239 1.30338,-0.85859 2.2586,-0.85859 0.30989,0 0.61249,0.0328 0.90781,0.0984 0.29531,0.062 0.5815,0.15677 0.85859,0.28437"
+ id="path3408"
+ inkscape:connector-curvature="0" /><path
+ d="m 808.42846,376.5408 c -0.53958,1e-5 -0.96614,0.21147 -1.27968,0.63438 -0.31355,0.41927 -0.47032,0.99531 -0.47032,1.72812 0,0.73282 0.15495,1.31068 0.46485,1.7336 0.31354,0.41927 0.74192,0.6289 1.28515,0.6289 0.53594,0 0.96068,-0.21145 1.27422,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47031,-1.72813 0,-0.72551 -0.15677,-1.29973 -0.47031,-1.72265 -0.31354,-0.42656 -0.73828,-0.63984 -1.27422,-0.63985 m 0,-0.85312 c 0.875,0 1.56224,0.28438 2.06172,0.85312 0.49948,0.56876 0.74921,1.35626 0.74922,2.3625 -1e-5,1.00261 -0.24974,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06172,0.85313 -0.87864,0 -1.56771,-0.28438 -2.06718,-0.85313 -0.49584,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00624 0.24791,-1.79374 0.74375,-2.3625 0.49947,-0.56874 1.18854,-0.85312 2.06718,-0.85312"
+ id="path3410"
+ inkscape:connector-curvature="0" /><path
+ d="m 817.67065,377.01112 c 0.25156,-0.45208 0.55234,-0.78568 0.90235,-1.00079 0.34999,-0.21509 0.76197,-0.32265 1.23594,-0.32265 0.63801,0 1.13019,0.22422 1.47656,0.67265 0.34634,0.4448 0.51952,1.07918 0.51953,1.90313 l 0,3.69687 -1.01172,0 0,-3.66406 c -10e-6,-0.58697 -0.10391,-1.02265 -0.31172,-1.30703 -0.20782,-0.28437 -0.52501,-0.42656 -0.95156,-0.42656 -0.52136,0 -0.93334,0.17318 -1.23594,0.51953 -0.30261,0.34636 -0.45391,0.81849 -0.4539,1.41641 l 0,3.46171 -1.01172,0 0,-3.66406 c -1e-5,-0.59062 -0.10391,-1.0263 -0.31172,-1.30703 -0.20782,-0.28437 -0.52865,-0.42656 -0.9625,-0.42656 -0.51407,0 -0.9224,0.175 -1.225,0.525 -0.30261,0.34636 -0.45391,0.81667 -0.45391,1.41094 l 0,3.46171 -1.01172,0 0,-6.125 1.01172,0 0,0.95157 c 0.22969,-0.37552 0.50495,-0.6526 0.82578,-0.83125 0.32083,-0.17864 0.70182,-0.26797 1.14297,-0.26797 0.44479,0 0.82213,0.11303 1.13203,0.33906 0.31354,0.22605 0.54505,0.55417 0.69453,0.98438"
+ id="path3412"
+ inkscape:connector-curvature="0" /><path
+ d="m 825.6058,373.79549 0.92969,0 -2.84375,9.20391 -0.92969,0 2.84375,-9.20391"
+ id="path3414"
+ inkscape:connector-curvature="0" /><path
+ d="m 828.20345,378.9033 c 0,0.74011 0.1513,1.32162 0.4539,1.74453 0.30625,0.41928 0.72552,0.62891 1.25782,0.62891 0.53228,0 0.95156,-0.20963 1.25781,-0.62891 0.30624,-0.42291 0.45937,-1.00442 0.45937,-1.74453 0,-0.7401 -0.15313,-1.31978 -0.45937,-1.73906 -0.30625,-0.42291 -0.72553,-0.63437 -1.25781,-0.63437 -0.5323,0 -0.95157,0.21146 -1.25782,0.63437 -0.3026,0.41928 -0.4539,0.99896 -0.4539,1.73906 m 3.4289,2.13828 c -0.21146,0.36459 -0.47943,0.6362 -0.8039,0.81485 -0.32084,0.175 -0.7073,0.2625 -1.15938,0.2625 -0.7401,0 -1.34349,-0.29531 -1.81015,-0.88594 -0.46302,-0.59062 -0.69453,-1.36718 -0.69453,-2.32969 0,-0.96249 0.23151,-1.73905 0.69453,-2.32968 0.46666,-0.59062 1.07005,-0.88594 1.81015,-0.88594 0.45208,0 0.83854,0.0893 1.15938,0.26797 0.32447,0.175 0.59244,0.44479 0.8039,0.80937 l 0,-0.92969 1.00625,0 0,8.45469 -1.00625,0 0,-3.24844"
+ id="path3416"
+ inkscape:connector-curvature="0" /><path
+ d="m 834.60735,379.54315 0,-3.70782 1.00625,0 0,3.66954 c 0,0.57969 0.11302,1.01536 0.33907,1.30703 0.22604,0.28802 0.5651,0.43203 1.01718,0.43203 0.54323,0 0.97161,-0.17318 1.28516,-0.51953 0.31718,-0.34636 0.47578,-0.81849 0.47578,-1.41641 l 0,-3.47266 1.00625,0 0,6.125 -1.00625,0 0,-0.94062 c -0.24427,0.37188 -0.52865,0.64896 -0.85312,0.83125 -0.32084,0.17865 -0.69454,0.26797 -1.1211,0.26797 -0.70364,0 -1.23776,-0.21875 -1.60234,-0.65625 -0.36458,-0.4375 -0.54688,-1.07734 -0.54688,-1.91953"
+ id="path3418"
+ inkscape:connector-curvature="0" /><path
+ d="m 844.19407,376.5408 c -0.53958,1e-5 -0.96614,0.21147 -1.27968,0.63438 -0.31355,0.41927 -0.47032,0.99531 -0.47032,1.72812 0,0.73282 0.15495,1.31068 0.46485,1.7336 0.31354,0.41927 0.74192,0.6289 1.28515,0.6289 0.53594,0 0.96068,-0.21145 1.27422,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47031,-1.72813 0,-0.72551 -0.15677,-1.29973 -0.47031,-1.72265 -0.31354,-0.42656 -0.73828,-0.63984 -1.27422,-0.63985 m 0,-0.85312 c 0.875,0 1.56224,0.28438 2.06172,0.85312 0.49948,0.56876 0.74921,1.35626 0.74922,2.3625 -10e-6,1.00261 -0.24974,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06172,0.85313 -0.87864,0 -1.56771,-0.28438 -2.06718,-0.85313 -0.49584,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00624 0.24791,-1.79374 0.74375,-2.3625 0.49947,-0.56874 1.18854,-0.85312 2.06718,-0.85312"
+ id="path3420"
+ inkscape:connector-curvature="0" /><path
+ d="m 849.66284,374.09627 0,1.73906 2.07266,0 0,0.78204 -2.07266,0 0,3.325 c 0,0.49948 0.0675,0.82031 0.20235,0.9625 0.13853,0.14218 0.41744,0.21328 0.83671,0.21328 l 1.0336,0 0,0.84218 -1.0336,0 c -0.77656,0 -1.3125,-0.14401 -1.60781,-0.43203 -0.29531,-0.29166 -0.44297,-0.82031 -0.44297,-1.58593 l 0,-3.325 -0.73828,0 0,-0.78204 0.73828,0 0,-1.73906 1.01172,0"
+ id="path3422"
+ inkscape:connector-curvature="0" /><path
+ d="m 858.30347,378.64627 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.5414 1.56406,0.5414 0.38645,0 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08282,-0.42657 l 0,0.95157 c -0.36095,0.15312 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97708,0 -1.75182,-0.28438 -2.32421,-0.85313 -0.56876,-0.56875 -0.85313,-1.33802 -0.85313,-2.30781 0,-1.0026 0.26979,-1.79739 0.80938,-2.38437 0.54322,-0.59062 1.27421,-0.88594 2.19296,-0.88594 0.82396,0 1.47474,0.26615 1.95235,0.79844 0.48124,0.52865 0.72187,1.2487 0.72187,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,1e-5 -1.01172,0.1586 -1.35078,0.47578 -0.33542,0.3172 -0.52865,0.76381 -0.57969,1.33985 l 3.5875,-0.005"
+ id="path3424"
+ inkscape:connector-curvature="0" /></g><g
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="text4751"><path
+ d="m 574.46167,302.28942 c -0.73282,1.25783 -1.27696,2.50197 -1.63242,3.73242 -0.35547,1.23048 -0.53321,2.47735 -0.5332,3.74063 -1e-5,1.26328 0.17773,2.51563 0.5332,3.75703 0.36093,1.23594 0.90507,2.48008 1.63242,3.73242 l -1.3125,0 c -0.82032,-1.28515 -1.43555,-2.54843 -1.8457,-3.78984 -0.40469,-1.2414 -0.60704,-2.47461 -0.60703,-3.69961 -1e-5,-1.21953 0.20234,-2.44726 0.60703,-3.6832 0.40468,-1.23593 1.01992,-2.49921 1.8457,-3.78985 l 1.3125,0"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path3427"
+ inkscape:connector-curvature="0" /><path
+ d="m 582.63198,308.43356 c 0.79296,0.16954 1.41093,0.52227 1.85391,1.05821 0.44843,0.53594 0.67265,1.19766 0.67266,1.98515 -10e-6,1.2086 -0.41564,2.14375 -1.24688,2.80547 -0.83126,0.66172 -2.01251,0.99258 -3.54375,0.99258 -0.51407,0 -1.04453,-0.0519 -1.59141,-0.15586 -0.5414,-0.0984 -1.10195,-0.24883 -1.68164,-0.45117 l 0,-1.59961 c 0.45938,0.26797 0.9625,0.47031 1.50938,0.60703 0.54687,0.13672 1.11835,0.20508 1.71445,0.20508 1.03906,0 1.82929,-0.20508 2.37071,-0.61524 0.54686,-0.41015 0.8203,-1.00624 0.82031,-1.78828 -10e-6,-0.72187 -0.25431,-1.28515 -0.76289,-1.68984 -0.50313,-0.41015 -1.20587,-0.61523 -2.10821,-0.61524 l -1.42734,0 0,-1.36171 1.49297,0 c 0.81484,0 1.43827,-0.16133 1.87031,-0.48399 0.43203,-0.32812 0.64804,-0.79843 0.64805,-1.41094 -10e-6,-0.62889 -0.22423,-1.11014 -0.67266,-1.44375 -0.44297,-0.33905 -1.08008,-0.50858 -1.91133,-0.50859 -0.45391,1e-5 -0.94063,0.0492 -1.46015,0.14766 -0.51954,0.0984 -1.09102,0.25157 -1.71446,0.45937 l 0,-1.47656 c 0.62891,-0.17499 1.2168,-0.30624 1.76368,-0.39375 0.55234,-0.0875 1.07187,-0.13124 1.55859,-0.13125 1.25781,10e-6 2.25312,0.28712 2.98594,0.86133 0.7328,0.56876 1.09921,1.33985 1.09922,2.31328 -10e-6,0.67813 -0.19415,1.25235 -0.58243,1.72265 -0.38828,0.46485 -0.94063,0.78751 -1.65703,0.96797"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path3429"
+ inkscape:connector-curvature="0" /><path
+ d="m 587.85737,302.28942 1.3125,0 c 0.82031,1.29064 1.43281,2.55392 1.8375,3.78985 0.41016,1.23594 0.61523,2.46367 0.61524,3.6832 -10e-6,1.225 -0.20508,2.45821 -0.61524,3.69961 -0.40469,1.24141 -1.01719,2.50469 -1.8375,3.78984 l -1.3125,0 c 0.72735,-1.25234 1.26875,-2.49648 1.62422,-3.73242 0.36094,-1.2414 0.54141,-2.49375 0.54141,-3.75703 0,-1.26328 -0.18047,-2.51015 -0.54141,-3.74063 -0.35547,-1.23045 -0.89687,-2.47459 -1.62422,-3.73242"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path3431"
+ inkscape:connector-curvature="0" /><path
+ d="m 608.42261,313.28981 0,-3.28945 -2.70703,0 0,-1.36172 4.34766,0 0,5.2582 c -0.63986,0.45391 -1.34533,0.79844 -2.11641,1.0336 -0.7711,0.22969 -1.59415,0.34453 -2.46914,0.34453 -1.91407,0 -3.41251,-0.55781 -4.49531,-1.67344 -1.07735,-1.12109 -1.61602,-2.67968 -1.61602,-4.67578 0,-2.00155 0.53867,-3.56015 1.61602,-4.67578 1.0828,-1.12108 2.58124,-1.68163 4.49531,-1.68164 0.79843,10e-6 1.55585,0.0985 2.27226,0.29531 0.72187,0.19689 1.38632,0.48673 1.99336,0.86953 l 0,1.76367 c -0.61251,-0.51952 -1.26329,-0.91053 -1.95234,-1.17304 -0.68907,-0.26249 -1.41368,-0.39374 -2.17383,-0.39375 -1.49844,1e-5 -2.625,0.41837 -3.37969,1.25508 -0.74922,0.83672 -1.12383,2.0836 -1.12382,3.74062 -10e-6,1.65157 0.3746,2.89571 1.12382,3.73242 0.75469,0.83672 1.88125,1.25508 3.37969,1.25508 0.58515,0 1.10742,-0.0492 1.5668,-0.14766 0.45936,-0.1039 0.87225,-0.26249 1.23867,-0.47578"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path3433"
+ inkscape:connector-curvature="0" /><path
+ d="m 620.89136,310.06598 0,0.73829 -6.93984,0 c 0.0656,1.03906 0.37734,1.83203 0.93515,2.3789 0.56328,0.54141 1.34531,0.81211 2.3461,0.81211 0.57968,0 1.14022,-0.0711 1.68164,-0.21328 0.54686,-0.14219 1.08827,-0.35547 1.62422,-0.63984 l 0,1.42734 c -0.54142,0.22969 -1.0965,0.40469 -1.66524,0.525 -0.56876,0.12031 -1.14571,0.18047 -1.73086,0.18047 -1.46563,0 -2.62774,-0.42656 -3.48633,-1.27969 -0.85312,-0.85312 -1.27969,-2.00703 -1.27968,-3.46172 -10e-6,-1.5039 0.40468,-2.69608 1.21406,-3.57656 0.81484,-0.88593 1.91132,-1.3289 3.28945,-1.32891 1.23593,1e-5 2.2121,0.39923 2.92852,1.19766 0.72186,0.79298 1.0828,1.87305 1.08281,3.24023 m -1.50938,-0.44296 c -0.0109,-0.82578 -0.24336,-1.48476 -0.69726,-1.97696 -0.44845,-0.49218 -1.04454,-0.73827 -1.78828,-0.73828 -0.84219,10e-6 -1.51758,0.2379 -2.02617,0.71367 -0.50313,0.47579 -0.79298,1.14571 -0.86954,2.00977 l 5.38125,-0.008"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path3435"
+ inkscape:connector-curvature="0" /><path
+ d="m 624.86168,303.24098 0,2.6086 3.10898,0 0,1.17305 -3.10898,0 0,4.9875 c -10e-6,0.74922 0.10116,1.23047 0.30351,1.44375 0.20781,0.21328 0.62617,0.31992 1.25508,0.31992 l 1.55039,0 0,1.26328 -1.55039,0 c -1.16485,0 -1.96875,-0.21602 -2.41172,-0.64805 -0.44297,-0.4375 -0.66445,-1.23047 -0.66445,-2.3789 l 0,-4.9875 -1.10742,0 0,-1.17305 1.10742,0 0,-2.6086 1.51758,0"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path3437"
+ inkscape:connector-curvature="0" /><path
+ d="m 639.48785,310.41872 c -1.21954,0 -2.06446,0.13946 -2.53477,0.41836 -0.47031,0.27891 -0.70547,0.75469 -0.70546,1.42734 -10e-6,0.53594 0.17499,0.9625 0.525,1.27969 0.35546,0.31172 0.83671,0.46758 1.44375,0.46758 0.83671,0 1.50663,-0.29531 2.00976,-0.88594 0.50859,-0.59609 0.76288,-1.38632 0.76289,-2.3707 l 0,-0.33633 -1.50117,0 m 3.01055,-0.62344 0,5.2418 -1.50938,0 0,-1.39453 c -0.34454,0.55781 -0.77383,0.9707 -1.28789,1.23867 -0.51407,0.2625 -1.14297,0.39375 -1.88672,0.39375 -0.94063,0 -1.68984,-0.2625 -2.24765,-0.7875 -0.55235,-0.53047 -0.82852,-1.23867 -0.82852,-2.12461 0,-1.03359 0.34453,-1.81289 1.03359,-2.33789 0.69453,-0.525 1.72813,-0.7875 3.10079,-0.7875 l 2.1164,0 0,-0.14766 c -10e-6,-0.69452 -0.22969,-1.23046 -0.68906,-1.60781 -0.45391,-0.3828 -1.09376,-0.57421 -1.91953,-0.57422 -0.52501,10e-6 -1.03633,0.0629 -1.53399,0.18867 -0.49766,0.12579 -0.97617,0.31446 -1.43554,0.56602 l 0,-1.39453 c 0.55234,-0.21327 1.08827,-0.37187 1.60781,-0.47578 0.51953,-0.10937 1.02539,-0.16406 1.51758,-0.16407 1.3289,1e-5 2.32147,0.34454 2.97773,1.0336 0.65624,0.68907 0.98437,1.7336 0.98438,3.13359"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path3439"
+ inkscape:connector-curvature="0" /><path
+ d="m 653.25269,309.49177 0,5.54531 -1.50937,0 0,-5.4961 c -1e-5,-0.86952 -0.16954,-1.5203 -0.5086,-1.95234 -0.33907,-0.43202 -0.84766,-0.64804 -1.52578,-0.64805 -0.81485,1e-5 -1.45742,0.25978 -1.92773,0.7793 -0.47032,0.51954 -0.70547,1.22774 -0.70547,2.12461 l 0,5.19258 -1.51758,0 0,-9.1875 1.51758,0 0,1.42734 c 0.36093,-0.55233 0.78476,-0.96522 1.27148,-1.23867 0.49219,-0.27343 1.0582,-0.41015 1.69805,-0.41016 1.05546,1e-5 1.8539,0.32814 2.39531,0.98438 0.5414,0.65079 0.8121,1.61055 0.81211,2.8793"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path3441"
+ inkscape:connector-curvature="0" /><path
+ d="m 661.6937,302.78981 1.65704,0 0,12.24727 -1.65704,0 0,-12.24727"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path3443"
+ inkscape:connector-curvature="0" /><path
+ d="m 674.21988,309.49177 0,5.54531 -1.50938,0 0,-5.4961 c 0,-0.86952 -0.16954,-1.5203 -0.50859,-1.95234 -0.33907,-0.43202 -0.84766,-0.64804 -1.52578,-0.64805 -0.81485,1e-5 -1.45743,0.25978 -1.92774,0.7793 -0.47031,0.51954 -0.70547,1.22774 -0.70547,2.12461 l 0,5.19258 -1.51757,0 0,-9.1875 1.51757,0 0,1.42734 c 0.36094,-0.55233 0.78477,-0.96522 1.27149,-1.23867 0.49218,-0.27343 1.0582,-0.41015 1.69805,-0.41016 1.05546,1e-5 1.85389,0.32814 2.39531,0.98438 0.5414,0.65079 0.8121,1.61055 0.81211,2.8793"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path3445"
+ inkscape:connector-curvature="0" /><path
+ d="m 683.10386,306.12028 0,1.42735 c -0.42657,-0.21875 -0.86954,-0.38281 -1.3289,-0.49219 -0.45938,-0.10937 -0.93517,-0.16406 -1.42735,-0.16406 -0.74922,0 -1.3125,0.11485 -1.68984,0.34453 -0.37188,0.22969 -0.55782,0.57422 -0.55781,1.03359 -10e-6,0.35001 0.13398,0.62618 0.40195,0.82852 0.26796,0.19688 0.80664,0.38555 1.61601,0.56601 l 0.5168,0.11485 c 1.07187,0.22969 1.83203,0.55508 2.28047,0.97617 0.4539,0.41563 0.68085,0.99805 0.68086,1.74726 -10e-6,0.85313 -0.33907,1.52852 -1.01719,2.02618 -0.67266,0.49765 -1.59961,0.74648 -2.78086,0.74648 -0.49219,0 -1.00625,-0.0492 -1.54218,-0.14766 -0.53048,-0.093 -1.09102,-0.23515 -1.68165,-0.42656 l 0,-1.55859 c 0.55782,0.28984 1.10742,0.50859 1.64883,0.65625 0.54141,0.14219 1.07734,0.21328 1.60782,0.21328 0.71093,0 1.2578,-0.12031 1.64062,-0.36094 0.38281,-0.24609 0.57421,-0.59062 0.57422,-1.03359 -10e-6,-0.41016 -0.13946,-0.72461 -0.41836,-0.94336 -0.27344,-0.21875 -0.87774,-0.4293 -1.81289,-0.63164 l -0.525,-0.12305 c -0.93516,-0.19687 -1.61055,-0.49765 -2.02617,-0.90234 -0.41563,-0.41015 -0.62344,-0.9707 -0.62344,-1.68164 0,-0.86406 0.30625,-1.53125 0.91875,-2.00157 0.6125,-0.4703 1.48203,-0.70546 2.60859,-0.70547 0.55781,1e-5 1.08281,0.041 1.575,0.12305 0.49218,0.082 0.94609,0.20509 1.36172,0.36914"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path3447"
+ inkscape:connector-curvature="0" /><path
+ d="m 687.50074,303.24098 0,2.6086 3.10898,0 0,1.17305 -3.10898,0 0,4.9875 c 0,0.74922 0.10117,1.23047 0.30352,1.44375 0.2078,0.21328 0.62616,0.31992 1.25507,0.31992 l 1.55039,0 0,1.26328 -1.55039,0 c -1.16484,0 -1.96875,-0.21602 -2.41171,-0.64805 -0.44298,-0.4375 -0.66446,-1.23047 -0.66446,-2.3789 l 0,-4.9875 -1.10742,0 0,-1.17305 1.10742,0 0,-2.6086 1.51758,0"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path3449"
+ inkscape:connector-curvature="0" /><path
+ d="m 696.77848,310.41872 c -1.21954,0 -2.06446,0.13946 -2.53477,0.41836 -0.47031,0.27891 -0.70547,0.75469 -0.70547,1.42734 0,0.53594 0.175,0.9625 0.525,1.27969 0.35547,0.31172 0.83672,0.46758 1.44375,0.46758 0.83672,0 1.50664,-0.29531 2.00977,-0.88594 0.50858,-0.59609 0.76288,-1.38632 0.76289,-2.3707 l 0,-0.33633 -1.50117,0 m 3.01054,-0.62344 0,5.2418 -1.50937,0 0,-1.39453 c -0.34454,0.55781 -0.77384,0.9707 -1.28789,1.23867 -0.51407,0.2625 -1.14298,0.39375 -1.88672,0.39375 -0.94063,0 -1.68985,-0.2625 -2.24766,-0.7875 -0.55234,-0.53047 -0.82851,-1.23867 -0.82851,-2.12461 0,-1.03359 0.34453,-1.81289 1.03359,-2.33789 0.69453,-0.525 1.72812,-0.7875 3.10078,-0.7875 l 2.11641,0 0,-0.14766 c -10e-6,-0.69452 -0.2297,-1.23046 -0.68906,-1.60781 -0.45392,-0.3828 -1.09376,-0.57421 -1.91954,-0.57422 -0.525,10e-6 -1.03633,0.0629 -1.53398,0.18867 -0.49766,0.12579 -0.97617,0.31446 -1.43555,0.56602 l 0,-1.39453 c 0.55234,-0.21327 1.08828,-0.37187 1.60782,-0.47578 0.51952,-0.10937 1.02538,-0.16406 1.51757,-0.16407 1.3289,1e-5 2.32148,0.34454 2.97774,1.0336 0.65624,0.68907 0.98436,1.7336 0.98437,3.13359"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path3451"
+ inkscape:connector-curvature="0" /><path
+ d="m 710.54333,309.49177 0,5.54531 -1.50938,0 0,-5.4961 c -10e-6,-0.86952 -0.16954,-1.5203 -0.50859,-1.95234 -0.33907,-0.43202 -0.84767,-0.64804 -1.52578,-0.64805 -0.81485,1e-5 -1.45743,0.25978 -1.92774,0.7793 -0.47031,0.51954 -0.70547,1.22774 -0.70547,2.12461 l 0,5.19258 -1.51758,0 0,-9.1875 1.51758,0 0,1.42734 c 0.36094,-0.55233 0.78476,-0.96522 1.27149,-1.23867 0.49218,-0.27343 1.0582,-0.41015 1.69804,-0.41016 1.05547,1e-5 1.8539,0.32814 2.39532,0.98438 0.54139,0.65079 0.8121,1.61055 0.81211,2.8793"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path3453"
+ inkscape:connector-curvature="0" /><path
+ d="m 715.06325,303.24098 0,2.6086 3.10898,0 0,1.17305 -3.10898,0 0,4.9875 c -1e-5,0.74922 0.10117,1.23047 0.30351,1.44375 0.20781,0.21328 0.62617,0.31992 1.25508,0.31992 l 1.55039,0 0,1.26328 -1.55039,0 c -1.16485,0 -1.96875,-0.21602 -2.41172,-0.64805 -0.44297,-0.4375 -0.66445,-1.23047 -0.66445,-2.3789 l 0,-4.9875 -1.10742,0 0,-1.17305 1.10742,0 0,-2.6086 1.51758,0"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path3455"
+ inkscape:connector-curvature="0" /><path
+ d="m 730.55074,303.91364 c -1.20313,1e-5 -2.16016,0.44845 -2.87109,1.34531 -0.70548,0.89689 -1.05821,2.11915 -1.05821,3.6668 0,1.54219 0.35273,2.76172 1.05821,3.65859 0.71093,0.89688 1.66796,1.34532 2.87109,1.34532 1.20312,0 2.15468,-0.44844 2.85469,-1.34532 0.70546,-0.89687 1.05819,-2.1164 1.0582,-3.65859 -10e-6,-1.54765 -0.35274,-2.76991 -1.0582,-3.6668 -0.70001,-0.89686 -1.65157,-1.3453 -2.85469,-1.34531 m 2.32148,10.90195 2.18203,2.38711 -2.00156,0 -1.81289,-1.96054 c -0.18047,0.0109 -0.31993,0.0191 -0.41836,0.0246 -0.093,0.005 -0.18321,0.008 -0.2707,0.008 -1.72266,0 -3.10079,-0.57422 -4.13438,-1.72266 -1.02812,-1.1539 -1.54218,-2.69609 -1.54218,-4.62656 0,-1.93593 0.51406,-3.47812 1.54218,-4.62656 1.03359,-1.1539 2.41172,-1.73085 4.13438,-1.73086 1.71718,10e-6 3.08983,0.57696 4.11797,1.73086 1.02811,1.14844 1.54217,2.69063 1.54219,4.62656 -2e-5,1.42188 -0.28713,2.63868 -0.86133,3.65039 -0.56876,1.01172 -1.39454,1.75821 -2.47735,2.23945"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path3457"
+ inkscape:connector-curvature="0" /><path
+ d="m 738.58161,311.4113 0,-5.56172 1.50938,0 0,5.5043 c -1e-5,0.86953 0.16952,1.52304 0.50859,1.96054 0.33906,0.43204 0.84765,0.64805 1.52578,0.64805 0.81484,0 1.45742,-0.25976 1.92773,-0.7793 0.47578,-0.51953 0.71367,-1.22773 0.71368,-2.12461 l 0,-5.20898 1.50937,0 0,9.1875 -1.50937,0 0,-1.41094 c -0.36642,0.55781 -0.79298,0.97344 -1.27969,1.24688 -0.48126,0.26797 -1.0418,0.40195 -1.68164,0.40195 -1.05547,0 -1.85664,-0.32813 -2.40352,-0.98438 -0.54687,-0.65624 -0.82031,-1.61601 -0.82031,-2.87929"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path3459"
+ inkscape:connector-curvature="0" /><path
+ d="m 752.96169,306.90778 c -0.80938,10e-6 -1.44922,0.3172 -1.91953,0.95156 -0.47032,0.62892 -0.70547,1.49298 -0.70547,2.59219 0,1.09922 0.23242,1.96602 0.69726,2.60039 0.47031,0.62891 1.11289,0.94336 1.92774,0.94336 0.8039,0 1.44101,-0.31718 1.91133,-0.95156 0.4703,-0.63437 0.70546,-1.49843 0.70547,-2.59219 -10e-6,-1.08827 -0.23517,-1.9496 -0.70547,-2.58398 -0.47032,-0.63984 -1.10743,-0.95976 -1.91133,-0.95977 m 0,-1.27969 c 1.31249,1e-5 2.34335,0.42658 3.09258,1.27969 0.74921,0.85313 1.12382,2.03438 1.12383,3.54375 -10e-6,1.50391 -0.37462,2.68516 -1.12383,3.54375 -0.74923,0.85313 -1.78009,1.27969 -3.09258,1.27969 -1.31797,0 -2.35157,-0.42656 -3.10078,-1.27969 -0.74375,-0.85859 -1.11563,-2.03984 -1.11563,-3.54375 0,-1.50937 0.37188,-2.69062 1.11563,-3.54375 0.74921,-0.85311 1.78281,-1.27968 3.10078,-1.27969"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path3461"
+ inkscape:connector-curvature="0" /><path
+ d="m 761.16481,303.24098 0,2.6086 3.10898,0 0,1.17305 -3.10898,0 0,4.9875 c 0,0.74922 0.10117,1.23047 0.30352,1.44375 0.2078,0.21328 0.62616,0.31992 1.25507,0.31992 l 1.55039,0 0,1.26328 -1.55039,0 c -1.16484,0 -1.96875,-0.21602 -2.41171,-0.64805 -0.44298,-0.4375 -0.66446,-1.23047 -0.66446,-2.3789 l 0,-4.9875 -1.10742,0 0,-1.17305 1.10742,0 0,-2.6086 1.51758,0"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path3463"
+ inkscape:connector-curvature="0" /><path
+ d="m 774.12574,310.06598 0,0.73829 -6.93984,0 c 0.0656,1.03906 0.37734,1.83203 0.93515,2.3789 0.56328,0.54141 1.34531,0.81211 2.3461,0.81211 0.57968,0 1.14023,-0.0711 1.68164,-0.21328 0.54687,-0.14219 1.08827,-0.35547 1.62422,-0.63984 l 0,1.42734 c -0.54142,0.22969 -1.09649,0.40469 -1.66524,0.525 -0.56875,0.12031 -1.14571,0.18047 -1.73086,0.18047 -1.46563,0 -2.62773,-0.42656 -3.48632,-1.27969 -0.85313,-0.85312 -1.27969,-2.00703 -1.27969,-3.46172 0,-1.5039 0.40468,-2.69608 1.21406,-3.57656 0.81484,-0.88593 1.91132,-1.3289 3.28945,-1.32891 1.23593,1e-5 2.21211,0.39923 2.92852,1.19766 0.72187,0.79298 1.0828,1.87305 1.08281,3.24023 m -1.50937,-0.44296 c -0.0109,-0.82578 -0.24337,-1.48476 -0.69727,-1.97696 -0.44844,-0.49218 -1.04454,-0.73827 -1.78828,-0.73828 -0.84219,10e-6 -1.51758,0.2379 -2.02617,0.71367 -0.50313,0.47579 -0.79297,1.14571 -0.86953,2.00977 l 5.38125,-0.008"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path3465"
+ inkscape:connector-curvature="0" /></g><g
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="text4803"><path
+ d="m 574.46167,3.1534802 c -0.73282,1.2578241 -1.27696,2.5019636 -1.63242,3.7324222 -0.35547,1.2304766 -0.53321,2.4773504 -0.5332,3.7406256 -1e-5,1.263285 0.17773,2.515628 0.5332,3.757031 0.36093,1.235938 0.90507,2.480077 1.63242,3.732422 l -1.3125,0 c -0.82032,-1.285157 -1.43555,-2.548437 -1.8457,-3.789844 -0.40469,-1.241403 -0.60704,-2.474605 -0.60703,-3.699609 -1e-5,-1.2195252 0.20234,-2.4472585 0.60703,-3.6832038 0.40468,-1.2359273 1.01992,-2.4992074 1.8457,-3.789844 l 1.3125,0"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4445"
+ inkscape:connector-curvature="0" /><path
+ d="m 579.03901,14.506606 5.78321,0 0,1.394531 -7.77657,0 0,-1.394531 c 0.62891,-0.650779 1.48477,-1.523044 2.56758,-2.616797 1.08828,-1.099214 1.77187,-1.807416 2.05078,-2.1246096 0.53047,-0.596087 0.89961,-1.0992116 1.10743,-1.5093751 0.21327,-0.4156169 0.31991,-0.8230384 0.31992,-1.2222657 -10e-6,-0.6507718 -0.2297,-1.18124 -0.68906,-1.5914063 -0.45392,-0.4101454 -1.04728,-0.6152234 -1.78008,-0.6152345 -0.51954,1.11e-5 -1.06915,0.090245 -1.64883,0.2707032 -0.57422,0.1804794 -1.18946,0.4539166 -1.8457,0.8203125 l 0,-1.6734376 c 0.66718,-0.2679568 1.29062,-0.4703004 1.87031,-0.6070313 0.57968,-0.1367063 1.11015,-0.2050656 1.59141,-0.2050781 1.26874,1.25e-5 2.28046,0.3171997 3.03515,0.9515626 0.75468,0.6343859 1.13202,1.4820414 1.13203,2.5429689 -10e-6,0.5031335 -0.0957,0.9816487 -0.28711,1.435547 -0.18594,0.4484446 -0.52774,0.9789128 -1.02539,1.5914063 -0.13672,0.1585997 -0.57149,0.6179737 -1.30429,1.3781247 -0.73282,0.754692 -1.76642,1.812894 -3.10079,3.17461"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4447"
+ inkscape:connector-curvature="0" /><path
+ d="m 587.85737,3.1534802 1.3125,0 c 0.82031,1.2906366 1.43281,2.5539167 1.8375,3.789844 0.41016,1.2359453 0.61523,2.4636786 0.61524,3.6832038 -10e-6,1.225004 -0.20508,2.458206 -0.61524,3.699609 -0.40469,1.241407 -1.01719,2.504687 -1.8375,3.789844 l -1.3125,0 c 0.72735,-1.252345 1.26875,-2.496484 1.62422,-3.732422 0.36094,-1.241403 0.54141,-2.493746 0.54141,-3.757031 0,-1.2632752 -0.18047,-2.510149 -0.54141,-3.7406256 -0.35547,-1.2304586 -0.89687,-2.4745981 -1.62422,-3.7324222"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4449"
+ inkscape:connector-curvature="0" /><path
+ d="m 601.72886,5.0155897 0,4.6019535 2.08359,0 c 0.77109,6.3e-6 1.36718,-0.1996029 1.78829,-0.5988282 0.42108,-0.3992115 0.63163,-0.967961 0.63164,-1.7062501 -1e-5,-0.7328032 -0.21056,-1.2988183 -0.63164,-1.698047 -0.42111,-0.3992081 -1.0172,-0.5988173 -1.78829,-0.5988282 l -2.08359,0 m -1.65703,-1.3617188 3.74062,0 c 1.37265,1.22e-5 2.40898,0.3117307 3.10899,0.9351563 0.70546,0.6179795 1.05819,1.5257911 1.0582,2.7234377 -10e-6,1.2086012 -0.35274,2.1218816 -1.0582,2.7398441 -0.70001,0.617974 -1.73634,0.926958 -3.10899,0.926953 l -2.08359,0 0,4.921875 -1.65703,0 0,-12.2472661"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4451"
+ inkscape:connector-curvature="0" /><path
+ d="m 615.19019,8.1245743 c -0.16954,-0.09843 -0.35548,-0.1695233 -0.55781,-0.2132812 -0.19688,-0.049211 -0.41563,-0.07382 -0.65625,-0.073828 -0.85313,8.1e-6 -1.50938,0.2789141 -1.96875,0.8367188 -0.45391,0.5523505 -0.68087,1.3480531 -0.68086,2.3871091 l 0,4.839844 -1.51758,0 0,-9.1875001 1.51758,0 0,1.4273439 c 0.31718,-0.5578042 0.73007,-0.9706945 1.23867,-1.238672 0.50859,-0.2734282 1.12656,-0.4101469 1.85391,-0.4101563 0.1039,9.4e-6 0.21874,0.00821 0.34453,0.024609 0.12577,0.010947 0.26522,0.030087 0.41836,0.057422 l 0.008,1.5503907"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4453"
+ inkscape:connector-curvature="0" /><path
+ d="m 624.28745,10.930043 0,0.738282 -6.93984,0 c 0.0656,1.039065 0.37734,1.832033 0.93516,2.378906 0.56327,0.541408 1.3453,0.81211 2.34609,0.812109 0.57968,1e-6 1.14023,-0.07109 1.68164,-0.213281 0.54687,-0.142186 1.08827,-0.355467 1.62422,-0.639844 l 0,1.427344 c -0.54141,0.229688 -1.09649,0.404688 -1.66523,0.525 -0.56876,0.120313 -1.14571,0.180469 -1.73086,0.180469 -1.46563,0 -2.62774,-0.426562 -3.48633,-1.279688 -0.85313,-0.853123 -1.27969,-2.007028 -1.27969,-3.461719 0,-1.5038999 0.40469,-2.6960863 1.21406,-3.5765623 0.81484,-0.8859286 1.91133,-1.328897 3.28946,-1.3289064 1.23593,9.4e-6 2.2121,0.3992278 2.92851,1.1976564 0.72187,0.7929762 1.08281,1.8730533 1.08281,3.2402343 m -1.50937,-0.442969 c -0.011,-0.8257746 -0.24337,-1.4847583 -0.69727,-1.9769528 -0.44844,-0.4921796 -1.04453,-0.7382731 -1.78828,-0.7382813 -0.84219,8.2e-6 -1.51758,0.2378986 -2.02617,0.7136719 -0.50313,0.4757883 -0.79297,1.1457095 -0.86953,2.0097662 l 5.38125,-0.0082"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4455"
+ inkscape:connector-curvature="0" /><path
+ d="m 626.01831,10.626528 4.42149,0 0,1.345312 -4.42149,0 0,-1.345312"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4457"
+ inkscape:connector-curvature="0" /><path
+ d="m 638.52808,4.7776991 c -1.20313,1.11e-5 -2.16016,0.4484482 -2.87109,1.3453126 -0.70548,0.8968839 -1.05821,2.1191484 -1.05821,3.6667971 0,1.5421922 0.35273,2.7617222 1.05821,3.6585942 0.71093,0.896876 1.66796,1.345314 2.87109,1.345312 1.20312,2e-6 2.15468,-0.448436 2.85469,-1.345312 0.70546,-0.896872 1.05819,-2.116402 1.0582,-3.6585942 -10e-6,-1.5476487 -0.35274,-2.7699132 -1.0582,-3.6667971 -0.70001,-0.8968644 -1.65157,-1.3453015 -2.85469,-1.3453126 m 2.32148,10.9019539 2.18204,2.387109 -2.00157,0 -1.81289,-1.960547 c -0.18047,0.01094 -0.31993,0.01914 -0.41836,0.02461 -0.093,0.0055 -0.18321,0.0082 -0.2707,0.0082 -1.72266,0 -3.10079,-0.574218 -4.13438,-1.722656 -1.02812,-1.153904 -1.54218,-2.69609 -1.54218,-4.6265632 0,-1.9359296 0.51406,-3.4781156 1.54218,-4.6265628 1.03359,-1.1538944 2.41172,-1.730847 4.13438,-1.7308595 1.71718,1.25e-5 3.08983,0.5769651 4.11797,1.7308595 1.02811,1.1484472 1.54217,2.6906332 1.54219,4.6265628 -2e-5,1.4218802 -0.28713,2.6386752 -0.86133,3.6503912 -0.56876,1.01172 -1.39454,1.758204 -2.47735,2.239453"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4459"
+ inkscape:connector-curvature="0" /><path
+ d="m 646.57535,12.275356 0,-5.5617193 1.50937,0 0,5.5042973 c 0,0.869534 0.16953,1.523049 0.5086,1.960547 0.33905,0.432033 0.84765,0.648048 1.52578,0.648047 0.81483,1e-6 1.45741,-0.259764 1.92773,-0.779297 0.47578,-0.519529 0.71367,-1.227731 0.71367,-2.12461 l 0,-5.2089843 1.50938,0 0,9.1875003 -1.50938,0 0,-1.410937 c -0.36641,0.557813 -0.79297,0.973438 -1.27968,1.246875 -0.48126,0.267969 -1.04181,0.401953 -1.68165,0.401953 -1.05547,0 -1.85664,-0.328125 -2.40351,-0.984375 -0.54688,-0.656249 -0.82031,-1.616013 -0.82031,-2.879297"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4461"
+ inkscape:connector-curvature="0" /><path
+ d="m 660.95542,7.7718399 c -0.80937,8.2e-6 -1.44922,0.3171954 -1.91953,0.9515626 -0.47031,0.6289128 -0.70547,1.4929745 -0.70547,2.5921875 0,1.099222 0.23242,1.966019 0.69727,2.600391 0.47031,0.628908 1.11289,0.94336 1.92773,0.943359 0.80391,1e-6 1.44101,-0.317186 1.91133,-0.951562 0.47031,-0.634373 0.70546,-1.498434 0.70547,-2.592188 -10e-6,-1.088275 -0.23516,-1.9496028 -0.70547,-2.5839844 -0.47032,-0.639836 -1.10742,-0.9597575 -1.91133,-0.9597657 m 0,-1.2796876 c 1.3125,9.4e-6 2.34336,0.4265715 3.09258,1.2796876 0.74921,0.8531324 1.12382,2.0343813 1.12383,3.5437501 -10e-6,1.50391 -0.37462,2.685158 -1.12383,3.54375 -0.74922,0.853126 -1.78008,1.279688 -3.09258,1.279688 -1.31797,0 -2.35156,-0.426562 -3.10078,-1.279688 -0.74375,-0.858592 -1.11562,-2.03984 -1.11562,-3.54375 0,-1.5093688 0.37187,-2.6906177 1.11562,-3.5437501 0.74922,-0.8531161 1.78281,-1.2796782 3.10078,-1.2796876"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4463"
+ inkscape:connector-curvature="0" /><path
+ d="m 669.15855,4.1050428 0,2.6085939 3.10899,0 0,1.173047 -3.10899,0 0,4.9875003 c 0,0.749221 0.10117,1.230471 0.30352,1.44375 0.20781,0.213283 0.62617,0.319923 1.25508,0.319922 l 1.55039,0 0,1.263281 -1.55039,0 c -1.16485,0 -1.96875,-0.216015 -2.41172,-0.648047 -0.44297,-0.437499 -0.66446,-1.230467 -0.66445,-2.378906 l 0,-4.9875003 -1.10743,0 0,-1.173047 1.10743,0 0,-2.6085939 1.51757,0"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4465"
+ inkscape:connector-curvature="0" /><path
+ d="m 682.11949,10.930043 0,0.738282 -6.93984,0 c 0.0656,1.039065 0.37734,1.832033 0.93516,2.378906 0.56327,0.541408 1.3453,0.81211 2.34609,0.812109 0.57968,1e-6 1.14023,-0.07109 1.68164,-0.213281 0.54687,-0.142186 1.08827,-0.355467 1.62422,-0.639844 l 0,1.427344 c -0.54142,0.229688 -1.09649,0.404688 -1.66524,0.525 -0.56875,0.120313 -1.1457,0.180469 -1.73085,0.180469 -1.46563,0 -2.62774,-0.426562 -3.48633,-1.279688 -0.85313,-0.853123 -1.27969,-2.007028 -1.27969,-3.461719 0,-1.5038999 0.40469,-2.6960863 1.21406,-3.5765623 0.81484,-0.8859286 1.91133,-1.328897 3.28946,-1.3289064 1.23593,9.4e-6 2.2121,0.3992278 2.92851,1.1976564 0.72187,0.7929762 1.0828,1.8730533 1.08281,3.2402343 m -1.50937,-0.442969 c -0.011,-0.8257746 -0.24337,-1.4847583 -0.69727,-1.9769528 -0.44844,-0.4921796 -1.04453,-0.7382731 -1.78828,-0.7382813 -0.84219,8.2e-6 -1.51758,0.2378986 -2.02617,0.7136719 -0.50313,0.4757883 -0.79297,1.1457095 -0.86953,2.0097662 l 5.38125,-0.0082"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4467"
+ inkscape:connector-curvature="0" /><path
+ d="m 699.18199,4.5972303 0,1.7472658 c -0.55782,-0.5195212 -1.15392,-0.9078021 -1.78828,-1.1648439 -0.62892,-0.2570202 -1.29884,-0.3855357 -2.00977,-0.3855469 -1.4,1.12e-5 -2.47188,0.4293076 -3.21562,1.2878908 -0.74375,0.853134 -1.11563,2.0890703 -1.11563,3.7078127 0,1.6132862 0.37188,2.8492222 1.11563,3.7078132 0.74374,0.853126 1.81562,1.279688 3.21562,1.279687 0.71093,10e-7 1.38085,-0.128514 2.00977,-0.385547 0.63436,-0.257029 1.23046,-0.64531 1.78828,-1.164844 l 0,1.73086 c -0.5797,0.39375 -1.19493,0.689063 -1.8457,0.885937 -0.64532,0.196875 -1.32892,0.295313 -2.05078,0.295313 -1.85392,0 -3.31407,-0.566015 -4.38047,-1.698047 -1.06641,-1.137497 -1.59961,-2.687887 -1.59961,-4.6511722 0,-1.968742 0.5332,-3.5191312 1.59961,-4.6511722 1.0664,-1.1374882 2.52655,-1.7062376 4.38047,-1.7062501 0.7328,1.25e-5 1.42186,0.09845 2.06718,0.2953125 0.65078,0.1914183 1.26054,0.4812617 1.8293,0.8695313"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4469"
+ inkscape:connector-curvature="0" /><path
+ d="m 709.32926,10.355824 0,5.545313 -1.50937,0 0,-5.496094 c -10e-6,-0.8695247 -0.16954,-1.5203054 -0.5086,-1.9523437 -0.33907,-0.4320234 -0.84766,-0.6480388 -1.52578,-0.6480469 -0.81485,8.1e-6 -1.45743,0.2597735 -1.92773,0.779297 -0.47032,0.519538 -0.70548,1.2277405 -0.70547,2.1246096 l 0,5.192578 -1.51758,0 0,-12.764063 1.51758,0 0,5.0039066 c 0.36093,-0.5523355 0.78476,-0.9652257 1.27148,-1.238672 0.49218,-0.2734282 1.0582,-0.4101469 1.69805,-0.4101563 1.05546,9.4e-6 1.8539,0.3281341 2.39531,0.9843751 0.5414,0.6507891 0.8121,1.6105538 0.81211,2.8792966"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4471"
+ inkscape:connector-curvature="0" /><path
+ d="m 720.21481,10.930043 0,0.738282 -6.93985,0 c 0.0656,1.039065 0.37734,1.832033 0.93516,2.378906 0.56328,0.541408 1.34531,0.81211 2.34609,0.812109 0.57968,1e-6 1.14023,-0.07109 1.68164,-0.213281 0.54687,-0.142186 1.08828,-0.355467 1.62422,-0.639844 l 0,1.427344 c -0.54141,0.229688 -1.09649,0.404688 -1.66523,0.525 -0.56876,0.120313 -1.14571,0.180469 -1.73086,0.180469 -1.46563,0 -2.62774,-0.426562 -3.48633,-1.279688 -0.85313,-0.853123 -1.27969,-2.007028 -1.27969,-3.461719 0,-1.5038999 0.40469,-2.6960863 1.21407,-3.5765623 0.81484,-0.8859286 1.91132,-1.328897 3.28945,-1.3289064 1.23593,9.4e-6 2.2121,0.3992278 2.92852,1.1976564 0.72186,0.7929762 1.0828,1.8730533 1.08281,3.2402343 m -1.50938,-0.442969 c -0.0109,-0.8257746 -0.24336,-1.4847583 -0.69726,-1.9769528 -0.44845,-0.4921796 -1.04454,-0.7382731 -1.78828,-0.7382813 -0.8422,8.2e-6 -1.51759,0.2378986 -2.02618,0.7136719 -0.50312,0.4757883 -0.79297,1.1457095 -0.86953,2.0097662 l 5.38125,-0.0082"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4473"
+ inkscape:connector-curvature="0" /><path
+ d="m 729.30387,7.0663711 0,1.4109376 c -0.42657,-0.2351486 -0.85587,-0.4101484 -1.28789,-0.525 -0.42657,-0.1203045 -0.8586,-0.1804606 -1.29609,-0.1804688 -0.97892,8.2e-6 -1.73907,0.3117266 -2.28047,0.9351563 -0.54141,0.6179754 -0.81212,1.4875058 -0.81211,2.6085938 -10e-6,1.121097 0.2707,1.993362 0.81211,2.616797 0.5414,0.61797 1.30155,0.926954 2.28047,0.926953 0.43749,1e-6 0.86952,-0.05742 1.29609,-0.172265 0.43202,-0.120311 0.86132,-0.298046 1.28789,-0.533203 l 0,1.394531 c -0.4211,0.196875 -0.8586,0.344531 -1.3125,0.442969 -0.44844,0.09844 -0.92696,0.147656 -1.43555,0.147656 -1.38359,0 -2.48281,-0.434765 -3.29765,-1.304297 -0.81485,-0.869529 -1.22227,-2.042575 -1.22227,-3.519141 0,-1.4984314 0.41016,-2.6769459 1.23047,-3.535547 0.82578,-0.8585848 1.95507,-1.2878813 3.38789,-1.2878907 0.46484,9.4e-6 0.91874,0.049228 1.36172,0.1476563 0.44296,0.092978 0.87226,0.2351653 1.28789,0.4265625"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4475"
+ inkscape:connector-curvature="0" /><path
+ d="m 731.88786,3.137074 1.51758,0 0,7.538672 4.50351,-3.9621093 1.92774,0 -4.87266,4.2984383 5.07773,4.889062 -1.96875,0 -4.66757,-4.487109 0,4.487109 -1.51758,0 0,-12.764063"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4477"
+ inkscape:connector-curvature="0" /><path
+ d="m 741.69059,3.137074 1.50938,0 0,12.764063 -1.50938,0 0,-12.764063"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4479"
+ inkscape:connector-curvature="0" /><path
+ d="m 746.34996,6.7136367 1.50937,0 0,9.1875003 -1.50937,0 0,-9.1875003 m 0,-3.5765627 1.50937,0 0,1.9113282 -1.50937,0 0,-1.9113282"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4481"
+ inkscape:connector-curvature="0" /><path
+ d="m 756.86637,6.9843399 0,1.4273438 c -0.42657,-0.2187423 -0.86954,-0.3828046 -1.32891,-0.4921875 -0.45938,-0.1093669 -0.93516,-0.1640544 -1.42734,-0.1640625 -0.74923,8.1e-6 -1.31251,0.1148518 -1.68985,0.3445312 -0.37187,0.2296951 -0.55781,0.5742261 -0.55781,1.0335939 0,0.3500064 0.13398,0.626178 0.40195,0.8285156 0.26797,0.1968806 0.80664,0.3855526 1.61602,0.5660156 l 0.5168,0.114844 c 1.07187,0.229692 1.83202,0.555083 2.28047,0.976172 0.45389,0.415629 0.68085,0.99805 0.68085,1.747266 0,0.853126 -0.33907,1.528516 -1.01718,2.026172 -0.67267,0.497656 -1.59962,0.746484 -2.78086,0.746484 -0.49219,0 -1.00626,-0.04922 -1.54219,-0.147656 -0.53047,-0.09297 -1.09102,-0.235156 -1.68164,-0.426563 l 0,-1.558594 c 0.55781,0.289846 1.10742,0.508596 1.64883,0.65625 0.5414,0.142189 1.07734,0.213283 1.60781,0.213282 0.71093,10e-7 1.25781,-0.120312 1.64063,-0.360938 0.3828,-0.246092 0.57421,-0.590623 0.57421,-1.033594 0,-0.410153 -0.13946,-0.724606 -0.41836,-0.943359 -0.27344,-0.218747 -0.87774,-0.429293 -1.81289,-0.631641 l -0.525,-0.123047 c -0.93516,-0.19687 -1.61055,-0.497651 -2.02617,-0.902343 -0.41562,-0.410151 -0.62344,-0.9706977 -0.62344,-1.6816412 0,-0.864055 0.30625,-1.5312419 0.91875,-2.0015627 0.6125,-0.4703033 1.48203,-0.7054594 2.6086,-0.7054688 0.55781,9.4e-6 1.08281,0.041025 1.575,0.1230469 0.49218,0.08204 0.94609,0.2050872 1.36172,0.3691407"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4483"
+ inkscape:connector-curvature="0" /><path
+ d="m 761.26324,4.1050428 0,2.6085939 3.10899,0 0,1.173047 -3.10899,0 0,4.9875003 c 0,0.749221 0.10117,1.230471 0.30352,1.44375 0.20781,0.213283 0.62617,0.319923 1.25508,0.319922 l 1.55039,0 0,1.263281 -1.55039,0 c -1.16485,0 -1.96875,-0.216015 -2.41172,-0.648047 -0.44297,-0.437499 -0.66445,-1.230467 -0.66445,-2.378906 l 0,-4.9875003 -1.10743,0 0,-1.173047 1.10743,0 0,-2.6085939 1.51757,0"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4485"
+ inkscape:connector-curvature="0" /></g><g
+ transform="matrix(0.80000001,0,0,0.80000001,118.01204,0.26753544)"
+ id="g4805"><path
+ style="fill:none;stroke:#f6921e;stroke-width:1.41729999"
+ d="m 564.05103,55.710999 12.757,0 0,12.755999 -12.757,0 z"
+ id="rect4807"
+ inkscape:connector-curvature="0" /><path
+ style="fill:none;stroke:#f6921e;stroke-width:1.41729999"
+ d="m 564.05103,78.594002 12.757,0 0,12.755999 -12.757,0 z"
+ id="rect4809"
+ inkscape:connector-curvature="0" /><path
+ style="fill:none;stroke:#f6921e;stroke-width:1.41729999"
+ d="m 564.05103,101.477 12.757,0 0,12.756 -12.757,0 z"
+ id="rect4811"
+ inkscape:connector-curvature="0" /><path
+ style="fill:none;stroke:#f6921e;stroke-width:1.41729999"
+ d="m 564.05103,124.359 12.757,0 0,12.756 -12.757,0 z"
+ id="rect4813"
+ inkscape:connector-curvature="0" /><path
+ style="fill:none;stroke:#f6921e;stroke-width:1.41729999"
+ d="m 564.05103,147.242 12.757,0 0,12.756 -12.757,0 z"
+ id="rect4815"
+ inkscape:connector-curvature="0" /><path
+ style="fill:none;stroke:#f6921e;stroke-width:1.41729999"
+ d="m 564.05103,170.12399 12.757,0 0,12.756 -12.757,0 z"
+ id="rect4817"
+ inkscape:connector-curvature="0" /><path
+ style="fill:none;stroke:#f6921e;stroke-width:1.41729999"
+ d="m 564.05103,193.007 12.757,0 0,12.756 -12.757,0 z"
+ id="rect4819"
+ inkscape:connector-curvature="0" /><path
+ style="fill:none;stroke:#f6921e;stroke-width:1.41729999"
+ d="m 564.05103,215.89 12.757,0 0,12.756 -12.757,0 z"
+ id="rect4821"
+ inkscape:connector-curvature="0" /><path
+ style="fill:none;stroke:#f6921e;stroke-width:1.41729999"
+ d="m 564.05103,238.772 12.757,0 0,12.756 -12.757,0 z"
+ id="rect4825"
+ inkscape:connector-curvature="0" /></g><g
+ style="font-size:9.60000038px"
+ id="text4831-2"><path
+ d="m -204.23171,331.74354 6.90703,0 0,0.92969 -2.89844,0 0,7.23516 -1.11015,0 0,-7.23516 -2.89844,0 0,-0.92969"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4499"
+ inkscape:connector-curvature="0" /><path
+ d="m -195.8153,334.48886 c -0.53959,0 -0.96615,0.21146 -1.27969,0.63437 -0.31355,0.41928 -0.47032,0.99532 -0.47031,1.72813 -1e-5,0.73281 0.15494,1.31067 0.46484,1.73359 0.31354,0.41927 0.74192,0.62891 1.28516,0.6289 0.53593,1e-5 0.96067,-0.21145 1.27421,-0.63437 0.31354,-0.42291 0.47031,-0.99896 0.47032,-1.72812 -1e-5,-0.72552 -0.15678,-1.29974 -0.47032,-1.72266 -0.31354,-0.42656 -0.73828,-0.63984 -1.27421,-0.63984 m 0,-0.85313 c 0.87499,10e-6 1.56223,0.28438 2.06171,0.85313 0.49948,0.56875 0.74922,1.35625 0.74922,2.3625 0,1.0026 -0.24974,1.7901 -0.74922,2.36249 -0.49948,0.56876 -1.18672,0.85313 -2.06171,0.85313 -0.87865,0 -1.56771,-0.28437 -2.06719,-0.85313 -0.49584,-0.57239 -0.74375,-1.35989 -0.74375,-2.36249 0,-1.00625 0.24791,-1.79375 0.74375,-2.3625 0.49948,-0.56875 1.18854,-0.85312 2.06719,-0.85313"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4501"
+ inkscape:connector-curvature="0" /><path
+ d="m -187.72155,331.74354 5.1625,0 0,0.92969 -4.05782,0 0,2.41719 3.88828,0 0,0.92969 -3.88828,0 0,2.95859 4.15625,0 0,0.92969 -5.26093,0 0,-8.16485"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4503"
+ inkscape:connector-curvature="0" /><path
+ d="m -175.5864,336.21151 0,3.69688 -1.00625,0 0,-3.66407 c 0,-0.57968 -0.11302,-1.01353 -0.33906,-1.30156 -0.22605,-0.28801 -0.56511,-0.43202 -1.01719,-0.43203 -0.54323,10e-6 -0.97161,0.17318 -1.28515,0.51953 -0.31355,0.34636 -0.47032,0.81849 -0.47032,1.41641 l 0,3.46172 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.24063,-0.36822 0.52318,-0.64348 0.84766,-0.82578 0.32812,-0.18229 0.70547,-0.27343 1.13203,-0.27344 0.70364,10e-6 1.23593,0.21876 1.59688,0.65625 0.36093,0.43386 0.5414,1.0737 0.5414,1.91953"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4505"
+ inkscape:connector-curvature="0" /><path
+ d="m -169.53796,336.77479 c -1e-5,-0.72916 -0.15131,-1.29426 -0.45391,-1.69531 -0.29896,-0.40104 -0.72005,-0.60156 -1.26328,-0.60156 -0.53958,0 -0.96068,0.20052 -1.26328,0.60156 -0.29896,0.40105 -0.44844,0.96615 -0.44844,1.69531 0,0.72553 0.14948,1.28881 0.44844,1.68985 0.3026,0.40104 0.7237,0.60156 1.26328,0.60156 0.54323,0 0.96432,-0.20052 1.26328,-0.60156 0.3026,-0.40104 0.4539,-0.96432 0.45391,-1.68985 m 1.00625,2.37344 c -1e-5,1.04271 -0.23152,1.81745 -0.69453,2.32422 -0.46303,0.51041 -1.17214,0.76562 -2.12735,0.76562 -0.35364,0 -0.68724,-0.0273 -1.00078,-0.082 -0.31354,-0.051 -0.61797,-0.13125 -0.91328,-0.24062 l 0,-0.97891 c 0.29531,0.16042 0.58698,0.27891 0.875,0.35547 0.28802,0.0766 0.58151,0.11484 0.88047,0.11484 0.65989,0 1.1539,-0.17317 1.48203,-0.51953 0.32812,-0.34271 0.49218,-0.86224 0.49219,-1.55859 l 0,-0.49766 c -0.20782,0.36094 -0.47396,0.63073 -0.79844,0.80938 -0.32448,0.17864 -0.71276,0.26797 -1.16484,0.26797 -0.75105,0 -1.35625,-0.2862 -1.81563,-0.8586 -0.45937,-0.57239 -0.68906,-1.33072 -0.68906,-2.275 0,-0.94791 0.22969,-1.70807 0.68906,-2.28047 0.45938,-0.57239 1.06458,-0.85858 1.81563,-0.85859 0.45208,10e-6 0.84036,0.0893 1.16484,0.26797 0.32448,0.17865 0.59062,0.44844 0.79844,0.80937 l 0,-0.92968 1.00625,0 0,5.36484"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4507"
+ inkscape:connector-curvature="0" /><path
+ d="m -162.90984,334.72401 c -0.11302,-0.0656 -0.23698,-0.11301 -0.37187,-0.14219 -0.13125,-0.0328 -0.27709,-0.0492 -0.4375,-0.0492 -0.56875,0 -1.00625,0.18594 -1.3125,0.55781 -0.30261,0.36823 -0.45391,0.8987 -0.45391,1.5914 l 0,3.22657 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.21146,-0.37187 0.48672,-0.64713 0.82578,-0.82578 0.33906,-0.18229 0.75104,-0.27343 1.23594,-0.27344 0.0693,10e-6 0.14583,0.005 0.22969,0.0164 0.0839,0.007 0.17682,0.0201 0.27891,0.0383 l 0.005,1.03359"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4509"
+ inkscape:connector-curvature="0" /><path
+ d="m -159.05984,336.82948 c -0.81302,0 -1.3763,0.093 -1.68984,0.27891 -0.31354,0.18594 -0.47031,0.50312 -0.47031,0.95156 0,0.35729 0.11666,0.64167 0.35,0.85312 0.23697,0.20782 0.55781,0.31172 0.9625,0.31172 0.55781,0 1.00442,-0.19687 1.33984,-0.59062 0.33906,-0.3974 0.50859,-0.92422 0.50859,-1.58047 l 0,-0.22422 -1.00078,0 m 2.00703,-0.41562 0,3.49453 -1.00625,0 0,-0.92969 c -0.22969,0.37187 -0.51589,0.64713 -0.85859,0.82578 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62709,0 -1.12657,-0.175 -1.49844,-0.525 -0.36823,-0.35365 -0.55234,-0.82578 -0.55234,-1.41641 0,-0.68906 0.22968,-1.20859 0.68906,-1.55859 0.46302,-0.35 1.15208,-0.525 2.06719,-0.525 l 1.41093,0 0,-0.0984 c 0,-0.46301 -0.15313,-0.82031 -0.45937,-1.07187 -0.30261,-0.25521 -0.72917,-0.38281 -1.27969,-0.38281 -0.35,0 -0.69089,0.0419 -1.02265,0.12578 -0.33178,0.0839 -0.65079,0.20964 -0.95704,0.37734 l 0,-0.92969 c 0.36823,-0.14218 0.72552,-0.24791 1.07188,-0.31718 0.34635,-0.0729 0.68359,-0.10937 1.01172,-0.10938 0.88593,1e-5 1.54765,0.22969 1.98515,0.68906 0.4375,0.45938 0.65625,1.15574 0.65625,2.08907"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4511"
+ inkscape:connector-curvature="0" /><path
+ d="m -155.69655,333.78339 1.0664,0 1.91406,5.14062 1.91407,-5.14062 1.0664,0 -2.29687,6.125 -1.36719,0 -2.29687,-6.125"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4513"
+ inkscape:connector-curvature="0" /><path
+ d="m -143.10749,336.59432 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22136 0.62343,1.58594 0.37552,0.36094 0.89687,0.54141 1.56407,0.5414 0.38645,1e-5 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72551,-0.23698 1.08281,-0.42656 l 0,0.95156 c -0.36094,0.15312 -0.73099,0.26979 -1.11015,0.35 -0.37918,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97709,0 -1.75183,-0.28437 -2.32422,-0.85313 -0.56875,-0.56874 -0.85313,-1.33801 -0.85312,-2.30781 -1e-5,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47473,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69635,-0.49218 -1.19218,-0.49218 -0.56146,0 -1.01172,0.15859 -1.35078,0.47578 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4515"
+ inkscape:connector-curvature="0" /><path
+ d="m -135.10671,336.82948 c -0.81302,0 -1.3763,0.093 -1.68984,0.27891 -0.31355,0.18594 -0.47032,0.50312 -0.47031,0.95156 -1e-5,0.35729 0.11666,0.64167 0.35,0.85312 0.23697,0.20782 0.55781,0.31172 0.9625,0.31172 0.5578,0 1.00442,-0.19687 1.33984,-0.59062 0.33906,-0.3974 0.50859,-0.92422 0.50859,-1.58047 l 0,-0.22422 -1.00078,0 m 2.00703,-0.41562 0,3.49453 -1.00625,0 0,-0.92969 c -0.22969,0.37187 -0.51589,0.64713 -0.85859,0.82578 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62709,0 -1.12657,-0.175 -1.49844,-0.525 -0.36823,-0.35365 -0.55234,-0.82578 -0.55234,-1.41641 0,-0.68906 0.22968,-1.20859 0.68906,-1.55859 0.46302,-0.35 1.15208,-0.525 2.06719,-0.525 l 1.41093,0 0,-0.0984 c 0,-0.46301 -0.15313,-0.82031 -0.45937,-1.07187 -0.30261,-0.25521 -0.72917,-0.38281 -1.27969,-0.38281 -0.35,0 -0.69089,0.0419 -1.02266,0.12578 -0.33177,0.0839 -0.65078,0.20964 -0.95703,0.37734 l 0,-0.92969 c 0.36823,-0.14218 0.72552,-0.24791 1.07188,-0.31718 0.34635,-0.0729 0.68359,-0.10937 1.01172,-0.10938 0.88593,1e-5 1.54765,0.22969 1.98515,0.68906 0.4375,0.45938 0.65625,1.15574 0.65625,2.08907"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4517"
+ inkscape:connector-curvature="0" /><path
+ d="m -127.41218,331.74354 1.10469,0 0,7.23516 3.97578,0 0,0.92969 -5.08047,0 0,-8.16485"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4519"
+ inkscape:connector-curvature="0" /><path
+ d="m -121.22155,333.78339 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38438 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4521"
+ inkscape:connector-curvature="0" /><path
+ d="m -113.0239,336.21151 0,3.69688 -1.00625,0 0,-3.66407 c -10e-6,-0.57968 -0.11303,-1.01353 -0.33906,-1.30156 -0.22605,-0.28801 -0.56511,-0.43202 -1.01719,-0.43203 -0.54323,10e-6 -0.97162,0.17318 -1.28516,0.51953 -0.31354,0.34636 -0.47031,0.81849 -0.47031,1.41641 l 0,3.46172 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.24062,-0.36822 0.52317,-0.64348 0.84766,-0.82578 0.32812,-0.18229 0.70546,-0.27343 1.13203,-0.27344 0.70364,10e-6 1.23593,0.21876 1.59687,0.65625 0.36093,0.43386 0.5414,1.0737 0.54141,1.91953"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4523"
+ inkscape:connector-curvature="0" /><path
+ d="m -105.76687,336.59432 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22136 0.62343,1.58594 0.37552,0.36094 0.89688,0.54141 1.56407,0.5414 0.38645,1e-5 0.76015,-0.0474 1.12109,-0.14218 0.36458,-0.0948 0.72552,-0.23698 1.08281,-0.42656 l 0,0.95156 c -0.36094,0.15312 -0.73099,0.26979 -1.11015,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97709,0 -1.75182,-0.28437 -2.32422,-0.85313 -0.56875,-0.56874 -0.85312,-1.33801 -0.85312,-2.30781 0,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47474,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29897,-0.32812 -0.69636,-0.49218 -1.19219,-0.49218 -0.56146,0 -1.01172,0.15859 -1.35078,0.47578 -0.33542,0.31719 -0.52865,0.7638 -0.57969,1.33984 l 3.5875,-0.005"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4525"
+ inkscape:connector-curvature="0" /><path
+ d="m -103.85828,338.51932 1.15391,0 0,1.38907 -1.15391,0 0,-1.38907 m 0,-4.40234 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4527"
+ inkscape:connector-curvature="0" /><path
+ d="m -198.20515,345.45151 0,1.07735 c -0.41927,-0.20052 -0.81485,-0.35 -1.18672,-0.44844 -0.37188,-0.0984 -0.73099,-0.14765 -1.07734,-0.14766 -0.60157,1e-5 -1.06641,0.11668 -1.39453,0.35 -0.32448,0.23334 -0.48672,0.56511 -0.48672,0.99532 0,0.36094 0.10755,0.63438 0.32266,0.82031 0.21874,0.1823 0.63072,0.32995 1.23593,0.44297 l 0.66719,0.13672 c 0.82395,0.15677 1.43098,0.43385 1.82109,0.83125 0.39375,0.39375 0.59062,0.92239 0.59063,1.58593 -1e-5,0.79115 -0.26615,1.39089 -0.79844,1.79922 -0.52865,0.40834 -1.30521,0.6125 -2.32969,0.6125 -0.38646,0 -0.79844,-0.0437 -1.23593,-0.13125 -0.43386,-0.0875 -0.88412,-0.21692 -1.35078,-0.38828 l 0,-1.1375 c 0.44843,0.25156 0.88775,0.44115 1.31796,0.56875 0.43021,0.12761 0.85313,0.19141 1.26875,0.19141 0.63073,0 1.11745,-0.12396 1.46016,-0.37188 0.3427,-0.24791 0.51406,-0.60156 0.51406,-1.06094 0,-0.40103 -0.12396,-0.71458 -0.37187,-0.94062 -0.24428,-0.22604 -0.64714,-0.39557 -1.2086,-0.50859 l -0.67265,-0.13125 c -0.82396,-0.16406 -1.42006,-0.42109 -1.78828,-0.7711 -0.36823,-0.34999 -0.55235,-0.83671 -0.55235,-1.46015 0,-0.72187 0.25339,-1.29062 0.76016,-1.70625 0.51041,-0.41562 1.21224,-0.62343 2.10547,-0.62344 0.38281,1e-5 0.77291,0.0346 1.17031,0.10391 0.39739,0.0693 0.8039,0.17318 1.21953,0.31171"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4529"
+ inkscape:connector-curvature="0" /><path
+ d="m -195.03874,345.48433 0,1.73906 2.07265,0 0,0.78203 -2.07265,0 0,3.325 c 0,0.49948 0.0674,0.82031 0.20234,0.9625 0.13854,0.14219 0.41745,0.21328 0.83672,0.21328 l 1.03359,0 0,0.84219 -1.03359,0 c -0.77656,0 -1.3125,-0.14401 -1.60781,-0.43203 -0.29532,-0.29167 -0.44297,-0.82031 -0.44297,-1.58594 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73906 1.01172,0"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4531"
+ inkscape:connector-curvature="0" /><path
+ d="m -188.08796,348.16401 c -0.11303,-0.0656 -0.23698,-0.11301 -0.37188,-0.14218 -0.13125,-0.0328 -0.27708,-0.0492 -0.4375,-0.0492 -0.56875,0 -1.00625,0.18594 -1.3125,0.55781 -0.3026,0.36823 -0.4539,0.8987 -0.4539,1.59141 l 0,3.22656 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.21145,-0.37187 0.48671,-0.64713 0.82578,-0.82578 0.33906,-0.18229 0.75104,-0.27343 1.23594,-0.27344 0.0693,10e-6 0.14583,0.005 0.22968,0.0164 0.0839,0.007 0.17682,0.0201 0.27891,0.0383 l 0.005,1.03359"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4533"
+ inkscape:connector-curvature="0" /><path
+ d="m -184.87781,347.92886 c -0.53958,0 -0.96614,0.21146 -1.27968,0.63437 -0.31355,0.41928 -0.47032,0.99532 -0.47031,1.72813 -1e-5,0.73281 0.15494,1.31068 0.46484,1.73359 0.31354,0.41927 0.74192,0.62891 1.28515,0.62891 0.53594,0 0.96068,-0.21146 1.27422,-0.63438 0.31354,-0.42291 0.47031,-0.99895 0.47032,-1.72812 -1e-5,-0.72552 -0.15678,-1.29974 -0.47032,-1.72266 -0.31354,-0.42656 -0.73828,-0.63984 -1.27422,-0.63984 m 0,-0.85313 c 0.875,10e-6 1.56224,0.28438 2.06172,0.85313 0.49948,0.56875 0.74922,1.35625 0.74922,2.3625 0,1.0026 -0.24974,1.7901 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85312 -2.06172,0.85312 -0.87864,0 -1.56771,-0.28437 -2.06718,-0.85312 -0.49584,-0.5724 -0.74375,-1.3599 -0.74375,-2.3625 0,-1.00625 0.24791,-1.79375 0.74375,-2.3625 0.49947,-0.56875 1.18854,-0.85312 2.06718,-0.85313"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4535"
+ inkscape:connector-curvature="0" /><path
+ d="m -180.43171,344.83901 1.01172,0 0,5.02578 3.00234,-2.6414 1.28516,0 -3.24844,2.86562 3.38516,3.25938 -1.3125,0 -3.11172,-2.99141 0,2.99141 -1.01172,0 0,-8.50938"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4537"
+ inkscape:connector-curvature="0" /><path
+ d="m -169.05124,350.03433 0,0.49218 -4.62656,0 c 0.0437,0.69271 0.25156,1.22136 0.62343,1.58594 0.37552,0.36094 0.89687,0.54141 1.56406,0.54141 0.38646,0 0.76016,-0.0474 1.1211,-0.14219 0.36458,-0.0948 0.72551,-0.23698 1.08281,-0.42656 l 0,0.95156 c -0.36094,0.15313 -0.73099,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.7638,0.12031 -1.1539,0.12031 -0.97709,0 -1.75183,-0.28437 -2.32422,-0.85312 -0.56875,-0.56875 -0.85313,-1.33802 -0.85312,-2.30782 -1e-5,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47473,0.26615 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16016 m -1.00625,-0.29532 c -0.007,-0.55051 -0.16225,-0.98984 -0.46485,-1.31796 -0.29896,-0.32812 -0.69635,-0.49219 -1.19218,-0.49219 -0.56147,0 -1.01173,0.1586 -1.35078,0.47578 -0.33542,0.31719 -0.52865,0.76381 -0.57969,1.33984 l 3.5875,-0.005"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4539"
+ inkscape:connector-curvature="0" /><path
+ d="m -159.42624,347.45855 0,0.94062 c -0.28438,-0.15677 -0.57058,-0.27343 -0.8586,-0.35 -0.28437,-0.0802 -0.57239,-0.12031 -0.86406,-0.12031 -0.6526,0 -1.15938,0.20782 -1.52031,0.62344 -0.36094,0.41198 -0.54141,0.99167 -0.54141,1.73906 0,0.7474 0.18047,1.32891 0.54141,1.74453 0.36093,0.41198 0.86771,0.61797 1.52031,0.61797 0.29167,0 0.57969,-0.0383 0.86406,-0.11485 0.28802,-0.0802 0.57422,-0.19869 0.8586,-0.35547 l 0,0.92969 c -0.28074,0.13125 -0.5724,0.22969 -0.875,0.29531 -0.29896,0.0656 -0.61797,0.0984 -0.95703,0.0984 -0.9224,0 -1.65521,-0.28984 -2.19844,-0.86953 -0.54323,-0.57969 -0.81484,-1.36172 -0.81484,-2.34609 0,-0.99896 0.27343,-1.78463 0.82031,-2.35703 0.55052,-0.57239 1.30338,-0.85859 2.25859,-0.8586 0.30989,10e-6 0.6125,0.0328 0.90781,0.0984 0.29531,0.062 0.58151,0.15678 0.8586,0.28438"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4541"
+ inkscape:connector-curvature="0" /><path
+ d="m -155.29187,347.92886 c -0.53959,0 -0.96615,0.21146 -1.27969,0.63437 -0.31354,0.41928 -0.47031,0.99532 -0.47031,1.72813 0,0.73281 0.15495,1.31068 0.46484,1.73359 0.31354,0.41927 0.74193,0.62891 1.28516,0.62891 0.53593,0 0.96067,-0.21146 1.27422,-0.63438 0.31354,-0.42291 0.47031,-0.99895 0.47031,-1.72812 0,-0.72552 -0.15677,-1.29974 -0.47031,-1.72266 -0.31355,-0.42656 -0.73829,-0.63984 -1.27422,-0.63984 m 0,-0.85313 c 0.875,10e-6 1.56224,0.28438 2.06172,0.85313 0.49947,0.56875 0.74921,1.35625 0.74922,2.3625 -1e-5,1.0026 -0.24975,1.7901 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85312 -2.06172,0.85312 -0.87865,0 -1.56771,-0.28437 -2.06719,-0.85312 -0.49583,-0.5724 -0.74375,-1.3599 -0.74375,-2.3625 0,-1.00625 0.24792,-1.79375 0.74375,-2.3625 0.49948,-0.56875 1.18854,-0.85312 2.06719,-0.85313"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4543"
+ inkscape:connector-curvature="0" /><path
+ d="m -150.81843,344.83901 1.00625,0 0,8.50938 -1.00625,0 0,-8.50938"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4545"
+ inkscape:connector-curvature="0" /><path
+ d="m -145.33874,347.92886 c -0.53959,0 -0.96615,0.21146 -1.27969,0.63437 -0.31355,0.41928 -0.47032,0.99532 -0.47031,1.72813 -1e-5,0.73281 0.15494,1.31068 0.46484,1.73359 0.31354,0.41927 0.74192,0.62891 1.28516,0.62891 0.53593,0 0.96067,-0.21146 1.27421,-0.63438 0.31354,-0.42291 0.47031,-0.99895 0.47032,-1.72812 -1e-5,-0.72552 -0.15678,-1.29974 -0.47032,-1.72266 -0.31354,-0.42656 -0.73828,-0.63984 -1.27421,-0.63984 m 0,-0.85313 c 0.87499,10e-6 1.56223,0.28438 2.06171,0.85313 0.49948,0.56875 0.74922,1.35625 0.74922,2.3625 0,1.0026 -0.24974,1.7901 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85312 -2.06171,0.85312 -0.87865,0 -1.56771,-0.28437 -2.06719,-0.85312 -0.49584,-0.5724 -0.74375,-1.3599 -0.74375,-2.3625 0,-1.00625 0.24791,-1.79375 0.74375,-2.3625 0.49948,-0.56875 1.18854,-0.85312 2.06719,-0.85313"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4547"
+ inkscape:connector-curvature="0" /><path
+ d="m -137.31609,348.16401 c -0.11302,-0.0656 -0.23698,-0.11301 -0.37187,-0.14218 -0.13126,-0.0328 -0.27709,-0.0492 -0.4375,-0.0492 -0.56876,0 -1.00626,0.18594 -1.3125,0.55781 -0.30261,0.36823 -0.45391,0.8987 -0.45391,1.59141 l 0,3.22656 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.21146,-0.37187 0.48672,-0.64713 0.82578,-0.82578 0.33906,-0.18229 0.75104,-0.27343 1.23594,-0.27344 0.0693,10e-6 0.14583,0.005 0.22969,0.0164 0.0839,0.007 0.17681,0.0201 0.2789,0.0383 l 0.005,1.03359"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4549"
+ inkscape:connector-curvature="0" /><path
+ d="m -136.17859,351.95933 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906 m 0,-4.40235 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4551"
+ inkscape:connector-curvature="0" /><path
+ d="m -125.15906,349.52026 c 0.23698,0.0802 0.46667,0.25157 0.68907,0.51407 0.22603,0.2625 0.45207,0.62344 0.67812,1.08281 l 1.1211,2.23125 -1.18672,0 -1.04453,-2.09453 c -0.2698,-0.54687 -0.5323,-0.90963 -0.7875,-1.08828 -0.25157,-0.17865 -0.5961,-0.26797 -1.0336,-0.26797 l -1.20312,0 0,3.45078 -1.10469,0 0,-8.16484 2.49375,0 c 0.93333,0 1.62968,0.19506 2.08906,0.58515 0.45937,0.39011 0.68906,0.97891 0.68906,1.76641 0,0.51407 -0.12031,0.94063 -0.36093,1.27968 -0.23699,0.33907 -0.58334,0.57423 -1.03907,0.70547 m -2.76718,-3.4289 0,2.89843 1.38906,0 c 0.53229,10e-6 0.93333,-0.12213 1.20312,-0.3664 0.27344,-0.24791 0.41015,-0.61067 0.41016,-1.08828 -1e-5,-0.4776 -0.13672,-0.83671 -0.41016,-1.07735 -0.26979,-0.24426 -0.67083,-0.3664 -1.20312,-0.3664 l -1.38906,0"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4553"
+ inkscape:connector-curvature="0" /><path
+ d="m -116.54031,350.03433 0,0.49218 -4.62656,0 c 0.0438,0.69271 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.54141 1.56406,0.54141 0.38645,0 0.76015,-0.0474 1.12109,-0.14219 0.36458,-0.0948 0.72552,-0.23698 1.08282,-0.42656 l 0,0.95156 c -0.36095,0.15313 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97708,0 -1.75182,-0.28437 -2.32422,-0.85312 -0.56875,-0.56875 -0.85312,-1.33802 -0.85312,-2.30782 0,-1.0026 0.26979,-1.79739 0.80937,-2.38437 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82396,10e-6 1.47474,0.26615 1.95235,0.79844 0.48124,0.52865 0.72187,1.2487 0.72187,2.16016 m -1.00625,-0.29532 c -0.007,-0.55051 -0.16224,-0.98984 -0.46484,-1.31796 -0.29896,-0.32812 -0.69636,-0.49219 -1.19219,-0.49219 -0.56146,0 -1.01172,0.1586 -1.35078,0.47578 -0.33542,0.31719 -0.52865,0.76381 -0.57969,1.33984 l 3.5875,-0.005"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4555"
+ inkscape:connector-curvature="0" /><path
+ d="m -110.84734,348.15308 0,-3.31407 1.00625,0 0,8.50938 -1.00625,0 0,-0.91875 c -0.21146,0.36458 -0.47943,0.6362 -0.8039,0.81484 -0.32084,0.175 -0.7073,0.2625 -1.15938,0.2625 -0.7401,0 -1.34349,-0.29531 -1.81015,-0.88594 -0.46303,-0.59062 -0.69454,-1.36718 -0.69453,-2.32968 -1e-5,-0.9625 0.2315,-1.73906 0.69453,-2.32969 0.46666,-0.59062 1.07005,-0.88593 1.81015,-0.88594 0.45208,10e-6 0.83854,0.0893 1.15938,0.26797 0.32447,0.17501 0.59244,0.4448 0.8039,0.80938 m -3.4289,2.13828 c 0,0.7401 0.1513,1.32161 0.4539,1.74453 0.30625,0.41927 0.72552,0.62891 1.25782,0.6289 0.53228,1e-5 0.95155,-0.20963 1.25781,-0.6289 0.30624,-0.42292 0.45937,-1.00443 0.45937,-1.74453 0,-0.7401 -0.15313,-1.31979 -0.45937,-1.73906 -0.30626,-0.42292 -0.72553,-0.63437 -1.25781,-0.63438 -0.5323,1e-5 -0.95157,0.21146 -1.25782,0.63438 -0.3026,0.41927 -0.4539,0.99896 -0.4539,1.73906"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4557"
+ inkscape:connector-curvature="0" /><path
+ d="m -104.7114,349.83198 2.94765,0 0,0.89688 -2.94765,0 0,-0.89688"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4559"
+ inkscape:connector-curvature="0" /><path
+ d="m -92.674681,349.52026 c 0.236974,0.0802 0.466661,0.25157 0.689062,0.51407 0.226036,0.2625 0.452078,0.62344 0.678125,1.08281 l 1.121094,2.23125 -1.186719,0 -1.044531,-2.09453 c -0.269797,-0.54687 -0.532296,-0.90963 -0.7875,-1.08828 -0.251567,-0.17865 -0.596098,-0.26797 -1.033594,-0.26797 l -1.203125,0 0,3.45078 -1.104687,0 0,-8.16484 2.49375,0 c 0.933329,0 1.629682,0.19506 2.089062,0.58515 0.459369,0.39011 0.689056,0.97891 0.689063,1.76641 -7e-6,0.51407 -0.120319,0.94063 -0.360938,1.27968 -0.236985,0.33907 -0.583338,0.57423 -1.039062,0.70547 m -2.767188,-3.4289 0,2.89843 1.389063,0 c 0.532287,10e-6 0.933329,-0.12213 1.203125,-0.3664 0.273432,-0.24791 0.410151,-0.61067 0.410156,-1.08828 -5e-6,-0.4776 -0.136724,-0.83671 -0.410156,-1.07735 -0.269796,-0.24426 -0.670838,-0.3664 -1.203125,-0.3664 l -1.389063,0"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4561"
+ inkscape:connector-curvature="0" /><path
+ d="m -88.895775,351.95933 1.153906,0 0,1.38906 -1.153906,0 0,-1.38906 m 0,-4.40235 1.153906,0 0,1.38906 -1.153906,0 0,-1.38906"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4563"
+ inkscape:connector-curvature="0" /><path
+ d="m -84.274686,352.4187 3.855469,0 0,0.92969 -5.184375,0 0,-0.92969 c 0.41927,-0.43385 0.989842,-1.01536 1.711719,-1.74453 0.725517,-0.73281 1.181246,-1.20494 1.367187,-1.41641 0.353642,-0.39739 0.599735,-0.7328 0.738282,-1.00625 0.142182,-0.27707 0.213276,-0.54869 0.213281,-0.81484 -5e-6,-0.43385 -0.15313,-0.78749 -0.459375,-1.06094 -0.302608,-0.27343 -0.698181,-0.41015 -1.186719,-0.41015 -0.346357,0 -0.712763,0.0602 -1.099219,0.18047 -0.382814,0.12031 -0.79297,0.30261 -1.230468,0.54687 l 0,-1.11562 c 0.44479,-0.17864 0.860414,-0.31354 1.246875,-0.40469 0.386455,-0.0911 0.740101,-0.13671 1.060937,-0.13672 0.845829,1e-5 1.520308,0.21147 2.023437,0.63437 0.50312,0.42293 0.754682,0.98803 0.754688,1.69532 -6e-6,0.33542 -0.06381,0.65443 -0.191406,0.95703 -0.123964,0.29896 -0.351829,0.65261 -0.683594,1.06093 -0.09115,0.10574 -0.380994,0.41199 -0.869531,0.91875 -0.488546,0.50313 -1.177607,1.2086 -2.067188,2.11641"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4565"
+ inkscape:connector-curvature="0" /><path
+ d="m -78.084055,345.18355 4.336719,0 0,0.92968 -3.325,0 0,2.00157 c 0.160414,-0.0547 0.320831,-0.0948 0.48125,-0.12032 0.160414,-0.0292 0.32083,-0.0437 0.48125,-0.0437 0.911454,10e-6 1.633329,0.24975 2.165625,0.74922 0.532286,0.49948 0.798431,1.17579 0.798438,2.02891 -7e-6,0.87865 -0.273444,1.56224 -0.820313,2.05078 -0.54688,0.48489 -1.317973,0.72734 -2.313281,0.72734 -0.342711,0 -0.692711,-0.0292 -1.05,-0.0875 -0.353648,-0.0583 -0.720053,-0.14583 -1.099219,-0.2625 l 0,-1.11015 c 0.328124,0.17864 0.667186,0.31172 1.017188,0.39921 0.349997,0.0875 0.720049,0.13126 1.110156,0.13125 0.630725,1e-5 1.130204,-0.16588 1.498437,-0.49765 0.368225,-0.33177 0.552339,-0.78203 0.552344,-1.35078 -5e-6,-0.56875 -0.184119,-1.01901 -0.552344,-1.35078 -0.368233,-0.33177 -0.867712,-0.49766 -1.498437,-0.49766 -0.295315,0 -0.590628,0.0328 -0.885938,0.0984 -0.291668,0.0656 -0.590626,0.16771 -0.896875,0.30625 l 0,-4.10156"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4567"
+ inkscape:connector-curvature="0" /><path
+ d="m -70.952814,345.18355 4.336719,0 0,0.92968 -3.325,0 0,2.00157 c 0.160414,-0.0547 0.320831,-0.0948 0.48125,-0.12032 0.160414,-0.0292 0.32083,-0.0437 0.48125,-0.0437 0.911454,10e-6 1.633328,0.24975 2.165625,0.74922 0.532286,0.49948 0.798431,1.17579 0.798437,2.02891 -6e-6,0.87865 -0.273443,1.56224 -0.820312,2.05078 -0.54688,0.48489 -1.317973,0.72734 -2.313281,0.72734 -0.342711,0 -0.692711,-0.0292 -1.05,-0.0875 -0.353648,-0.0583 -0.720054,-0.14583 -1.099219,-0.2625 l 0,-1.11015 c 0.328124,0.17864 0.667186,0.31172 1.017187,0.39921 0.349998,0.0875 0.72005,0.13126 1.110157,0.13125 0.630725,1e-5 1.130204,-0.16588 1.498437,-0.49765 0.368225,-0.33177 0.552339,-0.78203 0.552344,-1.35078 -5e-6,-0.56875 -0.184119,-1.01901 -0.552344,-1.35078 -0.368233,-0.33177 -0.867712,-0.49766 -1.498437,-0.49766 -0.295315,0 -0.590628,0.0328 -0.885938,0.0984 -0.291668,0.0656 -0.590626,0.16771 -0.896875,0.30625 l 0,-4.10156"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4569"
+ inkscape:connector-curvature="0" /><path
+ d="m -54.798117,352.18354 0,-2.19296 -1.804688,0 0,-0.90782 2.898438,0 0,3.50547 c -0.42657,0.30261 -0.896882,0.53229 -1.410938,0.68906 -0.514068,0.15313 -1.062765,0.22969 -1.646093,0.22969 -1.276045,0 -2.275003,-0.37187 -2.996875,-1.11562 -0.71823,-0.7474 -1.077345,-1.78646 -1.077344,-3.11719 -10e-7,-1.33437 0.359114,-2.37343 1.077344,-3.11719 0.721872,-0.74739 1.72083,-1.12108 2.996875,-1.12109 0.532286,1e-5 1.037233,0.0656 1.514843,0.19687 0.481244,0.13126 0.924212,0.32449 1.328907,0.57969 l 0,1.17578 c -0.408341,-0.34634 -0.842195,-0.60702 -1.301563,-0.78203 -0.459381,-0.17499 -0.942453,-0.26249 -1.449219,-0.2625 -0.998962,1e-5 -1.750003,0.27891 -2.253125,0.83672 -0.499481,0.55782 -0.74922,1.38907 -0.749218,2.49375 -2e-6,1.10104 0.249737,1.93047 0.749218,2.48828 0.503122,0.55781 1.254163,0.83672 2.253125,0.83672 0.390099,0 0.738276,-0.0328 1.044532,-0.0984 0.306243,-0.0693 0.581504,-0.175 0.825781,-0.31719"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4571"
+ inkscape:connector-curvature="0" /><path
+ d="m -51.467651,351.95933 1.153906,0 0,1.38906 -1.153906,0 0,-1.38906 m 0,-4.40235 1.153906,0 0,1.38906 -1.153906,0 0,-1.38906"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4573"
+ inkscape:connector-curvature="0" /><path
+ d="m -45.435617,345.91089 c -0.568753,1e-5 -0.997138,0.28074 -1.285156,0.84219 -0.284377,0.55781 -0.426565,1.39818 -0.426563,2.52109 -2e-6,1.11927 0.142186,1.95964 0.426563,2.52109 0.288018,0.55782 0.716403,0.83672 1.285156,0.83672 0.572392,0 1.000777,-0.2789 1.285156,-0.83672 0.288016,-0.56145 0.432026,-1.40182 0.432031,-2.52109 -5e-6,-1.12291 -0.144015,-1.96328 -0.432031,-2.52109 -0.284379,-0.56145 -0.712764,-0.84218 -1.285156,-0.84219 m 0,-0.875 c 0.9151,1e-5 1.613276,0.36277 2.094531,1.08828 0.48489,0.72188 0.727337,1.77188 0.727344,3.15 -7e-6,1.37448 -0.242454,2.42448 -0.727344,3.15 -0.481255,0.72188 -1.179431,1.08281 -2.094531,1.08281 -0.915107,0 -1.615106,-0.36093 -2.1,-1.08281 -0.481251,-0.72552 -0.721876,-1.77552 -0.721875,-3.15 -10e-7,-1.37812 0.240624,-2.42812 0.721875,-3.15 0.484894,-0.72551 1.184893,-1.08827 2.1,-1.08828"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4575"
+ inkscape:connector-curvature="0" /><path
+ d="m -36.094998,349.44917 0,2.99141 1.771875,0 c 0.594266,0 1.033588,-0.12214 1.317968,-0.36641 0.288016,-0.24792 0.432026,-0.62526 0.432032,-1.13203 -6e-6,-0.51042 -0.144016,-0.88594 -0.432032,-1.12656 -0.28438,-0.24427 -0.723702,-0.36641 -1.317968,-0.36641 l -1.771875,0 m 0,-3.35781 0,2.46094 1.635156,0 c 0.539579,0 0.94062,-0.10026 1.203125,-0.30079 0.266141,-0.20416 0.399213,-0.51405 0.399219,-0.92968 -6e-6,-0.41198 -0.133078,-0.72005 -0.399219,-0.92422 -0.262505,-0.20416 -0.663546,-0.30625 -1.203125,-0.30625 l -1.635156,0 m -1.104688,-0.90781 2.821875,0 c 0.842183,0 1.491141,0.175 1.946875,0.525 0.455723,0.35 0.683587,0.84766 0.683594,1.49296 -7e-6,0.49949 -0.116673,0.89688 -0.35,1.19219 -0.233339,0.29532 -0.576047,0.47943 -1.028125,0.55234 0.543223,0.11668 0.964317,0.36095 1.263281,0.73282 0.302598,0.36823 0.4539,0.82943 0.453906,1.38359 -6e-6,0.72917 -0.247923,1.29245 -0.74375,1.68984 -0.495838,0.3974 -1.201307,0.5961 -2.116406,0.5961 l -2.93125,0 0,-8.16484"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4577"
+ inkscape:connector-curvature="0" /><path
+ d="m -29.308273,351.95933 1.153906,0 0,1.38906 -1.153906,0 0,-1.38906 m 0,-4.40235 1.153906,0 0,1.38906 -1.153906,0 0,-1.38906"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4579"
+ inkscape:connector-curvature="0" /><path
+ d="m -23.276239,345.91089 c -0.568753,1e-5 -0.997138,0.28074 -1.285156,0.84219 -0.284377,0.55781 -0.426565,1.39818 -0.426563,2.52109 -2e-6,1.11927 0.142186,1.95964 0.426563,2.52109 0.288018,0.55782 0.716403,0.83672 1.285156,0.83672 0.572392,0 1.000777,-0.2789 1.285156,-0.83672 0.288016,-0.56145 0.432026,-1.40182 0.432031,-2.52109 -5e-6,-1.12291 -0.144015,-1.96328 -0.432031,-2.52109 -0.284379,-0.56145 -0.712764,-0.84218 -1.285156,-0.84219 m 0,-0.875 c 0.9151,1e-5 1.613276,0.36277 2.094531,1.08828 0.48489,0.72188 0.727337,1.77188 0.727344,3.15 -7e-6,1.37448 -0.242454,2.42448 -0.727344,3.15 -0.481255,0.72188 -1.179431,1.08281 -2.094531,1.08281 -0.915107,0 -1.615106,-0.36093 -2.1,-1.08281 -0.481251,-0.72552 -0.721876,-1.77552 -0.721875,-3.15 -1e-6,-1.37812 0.240624,-2.42812 0.721875,-3.15 0.484894,-0.72551 1.184893,-1.08827 2.1,-1.08828"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4581"
+ inkscape:connector-curvature="0" /><path
+ d="m -198.20515,358.89152 0,1.07734 c -0.41927,-0.20051 -0.81485,-0.34999 -1.18672,-0.44844 -0.37188,-0.0984 -0.73099,-0.14765 -1.07734,-0.14765 -0.60157,0 -1.06641,0.11667 -1.39453,0.35 -0.32448,0.23334 -0.48672,0.56511 -0.48672,0.99531 0,0.36094 0.10755,0.63438 0.32266,0.82031 0.21874,0.1823 0.63072,0.32995 1.23593,0.44297 l 0.66719,0.13672 c 0.82395,0.15677 1.43098,0.43386 1.82109,0.83125 0.39375,0.39375 0.59062,0.9224 0.59063,1.58594 -1e-5,0.79114 -0.26615,1.39088 -0.79844,1.79921 -0.52865,0.40834 -1.30521,0.6125 -2.32969,0.6125 -0.38646,0 -0.79844,-0.0437 -1.23593,-0.13125 -0.43386,-0.0875 -0.88412,-0.21692 -1.35078,-0.38828 l 0,-1.1375 c 0.44843,0.25157 0.88775,0.44115 1.31796,0.56875 0.43021,0.12761 0.85313,0.19141 1.26875,0.19141 0.63073,0 1.11745,-0.12396 1.46016,-0.37188 0.3427,-0.24791 0.51406,-0.60156 0.51406,-1.06093 0,-0.40104 -0.12396,-0.71458 -0.37187,-0.94063 -0.24428,-0.22604 -0.64714,-0.39557 -1.2086,-0.50859 l -0.67265,-0.13125 c -0.82396,-0.16406 -1.42006,-0.42109 -1.78828,-0.7711 -0.36823,-0.34999 -0.55235,-0.83671 -0.55235,-1.46015 0,-0.72187 0.25339,-1.29062 0.76016,-1.70625 0.51041,-0.41562 1.21224,-0.62343 2.10547,-0.62344 0.38281,1e-5 0.77291,0.0346 1.17031,0.10391 0.39739,0.0693 0.8039,0.17318 1.21953,0.31172"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4583"
+ inkscape:connector-curvature="0" /><path
+ d="m -195.03874,358.92433 0,1.73906 2.07265,0 0,0.78203 -2.07265,0 0,3.325 c 0,0.49948 0.0674,0.82032 0.20234,0.9625 0.13854,0.14219 0.41745,0.21328 0.83672,0.21328 l 1.03359,0 0,0.84219 -1.03359,0 c -0.77656,0 -1.3125,-0.14401 -1.60781,-0.43203 -0.29532,-0.29167 -0.44297,-0.82031 -0.44297,-1.58594 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73906 1.01172,0"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4585"
+ inkscape:connector-curvature="0" /><path
+ d="m -188.08796,361.60402 c -0.11303,-0.0656 -0.23698,-0.11302 -0.37188,-0.14219 -0.13125,-0.0328 -0.27708,-0.0492 -0.4375,-0.0492 -0.56875,1e-5 -1.00625,0.18594 -1.3125,0.55781 -0.3026,0.36824 -0.4539,0.8987 -0.4539,1.59141 l 0,3.22656 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.21145,-0.37187 0.48671,-0.64713 0.82578,-0.82578 0.33906,-0.18228 0.75104,-0.27343 1.23594,-0.27344 0.0693,10e-6 0.14583,0.005 0.22968,0.0164 0.0839,0.007 0.17682,0.0201 0.27891,0.0383 l 0.005,1.0336"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4587"
+ inkscape:connector-curvature="0" /><path
+ d="m -184.87781,361.36886 c -0.53958,1e-5 -0.96614,0.21146 -1.27968,0.63437 -0.31355,0.41928 -0.47032,0.99532 -0.47031,1.72813 -1e-5,0.73281 0.15494,1.31068 0.46484,1.73359 0.31354,0.41928 0.74192,0.62891 1.28515,0.62891 0.53594,0 0.96068,-0.21146 1.27422,-0.63438 0.31354,-0.42291 0.47031,-0.99895 0.47032,-1.72812 -1e-5,-0.72552 -0.15678,-1.29974 -0.47032,-1.72266 -0.31354,-0.42655 -0.73828,-0.63983 -1.27422,-0.63984 m 0,-0.85313 c 0.875,10e-6 1.56224,0.28439 2.06172,0.85313 0.49948,0.56875 0.74922,1.35625 0.74922,2.3625 0,1.00261 -0.24974,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85312 -2.06172,0.85312 -0.87864,0 -1.56771,-0.28437 -2.06718,-0.85312 -0.49584,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00625 0.24791,-1.79375 0.74375,-2.3625 0.49947,-0.56874 1.18854,-0.85312 2.06718,-0.85313"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4589"
+ inkscape:connector-curvature="0" /><path
+ d="m -180.43171,358.27902 1.01172,0 0,5.02578 3.00234,-2.64141 1.28516,0 -3.24844,2.86563 3.38516,3.25937 -1.3125,0 -3.11172,-2.99141 0,2.99141 -1.01172,0 0,-8.50937"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4591"
+ inkscape:connector-curvature="0" /><path
+ d="m -169.05124,363.47433 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22135 0.62343,1.58593 0.37552,0.36094 0.89687,0.54141 1.56406,0.54141 0.38646,0 0.76016,-0.0474 1.1211,-0.14219 0.36458,-0.0948 0.72551,-0.23698 1.08281,-0.42656 l 0,0.95156 c -0.36094,0.15313 -0.73099,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.7638,0.12031 -1.1539,0.12031 -0.97709,0 -1.75183,-0.28437 -2.32422,-0.85312 -0.56875,-0.56875 -0.85313,-1.33802 -0.85312,-2.30781 -1e-5,-1.0026 0.26979,-1.79739 0.80937,-2.38438 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82395,10e-6 1.47473,0.26616 1.95234,0.79844 0.48125,0.52865 0.72187,1.2487 0.72188,2.16016 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69635,-0.49218 -1.19218,-0.49219 -0.56147,1e-5 -1.01173,0.1586 -1.35078,0.47578 -0.33542,0.31719 -0.52865,0.76381 -0.57969,1.33984 l 3.5875,-0.005"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4593"
+ inkscape:connector-curvature="0" /><path
+ d="m -164.41921,360.66339 1.00625,0 1.25781,4.77969 1.25235,-4.77969 1.18671,0 1.25782,4.77969 1.25234,-4.77969 1.00625,0 -1.60234,6.125 -1.18672,0 -1.31797,-5.02031 -1.32344,5.02031 -1.18672,0 -1.60234,-6.125"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4595"
+ inkscape:connector-curvature="0" /><path
+ d="m -149.42937,363.47433 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22135 0.62344,1.58593 0.37551,0.36094 0.89687,0.54141 1.56406,0.54141 0.38645,0 0.76015,-0.0474 1.12109,-0.14219 0.36458,-0.0948 0.72552,-0.23698 1.08282,-0.42656 l 0,0.95156 c -0.36095,0.15313 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97708,0 -1.75182,-0.28437 -2.32422,-0.85312 -0.56875,-0.56875 -0.85312,-1.33802 -0.85312,-2.30781 0,-1.0026 0.26979,-1.79739 0.80937,-2.38438 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82396,10e-6 1.47474,0.26616 1.95235,0.79844 0.48124,0.52865 0.72187,1.2487 0.72187,2.16016 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29897,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,1e-5 -1.01172,0.1586 -1.35078,0.47578 -0.33542,0.31719 -0.52865,0.76381 -0.57969,1.33984 l 3.5875,-0.005"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4597"
+ inkscape:connector-curvature="0" /><path
+ d="m -147.77781,360.66339 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38437 1.00625,0 0,1.27421 -1.00625,0 0,-1.27421"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4599"
+ inkscape:connector-curvature="0" /><path
+ d="m -140.64109,363.6548 c 0,-0.72917 -0.1513,-1.29427 -0.4539,-1.69532 -0.29897,-0.40103 -0.72006,-0.60155 -1.26328,-0.60156 -0.53959,1e-5 -0.96068,0.20053 -1.26329,0.60156 -0.29896,0.40105 -0.44843,0.96615 -0.44843,1.69532 0,0.72552 0.14947,1.2888 0.44843,1.68984 0.30261,0.40104 0.7237,0.60156 1.26329,0.60156 0.54322,0 0.96431,-0.20052 1.26328,-0.60156 0.3026,-0.40104 0.4539,-0.96432 0.4539,-1.68984 m 1.00625,2.37343 c 0,1.04271 -0.23151,1.81745 -0.69453,2.32422 -0.46302,0.51042 -1.17214,0.76563 -2.12734,0.76563 -0.35365,0 -0.68724,-0.0274 -1.00078,-0.082 -0.31355,-0.051 -0.61797,-0.13125 -0.91328,-0.24063 l 0,-0.9789 c 0.29531,0.16041 0.58697,0.2789 0.875,0.35546 0.28801,0.0766 0.5815,0.11485 0.88046,0.11485 0.6599,0 1.15391,-0.17318 1.48204,-0.51953 0.32812,-0.34271 0.49218,-0.86224 0.49218,-1.5586 l 0,-0.49765 c -0.20781,0.36094 -0.47396,0.63073 -0.79843,0.80937 -0.32449,0.17865 -0.71277,0.26797 -1.16485,0.26797 -0.75104,0 -1.35625,-0.2862 -1.81562,-0.85859 -0.45938,-0.5724 -0.68907,-1.33073 -0.68907,-2.275 0,-0.94792 0.22969,-1.70807 0.68907,-2.28047 0.45937,-0.57239 1.06458,-0.85859 1.81562,-0.8586 0.45208,10e-6 0.84036,0.0893 1.16485,0.26797 0.32447,0.17866 0.59062,0.44845 0.79843,0.80938 l 0,-0.92969 1.00625,0 0,5.36484"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4601"
+ inkscape:connector-curvature="0" /><path
+ d="m -132.47078,363.09152 0,3.69687 -1.00625,0 0,-3.66406 c 0,-0.57968 -0.11302,-1.01354 -0.33906,-1.30156 -0.22605,-0.28802 -0.56511,-0.43203 -1.01719,-0.43204 -0.54323,10e-6 -0.97162,0.17319 -1.28515,0.51954 -0.31355,0.34635 -0.47032,0.81849 -0.47032,1.4164 l 0,3.46172 -1.01172,0 0,-8.50937 1.01172,0 0,3.33593 c 0.24063,-0.36822 0.52318,-0.64348 0.84766,-0.82578 0.32812,-0.18228 0.70546,-0.27343 1.13203,-0.27344 0.70364,10e-6 1.23593,0.21876 1.59688,0.65625 0.36093,0.43386 0.5414,1.07371 0.5414,1.91954"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4603"
+ inkscape:connector-curvature="0" /><path
+ d="m -129.4575,358.92433 0,1.73906 2.07266,0 0,0.78203 -2.07266,0 0,3.325 c 0,0.49948 0.0675,0.82032 0.20235,0.9625 0.13854,0.14219 0.41744,0.21328 0.83672,0.21328 l 1.03359,0 0,0.84219 -1.03359,0 c -0.77657,0 -1.31251,-0.14401 -1.60782,-0.43203 -0.29531,-0.29167 -0.44297,-0.82031 -0.44297,-1.58594 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73906 1.01172,0"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4605"
+ inkscape:connector-curvature="0" /><path
+ d="m -125.7989,365.39933 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906 m 0,-4.40235 1.15391,0 0,1.38907 -1.15391,0 0,-1.38907"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4607"
+ inkscape:connector-curvature="0" /><path
+ d="m -116.20124,359.35089 c -0.56876,1e-5 -0.99714,0.28074 -1.28516,0.84219 -0.28438,0.55782 -0.42656,1.39818 -0.42656,2.52109 0,1.11928 0.14218,1.95964 0.42656,2.5211 0.28802,0.55781 0.7164,0.83672 1.28516,0.83671 0.57239,1e-5 1.00077,-0.2789 1.28515,-0.83671 0.28802,-0.56146 0.43203,-1.40182 0.43204,-2.5211 -1e-5,-1.12291 -0.14402,-1.96327 -0.43204,-2.52109 -0.28438,-0.56145 -0.71276,-0.84218 -1.28515,-0.84219 m 0,-0.875 c 0.9151,1e-5 1.61327,0.36277 2.09453,1.08828 0.48489,0.72188 0.72734,1.77188 0.72734,3.15 0,1.37448 -0.24245,2.42448 -0.72734,3.15 -0.48126,0.72188 -1.17943,1.08281 -2.09453,1.08281 -0.91511,0 -1.61511,-0.36093 -2.1,-1.08281 -0.48125,-0.72552 -0.72188,-1.77552 -0.72188,-3.15 0,-1.37812 0.24063,-2.42812 0.72188,-3.15 0.48489,-0.72551 1.18489,-1.08827 2.1,-1.08828"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4609"
+ inkscape:connector-curvature="0" /><path
+ d="m -111.43249,365.39933 1.1539,0 0,1.38906 -1.1539,0 0,-1.38906"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4611"
+ inkscape:connector-curvature="0" /><path
+ d="m -105.50437,359.35089 c -0.56875,1e-5 -0.99713,0.28074 -1.28515,0.84219 -0.28438,0.55782 -0.42657,1.39818 -0.42656,2.52109 -10e-6,1.11928 0.14218,1.95964 0.42656,2.5211 0.28802,0.55781 0.7164,0.83672 1.28515,0.83671 0.5724,1e-5 1.00078,-0.2789 1.28516,-0.83671 0.28802,-0.56146 0.43203,-1.40182 0.43203,-2.5211 0,-1.12291 -0.14401,-1.96327 -0.43203,-2.52109 -0.28438,-0.56145 -0.71276,-0.84218 -1.28516,-0.84219 m 0,-0.875 c 0.9151,1e-5 1.61328,0.36277 2.09454,1.08828 0.48489,0.72188 0.72733,1.77188 0.72734,3.15 -1e-5,1.37448 -0.24245,2.42448 -0.72734,3.15 -0.48126,0.72188 -1.17944,1.08281 -2.09454,1.08281 -0.9151,0 -1.6151,-0.36093 -2.1,-1.08281 -0.48125,-0.72552 -0.72187,-1.77552 -0.72187,-3.15 0,-1.37812 0.24062,-2.42812 0.72187,-3.15 0.4849,-0.72551 1.1849,-1.08827 2.1,-1.08828"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4613"
+ inkscape:connector-curvature="0" /><path
+ d="m -100.54421,365.8587 1.804687,0 0,-6.2289 -1.963277,0.39375 0,-1.00625 1.952339,-0.39375 1.104688,0 0,7.23515 1.804687,0 0,0.92969 -4.703124,0 0,-0.92969"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4615"
+ inkscape:connector-curvature="0" /><path
+ d="m -88.977806,361.83917 c 0.251556,-0.45208 0.552337,-0.78567 0.902344,-1.00078 0.349992,-0.2151 0.761971,-0.32265 1.235937,-0.32266 0.638012,10e-6 1.130199,0.22423 1.476562,0.67266 0.346345,0.4448 0.519522,1.07917 0.519532,1.90313 l 0,3.69687 -1.011719,0 0,-3.66406 c -9e-6,-0.58698 -0.103915,-1.02265 -0.311719,-1.30703 -0.207821,-0.28437 -0.525008,-0.42656 -0.951562,-0.42657 -0.521362,10e-6 -0.93334,0.17319 -1.235938,0.51954 -0.30261,0.34635 -0.453912,0.81849 -0.453906,1.4164 l 0,3.46172 -1.011719,0 0,-3.66406 c -5e-6,-0.59062 -0.103911,-1.0263 -0.311718,-1.30703 -0.207817,-0.28437 -0.52865,-0.42656 -0.9625,-0.42657 -0.514066,10e-6 -0.922399,0.17501 -1.225,0.525 -0.302607,0.34636 -0.453909,0.81668 -0.453907,1.41094 l 0,3.46172 -1.011718,0 0,-6.125 1.011718,0 0,0.95156 c 0.229686,-0.37551 0.504946,-0.65259 0.825782,-0.83125 0.32083,-0.17864 0.701819,-0.26796 1.142968,-0.26797 0.444788,10e-6 0.822131,0.11303 1.132032,0.33907 0.313536,0.22604 0.545046,0.55417 0.694531,0.98437"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4617"
+ inkscape:connector-curvature="0" /><path
+ d="m -78.06218,361.83917 c 0.251557,-0.45208 0.552338,-0.78567 0.902344,-1.00078 0.349993,-0.2151 0.761972,-0.32265 1.235938,-0.32266 0.638012,10e-6 1.130199,0.22423 1.476562,0.67266 0.346344,0.4448 0.519521,1.07917 0.519531,1.90313 l 0,3.69687 -1.011718,0 0,-3.66406 c -9e-6,-0.58698 -0.103916,-1.02265 -0.311719,-1.30703 -0.207821,-0.28437 -0.525008,-0.42656 -0.951563,-0.42657 -0.521361,10e-6 -0.93334,0.17319 -1.235937,0.51954 -0.30261,0.34635 -0.453912,0.81849 -0.453906,1.4164 l 0,3.46172 -1.011719,0 0,-3.66406 c -5e-6,-0.59062 -0.103911,-1.0263 -0.311719,-1.30703 -0.207817,-0.28437 -0.52865,-0.42656 -0.9625,-0.42657 -0.514066,10e-6 -0.922398,0.17501 -1.225,0.525 -0.302606,0.34636 -0.453908,0.81668 -0.453906,1.41094 l 0,3.46172 -1.011719,0 0,-6.125 1.011719,0 0,0.95156 c 0.229685,-0.37551 0.504945,-0.65259 0.825781,-0.83125 0.32083,-0.17864 0.701819,-0.26796 1.142969,-0.26797 0.444787,10e-6 0.82213,0.11303 1.132031,0.33907 0.313536,0.22604 0.545046,0.55417 0.694531,0.98437"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4619"
+ inkscape:connector-curvature="0" /></g><g
+ style="font-size:9.60000038px"
+ id="text4841-4"><path
+ d="m -204.2325,201.04194 6.90703,0 0,0.92969 -2.89844,0 0,7.23516 -1.11016,0 0,-7.23516 -2.89843,0 0,-0.92969"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4622"
+ inkscape:connector-curvature="0" /><path
+ d="m -195.8161,203.78726 c -0.53958,0 -0.96615,0.21146 -1.27969,0.63437 -0.31354,0.41928 -0.47031,0.99532 -0.47031,1.72813 0,0.73281 0.15495,1.31067 0.46485,1.73359 0.31353,0.41927 0.74192,0.62891 1.28515,0.62891 0.53594,0 0.96067,-0.21146 1.27422,-0.63438 0.31354,-0.42291 0.47031,-0.99896 0.47031,-1.72812 0,-0.72552 -0.15677,-1.29974 -0.47031,-1.72266 -0.31355,-0.42656 -0.73828,-0.63984 -1.27422,-0.63984 m 0,-0.85313 c 0.875,1e-5 1.56224,0.28438 2.06172,0.85313 0.49947,0.56875 0.74921,1.35625 0.74922,2.3625 -1e-5,1.0026 -0.24975,1.7901 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85312 -2.06172,0.85312 -0.87865,0 -1.56771,-0.28437 -2.06719,-0.85312 -0.49583,-0.5724 -0.74375,-1.3599 -0.74375,-2.3625 0,-1.00625 0.24792,-1.79375 0.74375,-2.3625 0.49948,-0.56875 1.18854,-0.85312 2.06719,-0.85313"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4624"
+ inkscape:connector-curvature="0" /><path
+ d="m -181.60829,201.67085 0,1.16484 c -0.37188,-0.34634 -0.76927,-0.6052 -1.19218,-0.77656 -0.41928,-0.17135 -0.86589,-0.25702 -1.33985,-0.25703 -0.93333,1e-5 -1.64792,0.2862 -2.14375,0.85859 -0.49583,0.56876 -0.74375,1.39272 -0.74375,2.47188 0,1.07552 0.24792,1.89948 0.74375,2.47187 0.49583,0.56875 1.21042,0.85313 2.14375,0.85313 0.47396,0 0.92057,-0.0857 1.33985,-0.25703 0.42291,-0.17136 0.8203,-0.43021 1.19218,-0.77657 l 0,1.15391 c -0.38646,0.2625 -0.79662,0.45938 -1.23046,0.59063 -0.43022,0.13125 -0.88595,0.19687 -1.36719,0.19687 -1.23594,0 -2.20938,-0.37734 -2.92031,-1.13203 -0.71094,-0.75833 -1.06641,-1.79192 -1.06641,-3.10078 0,-1.3125 0.35547,-2.34609 1.06641,-3.10078 0.71093,-0.75833 1.68437,-1.13749 2.92031,-1.1375 0.48853,10e-6 0.94791,0.0656 1.37812,0.19687 0.43385,0.12761 0.84036,0.32084 1.21953,0.57969"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4626"
+ inkscape:connector-curvature="0" /><path
+ d="m -180.03875,206.7896 0,-3.70781 1.00625,0 0,3.66953 c -1e-5,0.57969 0.11301,1.01536 0.33906,1.30703 0.22604,0.28802 0.5651,0.43203 1.01719,0.43203 0.54322,0 0.97161,-0.17318 1.28515,-0.51953 0.31718,-0.34635 0.47578,-0.81849 0.47578,-1.41641 l 0,-3.47265 1.00625,0 0,6.125 -1.00625,0 0,-0.94063 c -0.24427,0.37188 -0.52865,0.64896 -0.85312,0.83125 -0.32084,0.17865 -0.69454,0.26797 -1.1211,0.26797 -0.70364,0 -1.23776,-0.21875 -1.60234,-0.65625 -0.36458,-0.4375 -0.54687,-1.07734 -0.54687,-1.91953"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4628"
+ inkscape:connector-curvature="0" /><path
+ d="m -171.83016,201.34272 0,1.73907 2.07266,0 0,0.78203 -2.07266,0 0,3.325 c 0,0.49948 0.0675,0.82031 0.20234,0.9625 0.13854,0.14219 0.41745,0.21328 0.83672,0.21328 l 1.0336,0 0,0.84219 -1.0336,0 c -0.77656,0 -1.3125,-0.14401 -1.60781,-0.43203 -0.29531,-0.29167 -0.44297,-0.82032 -0.44297,-1.58594 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73907 1.01172,0"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4630"
+ inkscape:connector-curvature="0" /><path
+ d="m -162.07938,206.12788 c -0.81302,0 -1.3763,0.093 -1.68984,0.27891 -0.31355,0.18594 -0.47032,0.50312 -0.47032,0.95156 0,0.35729 0.11667,0.64167 0.35,0.85312 0.23698,0.20782 0.55781,0.31172 0.9625,0.31172 0.55781,0 1.00443,-0.19687 1.33985,-0.59062 0.33906,-0.3974 0.50859,-0.92422 0.50859,-1.58047 l 0,-0.22422 -1.00078,0 m 2.00703,-0.41562 0,3.49453 -1.00625,0 0,-0.92969 c -0.22969,0.37188 -0.51589,0.64714 -0.85859,0.82578 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62709,0 -1.12657,-0.175 -1.49844,-0.525 -0.36823,-0.35364 -0.55235,-0.82578 -0.55235,-1.41641 0,-0.68906 0.22969,-1.20859 0.68907,-1.55859 0.46302,-0.35 1.15208,-0.525 2.06718,-0.525 l 1.41094,0 0,-0.0984 c 0,-0.46301 -0.15313,-0.8203 -0.45937,-1.07187 -0.30261,-0.2552 -0.72917,-0.38281 -1.27969,-0.38281 -0.35,0 -0.69089,0.0419 -1.02266,0.12578 -0.33177,0.0839 -0.65078,0.20964 -0.95703,0.37734 l 0,-0.92969 c 0.36823,-0.14218 0.72552,-0.24791 1.07188,-0.31718 0.34635,-0.0729 0.68359,-0.10937 1.01172,-0.10938 0.88593,1e-5 1.54765,0.22969 1.98515,0.68906 0.4375,0.45938 0.65625,1.15574 0.65625,2.08907"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4632"
+ inkscape:connector-curvature="0" /><path
+ d="m -154.38485,201.04194 1.10469,0 0,7.23516 3.97578,0 0,0.92969 -5.08047,0 0,-8.16485"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4634"
+ inkscape:connector-curvature="0" /><path
+ d="m -148.19422,203.08179 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38438 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4636"
+ inkscape:connector-curvature="0" /><path
+ d="m -139.99657,205.50991 0,3.69688 -1.00625,0 0,-3.66407 c 0,-0.57968 -0.11302,-1.01353 -0.33906,-1.30156 -0.22604,-0.28801 -0.56511,-0.43202 -1.01719,-0.43203 -0.54323,1e-5 -0.97161,0.17318 -1.28515,0.51953 -0.31355,0.34636 -0.47032,0.8185 -0.47031,1.41641 l 0,3.46172 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.24062,-0.36822 0.52317,-0.64348 0.84765,-0.82578 0.32812,-0.18229 0.70547,-0.27343 1.13203,-0.27344 0.70364,1e-5 1.23594,0.21876 1.59688,0.65625 0.36093,0.43386 0.5414,1.0737 0.5414,1.91953"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4638"
+ inkscape:connector-curvature="0" /><path
+ d="m -132.73953,205.89272 0,0.49219 -4.62657,0 c 0.0437,0.69271 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.54141 1.56406,0.54141 0.38646,0 0.76016,-0.0474 1.1211,-0.14219 0.36458,-0.0948 0.72551,-0.23698 1.08281,-0.42656 l 0,0.95156 c -0.36094,0.15312 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.7638,0.12031 -1.1539,0.12031 -0.97709,0 -1.75183,-0.28437 -2.32422,-0.85312 -0.56875,-0.56875 -0.85313,-1.33802 -0.85313,-2.30782 0,-1.0026 0.26979,-1.79739 0.80938,-2.38437 0.54323,-0.59062 1.27421,-0.88593 2.19297,-0.88594 0.82395,1e-5 1.47473,0.26615 1.95234,0.79844 0.48124,0.52865 0.72187,1.2487 0.72188,2.16015 m -1.00625,-0.29531 c -0.007,-0.55051 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19219,-0.49218 -0.56146,0 -1.01172,0.15859 -1.35078,0.47578 -0.33542,0.31719 -0.52864,0.7638 -0.57968,1.33984 l 3.5875,-0.005"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4640"
+ inkscape:connector-curvature="0" /><path
+ d="m -130.83094,207.81772 1.15391,0 0,1.38907 -1.15391,0 0,-1.38907 m 0,-4.40234 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4642"
+ inkscape:connector-curvature="0" /><path
+ d="m -198.20594,214.74991 0,1.07735 c -0.41928,-0.20052 -0.81485,-0.34999 -1.18672,-0.44844 -0.37188,-0.0984 -0.73099,-0.14765 -1.07734,-0.14766 -0.60157,1e-5 -1.06641,0.11668 -1.39454,0.35 -0.32448,0.23334 -0.48672,0.56512 -0.48671,0.99532 -1e-5,0.36094 0.10755,0.63438 0.32265,0.82031 0.21875,0.1823 0.63073,0.32995 1.23594,0.44297 l 0.66719,0.13672 c 0.82395,0.15677 1.43098,0.43386 1.82109,0.83125 0.39374,0.39375 0.59062,0.9224 0.59063,1.58593 -1e-5,0.79115 -0.26616,1.39089 -0.79844,1.79922 -0.52865,0.40834 -1.30521,0.6125 -2.32969,0.6125 -0.38646,0 -0.79844,-0.0438 -1.23594,-0.13125 -0.43385,-0.0875 -0.88411,-0.21692 -1.35078,-0.38828 l 0,-1.1375 c 0.44844,0.25157 0.88776,0.44115 1.31797,0.56875 0.43021,0.12761 0.85312,0.19141 1.26875,0.19141 0.63073,0 1.11744,-0.12396 1.46016,-0.37188 0.3427,-0.24791 0.51405,-0.60156 0.51406,-1.06093 -1e-5,-0.40104 -0.12396,-0.71458 -0.37188,-0.94063 -0.24427,-0.22604 -0.64714,-0.39557 -1.20859,-0.50859 l -0.67266,-0.13125 c -0.82396,-0.16406 -1.42005,-0.42109 -1.78828,-0.7711 -0.36823,-0.34999 -0.55234,-0.83671 -0.55234,-1.46015 0,-0.72187 0.25338,-1.29062 0.76016,-1.70625 0.51041,-0.41562 1.21223,-0.62343 2.10546,-0.62344 0.38281,1e-5 0.77292,0.0346 1.17032,0.10391 0.39739,0.0693 0.8039,0.17318 1.21953,0.31171"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4644"
+ inkscape:connector-curvature="0" /><path
+ d="m -195.03954,214.78273 0,1.73906 2.07266,0 0,0.78203 -2.07266,0 0,3.325 c 0,0.49948 0.0674,0.82031 0.20235,0.9625 0.13854,0.14219 0.41744,0.21328 0.83672,0.21328 l 1.03359,0 0,0.84219 -1.03359,0 c -0.77657,0 -1.3125,-0.14401 -1.60782,-0.43203 -0.29531,-0.29167 -0.44297,-0.82031 -0.44296,-1.58594 l 0,-3.325 -0.73829,0 0,-0.78203 0.73829,0 0,-1.73906 1.01171,0"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4646"
+ inkscape:connector-curvature="0" /><path
+ d="m -188.08875,217.46241 c -0.11303,-0.0656 -0.23699,-0.11301 -0.37188,-0.14218 -0.13125,-0.0328 -0.27709,-0.0492 -0.4375,-0.0492 -0.56875,0 -1.00625,0.18594 -1.3125,0.55781 -0.30261,0.36823 -0.45391,0.8987 -0.45391,1.59141 l 0,3.22656 -1.01171,0 0,-6.125 1.01171,0 0,0.95156 c 0.21146,-0.37187 0.48672,-0.64713 0.82579,-0.82578 0.33906,-0.18228 0.75103,-0.27343 1.23593,-0.27344 0.0693,1e-5 0.14583,0.005 0.22969,0.0164 0.0839,0.007 0.17682,0.0201 0.27891,0.0383 l 0.005,1.03359"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4648"
+ inkscape:connector-curvature="0" /><path
+ d="m -184.8786,217.22726 c -0.53958,0 -0.96615,0.21146 -1.27969,0.63437 -0.31354,0.41928 -0.47031,0.99532 -0.47031,1.72813 0,0.73281 0.15495,1.31068 0.46485,1.73359 0.31353,0.41927 0.74192,0.62891 1.28515,0.62891 0.53594,0 0.96067,-0.21146 1.27422,-0.63438 0.31354,-0.42291 0.47031,-0.99895 0.47031,-1.72812 0,-0.72552 -0.15677,-1.29974 -0.47031,-1.72266 -0.31355,-0.42656 -0.73828,-0.63984 -1.27422,-0.63984 m 0,-0.85313 c 0.875,1e-5 1.56224,0.28438 2.06172,0.85313 0.49947,0.56875 0.74921,1.35625 0.74922,2.3625 -1e-5,1.0026 -0.24975,1.7901 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85312 -2.06172,0.85312 -0.87865,0 -1.56771,-0.28437 -2.06719,-0.85312 -0.49583,-0.5724 -0.74375,-1.3599 -0.74375,-2.3625 0,-1.00625 0.24792,-1.79375 0.74375,-2.3625 0.49948,-0.56875 1.18854,-0.85312 2.06719,-0.85313"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4650"
+ inkscape:connector-curvature="0" /><path
+ d="m -180.4325,214.13741 1.01171,0 0,5.02579 3.00235,-2.64141 1.28515,0 -3.24843,2.86562 3.38515,3.25938 -1.3125,0 -3.11172,-2.99141 0,2.99141 -1.01171,0 0,-8.50938"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4652"
+ inkscape:connector-curvature="0" /><path
+ d="m -169.05204,219.33273 0,0.49218 -4.62656,0 c 0.0437,0.69272 0.25156,1.22136 0.62344,1.58594 0.37552,0.36094 0.89687,0.54141 1.56406,0.54141 0.38646,0 0.76015,-0.0474 1.1211,-0.14219 0.36457,-0.0948 0.72551,-0.23698 1.08281,-0.42656 l 0,0.95156 c -0.36095,0.15313 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.7638,0.12031 -1.1539,0.12031 -0.97709,0 -1.75183,-0.28437 -2.32422,-0.85312 -0.56875,-0.56875 -0.85313,-1.33802 -0.85313,-2.30781 0,-1.0026 0.26979,-1.7974 0.80938,-2.38438 0.54322,-0.59062 1.27421,-0.88593 2.19297,-0.88594 0.82395,1e-5 1.47473,0.26616 1.95234,0.79844 0.48124,0.52865 0.72187,1.2487 0.72187,2.16016 m -1.00625,-0.29532 c -0.007,-0.55051 -0.16224,-0.98983 -0.46484,-1.31796 -0.29896,-0.32812 -0.69636,-0.49219 -1.19219,-0.49219 -0.56146,0 -1.01172,0.1586 -1.35078,0.47578 -0.33542,0.31719 -0.52865,0.76381 -0.57969,1.33984 l 3.5875,-0.005"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4654"
+ inkscape:connector-curvature="0" /><path
+ d="m -159.42703,216.75695 0,0.94062 c -0.28439,-0.15676 -0.57058,-0.27343 -0.8586,-0.35 -0.28438,-0.0802 -0.5724,-0.12031 -0.86406,-0.12031 -0.65261,0 -1.15938,0.20782 -1.52031,0.62344 -0.36094,0.41198 -0.54141,0.99167 -0.54141,1.73906 0,0.7474 0.18047,1.32891 0.54141,1.74453 0.36093,0.41198 0.8677,0.61797 1.52031,0.61797 0.29166,0 0.57968,-0.0383 0.86406,-0.11485 0.28802,-0.0802 0.57421,-0.19869 0.8586,-0.35546 l 0,0.92968 c -0.28074,0.13125 -0.57241,0.22969 -0.875,0.29532 -0.29897,0.0656 -0.61798,0.0984 -0.95704,0.0984 -0.92239,0 -1.65521,-0.28984 -2.19843,-0.86953 -0.54323,-0.57968 -0.81485,-1.36171 -0.81485,-2.34609 0,-0.99896 0.27344,-1.78463 0.82032,-2.35703 0.55051,-0.57239 1.30338,-0.85859 2.25859,-0.8586 0.30989,1e-5 0.61249,0.0328 0.90781,0.0984 0.29531,0.062 0.58151,0.15678 0.8586,0.28438"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4656"
+ inkscape:connector-curvature="0" /><path
+ d="m -155.29266,217.22726 c -0.53959,0 -0.96615,0.21146 -1.27969,0.63437 -0.31354,0.41928 -0.47031,0.99532 -0.47031,1.72813 0,0.73281 0.15494,1.31068 0.46484,1.73359 0.31354,0.41927 0.74193,0.62891 1.28516,0.62891 0.53593,0 0.96067,-0.21146 1.27422,-0.63438 0.31353,-0.42291 0.4703,-0.99895 0.47031,-1.72812 -1e-5,-0.72552 -0.15678,-1.29974 -0.47031,-1.72266 -0.31355,-0.42656 -0.73829,-0.63984 -1.27422,-0.63984 m 0,-0.85313 c 0.87499,1e-5 1.56223,0.28438 2.06172,0.85313 0.49947,0.56875 0.74921,1.35625 0.74921,2.3625 0,1.0026 -0.24974,1.7901 -0.74921,2.3625 -0.49949,0.56875 -1.18673,0.85312 -2.06172,0.85312 -0.87865,0 -1.56771,-0.28437 -2.06719,-0.85312 -0.49583,-0.5724 -0.74375,-1.3599 -0.74375,-2.3625 0,-1.00625 0.24792,-1.79375 0.74375,-2.3625 0.49948,-0.56875 1.18854,-0.85312 2.06719,-0.85313"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4658"
+ inkscape:connector-curvature="0" /><path
+ d="m -150.81923,214.13741 1.00625,0 0,8.50938 -1.00625,0 0,-8.50938"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4660"
+ inkscape:connector-curvature="0" /><path
+ d="m -145.33954,217.22726 c -0.53958,0 -0.96615,0.21146 -1.27969,0.63437 -0.31354,0.41928 -0.47031,0.99532 -0.47031,1.72813 0,0.73281 0.15495,1.31068 0.46485,1.73359 0.31354,0.41927 0.74192,0.62891 1.28515,0.62891 0.53594,0 0.96067,-0.21146 1.27422,-0.63438 0.31354,-0.42291 0.47031,-0.99895 0.47031,-1.72812 0,-0.72552 -0.15677,-1.29974 -0.47031,-1.72266 -0.31355,-0.42656 -0.73828,-0.63984 -1.27422,-0.63984 m 0,-0.85313 c 0.875,1e-5 1.56224,0.28438 2.06172,0.85313 0.49947,0.56875 0.74921,1.35625 0.74922,2.3625 -10e-6,1.0026 -0.24975,1.7901 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85312 -2.06172,0.85312 -0.87865,0 -1.56771,-0.28437 -2.06719,-0.85312 -0.49583,-0.5724 -0.74375,-1.3599 -0.74375,-2.3625 0,-1.00625 0.24792,-1.79375 0.74375,-2.3625 0.49948,-0.56875 1.18854,-0.85312 2.06719,-0.85313"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4662"
+ inkscape:connector-curvature="0" /><path
+ d="m -137.31688,217.46241 c -0.11303,-0.0656 -0.23699,-0.11301 -0.37188,-0.14218 -0.13125,-0.0328 -0.27708,-0.0492 -0.4375,-0.0492 -0.56875,0 -1.00625,0.18594 -1.3125,0.55781 -0.3026,0.36823 -0.45391,0.8987 -0.4539,1.59141 l 0,3.22656 -1.01172,0 0,-6.125 1.01172,0 0,0.95156 c 0.21145,-0.37187 0.48671,-0.64713 0.82578,-0.82578 0.33906,-0.18228 0.75104,-0.27343 1.23594,-0.27344 0.0693,1e-5 0.14582,0.005 0.22968,0.0164 0.0838,0.007 0.17682,0.0201 0.27891,0.0383 l 0.005,1.03359"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4664"
+ inkscape:connector-curvature="0" /><path
+ d="m -136.17938,221.25773 1.1539,0 0,1.38906 -1.1539,0 0,-1.38906 m 0,-4.40235 1.1539,0 0,1.38907 -1.1539,0 0,-1.38907"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4666"
+ inkscape:connector-curvature="0" /><path
+ d="m -127.92704,218.74757 0,2.99141 1.77188,0 c 0.59426,0 1.03359,-0.12214 1.31797,-0.36641 0.28801,-0.24791 0.43202,-0.62526 0.43203,-1.13203 -1e-5,-0.51041 -0.14402,-0.88593 -0.43203,-1.12656 -0.28438,-0.24427 -0.72371,-0.36641 -1.31797,-0.36641 l -1.77188,0 m 0,-3.35781 0,2.46094 1.63516,0 c 0.53958,0 0.94062,-0.10026 1.20312,-0.30079 0.26614,-0.20416 0.39922,-0.51405 0.39922,-0.92968 0,-0.41198 -0.13308,-0.72005 -0.39922,-0.92422 -0.2625,-0.20416 -0.66354,-0.30624 -1.20312,-0.30625 l -1.63516,0 m -1.10468,-0.90781 2.82187,0 c 0.84218,0 1.49114,0.175 1.94688,0.525 0.45572,0.35 0.68358,0.84766 0.68359,1.49296 -1e-5,0.49949 -0.11667,0.89688 -0.35,1.19219 -0.23334,0.29532 -0.57605,0.47943 -1.02813,0.55235 0.54323,0.11667 0.96432,0.36094 1.26329,0.73281 0.30259,0.36823 0.45389,0.82943 0.4539,1.38359 -1e-5,0.72917 -0.24792,1.29245 -0.74375,1.68985 -0.49584,0.39739 -1.20131,0.59609 -2.1164,0.59609 l -2.93125,0 0,-8.16484"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4668"
+ inkscape:connector-curvature="0" /><path
+ d="m -121.39735,214.13741 1.00625,0 0,8.50938 -1.00625,0 0,-8.50938"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4670"
+ inkscape:connector-curvature="0" /><path
+ d="m -118.395,220.2296 0,-3.70781 1.00625,0 0,3.66953 c 0,0.57969 0.11302,1.01537 0.33906,1.30703 0.22604,0.28802 0.5651,0.43203 1.01719,0.43203 0.54322,0 0.97161,-0.17317 1.28515,-0.51953 0.31719,-0.34635 0.47578,-0.81849 0.47578,-1.4164 l 0,-3.47266 1.00625,0 0,6.125 -1.00625,0 0,-0.94063 c -0.24427,0.37188 -0.52865,0.64896 -0.85312,0.83125 -0.32084,0.17865 -0.69454,0.26797 -1.12109,0.26797 -0.70365,0 -1.23777,-0.21875 -1.60235,-0.65625 -0.36458,-0.4375 -0.54687,-1.07734 -0.54687,-1.91953"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4672"
+ inkscape:connector-curvature="0" /><path
+ d="m -105.94266,219.33273 0,0.49218 -4.62656,0 c 0.0438,0.69272 0.25156,1.22136 0.62344,1.58594 0.37551,0.36094 0.89687,0.54141 1.56406,0.54141 0.38645,0 0.76015,-0.0474 1.12109,-0.14219 0.36458,-0.0948 0.72552,-0.23698 1.08281,-0.42656 l 0,0.95156 c -0.36094,0.15313 -0.73099,0.26979 -1.11015,0.35 -0.37917,0.0802 -0.76381,0.12031 -1.15391,0.12031 -0.97708,0 -1.75182,-0.28437 -2.32422,-0.85312 -0.56875,-0.56875 -0.85312,-1.33802 -0.85312,-2.30781 0,-1.0026 0.26979,-1.7974 0.80937,-2.38438 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88594 0.82396,1e-5 1.47474,0.26616 1.95235,0.79844 0.48124,0.52865 0.72186,1.2487 0.72187,2.16016 m -1.00625,-0.29532 c -0.007,-0.55051 -0.16224,-0.98983 -0.46484,-1.31796 -0.29897,-0.32812 -0.69636,-0.49219 -1.19219,-0.49219 -0.56146,0 -1.01172,0.1586 -1.35078,0.47578 -0.33542,0.31719 -0.52865,0.76381 -0.57969,1.33984 l 3.5875,-0.005"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4674"
+ inkscape:connector-curvature="0" /><path
+ d="m -101.23407,219.13038 2.947656,0 0,0.89688 -2.947656,0 0,-0.89688"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4676"
+ inkscape:connector-curvature="0" /><path
+ d="m -89.197348,218.81866 c 0.236974,0.0802 0.466661,0.25157 0.689062,0.51407 0.226036,0.2625 0.452078,0.62344 0.678125,1.08281 l 1.121094,2.23125 -1.186719,0 -1.044531,-2.09453 c -0.269796,-0.54687 -0.532296,-0.90963 -0.7875,-1.08828 -0.251567,-0.17865 -0.596097,-0.26797 -1.033594,-0.26797 l -1.203125,0 0,3.45078 -1.104687,0 0,-8.16484 2.49375,0 c 0.933329,0 1.629682,0.19506 2.089062,0.58515 0.459369,0.39011 0.689056,0.97892 0.689063,1.76641 -7e-6,0.51407 -0.120319,0.94063 -0.360938,1.27969 -0.236985,0.33906 -0.583338,0.57422 -1.039062,0.70546 m -2.767188,-3.4289 0,2.89844 1.389063,0 c 0.532287,0 0.933329,-0.12214 1.203125,-0.36641 0.273432,-0.24791 0.410151,-0.61067 0.410156,-1.08828 -5e-6,-0.4776 -0.136724,-0.83671 -0.410156,-1.07735 -0.269796,-0.24426 -0.670838,-0.36639 -1.203125,-0.3664 l -1.389063,0"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4678"
+ inkscape:connector-curvature="0" /><path
+ d="m -85.418442,221.25773 1.153906,0 0,1.38906 -1.153906,0 0,-1.38906 m 0,-4.40235 1.153906,0 0,1.38907 -1.153906,0 0,-1.38907"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4680"
+ inkscape:connector-curvature="0" /><path
+ d="m -79.386415,215.20929 c -0.568753,1e-5 -0.997138,0.28074 -1.285156,0.84219 -0.284377,0.55782 -0.426565,1.39818 -0.426563,2.52109 -2e-6,1.11927 0.142186,1.95964 0.426563,2.52109 0.288018,0.55782 0.716403,0.83672 1.285156,0.83672 0.572392,0 1.000777,-0.2789 1.285156,-0.83672 0.288016,-0.56145 0.432026,-1.40182 0.432031,-2.52109 -5e-6,-1.12291 -0.144015,-1.96327 -0.432031,-2.52109 -0.284379,-0.56145 -0.712764,-0.84218 -1.285156,-0.84219 m 0,-0.875 c 0.9151,1e-5 1.613276,0.36277 2.094531,1.08828 0.48489,0.72188 0.727337,1.77188 0.727344,3.15 -7e-6,1.37448 -0.242454,2.42448 -0.727344,3.15 -0.481255,0.72188 -1.179431,1.08281 -2.094531,1.08281 -0.915107,0 -1.615106,-0.36093 -2.1,-1.08281 -0.481251,-0.72552 -0.721876,-1.77552 -0.721875,-3.15 -10e-7,-1.37812 0.240624,-2.42812 0.721875,-3.15 0.484894,-0.72551 1.184893,-1.08827 2.1,-1.08828"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4682"
+ inkscape:connector-curvature="0" /><path
+ d="m -65.583289,221.48195 0,-2.19297 -1.804687,0 0,-0.90782 2.898437,0 0,3.50547 c -0.42657,0.30261 -0.896882,0.5323 -1.410937,0.68907 -0.514069,0.15312 -1.062766,0.22968 -1.646094,0.22968 -1.276045,0 -2.275002,-0.37187 -2.996875,-1.11562 -0.71823,-0.7474 -1.077344,-1.78646 -1.077344,-3.11719 0,-1.33437 0.359114,-2.37343 1.077344,-3.11719 0.721873,-0.74738 1.72083,-1.12108 2.996875,-1.12109 0.532287,1e-5 1.037234,0.0656 1.514844,0.19687 0.481243,0.13126 0.924211,0.32449 1.328906,0.57969 l 0,1.17578 c -0.40834,-0.34634 -0.842194,-0.60702 -1.301562,-0.78203 -0.459381,-0.17499 -0.942454,-0.26249 -1.449219,-0.2625 -0.998962,1e-5 -1.750003,0.27892 -2.253125,0.83672 -0.499481,0.55782 -0.749221,1.38907 -0.749219,2.49375 -2e-6,1.10105 0.249738,1.93047 0.749219,2.48828 0.503122,0.55782 1.254163,0.83672 2.253125,0.83672 0.390099,0 0.738276,-0.0328 1.044531,-0.0984 0.306244,-0.0693 0.581504,-0.175 0.825781,-0.31718"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4684"
+ inkscape:connector-curvature="0" /><path
+ d="m -62.252823,221.25773 1.153906,0 0,1.38906 -1.153906,0 0,-1.38906 m 0,-4.40235 1.153906,0 0,1.38907 -1.153906,0 0,-1.38907"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4686"
+ inkscape:connector-curvature="0" /><path
+ d="m -56.220789,215.20929 c -0.568753,1e-5 -0.997138,0.28074 -1.285156,0.84219 -0.284377,0.55782 -0.426564,1.39818 -0.426562,2.52109 -2e-6,1.11927 0.142185,1.95964 0.426562,2.52109 0.288018,0.55782 0.716403,0.83672 1.285156,0.83672 0.572392,0 1.000777,-0.2789 1.285157,-0.83672 0.288015,-0.56145 0.432026,-1.40182 0.432031,-2.52109 -5e-6,-1.12291 -0.144016,-1.96327 -0.432031,-2.52109 -0.28438,-0.56145 -0.712765,-0.84218 -1.285157,-0.84219 m 0,-0.875 c 0.9151,1e-5 1.613276,0.36277 2.094532,1.08828 0.484889,0.72188 0.727337,1.77188 0.727343,3.15 -6e-6,1.37448 -0.242454,2.42448 -0.727343,3.15 -0.481256,0.72188 -1.179432,1.08281 -2.094532,1.08281 -0.915106,0 -1.615106,-0.36093 -2.1,-1.08281 -0.481251,-0.72552 -0.721875,-1.77552 -0.721875,-3.15 0,-1.37812 0.240624,-2.42812 0.721875,-3.15 0.484894,-0.72551 1.184894,-1.08827 2.1,-1.08828"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4688"
+ inkscape:connector-curvature="0" /><path
+ d="m -46.88017,218.74757 0,2.99141 1.771875,0 c 0.594267,0 1.033589,-0.12214 1.317969,-0.36641 0.288015,-0.24791 0.432025,-0.62526 0.432031,-1.13203 -6e-6,-0.51041 -0.144016,-0.88593 -0.432031,-1.12656 -0.28438,-0.24427 -0.723702,-0.36641 -1.317969,-0.36641 l -1.771875,0 m 0,-3.35781 0,2.46094 1.635157,0 c 0.539578,0 0.94062,-0.10026 1.203124,-0.30079 0.266141,-0.20416 0.399214,-0.51405 0.399219,-0.92968 -5e-6,-0.41198 -0.133078,-0.72005 -0.399219,-0.92422 -0.262504,-0.20416 -0.663546,-0.30624 -1.203124,-0.30625 l -1.635157,0 m -1.104687,-0.90781 2.821875,0 c 0.842182,0 1.49114,0.175 1.946875,0.525 0.455723,0.35 0.683587,0.84766 0.683593,1.49296 -6e-6,0.49949 -0.116673,0.89688 -0.35,1.19219 -0.233339,0.29532 -0.576047,0.47943 -1.028125,0.55235 0.543224,0.11667 0.964317,0.36094 1.263282,0.73281 0.302597,0.36823 0.453899,0.82943 0.453906,1.38359 -7e-6,0.72917 -0.247923,1.29245 -0.74375,1.68985 -0.495839,0.39739 -1.201307,0.59609 -2.116406,0.59609 l -2.93125,0 0,-8.16484"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4690"
+ inkscape:connector-curvature="0" /><path
+ d="m -40.093445,221.25773 1.153906,0 0,1.38906 -1.153906,0 0,-1.38906 m 0,-4.40235 1.153906,0 0,1.38907 -1.153906,0 0,-1.38907"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4692"
+ inkscape:connector-curvature="0" /><path
+ d="m -35.472348,221.7171 3.855469,0 0,0.92969 -5.184375,0 0,-0.92969 c 0.419269,-0.43385 0.989842,-1.01536 1.711718,-1.74453 0.725518,-0.73281 1.181247,-1.20494 1.367188,-1.41641 0.353641,-0.39739 0.599735,-0.7328 0.738281,-1.00625 0.142183,-0.27707 0.213277,-0.54869 0.213281,-0.81484 -4e-6,-0.43385 -0.153129,-0.78749 -0.459375,-1.06094 -0.302608,-0.27343 -0.69818,-0.41015 -1.186718,-0.41015 -0.346357,0 -0.712763,0.0602 -1.099219,0.18047 -0.382814,0.12032 -0.79297,0.30261 -1.230469,0.54687 l 0,-1.11562 c 0.444791,-0.17864 0.860415,-0.31354 1.246875,-0.40469 0.386456,-0.0911 0.740101,-0.13671 1.060938,-0.13672 0.845829,1e-5 1.520307,0.21147 2.023437,0.63437 0.503119,0.42293 0.754682,0.98803 0.754688,1.69532 -6e-6,0.33542 -0.06381,0.65443 -0.191407,0.95703 -0.123964,0.29896 -0.351828,0.65261 -0.683593,1.06094 -0.09115,0.10573 -0.380995,0.41198 -0.869532,0.91875 -0.488545,0.50312 -1.177607,1.20859 -2.067187,2.1164"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4694"
+ inkscape:connector-curvature="0" /><path
+ d="m -29.281732,214.48195 4.336718,0 0,0.92968 -3.324999,0 0,2.00157 c 0.160414,-0.0547 0.32083,-0.0948 0.48125,-0.12032 0.160413,-0.0292 0.32083,-0.0437 0.48125,-0.0437 0.911454,1e-5 1.633328,0.24975 2.165624,0.74922 0.532286,0.49949 0.798432,1.17579 0.798438,2.02891 -6e-6,0.87865 -0.273443,1.56224 -0.820313,2.05078 -0.546879,0.4849 -1.317972,0.72734 -2.313281,0.72734 -0.342711,0 -0.69271,-0.0292 -1.05,-0.0875 -0.353647,-0.0583 -0.720053,-0.14583 -1.099218,-0.2625 l 0,-1.11015 c 0.328123,0.17864 0.667186,0.31172 1.017187,0.39922 0.349998,0.0875 0.72005,0.13125 1.110156,0.13125 0.630726,0 1.130204,-0.16589 1.498438,-0.49766 0.368224,-0.33177 0.552338,-0.78203 0.552343,-1.35078 -5e-6,-0.56875 -0.184119,-1.01901 -0.552343,-1.35078 -0.368234,-0.33177 -0.867712,-0.49765 -1.498438,-0.49766 -0.295315,1e-5 -0.590627,0.0328 -0.885937,0.0984 -0.291669,0.0656 -0.590627,0.16771 -0.896875,0.30625 l 0,-4.10156"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4696"
+ inkscape:connector-curvature="0" /><path
+ d="m -22.150476,214.48195 4.336719,0 0,0.92968 -3.325,0 0,2.00157 c 0.160414,-0.0547 0.32083,-0.0948 0.48125,-0.12032 0.160413,-0.0292 0.32083,-0.0437 0.48125,-0.0437 0.911454,1e-5 1.633328,0.24975 2.165625,0.74922 0.532285,0.49949 0.798431,1.17579 0.798437,2.02891 -6e-6,0.87865 -0.273443,1.56224 -0.820312,2.05078 -0.54688,0.4849 -1.317973,0.72734 -2.313282,0.72734 -0.342711,0 -0.69271,-0.0292 -1.05,-0.0875 -0.353647,-0.0583 -0.720053,-0.14583 -1.099218,-0.2625 l 0,-1.11015 c 0.328123,0.17864 0.667186,0.31172 1.017187,0.39922 0.349998,0.0875 0.72005,0.13125 1.110156,0.13125 0.630726,0 1.130205,-0.16589 1.498438,-0.49766 0.368224,-0.33177 0.552339,-0.78203 0.552344,-1.35078 -5e-6,-0.56875 -0.18412,-1.01901 -0.552344,-1.35078 -0.368233,-0.33177 -0.867712,-0.49765 -1.498438,-0.49766 -0.295315,1e-5 -0.590627,0.0328 -0.885937,0.0984 -0.291669,0.0656 -0.590627,0.16771 -0.896875,0.30625 l 0,-4.10156"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4698"
+ inkscape:connector-curvature="0" /><path
+ d="m -198.20594,228.18992 0,1.07734 c -0.41928,-0.20051 -0.81485,-0.34999 -1.18672,-0.44844 -0.37188,-0.0984 -0.73099,-0.14765 -1.07734,-0.14765 -0.60157,0 -1.06641,0.11667 -1.39454,0.35 -0.32448,0.23334 -0.48672,0.56511 -0.48671,0.99531 -1e-5,0.36094 0.10755,0.63438 0.32265,0.82031 0.21875,0.1823 0.63073,0.32995 1.23594,0.44297 l 0.66719,0.13672 c 0.82395,0.15677 1.43098,0.43386 1.82109,0.83125 0.39374,0.39375 0.59062,0.9224 0.59063,1.58594 -1e-5,0.79114 -0.26616,1.39088 -0.79844,1.79922 -0.52865,0.40833 -1.30521,0.6125 -2.32969,0.6125 -0.38646,0 -0.79844,-0.0437 -1.23594,-0.13125 -0.43385,-0.0875 -0.88411,-0.21693 -1.35078,-0.38829 l 0,-1.1375 c 0.44844,0.25157 0.88776,0.44115 1.31797,0.56875 0.43021,0.12761 0.85312,0.19141 1.26875,0.19141 0.63073,0 1.11744,-0.12396 1.46016,-0.37187 0.3427,-0.24792 0.51405,-0.60157 0.51406,-1.06094 -1e-5,-0.40104 -0.12396,-0.71458 -0.37188,-0.94063 -0.24427,-0.22604 -0.64714,-0.39557 -1.20859,-0.50859 l -0.67266,-0.13125 c -0.82396,-0.16406 -1.42005,-0.42109 -1.78828,-0.77109 -0.36823,-0.35 -0.55234,-0.83672 -0.55234,-1.46016 0,-0.72187 0.25338,-1.29062 0.76016,-1.70625 0.51041,-0.41562 1.21223,-0.62343 2.10546,-0.62344 0.38281,1e-5 0.77292,0.0346 1.17032,0.10391 0.39739,0.0693 0.8039,0.17318 1.21953,0.31172"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4700"
+ inkscape:connector-curvature="0" /><path
+ d="m -195.03954,228.22273 0,1.73906 2.07266,0 0,0.78203 -2.07266,0 0,3.325 c 0,0.49948 0.0674,0.82032 0.20235,0.9625 0.13854,0.14219 0.41744,0.21329 0.83672,0.21328 l 1.03359,0 0,0.84219 -1.03359,0 c -0.77657,0 -1.3125,-0.14401 -1.60782,-0.43203 -0.29531,-0.29167 -0.44297,-0.82031 -0.44296,-1.58594 l 0,-3.325 -0.73829,0 0,-0.78203 0.73829,0 0,-1.73906 1.01171,0"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4702"
+ inkscape:connector-curvature="0" /><path
+ d="m -188.08875,230.90242 c -0.11303,-0.0656 -0.23699,-0.11302 -0.37188,-0.14219 -0.13125,-0.0328 -0.27709,-0.0492 -0.4375,-0.0492 -0.56875,1e-5 -1.00625,0.18594 -1.3125,0.55781 -0.30261,0.36824 -0.45391,0.89871 -0.45391,1.59141 l 0,3.22656 -1.01171,0 0,-6.125 1.01171,0 0,0.95156 c 0.21146,-0.37186 0.48672,-0.64713 0.82579,-0.82578 0.33906,-0.18228 0.75103,-0.27343 1.23593,-0.27343 0.0693,0 0.14583,0.005 0.22969,0.0164 0.0839,0.007 0.17682,0.0201 0.27891,0.0383 l 0.005,1.0336"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4704"
+ inkscape:connector-curvature="0" /><path
+ d="m -184.8786,230.66726 c -0.53958,1e-5 -0.96615,0.21146 -1.27969,0.63438 -0.31354,0.41927 -0.47031,0.99531 -0.47031,1.72812 0,0.73282 0.15495,1.31068 0.46485,1.73359 0.31353,0.41928 0.74192,0.62891 1.28515,0.62891 0.53594,0 0.96067,-0.21146 1.27422,-0.63437 0.31354,-0.42292 0.47031,-0.99896 0.47031,-1.72813 0,-0.72552 -0.15677,-1.29973 -0.47031,-1.72266 -0.31355,-0.42655 -0.73828,-0.63983 -1.27422,-0.63984 m 0,-0.85312 c 0.875,0 1.56224,0.28438 2.06172,0.85312 0.49947,0.56876 0.74921,1.35625 0.74922,2.3625 -1e-5,1.00261 -0.24975,1.79011 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.85313 -2.06172,0.85313 -0.87865,0 -1.56771,-0.28438 -2.06719,-0.85313 -0.49583,-0.57239 -0.74375,-1.35989 -0.74375,-2.3625 0,-1.00625 0.24792,-1.79374 0.74375,-2.3625 0.49948,-0.56874 1.18854,-0.85312 2.06719,-0.85312"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4706"
+ inkscape:connector-curvature="0" /><path
+ d="m -180.4325,227.57742 1.01171,0 0,5.02578 3.00235,-2.64141 1.28515,0 -3.24843,2.86563 3.38515,3.25937 -1.3125,0 -3.11172,-2.9914 0,2.9914 -1.01171,0 0,-8.50937"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4708"
+ inkscape:connector-curvature="0" /><path
+ d="m -169.05204,232.77273 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22135 0.62344,1.58593 0.37552,0.36094 0.89687,0.54141 1.56406,0.54141 0.38646,0 0.76015,-0.0474 1.1211,-0.14219 0.36457,-0.0948 0.72551,-0.23697 1.08281,-0.42656 l 0,0.95156 c -0.36095,0.15313 -0.731,0.26979 -1.11016,0.35 -0.37917,0.0802 -0.7638,0.12032 -1.1539,0.12032 -0.97709,0 -1.75183,-0.28438 -2.32422,-0.85313 -0.56875,-0.56875 -0.85313,-1.33802 -0.85313,-2.30781 0,-1.0026 0.26979,-1.79739 0.80938,-2.38438 0.54322,-0.59062 1.27421,-0.88593 2.19297,-0.88593 0.82395,0 1.47473,0.26615 1.95234,0.79843 0.48124,0.52865 0.72187,1.24871 0.72187,2.16016 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16224,-0.98984 -0.46484,-1.31797 -0.29896,-0.32812 -0.69636,-0.49218 -1.19219,-0.49219 -0.56146,1e-5 -1.01172,0.1586 -1.35078,0.47578 -0.33542,0.31719 -0.52865,0.76381 -0.57969,1.33985 l 3.5875,-0.005"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4710"
+ inkscape:connector-curvature="0" /><path
+ d="m -164.42,229.96179 1.00625,0 1.25781,4.77969 1.25234,-4.77969 1.18672,0 1.25781,4.77969 1.25235,-4.77969 1.00625,0 -1.60235,6.125 -1.18671,0 -1.31797,-5.02031 -1.32344,5.02031 -1.18672,0 -1.60234,-6.125"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4712"
+ inkscape:connector-curvature="0" /><path
+ d="m -149.43016,232.77273 0,0.49219 -4.62656,0 c 0.0437,0.69271 0.25156,1.22135 0.62343,1.58593 0.37552,0.36094 0.89687,0.54141 1.56407,0.54141 0.38645,0 0.76015,-0.0474 1.12109,-0.14219 0.36458,-0.0948 0.72551,-0.23697 1.08281,-0.42656 l 0,0.95156 c -0.36094,0.15313 -0.73099,0.26979 -1.11015,0.35 -0.37918,0.0802 -0.76381,0.12032 -1.15391,0.12032 -0.97709,0 -1.75183,-0.28438 -2.32422,-0.85313 -0.56875,-0.56875 -0.85313,-1.33802 -0.85312,-2.30781 -1e-5,-1.0026 0.26979,-1.79739 0.80937,-2.38438 0.54323,-0.59062 1.27422,-0.88593 2.19297,-0.88593 0.82395,0 1.47473,0.26615 1.95234,0.79843 0.48125,0.52865 0.72187,1.24871 0.72188,2.16016 m -1.00625,-0.29531 c -0.007,-0.55052 -0.16225,-0.98984 -0.46485,-1.31797 -0.29896,-0.32812 -0.69635,-0.49218 -1.19218,-0.49219 -0.56146,1e-5 -1.01172,0.1586 -1.35078,0.47578 -0.33542,0.31719 -0.52865,0.76381 -0.57969,1.33985 l 3.5875,-0.005"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4714"
+ inkscape:connector-curvature="0" /><path
+ d="m -147.7786,229.96179 1.00625,0 0,6.125 -1.00625,0 0,-6.125 m 0,-2.38437 1.00625,0 0,1.27422 -1.00625,0 0,-1.27422"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4716"
+ inkscape:connector-curvature="0" /><path
+ d="m -140.64188,232.9532 c -1e-5,-0.72916 -0.15131,-1.29427 -0.45391,-1.69531 -0.29896,-0.40104 -0.72005,-0.60156 -1.26328,-0.60157 -0.53958,1e-5 -0.96068,0.20053 -1.26328,0.60157 -0.29896,0.40104 -0.44844,0.96615 -0.44844,1.69531 0,0.72552 0.14948,1.2888 0.44844,1.68984 0.3026,0.40104 0.7237,0.60157 1.26328,0.60156 0.54323,1e-5 0.96432,-0.20052 1.26328,-0.60156 0.3026,-0.40104 0.4539,-0.96432 0.45391,-1.68984 m 1.00625,2.37344 c -1e-5,1.0427 -0.23152,1.81744 -0.69453,2.32421 -0.46303,0.51042 -1.17214,0.76563 -2.12735,0.76563 -0.35364,0 -0.68724,-0.0274 -1.00078,-0.082 -0.31354,-0.0511 -0.61797,-0.13125 -0.91328,-0.24063 l 0,-0.9789 c 0.29531,0.16041 0.58698,0.2789 0.875,0.35547 0.28802,0.0766 0.58151,0.11484 0.88047,0.11484 0.65989,0 1.1539,-0.17318 1.48203,-0.51953 0.32812,-0.34271 0.49218,-0.86224 0.49219,-1.5586 l 0,-0.49765 c -0.20782,0.36094 -0.47396,0.63073 -0.79844,0.80937 -0.32448,0.17865 -0.71276,0.26797 -1.16484,0.26797 -0.75105,0 -1.35625,-0.2862 -1.81563,-0.85859 -0.45937,-0.5724 -0.68906,-1.33073 -0.68906,-2.275 0,-0.94791 0.22969,-1.70807 0.68906,-2.28047 0.45938,-0.57239 1.06458,-0.85859 1.81563,-0.85859 0.45208,0 0.84036,0.0893 1.16484,0.26796 0.32448,0.17866 0.59062,0.44845 0.79844,0.80938 l 0,-0.92969 1.00625,0 0,5.36485"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4718"
+ inkscape:connector-curvature="0" /><path
+ d="m -132.47157,232.38992 0,3.69687 -1.00625,0 0,-3.66406 c -1e-5,-0.57968 -0.11303,-1.01354 -0.33906,-1.30156 -0.22605,-0.28802 -0.56511,-0.43203 -1.01719,-0.43203 -0.54323,0 -0.97162,0.17318 -1.28516,0.51953 -0.31354,0.34636 -0.47031,0.81849 -0.47031,1.4164 l 0,3.46172 -1.01172,0 0,-8.50937 1.01172,0 0,3.33593 c 0.24062,-0.36822 0.52317,-0.64348 0.84766,-0.82578 0.32812,-0.18228 0.70546,-0.27343 1.13203,-0.27343 0.70364,0 1.23593,0.21875 1.59687,0.65625 0.36093,0.43386 0.5414,1.0737 0.54141,1.91953"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4720"
+ inkscape:connector-curvature="0" /><path
+ d="m -129.45829,228.22273 0,1.73906 2.07266,0 0,0.78203 -2.07266,0 0,3.325 c 0,0.49948 0.0675,0.82032 0.20234,0.9625 0.13854,0.14219 0.41745,0.21329 0.83672,0.21328 l 1.0336,0 0,0.84219 -1.0336,0 c -0.77656,0 -1.3125,-0.14401 -1.60781,-0.43203 -0.29531,-0.29167 -0.44297,-0.82031 -0.44297,-1.58594 l 0,-3.325 -0.73828,0 0,-0.78203 0.73828,0 0,-1.73906 1.01172,0"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4722"
+ inkscape:connector-curvature="0" /><path
+ d="m -125.79969,234.69773 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906 m 0,-4.40234 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4724"
+ inkscape:connector-curvature="0" /><path
+ d="m -116.20204,228.64929 c -0.56875,1e-5 -0.99713,0.28074 -1.28515,0.84219 -0.28438,0.55782 -0.42657,1.39818 -0.42656,2.52109 -1e-5,1.11928 0.14218,1.95964 0.42656,2.5211 0.28802,0.55781 0.7164,0.83672 1.28515,0.83672 0.5724,0 1.00078,-0.27891 1.28516,-0.83672 0.28802,-0.56146 0.43203,-1.40182 0.43203,-2.5211 0,-1.12291 -0.14401,-1.96327 -0.43203,-2.52109 -0.28438,-0.56145 -0.71276,-0.84218 -1.28516,-0.84219 m 0,-0.875 c 0.9151,1e-5 1.61328,0.36277 2.09454,1.08828 0.48489,0.72188 0.72733,1.77188 0.72734,3.15 -1e-5,1.37449 -0.24245,2.42448 -0.72734,3.15 -0.48126,0.72188 -1.17944,1.08282 -2.09454,1.08282 -0.9151,0 -1.6151,-0.36094 -2.1,-1.08282 -0.48125,-0.72552 -0.72187,-1.77551 -0.72187,-3.15 0,-1.37812 0.24062,-2.42812 0.72187,-3.15 0.4849,-0.72551 1.1849,-1.08827 2.1,-1.08828"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4726"
+ inkscape:connector-curvature="0" /><path
+ d="m -111.43329,234.69773 1.15391,0 0,1.38906 -1.15391,0 0,-1.38906"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4728"
+ inkscape:connector-curvature="0" /><path
+ d="m -105.50516,228.64929 c -0.56875,1e-5 -0.99714,0.28074 -1.28516,0.84219 -0.28437,0.55782 -0.42656,1.39818 -0.42656,2.52109 0,1.11928 0.14219,1.95964 0.42656,2.5211 0.28802,0.55781 0.71641,0.83672 1.28516,0.83672 0.57239,0 1.00078,-0.27891 1.28516,-0.83672 0.28801,-0.56146 0.43202,-1.40182 0.43203,-2.5211 -1e-5,-1.12291 -0.14402,-1.96327 -0.43203,-2.52109 -0.28438,-0.56145 -0.71277,-0.84218 -1.28516,-0.84219 m 0,-0.875 c 0.9151,1e-5 1.61328,0.36277 2.09453,1.08828 0.48489,0.72188 0.72734,1.77188 0.72735,3.15 -1e-5,1.37449 -0.24246,2.42448 -0.72735,3.15 -0.48125,0.72188 -1.17943,1.08282 -2.09453,1.08282 -0.91511,0 -1.61511,-0.36094 -2.1,-1.08282 -0.48125,-0.72552 -0.72187,-1.77551 -0.72187,-3.15 0,-1.37812 0.24062,-2.42812 0.72187,-3.15 0.48489,-0.72551 1.18489,-1.08827 2.1,-1.08828"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4730"
+ inkscape:connector-curvature="0" /><path
+ d="m -100.545,235.1571 1.804683,0 0,-6.2289 -1.963283,0.39375 0,-1.00625 1.952346,-0.39375 1.104687,0 0,7.23515 1.804688,0 0,0.92969 -4.703121,0 0,-0.92969"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4732"
+ inkscape:connector-curvature="0" /><path
+ d="m -88.9786,231.13757 c 0.251557,-0.45207 0.552338,-0.78567 0.902344,-1.00078 0.349993,-0.2151 0.761972,-0.32265 1.235938,-0.32265 0.638012,0 1.130199,0.22422 1.476562,0.67265 0.346344,0.4448 0.519521,1.07917 0.519531,1.90313 l 0,3.69687 -1.011718,0 0,-3.66406 c -9e-6,-0.58698 -0.103916,-1.02265 -0.311719,-1.30703 -0.207821,-0.28437 -0.525008,-0.42656 -0.951563,-0.42656 -0.521361,0 -0.93334,0.17318 -1.235937,0.51953 -0.30261,0.34636 -0.453912,0.81849 -0.453906,1.4164 l 0,3.46172 -1.011719,0 0,-3.66406 c -5e-6,-0.59062 -0.103911,-1.0263 -0.311719,-1.30703 -0.207817,-0.28437 -0.52865,-0.42656 -0.9625,-0.42656 -0.514066,0 -0.922398,0.175 -1.225,0.525 -0.302606,0.34635 -0.453908,0.81667 -0.453906,1.41093 l 0,3.46172 -1.011719,0 0,-6.125 1.011719,0 0,0.95156 c 0.229685,-0.37551 0.504945,-0.65259 0.825781,-0.83125 0.32083,-0.17864 0.70182,-0.26796 1.142969,-0.26796 0.444787,0 0.82213,0.11302 1.132031,0.33906 0.313536,0.22605 0.545047,0.55417 0.694531,0.98437"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4734"
+ inkscape:connector-curvature="0" /><path
+ d="m -78.062973,231.13757 c 0.251556,-0.45207 0.552337,-0.78567 0.902344,-1.00078 0.349993,-0.2151 0.761971,-0.32265 1.235937,-0.32265 0.638012,0 1.130199,0.22422 1.476563,0.67265 0.346344,0.4448 0.519521,1.07917 0.519531,1.90313 l 0,3.69687 -1.011719,0 0,-3.66406 c -9e-6,-0.58698 -0.103915,-1.02265 -0.311719,-1.30703 -0.207821,-0.28437 -0.525008,-0.42656 -0.951562,-0.42656 -0.521361,0 -0.93334,0.17318 -1.235938,0.51953 -0.30261,0.34636 -0.453912,0.81849 -0.453906,1.4164 l 0,3.46172 -1.011719,0 0,-3.66406 c -5e-6,-0.59062 -0.103911,-1.0263 -0.311718,-1.30703 -0.207817,-0.28437 -0.52865,-0.42656 -0.9625,-0.42656 -0.514066,0 -0.922399,0.175 -1.225,0.525 -0.302607,0.34635 -0.453909,0.81667 -0.453907,1.41093 l 0,3.46172 -1.011718,0 0,-6.125 1.011718,0 0,0.95156 c 0.229686,-0.37551 0.504946,-0.65259 0.825782,-0.83125 0.32083,-0.17864 0.701819,-0.26796 1.142968,-0.26796 0.444788,0 0.822131,0.11302 1.132032,0.33906 0.313536,0.22605 0.545046,0.55417 0.694531,0.98437"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4736"
+ inkscape:connector-curvature="0" /></g><g
+ style="font-size:9.60000038px"
+ id="text4851-7"><path
+ d="m -209.90514,80.585301 6.90703,0 0,0.929688 -2.89844,0 0,7.235156 -1.11015,0 0,-7.235156 -2.89844,0 0,-0.929688"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4739"
+ inkscape:connector-curvature="0" /><path
+ d="m -201.48874,83.330614 c -0.53958,5e-6 -0.96614,0.211463 -1.27968,0.634375 -0.31355,0.419275 -0.47032,0.995316 -0.47032,1.728125 0,0.732815 0.15495,1.310679 0.46485,1.733593 0.31354,0.419272 0.74192,0.628907 1.28515,0.628907 0.53594,0 0.96068,-0.211458 1.27422,-0.634375 0.31354,-0.422915 0.47031,-0.998956 0.47032,-1.728125 -1e-5,-0.725517 -0.15678,-1.299735 -0.47032,-1.722656 -0.31354,-0.426558 -0.73828,-0.639839 -1.27422,-0.639844 m 0,-0.853125 c 0.875,6e-6 1.56224,0.284381 2.06172,0.853125 0.49948,0.568755 0.74922,1.356254 0.74922,2.3625 0,1.002606 -0.24974,1.790105 -0.74922,2.3625 -0.49948,0.56875 -1.18672,0.853125 -2.06172,0.853125 -0.87864,0 -1.56771,-0.284375 -2.06718,-0.853125 -0.49584,-0.572395 -0.74375,-1.359894 -0.74375,-2.3625 0,-1.006246 0.24791,-1.793745 0.74375,-2.3625 0.49947,-0.568744 1.18854,-0.853119 2.06718,-0.853125"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4741"
+ inkscape:connector-curvature="0" /><path
+ d="m -193.39499,80.585301 5.1625,0 0,0.929688 -4.05781,0 0,2.417187 3.88828,0 0,0.929688 -3.88828,0 0,2.958593 4.15625,0 0,0.929688 -5.26094,0 0,-8.164844"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4743"
+ inkscape:connector-curvature="0" /><path
+ d="m -181.25983,85.05327 0,3.696875 -1.00625,0 0,-3.664062 c 0,-0.579684 -0.11302,-1.013537 -0.33906,-1.301563 -0.22605,-0.288016 -0.56511,-0.432026 -1.01719,-0.432031 -0.54323,5e-6 -0.97162,0.173182 -1.28516,0.519531 -0.31354,0.346359 -0.47031,0.818494 -0.47031,1.416406 l 0,3.461719 -1.01172,0 0,-6.125 1.01172,0 0,0.951563 c 0.24062,-0.368224 0.52318,-0.643484 0.84766,-0.825782 0.32812,-0.182285 0.70546,-0.273431 1.13203,-0.273437 0.70364,6e-6 1.23593,0.218756 1.59687,0.65625 0.36094,0.433859 0.5414,1.073702 0.54141,1.919531"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4745"
+ inkscape:connector-curvature="0" /><path
+ d="m -175.21139,85.616551 c -1e-5,-0.729163 -0.15131,-1.294266 -0.45391,-1.695312 -0.29896,-0.401037 -0.72005,-0.601557 -1.26328,-0.601563 -0.53959,6e-6 -0.96068,0.200526 -1.26328,0.601563 -0.29896,0.401046 -0.44844,0.966149 -0.44844,1.695312 0,0.725523 0.14948,1.288804 0.44844,1.689844 0.3026,0.401043 0.72369,0.601563 1.26328,0.601562 0.54323,10e-7 0.96432,-0.200519 1.26328,-0.601562 0.3026,-0.40104 0.4539,-0.964321 0.45391,-1.689844 m 1.00625,2.373438 c -1e-5,1.042708 -0.23152,1.817447 -0.69453,2.324218 -0.46303,0.510415 -1.17214,0.765623 -2.12735,0.765625 -0.35365,-2e-6 -0.68724,-0.02735 -1.00078,-0.08203 -0.31354,-0.05104 -0.61797,-0.131252 -0.91328,-0.240625 l 0,-0.978906 c 0.29531,0.160415 0.58698,0.278905 0.875,0.355469 0.28802,0.07656 0.58151,0.114842 0.88047,0.114843 0.65989,-10e-7 1.1539,-0.173178 1.48203,-0.519531 0.32812,-0.342709 0.49218,-0.862239 0.49219,-1.558594 l 0,-0.497656 c -0.20782,0.360938 -0.47396,0.63073 -0.79844,0.809375 -0.32448,0.178646 -0.71276,0.267969 -1.16484,0.267969 -0.75105,0 -1.35625,-0.286198 -1.81563,-0.858594 -0.45937,-0.572394 -0.68906,-1.330727 -0.68906,-2.275 0,-0.947912 0.22969,-1.708068 0.68906,-2.280468 0.45938,-0.57239 1.06458,-0.858588 1.81563,-0.858594 0.45208,6e-6 0.84036,0.08933 1.16484,0.267969 0.32448,0.178651 0.59062,0.448443 0.79844,0.809375 l 0,-0.929688 1.00625,0 0,5.364844"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4747"
+ inkscape:connector-curvature="0" /><path
+ d="m -168.58327,83.56577 c -0.11302,-0.06562 -0.23698,-0.113015 -0.37187,-0.142187 -0.13126,-0.03281 -0.27709,-0.04921 -0.4375,-0.04922 -0.56875,5e-6 -1.00625,0.185942 -1.3125,0.557812 -0.30261,0.368234 -0.45391,0.898702 -0.45391,1.591407 l 0,3.226562 -1.01172,0 0,-6.125 1.01172,0 0,0.951563 c 0.21146,-0.37187 0.48672,-0.64713 0.82578,-0.825782 0.33906,-0.182285 0.75104,-0.273431 1.23594,-0.273437 0.0693,6e-6 0.14583,0.0055 0.22969,0.01641 0.0838,0.0073 0.17682,0.02006 0.2789,0.03828 l 0.005,1.033594"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4749"
+ inkscape:connector-curvature="0" /><path
+ d="m -164.73327,85.671239 c -0.81302,3e-6 -1.3763,0.09297 -1.68984,0.278906 -0.31355,0.18594 -0.47032,0.503127 -0.47031,0.951562 -1e-5,0.357294 0.11666,0.641668 0.35,0.853125 0.23697,0.207814 0.55781,0.31172 0.9625,0.311719 0.5578,10e-7 1.00442,-0.196874 1.33984,-0.590625 0.33906,-0.397394 0.50859,-0.924216 0.50859,-1.580468 l 0,-0.224219 -1.00078,0 m 2.00703,-0.415625 0,3.494531 -1.00625,0 0,-0.929688 c -0.22969,0.371876 -0.51589,0.647136 -0.85859,0.825782 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62709,0 -1.12657,-0.175 -1.49844,-0.525 -0.36823,-0.353645 -0.55234,-0.82578 -0.55234,-1.416407 0,-0.68906 0.22968,-1.20859 0.68906,-1.558593 0.46302,-0.349997 1.15208,-0.524996 2.06719,-0.525 l 1.41093,0 0,-0.09844 c 0,-0.463016 -0.15313,-0.820307 -0.45937,-1.071875 -0.30261,-0.255203 -0.72917,-0.382807 -1.27969,-0.382812 -0.35,5e-6 -0.69089,0.04193 -1.02266,0.125781 -0.33177,0.08386 -0.65078,0.209641 -0.95703,0.377344 l 0,-0.929688 c 0.36823,-0.142181 0.72552,-0.24791 1.07188,-0.317187 0.34635,-0.07291 0.68359,-0.109369 1.01172,-0.109375 0.88593,6e-6 1.54765,0.229693 1.98515,0.689062 0.4375,0.45938 0.65625,1.155734 0.65625,2.089063"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4751"
+ inkscape:connector-curvature="0" /><path
+ d="m -161.36999,82.625145 1.06641,0 1.91406,5.140625 1.91407,-5.140625 1.0664,0 -2.29687,6.125 -1.36719,0 -2.29688,-6.125"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4753"
+ inkscape:connector-curvature="0" /><path
+ d="m -148.78092,85.436083 0,0.492187 -4.62657,0 c 0.0437,0.69271 0.25156,1.221356 0.62344,1.585937 0.37552,0.360939 0.89687,0.541407 1.56406,0.541407 0.38646,0 0.76016,-0.0474 1.1211,-0.142188 0.36458,-0.09479 0.72551,-0.236978 1.08281,-0.426562 l 0,0.951562 c -0.36094,0.153125 -0.73099,0.269792 -1.11016,0.35 -0.37917,0.08021 -0.7638,0.120313 -1.1539,0.120313 -0.97709,0 -1.75183,-0.284375 -2.32422,-0.853125 -0.56875,-0.568749 -0.85313,-1.338019 -0.85313,-2.307813 0,-1.0026 0.26979,-1.797391 0.80938,-2.384375 0.54323,-0.590619 1.27422,-0.885931 2.19297,-0.885937 0.82395,6e-6 1.47473,0.266152 1.95234,0.798437 0.48125,0.528651 0.72187,1.248702 0.72188,2.160157 m -1.00625,-0.295313 c -0.007,-0.550517 -0.16225,-0.989839 -0.46485,-1.317969 -0.29896,-0.328119 -0.69636,-0.492182 -1.19218,-0.492187 -0.56147,5e-6 -1.01173,0.158599 -1.35079,0.475781 -0.33541,0.317192 -0.52864,0.763806 -0.57968,1.339844 l 3.5875,-0.0055"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4755"
+ inkscape:connector-curvature="0" /><path
+ d="m -140.78014,85.671239 c -0.81302,3e-6 -1.3763,0.09297 -1.68984,0.278906 -0.31355,0.18594 -0.47032,0.503127 -0.47032,0.951562 0,0.357294 0.11667,0.641668 0.35,0.853125 0.23698,0.207814 0.55781,0.31172 0.9625,0.311719 0.55781,10e-7 1.00443,-0.196874 1.33985,-0.590625 0.33906,-0.397394 0.50859,-0.924216 0.50859,-1.580468 l 0,-0.224219 -1.00078,0 m 2.00703,-0.415625 0,3.494531 -1.00625,0 0,-0.929688 c -0.22969,0.371876 -0.51589,0.647136 -0.85859,0.825782 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62709,0 -1.12657,-0.175 -1.49844,-0.525 -0.36823,-0.353645 -0.55235,-0.82578 -0.55235,-1.416407 0,-0.68906 0.22969,-1.20859 0.68907,-1.558593 0.46302,-0.349997 1.15208,-0.524996 2.06718,-0.525 l 1.41094,0 0,-0.09844 c 0,-0.463016 -0.15313,-0.820307 -0.45937,-1.071875 -0.30261,-0.255203 -0.72917,-0.382807 -1.27969,-0.382812 -0.35,5e-6 -0.69089,0.04193 -1.02266,0.125781 -0.33177,0.08386 -0.65078,0.209641 -0.95703,0.377344 l 0,-0.929688 c 0.36823,-0.142181 0.72552,-0.24791 1.07188,-0.317187 0.34635,-0.07291 0.68359,-0.109369 1.01172,-0.109375 0.88593,6e-6 1.54765,0.229693 1.98515,0.689062 0.4375,0.45938 0.65625,1.155734 0.65625,2.089063"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4757"
+ inkscape:connector-curvature="0" /><path
+ d="m -131.60358,85.05327 0,3.696875 -1.00625,0 0,-3.664062 c -1e-5,-0.579684 -0.11303,-1.013537 -0.33907,-1.301563 -0.22604,-0.288016 -0.5651,-0.432026 -1.01718,-0.432031 -0.54324,5e-6 -0.97162,0.173182 -1.28516,0.519531 -0.31354,0.346359 -0.47031,0.818494 -0.47031,1.416406 l 0,3.461719 -1.01172,0 0,-6.125 1.01172,0 0,0.951563 c 0.24062,-0.368224 0.52317,-0.643484 0.84765,-0.825782 0.32813,-0.182285 0.70547,-0.273431 1.13204,-0.273437 0.70364,6e-6 1.23593,0.218756 1.59687,0.65625 0.36093,0.433859 0.5414,1.073702 0.54141,1.919531"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4759"
+ inkscape:connector-curvature="0" /><path
+ d="m -123.24733,81.673583 -1.49844,4.063281 3.00235,0 -1.50391,-4.063281 m -0.62344,-1.088282 1.25235,0 3.11172,8.164844 -1.14844,0 -0.74375,-2.094531 -3.68047,0 -0.74375,2.094531 -1.16484,0 3.11718,-8.164844"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4761"
+ inkscape:connector-curvature="0" /><path
+ d="m -114.81452,83.56577 c -0.11302,-0.06562 -0.23698,-0.113015 -0.37187,-0.142187 -0.13126,-0.03281 -0.27709,-0.04921 -0.4375,-0.04922 -0.56876,5e-6 -1.00626,0.185942 -1.3125,0.557812 -0.30261,0.368234 -0.45391,0.898702 -0.45391,1.591407 l 0,3.226562 -1.01172,0 0,-6.125 1.01172,0 0,0.951563 c 0.21146,-0.37187 0.48672,-0.64713 0.82578,-0.825782 0.33906,-0.182285 0.75104,-0.273431 1.23594,-0.273437 0.0693,6e-6 0.14583,0.0055 0.22969,0.01641 0.0838,0.0073 0.17682,0.02006 0.2789,0.03828 l 0.005,1.033594"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4763"
+ inkscape:connector-curvature="0" /><path
+ d="m -108.73873,85.436083 0,0.492187 -4.62657,0 c 0.0438,0.69271 0.25157,1.221356 0.62344,1.585937 0.37552,0.360939 0.89687,0.541407 1.56406,0.541407 0.38646,0 0.76016,-0.0474 1.1211,-0.142188 0.36458,-0.09479 0.72551,-0.236978 1.08281,-0.426562 l 0,0.951562 c -0.36094,0.153125 -0.73099,0.269792 -1.11016,0.35 -0.37917,0.08021 -0.7638,0.120313 -1.1539,0.120313 -0.97709,0 -1.75183,-0.284375 -2.32422,-0.853125 -0.56875,-0.568749 -0.85313,-1.338019 -0.85313,-2.307813 0,-1.0026 0.2698,-1.797391 0.80938,-2.384375 0.54323,-0.590619 1.27422,-0.885931 2.19297,-0.885937 0.82395,6e-6 1.47473,0.266152 1.95234,0.798437 0.48125,0.528651 0.72187,1.248702 0.72188,2.160157 m -1.00625,-0.295313 c -0.007,-0.550517 -0.16225,-0.989839 -0.46485,-1.317969 -0.29896,-0.328119 -0.69636,-0.492182 -1.19218,-0.492187 -0.56147,5e-6 -1.01173,0.158599 -1.35079,0.475781 -0.33541,0.317192 -0.52864,0.763806 -0.57968,1.339844 l 3.5875,-0.0055"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4765"
+ inkscape:connector-curvature="0" /><path
+ d="m -104.29264,85.671239 c -0.81303,3e-6 -1.37631,0.09297 -1.68985,0.278906 -0.31354,0.18594 -0.47031,0.503127 -0.47031,0.951562 0,0.357294 0.11666,0.641668 0.35,0.853125 0.23698,0.207814 0.55781,0.31172 0.9625,0.311719 0.55781,10e-7 1.00442,-0.196874 1.33984,-0.590625 0.33906,-0.397394 0.50859,-0.924216 0.5086,-1.580468 l 0,-0.224219 -1.00078,0 m 2.00703,-0.415625 0,3.494531 -1.00625,0 0,-0.929688 c -0.22969,0.371876 -0.51589,0.647136 -0.8586,0.825782 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62708,0 -1.12656,-0.175 -1.49844,-0.525 -0.36823,-0.353645 -0.55234,-0.82578 -0.55234,-1.416407 0,-0.68906 0.22969,-1.20859 0.68906,-1.558593 0.46302,-0.349997 1.15208,-0.524996 2.06719,-0.525 l 1.41094,0 0,-0.09844 c -1e-5,-0.463016 -0.15313,-0.820307 -0.45938,-1.071875 -0.30261,-0.255203 -0.72917,-0.382807 -1.27969,-0.382812 -0.35,5e-6 -0.69088,0.04193 -1.02265,0.125781 -0.33177,0.08386 -0.65078,0.209641 -0.95703,0.377344 l 0,-0.929688 c 0.36823,-0.142181 0.72552,-0.24791 1.07187,-0.317187 0.34635,-0.07291 0.68359,-0.109369 1.01172,-0.109375 0.88593,6e-6 1.54765,0.229693 1.98516,0.689062 0.43749,0.45938 0.65624,1.155734 0.65625,2.089063"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4767"
+ inkscape:connector-curvature="0" /><path
+ d="m -99.950455,87.361082 1.153906,0 0,1.389063 -1.153906,0 0,-1.389063 m 0,-4.402343 1.153906,0 0,1.389062 -1.153906,0 0,-1.389062"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4769"
+ inkscape:connector-curvature="0" /><path
+ d="m -208.77311,94.025304 4.69219,0 0,0.929687 -3.5875,0 0,2.40625 3.2375,0 0,0.929688 -3.2375,0 0,3.899221 -1.10469,0 0,-8.164846"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4771"
+ inkscape:connector-curvature="0" /><path
+ d="m -203.16217,96.065148 1.00625,0 0,6.125002 -1.00625,0 0,-6.125002 m 0,-2.384375 1.00625,0 0,1.274218 -1.00625,0 0,-1.274218"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4773"
+ inkscape:connector-curvature="0" /><path
+ d="m -200.04499,93.680773 1.00625,0 0,8.509377 -1.00625,0 0,-8.509377"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4775"
+ inkscape:connector-curvature="0" /><path
+ d="m -196.93874,93.680773 1.00625,0 0,8.509377 -1.00625,0 0,-8.509377"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4777"
+ inkscape:connector-curvature="0" /><path
+ d="m -184.10905,94.65421 0,1.164844 c -0.37188,-0.346348 -0.76928,-0.605202 -1.19219,-0.776563 -0.41927,-0.171347 -0.86589,-0.257024 -1.33984,-0.257031 -0.93334,7e-6 -1.64792,0.286205 -2.14375,0.858594 -0.49584,0.568756 -0.74375,1.392713 -0.74375,2.471875 0,1.075524 0.24791,1.899481 0.74375,2.471871 0.49583,0.56875 1.21041,0.85313 2.14375,0.85313 0.47395,0 0.92057,-0.0857 1.33984,-0.25703 0.42291,-0.17136 0.82031,-0.43021 1.19219,-0.77657 l 0,1.15391 c -0.38646,0.2625 -0.79662,0.45938 -1.23047,0.59063 -0.43021,0.13125 -0.88594,0.19687 -1.36719,0.19687 -1.23594,0 -2.20937,-0.37734 -2.92031,-1.13203 -0.71094,-0.75833 -1.0664,-1.791924 -1.0664,-3.100781 0,-1.312495 0.35546,-2.346088 1.0664,-3.100781 0.71094,-0.758326 1.68437,-1.137492 2.92031,-1.1375 0.48854,8e-6 0.94792,0.06563 1.37813,0.196875 0.43385,0.127612 0.84036,0.320841 1.21953,0.579687"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4779"
+ inkscape:connector-curvature="0" /><path
+ d="m -180.06218,96.770616 c -0.53958,6e-6 -0.96614,0.211464 -1.27968,0.634375 -0.31355,0.419275 -0.47032,0.995317 -0.47032,1.728125 0,0.732815 0.15495,1.310684 0.46485,1.733594 0.31354,0.41927 0.74192,0.62891 1.28515,0.62891 0.53594,0 0.96068,-0.21146 1.27422,-0.63438 0.31354,-0.42291 0.47031,-0.998955 0.47032,-1.728124 -10e-6,-0.725517 -0.15678,-1.299735 -0.47032,-1.722656 -0.31354,-0.426557 -0.73828,-0.639838 -1.27422,-0.639844 m 0,-0.853125 c 0.875,7e-6 1.56224,0.284381 2.06172,0.853125 0.49948,0.568755 0.74922,1.356254 0.74922,2.3625 0,1.002604 -0.24974,1.790104 -0.74922,2.362504 -0.49948,0.56875 -1.18672,0.85312 -2.06172,0.85312 -0.87864,0 -1.56771,-0.28437 -2.06718,-0.85312 -0.49584,-0.5724 -0.74375,-1.3599 -0.74375,-2.362504 0,-1.006246 0.24791,-1.793745 0.74375,-2.3625 0.49947,-0.568744 1.18854,-0.853118 2.06718,-0.853125"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4781"
+ inkscape:connector-curvature="0" /><path
+ d="m -175.58874,93.680773 1.00625,0 0,8.509377 -1.00625,0 0,-8.509377"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4783"
+ inkscape:connector-curvature="0" /><path
+ d="m -170.10905,96.770616 c -0.53959,6e-6 -0.96615,0.211464 -1.27969,0.634375 -0.31354,0.419275 -0.47031,0.995317 -0.47031,1.728125 0,0.732815 0.15495,1.310684 0.46484,1.733594 0.31354,0.41927 0.74193,0.62891 1.28516,0.62891 0.53593,0 0.96067,-0.21146 1.27422,-0.63438 0.31354,-0.42291 0.47031,-0.998955 0.47031,-1.728124 0,-0.725517 -0.15677,-1.299735 -0.47031,-1.722656 -0.31355,-0.426557 -0.73829,-0.639838 -1.27422,-0.639844 m 0,-0.853125 c 0.875,7e-6 1.56223,0.284381 2.06172,0.853125 0.49947,0.568755 0.74921,1.356254 0.74922,2.3625 -1e-5,1.002604 -0.24975,1.790104 -0.74922,2.362504 -0.49949,0.56875 -1.18672,0.85312 -2.06172,0.85312 -0.87865,0 -1.56771,-0.28437 -2.06719,-0.85312 -0.49583,-0.5724 -0.74375,-1.3599 -0.74375,-2.362504 0,-1.006246 0.24792,-1.793745 0.74375,-2.3625 0.49948,-0.568744 1.18854,-0.853118 2.06719,-0.853125"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4785"
+ inkscape:connector-curvature="0" /><path
+ d="m -162.08639,97.005772 c -0.11303,-0.06562 -0.23699,-0.113015 -0.37188,-0.142187 -0.13125,-0.03281 -0.27709,-0.04921 -0.4375,-0.04922 -0.56875,6e-6 -1.00625,0.185943 -1.3125,0.557813 -0.30261,0.368233 -0.45391,0.898702 -0.45391,1.591406 l 0,3.226566 -1.01171,0 0,-6.125003 1.01171,0 0,0.951562 c 0.21146,-0.371869 0.48672,-0.64713 0.82579,-0.825781 0.33905,-0.182286 0.75103,-0.273431 1.23593,-0.273438 0.0693,7e-6 0.14583,0.0055 0.22969,0.01641 0.0838,0.0073 0.17682,0.02006 0.27891,0.03828 l 0.005,1.033593"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4787"
+ inkscape:connector-curvature="0" /><path
+ d="m -157.19733,100.80108 1.15391,0 0,1.38907 -1.15391,0 0,-1.38907 m 0,-4.402339 1.15391,0 0,1.389063 -1.15391,0 0,-1.389063"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4789"
+ inkscape:connector-curvature="0" /><path
+ d="m -148.95593,98.290929 0,2.991401 1.77188,0 c 0.59427,1e-5 1.03359,-0.12213 1.31797,-0.3664 0.28801,-0.24792 0.43202,-0.62526 0.43203,-1.132033 -10e-6,-0.510413 -0.14402,-0.885934 -0.43203,-1.126562 -0.28438,-0.244267 -0.7237,-0.366402 -1.31797,-0.366406 l -1.77188,0 m 0,-3.357813 0,2.460938 1.63516,0 c 0.53958,5e-6 0.94062,-0.100256 1.20313,-0.300782 0.26614,-0.204161 0.39921,-0.514056 0.39921,-0.929687 0,-0.411973 -0.13307,-0.720045 -0.39921,-0.924219 -0.26251,-0.204159 -0.66355,-0.306242 -1.20313,-0.30625 l -1.63516,0 m -1.10468,-0.907812 2.82187,0 c 0.84218,8e-6 1.49114,0.175008 1.94688,0.525 0.45572,0.350007 0.68358,0.847663 0.68359,1.492969 -1e-5,0.499484 -0.11667,0.89688 -0.35,1.192187 -0.23334,0.295317 -0.57605,0.479432 -1.02812,0.552344 0.54322,0.116671 0.96431,0.360941 1.26328,0.732812 0.30259,0.368233 0.4539,0.82943 0.4539,1.383594 0,0.72917 -0.24792,1.29245 -0.74375,1.68984 -0.49584,0.3974 -1.2013,0.5961 -2.1164,0.5961 l -2.93125,0 0,-8.164846"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4791"
+ inkscape:connector-curvature="0" /><path
+ d="m -142.42624,93.680773 1.00625,0 0,8.509377 -1.00625,0 0,-8.509377"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4793"
+ inkscape:connector-curvature="0" /><path
+ d="m -136.5364,99.111241 c -0.81302,3e-6 -1.3763,0.09297 -1.68984,0.278906 -0.31354,0.185941 -0.47031,0.503128 -0.47031,0.951563 0,0.35729 0.11666,0.64167 0.35,0.85312 0.23698,0.20782 0.55781,0.31172 0.9625,0.31172 0.55781,0 1.00442,-0.19687 1.33984,-0.59062 0.33906,-0.3974 0.50859,-0.924218 0.5086,-1.58047 l 0,-0.224219 -1.00079,0 m 2.00704,-0.415625 0,3.494534 -1.00625,0 0,-0.92969 c -0.2297,0.37188 -0.51589,0.64714 -0.8586,0.82578 -0.34271,0.175 -0.76198,0.2625 -1.25781,0.2625 -0.62709,0 -1.12656,-0.175 -1.49844,-0.525 -0.36823,-0.35364 -0.55234,-0.82578 -0.55234,-1.41641 0,-0.689055 0.22969,-1.208586 0.68906,-1.558589 0.46302,-0.349996 1.15208,-0.524996 2.06719,-0.525 l 1.41094,0 0,-0.09844 c -1e-5,-0.463017 -0.15313,-0.820308 -0.45938,-1.071875 -0.30261,-0.255203 -0.72917,-0.382807 -1.27969,-0.382813 -0.35,6e-6 -0.69088,0.04193 -1.02265,0.125781 -0.33178,0.08386 -0.65079,0.209641 -0.95703,0.377344 l 0,-0.929687 c 0.36822,-0.142182 0.72551,-0.247911 1.07187,-0.317188 0.34635,-0.07291 0.68359,-0.109368 1.01172,-0.109375 0.88593,7e-6 1.54765,0.229694 1.98516,0.689063 0.43749,0.45938 0.65624,1.155733 0.65625,2.089062"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4795"
+ inkscape:connector-curvature="0" /><path
+ d="m -128.04343,96.300304 0,0.940625 c -0.28438,-0.156766 -0.57057,-0.273433 -0.85859,-0.35 -0.28438,-0.0802 -0.5724,-0.120307 -0.86406,-0.120313 -0.65261,6e-6 -1.15938,0.207818 -1.52031,0.623438 -0.36094,0.411983 -0.54141,0.99167 -0.54141,1.739062 0,0.747398 0.18047,1.328904 0.54141,1.744534 0.36093,0.41198 0.8677,0.61797 1.52031,0.61797 0.29166,0 0.57968,-0.0383 0.86406,-0.11485 0.28802,-0.0802 0.57421,-0.19869 0.85859,-0.35547 l 0,0.92969 c -0.28073,0.13125 -0.5724,0.22969 -0.875,0.29531 -0.29896,0.0656 -0.61797,0.0984 -0.95703,0.0984 -0.92239,0 -1.65521,-0.28984 -2.19843,-0.86953 -0.54323,-0.57969 -0.81485,-1.36172 -0.81485,-2.346094 0,-0.998954 0.27344,-1.78463 0.82031,-2.357031 0.55052,-0.57239 1.30339,-0.858587 2.2586,-0.858594 0.30989,7e-6 0.61249,0.03282 0.90781,0.09844 0.29531,0.06199 0.58151,0.156777 0.85859,0.284375"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4797"
+ inkscape:connector-curvature="0" /><path
+ d="m -126.32077,93.680773 1.01172,0 0,5.025781 3.00234,-2.641406 1.28516,0 -3.24844,2.865624 3.38516,3.259378 -1.3125,0 -3.11172,-2.991409 0,2.991409 -1.01172,0 0,-8.509377"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4799"
+ inkscape:connector-curvature="0" /><path
+ d="m -116.72858,98.673741 2.94765,0 0,0.896875 -2.94765,0 0,-0.896875"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4801"
+ inkscape:connector-curvature="0" /><path
+ d="m -104.69186,98.362022 c 0.23697,0.08021 0.46666,0.251567 0.68906,0.514063 0.22604,0.262503 0.45208,0.62344 0.67812,1.082812 l 1.1211,2.231253 -1.18672,0 -1.04453,-2.09453 c -0.2698,-0.546876 -0.5323,-0.909636 -0.7875,-1.088285 -0.25157,-0.178643 -0.5961,-0.267965 -1.0336,-0.267969 l -1.20312,0 0,3.450784 -1.10469,0 0,-8.164846 2.49375,0 c 0.93333,8e-6 1.62968,0.19506 2.08906,0.585156 0.45937,0.390111 0.68906,0.978913 0.68907,1.766406 -1e-5,0.514068 -0.12032,0.94063 -0.36094,1.279688 -0.23699,0.339066 -0.58334,0.574222 -1.03906,0.705468 m -2.76719,-3.428906 0,2.898438 1.38906,0 c 0.53229,4e-6 0.93333,-0.122131 1.20313,-0.366407 0.27343,-0.247911 0.41015,-0.610671 0.41015,-1.088281 0,-0.477598 -0.13672,-0.836712 -0.41015,-1.077343 -0.2698,-0.244264 -0.67084,-0.366399 -1.20313,-0.366407 l -1.38906,0"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4803"
+ inkscape:connector-curvature="0" /><path
+ d="m -100.91296,100.80108 1.15391,0 0,1.38907 -1.15391,0 0,-1.38907 m 0,-4.402339 1.15391,0 0,1.389063 -1.15391,0 0,-1.389063"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4805"
+ inkscape:connector-curvature="0" /><path
+ d="m -94.880922,94.752648 c -0.568753,7e-6 -0.997138,0.280736 -1.285156,0.842187 -0.284377,0.557819 -0.426565,1.398182 -0.426563,2.521094 -2e-6,1.119273 0.142186,1.959641 0.426563,2.521091 0.288018,0.55782 0.716403,0.83672 1.285156,0.83672 0.572392,0 1.000777,-0.2789 1.285156,-0.83672 0.288016,-0.56145 0.432026,-1.401818 0.432031,-2.521091 -5e-6,-1.122912 -0.144015,-1.963275 -0.432031,-2.521094 -0.284379,-0.561451 -0.712764,-0.84218 -1.285156,-0.842187 m 0,-0.875 c 0.9151,8e-6 1.613276,0.362768 2.094531,1.088281 0.48489,0.721881 0.727338,1.77188 0.727344,3.15 -6e-6,1.374482 -0.242454,2.424481 -0.727344,3.150001 -0.481255,0.72187 -1.179431,1.08281 -2.094531,1.08281 -0.915107,0 -1.615106,-0.36094 -2.1,-1.08281 -0.481251,-0.72552 -0.721876,-1.775519 -0.721875,-3.150001 -10e-7,-1.37812 0.240624,-2.428119 0.721875,-3.15 0.484894,-0.725513 1.184893,-1.088273 2.1,-1.088281"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4807"
+ inkscape:connector-curvature="0" /><path
+ d="m -81.077803,101.0253 0,-2.192965 -1.804688,0 0,-0.907813 2.898438,0 0,3.505468 c -0.42657,0.30261 -0.896882,0.53229 -1.410938,0.68906 -0.514068,0.15313 -1.062765,0.22969 -1.646093,0.22969 -1.276045,0 -2.275003,-0.37187 -2.996875,-1.11562 -0.71823,-0.7474 -1.077345,-1.786459 -1.077344,-3.117191 -10e-7,-1.33437 0.359114,-2.373431 1.077344,-3.117188 0.721872,-0.747388 1.72083,-1.121085 2.996875,-1.121093 0.532286,8e-6 1.037233,0.06563 1.514843,0.196875 0.481244,0.131258 0.924212,0.324486 1.328907,0.579687 l 0,1.175781 c -0.408341,-0.346347 -0.842195,-0.607024 -1.301563,-0.782031 -0.459381,-0.174993 -0.942453,-0.262493 -1.449219,-0.2625 -0.998962,7e-6 -1.750003,0.278913 -2.253125,0.836719 -0.499481,0.557818 -0.74922,1.389067 -0.749218,2.49375 -2e-6,1.101044 0.249737,1.930471 0.749218,2.488281 0.503122,0.55781 1.254163,0.83672 2.253125,0.83672 0.390099,0 0.738276,-0.0328 1.044532,-0.0984 0.306243,-0.0693 0.581504,-0.175 0.825781,-0.31719"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4809"
+ inkscape:connector-curvature="0" /><path
+ d="m -77.74733,100.80108 1.153906,0 0,1.38907 -1.153906,0 0,-1.38907 m 0,-4.402339 1.153906,0 0,1.389063 -1.153906,0 0,-1.389063"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4811"
+ inkscape:connector-curvature="0" /><path
+ d="m -71.715295,94.752648 c -0.568753,7e-6 -0.997138,0.280736 -1.285157,0.842187 -0.284377,0.557819 -0.426564,1.398182 -0.426562,2.521094 -2e-6,1.119273 0.142185,1.959641 0.426562,2.521091 0.288019,0.55782 0.716404,0.83672 1.285157,0.83672 0.572391,0 1.000776,-0.2789 1.285156,-0.83672 0.288015,-0.56145 0.432026,-1.401818 0.432031,-2.521091 -5e-6,-1.122912 -0.144016,-1.963275 -0.432031,-2.521094 -0.28438,-0.561451 -0.712765,-0.84218 -1.285156,-0.842187 m 0,-0.875 c 0.915099,8e-6 1.613276,0.362768 2.094531,1.088281 0.484889,0.721881 0.727337,1.77188 0.727343,3.15 -6e-6,1.374482 -0.242454,2.424481 -0.727343,3.150001 -0.481255,0.72187 -1.179432,1.08281 -2.094531,1.08281 -0.915107,0 -1.615107,-0.36094 -2.1,-1.08281 -0.481251,-0.72552 -0.721876,-1.775519 -0.721875,-3.150001 -10e-7,-1.37812 0.240624,-2.428119 0.721875,-3.15 0.484893,-0.725513 1.184893,-1.088273 2.1,-1.088281"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4813"
+ inkscape:connector-curvature="0" /><path
+ d="m -62.374677,98.290929 0,2.991401 1.771875,0 c 0.594267,1e-5 1.033589,-0.12213 1.317969,-0.3664 0.288015,-0.24792 0.432026,-0.62526 0.432031,-1.132033 -5e-6,-0.510413 -0.144016,-0.885934 -0.432031,-1.126562 -0.28438,-0.244267 -0.723702,-0.366402 -1.317969,-0.366406 l -1.771875,0 m 0,-3.357813 0,2.460938 1.635157,0 c 0.539579,5e-6 0.94062,-0.100256 1.203125,-0.300782 0.26614,-0.204161 0.399213,-0.514056 0.399218,-0.929687 -5e-6,-0.411973 -0.133078,-0.720045 -0.399218,-0.924219 -0.262505,-0.204159 -0.663546,-0.306242 -1.203125,-0.30625 l -1.635157,0 m -1.104687,-0.907812 2.821875,0 c 0.842183,8e-6 1.49114,0.175008 1.946875,0.525 0.455723,0.350007 0.683587,0.847663 0.683594,1.492969 -7e-6,0.499484 -0.116673,0.89688 -0.35,1.192187 -0.23334,0.295317 -0.576048,0.479432 -1.028125,0.552344 0.543223,0.116671 0.964316,0.360941 1.263281,0.732812 0.302597,0.368233 0.453899,0.82943 0.453906,1.383594 -7e-6,0.72917 -0.247923,1.29245 -0.74375,1.68984 -0.495839,0.3974 -1.201307,0.5961 -2.116406,0.5961 l -2.93125,0 0,-8.164846"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4815"
+ inkscape:connector-curvature="0" /><path
+ d="m -55.587952,100.80108 1.153907,0 0,1.38907 -1.153907,0 0,-1.38907 m 0,-4.402339 1.153907,0 0,1.389063 -1.153907,0 0,-1.389063"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4817"
+ inkscape:connector-curvature="0" /><path
+ d="m -49.555933,94.752648 c -0.568753,7e-6 -0.997138,0.280736 -1.285156,0.842187 -0.284377,0.557819 -0.426564,1.398182 -0.426562,2.521094 -2e-6,1.119273 0.142185,1.959641 0.426562,2.521091 0.288018,0.55782 0.716403,0.83672 1.285156,0.83672 0.572392,0 1.000777,-0.2789 1.285157,-0.83672 0.288015,-0.56145 0.432026,-1.401818 0.432031,-2.521091 -5e-6,-1.122912 -0.144016,-1.963275 -0.432031,-2.521094 -0.28438,-0.561451 -0.712765,-0.84218 -1.285157,-0.842187 m 0,-0.875 c 0.9151,8e-6 1.613276,0.362768 2.094532,1.088281 0.484889,0.721881 0.727337,1.77188 0.727343,3.15 -6e-6,1.374482 -0.242454,2.424481 -0.727343,3.150001 -0.481256,0.72187 -1.179432,1.08281 -2.094532,1.08281 -0.915106,0 -1.615106,-0.36094 -2.1,-1.08281 -0.481251,-0.72552 -0.721875,-1.775519 -0.721875,-3.150001 0,-1.37812 0.240624,-2.428119 0.721875,-3.15 0.484894,-0.725513 1.184894,-1.088273 2.1,-1.088281"
+ style="font-size:11.19999981px;font-family:HelveticaNeueLTPro-Roman;fill:#f6921e"
+ id="path4819"
+ inkscape:connector-curvature="0" /></g><g
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="text4859-4"><path
+ d="m -392.7157,-1.0205482 c -0.73281,1.25782411 -1.27696,2.5019636 -1.63242,3.7324222 -0.35547,1.2304766 -0.53321,2.4773504 -0.5332,3.7406252 -10e-6,1.2632854 0.17773,2.515628 0.5332,3.7570318 0.36093,1.235938 0.90507,2.480077 1.63242,3.732422 l -1.3125,0 c -0.82031,-1.285157 -1.43555,-2.548437 -1.8457,-3.789844 -0.40469,-1.2414037 -0.60703,-2.4746056 -0.60703,-3.6996098 0,-1.2195248 0.20234,-2.447258 0.60703,-3.6832034 0.40468,-1.2359273 1.01992,-2.49920742 1.8457,-3.789844 l 1.3125,0"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4822"
+ inkscape:connector-curvature="0" /><path
+ d="m -389.27859,10.332578 2.70703,0 0,-9.3433604 -2.94492,0.590625 0,-1.50937506 2.92852,-0.59062504 1.65703,0 0,10.8527355 2.70703,0 0,1.394531 -7.05469,0 0,-1.394531"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4824"
+ inkscape:connector-curvature="0" /><path
+ d="m -379.31999,-1.0205482 1.3125,0 c 0.82031,1.29063658 1.43281,2.5539167 1.8375,3.789844 0.41015,1.2359454 0.61523,2.4636786 0.61523,3.6832034 0,1.2250042 -0.20508,2.4582061 -0.61523,3.6996098 -0.40469,1.241407 -1.01719,2.504687 -1.8375,3.789844 l -1.3125,0 c 0.72734,-1.252345 1.26874,-2.496484 1.62422,-3.732422 0.36093,-1.2414038 0.5414,-2.4937464 0.5414,-3.7570318 0,-1.2632748 -0.18047,-2.5101486 -0.5414,-3.7406252 -0.35548,-1.2304586 -0.89688,-2.47459809 -1.62422,-3.7324222"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4826"
+ inkscape:connector-curvature="0" /><path
+ d="m -367.10554,-0.5201575 2.46914,0 3.12539,8.3343756 3.1418,-8.3343756 2.46914,0 0,12.2472665 -1.61602,0 0,-10.75429765 -3.1582,8.40000055 -1.66523,0 -3.15821,-8.40000055 0,10.75429765 -1.60781,0 0,-12.2472665"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4828"
+ inkscape:connector-curvature="0" /><path
+ d="m -348.49265,7.1087493 c -1.21954,4.6e-6 -2.06446,0.1394576 -2.53477,0.4183594 -0.47031,0.2789102 -0.70547,0.754691 -0.70546,1.4273438 -10e-6,0.5359398 0.17499,0.9625019 0.525,1.2796875 0.35546,0.31172 0.83671,0.467579 1.44375,0.467578 0.83671,1e-6 1.50663,-0.295311 2.00976,-0.8859373 0.50859,-0.5960913 0.76289,-1.3863249 0.76289,-2.3707033 l 0,-0.3363281 -1.50117,0 m 3.01055,-0.6234376 0,5.2417973 -1.50938,0 0,-1.394531 c -0.34454,0.557813 -0.77383,0.970703 -1.28789,1.238672 -0.51407,0.262499 -1.14297,0.393749 -1.88672,0.39375 -0.94063,-10e-7 -1.68984,-0.2625 -2.24765,-0.7875 -0.55235,-0.530468 -0.82852,-1.2386706 -0.82852,-2.12461 0,-1.0335901 0.34453,-1.8128862 1.03359,-2.3378908 0.69453,-0.5249945 1.72813,-0.7874942 3.10079,-0.7875 l 2.1164,0 0,-0.1476563 c 0,-0.6945246 -0.22969,-1.2304616 -0.68906,-1.6078126 -0.45391,-0.3828046 -1.09376,-0.5742106 -1.91953,-0.5742188 -0.52501,8.2e-6 -1.03633,0.062899 -1.53399,0.1886719 -0.49765,0.1257891 -0.97617,0.3144608 -1.43554,0.5660157 l 0,-1.3945314 c 0.55234,-0.2132722 1.08828,-0.3718659 1.60781,-0.4757812 0.51953,-0.1093657 1.02539,-0.1640532 1.51758,-0.1640626 1.3289,9.4e-6 2.32148,0.3445404 2.97773,1.0335939 0.65624,0.6890702 0.98437,1.7336005 0.98438,3.1335939"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4830"
+ inkscape:connector-curvature="0" /><path
+ d="m -342.42233,-1.0369544 1.51757,0 0,7.5386724 4.50352,-3.9621097 1.92773,0 -4.87265,4.2984378 5.07773,4.8890629 -1.96875,0 -4.66758,-4.4871097 0,4.4871097 -1.51757,0 0,-12.7640634"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4832"
+ inkscape:connector-curvature="0" /><path
+ d="m -325.35163,6.7560149 0,0.7382813 -6.93985,0 c 0.0656,1.0390657 0.37734,1.8320337 0.93516,2.3789064 0.56328,0.5414074 1.34531,0.8121104 2.34609,0.8121094 0.57968,1e-6 1.14023,-0.07109 1.68164,-0.213281 0.54687,-0.142186 1.08828,-0.355467 1.62422,-0.639844 l 0,1.427344 c -0.54141,0.229688 -1.09649,0.404687 -1.66523,0.525 -0.56876,0.120312 -1.14571,0.180468 -1.73086,0.180469 -1.46563,-10e-7 -2.62774,-0.426563 -3.48633,-1.279688 -0.85313,-0.8531232 -1.27969,-2.0070283 -1.27969,-3.461719 0,-1.5039003 0.40469,-2.6960867 1.21407,-3.5765627 0.81484,-0.8859286 1.91132,-1.328897 3.28945,-1.3289064 1.23593,9.4e-6 2.2121,0.3992278 2.92851,1.1976564 0.72187,0.7929762 1.08281,1.8730533 1.08282,3.2402346 m -1.50938,-0.4429688 c -0.0109,-0.8257751 -0.24336,-1.4847588 -0.69726,-1.9769533 -0.44845,-0.4921796 -1.04454,-0.7382731 -1.78828,-0.7382813 -0.8422,8.2e-6 -1.51759,0.2378986 -2.02618,0.713672 -0.50312,0.4757882 -0.79297,1.1457094 -0.86953,2.0097657 l 5.38125,-0.0082"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4834"
+ inkscape:connector-curvature="0" /><path
+ d="m -315.80319,0.84156134 0,4.60195346 2.08359,0 c 0.77109,6.3e-6 1.36718,-0.1996029 1.78828,-0.5988282 0.42109,-0.3992115 0.63163,-0.967961 0.63164,-1.7062501 -10e-6,-0.7328032 -0.21055,-1.2988183 -0.63164,-1.698047 -0.4211,-0.3992081 -1.01719,-0.59881728 -1.78828,-0.59882816 l -2.08359,0 m -1.65704,-1.36171884 3.74063,0 c 1.37265,1.224e-5 2.40898,0.3117307 3.10898,0.93515631 0.70546,0.61797949 1.0582,1.52579119 1.05821,2.72343769 -10e-6,1.2086012 -0.35275,2.1218816 -1.05821,2.7398439 -0.7,0.6179741 -1.73633,0.9269581 -3.10898,0.9269532 l -2.08359,0 0,4.9218754 -1.65704,0 0,-12.2472665"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4836"
+ inkscape:connector-curvature="0" /><path
+ d="m -302.34186,3.9505459 c -0.16954,-0.09843 -0.35548,-0.1695233 -0.55781,-0.2132812 -0.19689,-0.049211 -0.41564,-0.07382 -0.65625,-0.073828 -0.85313,8.1e-6 -1.50938,0.2789141 -1.96875,0.8367188 -0.45391,0.5523505 -0.68087,1.3480529 -0.68086,2.3871096 l 0,4.8398439 -1.51758,0 0,-9.1875005 1.51758,0 0,1.4273439 c 0.31718,-0.5578042 0.73007,-0.9706945 1.23867,-1.238672 0.50859,-0.2734282 1.12655,-0.4101469 1.8539,-0.4101563 0.1039,9.4e-6 0.21875,0.00821 0.34454,0.024609 0.12577,0.010947 0.26522,0.030088 0.41835,0.057422 l 0.008,1.5503907"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4838"
+ inkscape:connector-curvature="0" /><path
+ d="m -297.54303,3.5978115 c -0.80938,8.2e-6 -1.44923,0.3171954 -1.91954,0.9515626 -0.47031,0.6289128 -0.70547,1.4929745 -0.70546,2.5921877 -1e-5,1.0992223 0.23241,1.9660183 0.69726,2.6003908 0.47031,0.6289074 1.11289,0.9433604 1.92774,0.9433594 0.8039,1e-6 1.44101,-0.317186 1.91132,-0.9515626 0.47031,-0.6343724 0.70547,-1.4984341 0.70547,-2.5921876 0,-1.0882757 -0.23516,-1.949603 -0.70547,-2.5839846 -0.47031,-0.639836 -1.10742,-0.9597575 -1.91132,-0.9597657 m 0,-1.2796876 c 1.31249,9.4e-6 2.34335,0.4265716 3.09257,1.2796876 0.74921,0.8531324 1.12382,2.0343813 1.12383,3.5437503 -10e-6,1.5039094 -0.37462,2.6851583 -1.12383,3.5437502 -0.74922,0.853125 -1.78008,1.279687 -3.09257,1.279688 -1.31798,-10e-7 -2.35157,-0.426563 -3.10079,-1.279688 -0.74375,-0.8585919 -1.11562,-2.0398408 -1.11562,-3.5437502 0,-1.509369 0.37187,-2.6906179 1.11562,-3.5437503 0.74922,-0.853116 1.78281,-1.2796782 3.10079,-1.2796876"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4840"
+ inkscape:connector-curvature="0" /><path
+ d="m -284.77077,3.9341397 0,-4.9710941 1.50938,0 0,12.7640634 -1.50938,0 0,-1.378125 c -0.31719,0.546876 -0.71914,0.954297 -1.20586,1.222266 -0.48125,0.262499 -1.06094,0.393749 -1.73906,0.39375 -1.11016,-10e-7 -2.01524,-0.442969 -2.71523,-1.328907 -0.69454,-0.8859353 -1.0418,-2.050778 -1.0418,-3.4945312 0,-1.4437441 0.34726,-2.6085868 1.0418,-3.4945315 0.69999,-0.8859286 1.60507,-1.328897 2.71523,-1.3289064 0.67812,9.4e-6 1.25781,0.1339937 1.73906,0.4019532 0.48672,0.2625088 0.88867,0.6671959 1.20586,1.2140626 m -5.14336,3.2074221 c 0,1.1101598 0.22695,1.9824246 0.68086,2.616797 0.45937,0.6289072 1.08828,0.9433602 1.88672,0.9433592 0.79843,1e-6 1.42734,-0.314452 1.88672,-0.9433592 0.45937,-0.6343724 0.68906,-1.5066372 0.68906,-2.616797 0,-1.1101507 -0.22969,-1.9796811 -0.68906,-2.608594 -0.45938,-0.6343672 -1.08829,-0.9515544 -1.88672,-0.9515625 -0.79844,8.1e-6 -1.42735,0.3171953 -1.88672,0.9515625 -0.45391,0.6289129 -0.68086,1.4984433 -0.68086,2.608594"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4842"
+ inkscape:connector-curvature="0" /><path
+ d="m -280.30827,8.1013275 0,-5.5617192 1.50938,0 0,5.5042973 c 0,0.8695341 0.16953,1.5230491 0.50859,1.9605474 0.33906,0.432032 0.84765,0.648048 1.52578,0.648047 0.81484,1e-6 1.45742,-0.259765 1.92774,-0.7792974 0.47577,-0.5195289 0.71366,-1.2277314 0.71367,-2.1246095 l 0,-5.2089848 1.50937,0 0,9.1875007 -1.50937,0 0,-1.410938 c -0.36641,0.557814 -0.79298,0.973438 -1.27969,1.246875 -0.48125,0.267969 -1.0418,0.401953 -1.68164,0.401954 -1.05547,-10e-7 -1.85664,-0.328125 -2.40351,-0.984375 -0.54688,-0.656249 -0.82032,-1.6160138 -0.82032,-2.8792975"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4844"
+ inkscape:connector-curvature="0" /><path
+ d="m -262.87663,2.8923427 0,1.4109376 c -0.42657,-0.2351486 -0.85586,-0.4101484 -1.28789,-0.525 -0.42657,-0.1203045 -0.8586,-0.1804606 -1.29609,-0.1804688 -0.97891,8.2e-6 -1.73907,0.3117266 -2.28047,0.9351563 -0.54141,0.6179754 -0.81211,1.4875058 -0.81211,2.608594 0,1.1210973 0.2707,1.9933621 0.81211,2.616797 0.5414,0.6179702 1.30156,0.9269542 2.28047,0.9269532 0.43749,1e-6 0.86952,-0.05742 1.29609,-0.172266 0.43203,-0.120311 0.86132,-0.298045 1.28789,-0.5332028 l 0,1.3945318 c -0.4211,0.196875 -0.8586,0.344531 -1.3125,0.442968 -0.44844,0.09844 -0.92696,0.147656 -1.43554,0.147657 -1.3836,-10e-7 -2.48282,-0.434766 -3.29766,-1.304297 -0.81484,-0.8695297 -1.22227,-2.0425755 -1.22227,-3.5191412 0,-1.4984316 0.41016,-2.6769461 1.23047,-3.5355471 0.82578,-0.8585849 1.95508,-1.2878814 3.38789,-1.2878908 0.46484,9.4e-6 0.91875,0.049228 1.36172,0.1476563 0.44296,0.092978 0.87226,0.2351653 1.28789,0.4265625"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4846"
+ inkscape:connector-curvature="0" /><path
+ d="m -258.74225,-0.0689856 0,2.6085939 3.10899,0 0,1.173047 -3.10899,0 0,4.9875003 c 0,0.7492211 0.10117,1.2304707 0.30352,1.4437504 0.20781,0.213282 0.62617,0.319923 1.25508,0.319922 l 1.55039,0 0,1.263281 -1.55039,0 c -1.16485,0 -1.96876,-0.216015 -2.41172,-0.648047 -0.44297,-0.437499 -0.66446,-1.2304669 -0.66446,-2.3789064 l 0,-4.9875003 -1.10742,0 0,-1.173047 1.10742,0 0,-2.6085939 1.51758,0"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4848"
+ inkscape:connector-curvature="0" /><path
+ d="m -247.78288,2.8103115 0,1.4273438 c -0.42657,-0.2187423 -0.86954,-0.3828046 -1.32891,-0.4921875 -0.45938,-0.1093669 -0.93516,-0.1640544 -1.42734,-0.1640625 -0.74922,8.1e-6 -1.3125,0.1148518 -1.68984,0.3445312 -0.37188,0.2296951 -0.55782,0.5742261 -0.55782,1.0335939 0,0.3500064 0.13399,0.626178 0.40196,0.8285157 0.26796,0.1968807 0.80663,0.3855524 1.61601,0.5660156 l 0.5168,0.1148438 c 1.07187,0.2296925 1.83202,0.5550828 2.28047,0.9761719 0.4539,0.4156289 0.68085,0.9980502 0.68086,1.7472658 -10e-6,0.8531268 -0.33907,1.5285168 -1.01719,2.0261718 -0.67266,0.497656 -1.59961,0.746484 -2.78086,0.746485 -0.49219,-10e-7 -1.00625,-0.04922 -1.54219,-0.147657 -0.53047,-0.09297 -1.09101,-0.235156 -1.68164,-0.426562 l 0,-1.558594 c 0.55781,0.289845 1.10742,0.508595 1.64883,0.65625 0.5414,0.142189 1.07734,0.213282 1.60781,0.213281 0.71094,1e-6 1.25781,-0.120311 1.64063,-0.360937 0.38281,-0.246092 0.57421,-0.5906233 0.57422,-1.0335941 -1e-5,-0.4101534 -0.13946,-0.7246063 -0.41836,-0.9433594 -0.27344,-0.2187465 -0.87774,-0.4292931 -1.81289,-0.6316407 l -0.525,-0.1230469 c -0.93516,-0.1968707 -1.61055,-0.4976516 -2.02617,-0.9023438 -0.41563,-0.4101508 -0.62344,-0.9706972 -0.62344,-1.6816407 0,-0.864055 0.30625,-1.5312419 0.91875,-2.0015627 0.6125,-0.4703033 1.48203,-0.7054594 2.60859,-0.7054688 0.55781,9.4e-6 1.08281,0.041025 1.575,0.1230469 0.49218,0.08204 0.94609,0.2050872 1.36172,0.3691407"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4850"
+ inkscape:connector-curvature="0" /><path
+ d="m -240.40827,2.5396083 1.50937,0 1.88672,7.1695318 1.87852,-7.1695318 1.78008,0 1.88672,7.1695318 1.87851,-7.1695318 1.50938,0 -2.40352,9.1875007 -1.78008,0 -1.97695,-7.5304693 -1.98516,7.5304693 -1.78007,0 -2.40352,-9.1875007"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4852"
+ inkscape:connector-curvature="0" /><path
+ d="m -225.78209,2.5396083 1.50937,0 0,9.1875007 -1.50937,0 0,-9.1875007 m 0,-3.5765627 1.50937,0 0,1.91132824 -1.50937,0 0,-1.91132824"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4854"
+ inkscape:connector-curvature="0" /><path
+ d="m -219.62975,-0.0689856 0,2.6085939 3.10899,0 0,1.173047 -3.10899,0 0,4.9875003 c 0,0.7492211 0.10117,1.2304707 0.30352,1.4437504 0.20781,0.213282 0.62617,0.319923 1.25508,0.319922 l 1.55039,0 0,1.263281 -1.55039,0 c -1.16485,0 -1.96875,-0.216015 -2.41172,-0.648047 -0.44297,-0.437499 -0.66446,-1.2304669 -0.66445,-2.3789064 l 0,-4.9875003 -1.10743,0 0,-1.173047 1.10743,0 0,-2.6085939 1.51757,0"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4856"
+ inkscape:connector-curvature="0" /><path
+ d="m -206.8903,6.1817961 0,5.5453129 -1.50937,0 0,-5.4960942 c -1e-5,-0.8695249 -0.16954,-1.5203056 -0.5086,-1.9523439 -0.33907,-0.4320234 -0.84766,-0.6480388 -1.52578,-0.6480469 -0.81485,8.1e-6 -1.45742,0.2597735 -1.92773,0.779297 -0.47032,0.519538 -0.70547,1.2277405 -0.70547,2.1246095 l 0,5.1925785 -1.51758,0 0,-12.7640634 1.51758,0 0,5.0039066 c 0.36093,-0.5523355 0.78476,-0.9652257 1.27148,-1.238672 0.49219,-0.2734282 1.0582,-0.4101469 1.69805,-0.4101563 1.05546,9.4e-6 1.8539,0.3281341 2.39531,0.9843751 0.5414,0.6507891 0.8121,1.6105538 0.81211,2.8792971"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4858"
+ inkscape:connector-curvature="0" /><path
+ d="m -193.28132,5.1235929 c 0.79296,0.1695377 1.41093,0.5222717 1.85391,1.0582032 0.44843,0.5359425 0.67265,1.1976607 0.67266,1.9851564 -1e-5,1.2085961 -0.41564,2.1437515 -1.24688,2.8054685 -0.83126,0.661719 -2.01251,0.992578 -3.54375,0.992579 -0.51407,-10e-7 -1.04453,-0.05195 -1.59141,-0.15586 -0.5414,-0.09844 -1.10195,-0.248828 -1.68164,-0.451172 l 0,-1.5996092 c 0.45938,0.2679702 0.9625,0.4703142 1.50938,0.6070312 0.54687,0.13672 1.11835,0.205079 1.71445,0.205078 1.03906,10e-7 1.82929,-0.205077 2.37071,-0.6152342 0.54686,-0.4101541 0.8203,-1.0062473 0.82031,-1.7882813 -1e-5,-0.7218708 -0.25431,-1.2851515 -0.76289,-1.6898439 -0.50313,-0.4101506 -1.20587,-0.6152286 -2.10821,-0.6152344 l -1.42734,0 0,-1.3617189 1.49297,0 c 0.81484,7.3e-6 1.43827,-0.1613207 1.87031,-0.4839844 0.43203,-0.328117 0.64804,-0.798429 0.64805,-1.4109376 -1e-5,-0.6288965 -0.22423,-1.1101461 -0.67266,-1.4437501 -0.44297,-0.33905158 -1.08008,-0.50858267 -1.91133,-0.50859375 -0.45391,1.108e-5 -0.94063,0.0492298 -1.46015,0.14765626 -0.51954,0.0984483 -1.09102,0.25157319 -1.71446,0.45937499 l 0,-1.47656256 c 0.62891,-0.17498789 1.2168,-0.30623777 1.76368,-0.39375003 0.55234,-0.0874876 1.07187,-0.13123754 1.55859,-0.13125 1.25781,1.246e-5 2.25312,0.28712157 2.98594,0.86132818 0.7328,0.56876108 1.09921,1.33985411 1.09922,2.31328141 -10e-6,0.6781337 -0.19415,1.2523519 -0.58243,1.7226564 -0.38828,0.4648509 -0.94063,0.7875068 -1.65703,0.9679688"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4860"
+ inkscape:connector-curvature="0" /><path
+ d="m -180.74694,0.84156134 0,9.52382866 2.00157,0 c 1.68983,1e-6 2.92577,-0.3828107 3.70781,-1.1484375 0.78749,-0.7656217 1.18124,-1.9742144 1.18125,-3.6257815 -1e-5,-1.6406173 -0.39376,-2.8410068 -1.18125,-3.6011721 -0.78204,-0.7656145 -2.01798,-1.14842668 -3.70781,-1.14843756 l -2.00157,0 m -1.65703,-1.36171884 3.4043,0 c 2.37343,1.224e-5 4.11523,0.49493366 5.22539,1.48476572 1.11015,0.98438488 1.66522,2.52657088 1.66524,4.62656278 -2e-5,2.1109417 -0.55783,3.6613309 -1.67344,4.651172 -1.11564,0.989845 -2.8547,1.484766 -5.21719,1.484766 l -3.4043,0 0,-12.2472665"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4862"
+ inkscape:connector-curvature="0" /><path
+ d="m -161.68287,6.7560149 0,0.7382813 -6.93984,0 c 0.0656,1.0390657 0.37734,1.8320337 0.93516,2.3789064 0.56327,0.5414074 1.3453,0.8121104 2.34609,0.8121094 0.57968,1e-6 1.14023,-0.07109 1.68164,-0.213281 0.54687,-0.142186 1.08827,-0.355467 1.62422,-0.639844 l 0,1.427344 c -0.54142,0.229688 -1.09649,0.404687 -1.66524,0.525 -0.56875,0.120312 -1.14571,0.180468 -1.73086,0.180469 -1.46562,-10e-7 -2.62773,-0.426563 -3.48632,-1.279688 -0.85313,-0.8531232 -1.27969,-2.0070283 -1.27969,-3.461719 0,-1.5039003 0.40469,-2.6960867 1.21406,-3.5765627 0.81484,-0.8859286 1.91133,-1.328897 3.28945,-1.3289064 1.23594,9.4e-6 2.21211,0.3992278 2.92852,1.1976564 0.72187,0.7929762 1.0828,1.8730533 1.08281,3.2402346 m -1.50937,-0.4429688 c -0.011,-0.8257751 -0.24337,-1.4847588 -0.69727,-1.9769533 -0.44844,-0.4921796 -1.04454,-0.7382731 -1.78828,-0.7382813 -0.84219,8.2e-6 -1.51758,0.2378986 -2.02617,0.713672 -0.50313,0.4757882 -0.79297,1.1457094 -0.86953,2.0097657 l 5.38125,-0.0082"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4864"
+ inkscape:connector-curvature="0" /><path
+ d="m -153.34849,2.8103115 0,1.4273438 c -0.42657,-0.2187423 -0.86954,-0.3828046 -1.32891,-0.4921875 -0.45938,-0.1093669 -0.93516,-0.1640544 -1.42734,-0.1640625 -0.74922,8.1e-6 -1.31251,0.1148518 -1.68985,0.3445312 -0.37187,0.2296951 -0.55781,0.5742261 -0.55781,1.0335939 0,0.3500064 0.13398,0.626178 0.40195,0.8285157 0.26797,0.1968807 0.80664,0.3855524 1.61602,0.5660156 l 0.5168,0.1148438 c 1.07187,0.2296925 1.83202,0.5550828 2.28047,0.9761719 0.45389,0.4156289 0.68085,0.9980502 0.68086,1.7472658 -1e-5,0.8531268 -0.33907,1.5285168 -1.01719,2.0261718 -0.67266,0.497656 -1.59962,0.746484 -2.78086,0.746485 -0.49219,-10e-7 -1.00625,-0.04922 -1.54219,-0.147657 -0.53047,-0.09297 -1.09102,-0.235156 -1.68164,-0.426562 l 0,-1.558594 c 0.55781,0.289845 1.10742,0.508595 1.64883,0.65625 0.5414,0.142189 1.07734,0.213282 1.60781,0.213281 0.71093,1e-6 1.25781,-0.120311 1.64063,-0.360937 0.3828,-0.246092 0.57421,-0.5906233 0.57421,-1.0335941 0,-0.4101534 -0.13945,-0.7246063 -0.41835,-0.9433594 -0.27345,-0.2187465 -0.87774,-0.4292931 -1.8129,-0.6316407 l -0.525,-0.1230469 c -0.93515,-0.1968707 -1.61054,-0.4976516 -2.02617,-0.9023438 -0.41562,-0.4101508 -0.62344,-0.9706972 -0.62343,-1.6816407 -1e-5,-0.864055 0.30624,-1.5312419 0.91875,-2.0015627 0.61249,-0.4703033 1.48202,-0.7054594 2.60859,-0.7054688 0.55781,9.4e-6 1.08281,0.041025 1.575,0.1230469 0.49218,0.08204 0.94609,0.2050872 1.36172,0.3691407"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4866"
+ inkscape:connector-curvature="0" /><path
+ d="m -150.44458,2.5396083 1.50937,0 0,9.1875007 -1.50937,0 0,-9.1875007 m 0,-3.5765627 1.50937,0 0,1.91132824 -1.50937,0 0,-1.91132824"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4868"
+ inkscape:connector-curvature="0" /><path
+ d="m -139.7395,7.026718 c -1e-5,-1.0937443 -0.22696,-1.9413997 -0.68086,-2.5429689 -0.44844,-0.6015547 -1.08008,-0.9023357 -1.89492,-0.9023438 -0.80938,8.1e-6 -1.44102,0.3007891 -1.89492,0.9023438 -0.44845,0.6015692 -0.67266,1.4492246 -0.67266,2.5429689 0,1.0882849 0.22421,1.933206 0.67266,2.5347658 0.4539,0.6015642 1.08554,0.9023452 1.89492,0.9023442 0.81484,1e-6 1.44648,-0.30078 1.89492,-0.9023442 0.4539,-0.6015598 0.68085,-1.4464809 0.68086,-2.5347658 m 1.50937,3.560157 c -1e-5,1.564062 -0.34727,2.72617 -1.04179,3.486328 -0.69454,0.765622 -1.75821,1.148434 -3.19102,1.148437 -0.53047,-3e-6 -1.03086,-0.04102 -1.50117,-0.123046 -0.47032,-0.07657 -0.92696,-0.196879 -1.36992,-0.360938 l 0,-1.468359 c 0.44296,0.240623 0.88046,0.418357 1.3125,0.533203 0.43202,0.114841 0.87226,0.172263 1.3207,0.172265 0.98984,-2e-6 1.73085,-0.259767 2.22305,-0.779297 0.49218,-0.514063 0.73827,-1.293359 0.73828,-2.33789 l 0,-0.746485 c -0.31173,0.541408 -0.71095,0.946095 -1.19766,1.214063 -0.48672,0.267969 -1.06914,0.401953 -1.74726,0.401953 -1.12657,0 -2.03438,-0.429297 -2.72344,-1.287891 -0.68907,-0.8585914 -1.0336,-1.9960904 -1.0336,-3.4125 0,-1.421869 0.34453,-2.5621023 1.0336,-3.4207033 0.68906,-0.8585849 1.59687,-1.2878814 2.72344,-1.2878908 0.67812,9.4e-6 1.26054,0.1339937 1.74726,0.4019532 0.48671,0.2679775 0.88593,0.6726646 1.19766,1.2140626 l 0,-1.3945314 1.50937,0 0,8.0472667"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4870"
+ inkscape:connector-curvature="0" /><path
+ d="m -127.48403,6.1817961 0,5.5453129 -1.50938,0 0,-5.4960942 c -10e-6,-0.8695249 -0.16954,-1.5203056 -0.50859,-1.9523439 -0.33907,-0.4320234 -0.84766,-0.6480388 -1.52578,-0.6480469 -0.81485,8.1e-6 -1.45743,0.2597735 -1.92774,0.779297 -0.47031,0.519538 -0.70547,1.2277405 -0.70547,2.1246095 l 0,5.1925785 -1.51757,0 0,-9.1875007 1.51757,0 0,1.4273439 c 0.36094,-0.5523355 0.78477,-0.9652257 1.27149,-1.238672 0.49218,-0.2734282 1.0582,-0.4101469 1.69805,-0.4101563 1.05546,9.4e-6 1.85389,0.3281341 2.39531,0.9843751 0.5414,0.6507891 0.8121,1.6105538 0.81211,2.8792971"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4872"
+ inkscape:connector-curvature="0" /><path
+ d="m -111.70124,-0.11820435 0,1.61601575 c -0.62891,-0.3007708 -1.22227,-0.5249893 -1.78008,-0.67265631 -0.55782,-0.14764521 -1.09649,-0.22147327 -1.61601,-0.22148439 -0.90235,1.112e-5 -1.59962,0.17501096 -2.0918,0.525 -0.48672,0.3500103 -0.73008,0.8476661 -0.73008,1.4929689 0,0.5414148 0.16133,0.9515707 0.48399,1.2304688 0.32812,0.2734451 0.94609,0.4949293 1.8539,0.6644532 l 1.00078,0.2050781 c 1.23593,0.2351631 2.14648,0.6507877 2.73165,1.2468751 0.59061,0.5906302 0.88592,1.3835982 0.88593,2.3789064 -1e-5,1.186721 -0.39923,2.0863298 -1.19765,2.6988288 -0.79298,0.6125 -1.95782,0.918749 -3.49453,0.91875 -0.5797,-10e-7 -1.19767,-0.06563 -1.85391,-0.196875 -0.65079,-0.13125 -1.32618,-0.325391 -2.02617,-0.582422 l 0,-1.7062504 c 0.67265,0.3773456 1.33163,0.6617204 1.97695,0.8531254 0.64531,0.191407 1.27968,0.28711 1.90313,0.287109 0.94608,10e-7 1.67616,-0.185936 2.19023,-0.557813 0.51405,-0.3718725 0.77109,-0.9023408 0.77109,-1.5914059 0,-0.6015587 -0.18594,-1.0718707 -0.55781,-1.4109376 -0.36641,-0.3390575 -0.97071,-0.5933541 -1.81289,-0.7628907 l -1.00898,-0.196875 c -1.23595,-0.2460879 -2.13009,-0.6316344 -2.68243,-1.1566407 -0.55234,-0.5249927 -0.82851,-1.2550702 -0.82851,-2.1902345 0,-1.0828025 0.38007,-1.93592673 1.14023,-2.55937518 0.76562,-0.62342539 1.81836,-0.93514385 3.15821,-0.93515631 0.57421,1.246e-5 1.15936,0.0519655 1.75546,0.15585938 0.59609,0.10391847 1.20586,0.2597777 1.8293,0.46757816"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4874"
+ inkscape:connector-curvature="0" /><path
+ d="m -100.586,6.7560149 0,0.7382813 -6.93985,0 c 0.0656,1.0390657 0.37734,1.8320337 0.93516,2.3789064 0.56328,0.5414074 1.34531,0.8121104 2.34609,0.8121094 0.57968,1e-6 1.14023,-0.07109 1.68164,-0.213281 0.54687,-0.142186 1.08828,-0.355467 1.62422,-0.639844 l 0,1.427344 c -0.54141,0.229688 -1.09649,0.404687 -1.66523,0.525 -0.56876,0.120312 -1.14571,0.180468 -1.73086,0.180469 -1.46563,-10e-7 -2.62774,-0.426563 -3.48633,-1.279688 -0.85313,-0.8531232 -1.27969,-2.0070283 -1.27969,-3.461719 0,-1.5039003 0.40469,-2.6960867 1.21406,-3.5765627 0.81485,-0.8859286 1.91133,-1.328897 3.28946,-1.3289064 1.23593,9.4e-6 2.2121,0.3992278 2.92851,1.1976564 0.72187,0.7929762 1.08281,1.8730533 1.08282,3.2402346 m -1.50938,-0.4429688 c -0.0109,-0.8257751 -0.24337,-1.4847588 -0.69726,-1.9769533 -0.44845,-0.4921796 -1.04454,-0.7382731 -1.78829,-0.7382813 -0.84219,8.2e-6 -1.51758,0.2378986 -2.02617,0.713672 -0.50313,0.4757882 -0.79297,1.1457094 -0.86953,2.0097657 l 5.38125,-0.0082"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4876"
+ inkscape:connector-curvature="0" /><path
+ d="m -96.615661,-0.0689856 0,2.6085939 3.108984,0 0,1.173047 -3.108984,0 0,4.9875003 c -3e-6,0.7492211 0.101168,1.2304707 0.303515,1.4437504 0.207809,0.213282 0.626168,0.319923 1.255078,0.319922 l 1.550391,0 0,1.263281 -1.550391,0 c -1.164847,0 -1.968752,-0.216015 -2.411718,-0.648047 -0.442971,-0.437499 -0.664455,-1.2304669 -0.664454,-2.3789064 l 0,-4.9875003 -1.107422,0 0,-1.173047 1.107422,0 0,-2.6085939 1.517579,0"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4878"
+ inkscape:connector-curvature="0" /><path
+ d="m -90.020355,-0.0689856 0,2.6085939 3.108985,0 0,1.173047 -3.108985,0 0,4.9875003 c -3e-6,0.7492211 0.101169,1.2304707 0.303516,1.4437504 0.207809,0.213282 0.626168,0.319923 1.255078,0.319922 l 1.550391,0 0,1.263281 -1.550391,0 c -1.164847,0 -1.968753,-0.216015 -2.411719,-0.648047 -0.442971,-0.437499 -0.664455,-1.2304669 -0.664453,-2.3789064 l 0,-4.9875003 -1.107422,0 0,-1.173047 1.107422,0 0,-2.6085939 1.517578,0"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4880"
+ inkscape:connector-curvature="0" /><path
+ d="m -84.918017,2.5396083 1.509375,0 0,9.1875007 -1.509375,0 0,-9.1875007 m 0,-3.5765627 1.509375,0 0,1.91132824 -1.509375,0 0,-1.91132824"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4882"
+ inkscape:connector-curvature="0" /><path
+ d="m -72.621545,6.1817961 0,5.5453129 -1.509375,0 0,-5.4960942 c -8e-6,-0.8695249 -0.169539,-1.5203056 -0.508594,-1.9523439 -0.339069,-0.4320234 -0.847662,-0.6480388 -1.525781,-0.6480469 -0.814849,8.1e-6 -1.457426,0.2597735 -1.927735,0.779297 -0.470315,0.519538 -0.705471,1.2277405 -0.705468,2.1246095 l 0,5.1925785 -1.517579,0 0,-9.1875007 1.517579,0 0,1.4273439 c 0.360934,-0.5523355 0.784762,-0.9652257 1.271484,-1.238672 0.492183,-0.2734282 1.058198,-0.4101469 1.698047,-0.4101563 1.055462,9.4e-6 1.853899,0.3281341 2.395313,0.9843751 0.541397,0.6507891 0.8121,1.6105538 0.812109,2.8792971"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4884"
+ inkscape:connector-curvature="0" /><path
+ d="m -63.548889,7.026718 c -7e-6,-1.0937443 -0.22696,-1.9413997 -0.680859,-2.5429689 -0.448444,-0.6015547 -1.080084,-0.9023357 -1.894922,-0.9023438 -0.809379,8.1e-6 -1.441019,0.3007891 -1.894922,0.9023438 -0.44844,0.6015692 -0.672659,1.4492246 -0.672656,2.5429689 -3e-6,1.0882849 0.224216,1.933206 0.672656,2.5347658 0.453903,0.6015642 1.085543,0.9023452 1.894922,0.9023442 0.814838,1e-6 1.446478,-0.30078 1.894922,-0.9023442 0.453899,-0.6015598 0.680852,-1.4464809 0.680859,-2.5347658 m 1.509375,3.560157 c -9e-6,1.564062 -0.347274,2.72617 -1.041796,3.486328 -0.694539,0.765622 -1.75821,1.148434 -3.191016,1.148437 -0.530473,-3e-6 -1.030864,-0.04102 -1.501172,-0.123046 -0.470316,-0.07657 -0.926956,-0.196879 -1.369922,-0.360938 l 0,-1.468359 c 0.442966,0.240623 0.880466,0.418357 1.3125,0.533203 0.432027,0.114841 0.872261,0.172263 1.320703,0.172265 0.989838,-2e-6 1.730853,-0.259767 2.223047,-0.779297 0.49218,-0.514063 0.738274,-1.293359 0.738281,-2.33789 l 0,-0.746485 c -0.311726,0.541408 -0.710944,0.946095 -1.197656,1.214063 -0.486725,0.267969 -1.069146,0.401953 -1.747266,0.401953 -1.126566,0 -2.034378,-0.429297 -2.723437,-1.287891 -0.689064,-0.8585914 -1.033595,-1.9960904 -1.033594,-3.4125 -10e-7,-1.421869 0.34453,-2.5621023 1.033594,-3.4207033 0.689059,-0.8585849 1.596871,-1.2878814 2.723437,-1.2878908 0.67812,9.4e-6 1.260541,0.1339937 1.747266,0.4019532 0.486712,0.2679775 0.88593,0.6726646 1.197656,1.2140626 l 0,-1.3945314 1.509375,0 0,8.0472667"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4886"
+ inkscape:connector-curvature="0" /><path
+ d="m -53.073498,2.8103115 0,1.4273438 c -0.42657,-0.2187423 -0.869538,-0.3828046 -1.328906,-0.4921875 -0.459381,-0.1093669 -0.935162,-0.1640544 -1.427344,-0.1640625 -0.749223,8.1e-6 -1.312504,0.1148518 -1.689844,0.3445312 -0.371878,0.2296951 -0.557815,0.5742261 -0.557813,1.0335939 -2e-6,0.3500064 0.133982,0.626178 0.401954,0.8285157 0.267965,0.1968807 0.806637,0.3855524 1.616015,0.5660156 l 0.516797,0.1148438 c 1.071869,0.2296925 1.832025,0.5550828 2.280469,0.9761719 0.453899,0.4156289 0.680852,0.9980502 0.68086,1.7472658 -8e-6,0.8531268 -0.339071,1.5285168 -1.017188,2.0261718 -0.672663,0.497656 -1.599615,0.746484 -2.78086,0.746485 -0.492191,-10e-7 -1.006253,-0.04922 -1.542187,-0.147657 -0.530471,-0.09297 -1.091017,-0.235156 -1.681641,-0.426562 l 0,-1.558594 c 0.557811,0.289845 1.10742,0.508595 1.648828,0.65625 0.541403,0.142189 1.07734,0.213282 1.607813,0.213281 0.710933,1e-6 1.257807,-0.120311 1.640625,-0.360937 0.382806,-0.246092 0.574212,-0.5906233 0.574219,-1.0335941 -7e-6,-0.4101534 -0.13946,-0.7246063 -0.41836,-0.9433594 -0.273443,-0.2187465 -0.877739,-0.4292931 -1.81289,-0.6316407 l -0.525,-0.1230469 C -57.82311,7.4122692 -58.4985,7.1114883 -58.914123,6.7067961 -59.32975,6.2966453 -59.537562,5.7360989 -59.537561,5.0251554 c -1e-6,-0.864055 0.306249,-1.5312419 0.91875,-2.0015627 0.612498,-0.4703033 1.482028,-0.7054594 2.608594,-0.7054688 0.557807,9.4e-6 1.082807,0.041025 1.575,0.1230469 0.492181,0.08204 0.946087,0.2050872 1.361719,0.3691407"
+ style="font-size:16.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4888"
+ inkscape:connector-curvature="0" /></g><g
+ style="font-size:9.60000038px"
+ id="text4863-9"><path
+ d="m -393.83092,-67.415047 0,5.697657 2.57969,0 c 0.95468,8e-6 1.6927,-0.247128 2.21406,-0.741406 0.52134,-0.494262 0.78202,-1.198428 0.78203,-2.112501 -1e-5,-0.90728 -0.26069,-1.60806 -0.78203,-2.102343 -0.52136,-0.494258 -1.25938,-0.741393 -2.21406,-0.741407 l -2.57969,0 m -2.05156,-1.685937 4.63125,0 c 1.69947,1.5e-5 2.98254,0.385952 3.84922,1.157812 0.87342,0.765118 1.31014,1.889075 1.31015,3.371875 -10e-6,1.496364 -0.43673,2.627092 -1.31015,3.392188 -0.86668,0.765111 -2.14975,1.147663 -3.84922,1.147656 l -2.57969,0 0,6.093751 -2.05156,0 0,-15.163282"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4891"
+ inkscape:connector-curvature="0" /><path
+ d="m -377.16451,-63.565828 c -0.20991,-0.121865 -0.44012,-0.209886 -0.69063,-0.264062 -0.24376,-0.06093 -0.51459,-0.0914 -0.8125,-0.09141 -1.05625,1e-5 -1.86875,0.345322 -2.4375,1.035937 -0.56198,0.683863 -0.84297,1.669018 -0.84297,2.955469 l 0,5.992188 -1.8789,0 0,-11.375001 1.8789,0 0,1.767188 c 0.39271,-0.690615 0.9039,-1.201812 1.5336,-1.533594 0.62968,-0.33853 1.39478,-0.507801 2.29531,-0.507813 0.12864,1.2e-5 0.27083,0.01017 0.42656,0.03047 0.15572,0.01355 0.32838,0.03725 0.51797,0.07109 l 0.0102,1.919531"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4893"
+ inkscape:connector-curvature="0" /><path
+ d="m -371.22311,-64.002546 c -1.00209,10e-6 -1.79427,0.392718 -2.37656,1.178125 -0.58229,0.778654 -0.87344,1.848444 -0.87344,3.209375 0,1.360942 0.28776,2.434118 0.86328,3.219531 0.58229,0.778648 1.37786,1.16797 2.38672,1.167969 0.99531,10e-7 1.78411,-0.392707 2.36641,-1.178125 0.58228,-0.785414 0.87343,-1.855204 0.87344,-3.209375 -1e-5,-1.347389 -0.29116,-2.413794 -0.87344,-3.199219 -0.5823,-0.792178 -1.3711,-1.188271 -2.36641,-1.188281 m 0,-1.584376 c 1.625,1.2e-5 2.9013,0.528137 3.82891,1.584376 0.92759,1.056259 1.39139,2.518757 1.39141,4.3875 -2e-5,1.861983 -0.46382,3.324481 -1.39141,4.3875 -0.92761,1.05625 -2.20391,1.584375 -3.82891,1.584375 -1.63177,0 -2.91146,-0.528125 -3.83906,-1.584375 -0.92083,-1.063019 -1.38125,-2.525517 -1.38125,-4.3875 0,-1.868743 0.46042,-3.331241 1.38125,-4.3875 0.9276,-1.056239 2.20729,-1.584364 3.83906,-1.584376"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4895"
+ inkscape:connector-curvature="0" /><path
+ d="m -355.40982,-63.58614 0,-6.154688 1.86875,0 0,15.803126 -1.86875,0 0,-1.70625 c -0.39272,0.677084 -0.89038,1.181511 -1.49297,1.513281 -0.59584,0.325 -1.31355,0.4875 -2.15313,0.4875 -1.37448,0 -2.49505,-0.548437 -3.36172,-1.645313 -0.85989,-1.096872 -1.28984,-2.539058 -1.28984,-4.326562 0,-1.787493 0.42995,-3.229679 1.28984,-4.326563 0.86667,-1.096864 1.98724,-1.645301 3.36172,-1.645313 0.83958,1.2e-5 1.55729,0.165897 2.15313,0.497657 0.60259,0.325011 1.10025,0.826052 1.49297,1.503125 m -6.36797,3.971094 c -1e-5,1.374483 0.28098,2.45443 0.84297,3.239844 0.56874,0.778647 1.34739,1.16797 2.33593,1.167969 0.98854,1e-6 1.76718,-0.389322 2.33594,-1.167969 0.56874,-0.785414 0.85312,-1.865361 0.85313,-3.239844 -10e-6,-1.374472 -0.28439,-2.451034 -0.85313,-3.229688 -0.56876,-0.785407 -1.3474,-1.178115 -2.33594,-1.178125 -0.98854,1e-5 -1.76719,0.392718 -2.33593,1.178125 -0.56199,0.778654 -0.84298,1.855216 -0.84297,3.229688"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4897"
+ inkscape:connector-curvature="0" /><path
+ d="m -349.88482,-58.426765 0,-6.885938 1.86875,0 0,6.814844 c -10e-6,1.076566 0.20989,1.88568 0.62968,2.427344 0.41979,0.534898 1.04948,0.802345 1.88907,0.802344 1.00884,1e-6 1.80442,-0.321613 2.38671,-0.964844 0.58906,-0.643226 0.88359,-1.520048 0.8836,-2.630469 l 0,-6.449219 1.86875,0 0,11.375001 -1.86875,0 0,-1.746875 c -0.45366,0.690626 -0.98178,1.205209 -1.58438,1.54375 -0.59584,0.331771 -1.28985,0.497656 -2.08203,0.497656 -1.30677,0 -2.2987,-0.40625 -2.97578,-1.21875 -0.67708,-0.812498 -1.01563,-2.000778 -1.01562,-3.564844"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4899"
+ inkscape:connector-curvature="0" /><path
+ d="m -328.30279,-64.875984 0,1.746875 c -0.52813,-0.291136 -1.05964,-0.507803 -1.59453,-0.65 -0.52813,-0.148948 -1.06303,-0.223427 -1.60469,-0.223437 -1.21198,10e-6 -2.15313,0.385947 -2.82344,1.157812 -0.67031,0.765112 -1.00547,1.841674 -1.00546,3.229688 -10e-6,1.388025 0.33515,2.467972 1.00546,3.239844 0.67031,0.765106 1.61146,1.147657 2.82344,1.147656 0.54166,10e-7 1.07656,-0.07109 1.60469,-0.213281 0.53489,-0.148957 1.0664,-0.369009 1.59453,-0.660157 l 0,1.726563 c -0.52136,0.24375 -1.06303,0.426563 -1.625,0.548438 -0.55522,0.121874 -1.14766,0.182812 -1.77734,0.182812 -1.71303,0 -3.07396,-0.538281 -4.08282,-1.614844 -1.00885,-1.07656 -1.51328,-2.528902 -1.51328,-4.357031 0,-1.855201 0.50781,-3.314314 1.52344,-4.377344 1.02239,-1.06301 2.42057,-1.59452 4.19453,-1.594532 0.57552,1.2e-5 1.13749,0.06095 1.68594,0.182813 0.54843,0.115115 1.07994,0.291157 1.59453,0.528125"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4901"
+ inkscape:connector-curvature="0" /><path
+ d="m -323.18404,-68.54239 0,3.229687 3.84922,0 0,1.452344 -3.84922,0 0,6.175 c -1e-5,0.927607 0.12525,1.52344 0.37578,1.7875 0.25728,0.264065 0.77525,0.396096 1.5539,0.396094 l 1.91954,0 0,1.564063 -1.91954,0 c -1.44219,0 -2.4375,-0.267448 -2.98593,-0.802344 -0.54844,-0.541665 -0.82266,-1.523435 -0.82266,-2.945313 l 0,-6.175 -1.37109,0 0,-1.452344 1.37109,0 0,-3.229687 1.87891,0"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4903"
+ inkscape:connector-curvature="0" /><path
+ d="m -308.11216,-67.415047 0,11.791407 2.47812,0 c 2.09218,2e-6 3.62239,-0.473956 4.59063,-1.421875 0.97499,-0.947913 1.46249,-2.444265 1.4625,-4.489063 -10e-6,-2.03124 -0.48751,-3.517437 -1.4625,-4.458594 -0.96824,-0.947903 -2.49845,-1.421861 -4.59063,-1.421875 l -2.47812,0 m -2.05157,-1.685937 4.21485,0 c 2.93853,1.5e-5 5.09504,0.612775 6.46953,1.838281 1.37447,1.218762 2.0617,3.128135 2.06172,5.728125 -2e-5,2.613547 -0.69064,4.533077 -2.07188,5.758594 -1.38126,1.225522 -3.53438,1.838282 -6.45937,1.838282 l -4.21485,0 0,-15.163282"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4905"
+ inkscape:connector-curvature="0" /><path
+ d="m -284.50904,-60.09239 0,0.914063 -8.59219,0 c 0.0813,1.286462 0.46719,2.268232 1.15782,2.945312 0.69739,0.670314 1.66562,1.00547 2.90468,1.005469 0.7177,10e-7 1.41171,-0.08802 2.08203,-0.264063 0.67708,-0.176039 1.34739,-0.440102 2.01094,-0.792187 l 0,1.767188 c -0.67032,0.284375 -1.35756,0.501041 -2.06172,0.65 -0.70417,0.148958 -1.41849,0.223437 -2.14297,0.223437 -1.81458,0 -3.25338,-0.528125 -4.3164,-1.584375 -1.05625,-1.056248 -1.58438,-2.484892 -1.58438,-4.285938 0,-1.861972 0.50104,-3.338012 1.50313,-4.428125 1.00885,-1.096864 2.3664,-1.645301 4.07265,-1.645313 1.5302,1.2e-5 2.7388,0.494282 3.62579,1.482813 0.89374,0.98178 1.34061,2.319018 1.34062,4.011719 m -1.86875,-0.548438 c -0.0136,-1.022388 -0.30131,-1.838272 -0.86328,-2.447656 -0.55522,-0.609365 -1.29324,-0.914052 -2.21406,-0.914062 -1.04272,10e-6 -1.87891,0.294541 -2.5086,0.883593 -0.62292,0.589071 -0.98177,1.418498 -1.07656,2.488282 l 6.6625,-0.01016"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4907"
+ inkscape:connector-curvature="0" /><path
+ d="m -274.19029,-64.977547 0,1.767188 c -0.52813,-0.270824 -1.07657,-0.473949 -1.64531,-0.609375 -0.56876,-0.135407 -1.15782,-0.203115 -1.76719,-0.203125 -0.92761,1e-5 -1.625,0.142197 -2.09219,0.426563 -0.46042,0.284384 -0.69062,0.710946 -0.69062,1.279687 0,0.433341 0.16588,0.775268 0.49765,1.025781 0.33177,0.243758 0.9987,0.477351 2.00079,0.700782 l 0.63984,0.142187 c 1.32708,0.284381 2.26822,0.687246 2.82344,1.208594 0.56197,0.514588 0.84296,1.235681 0.84297,2.163281 -10e-6,1.056253 -0.4198,1.89245 -1.25938,2.508594 -0.83282,0.616146 -1.98047,0.924219 -3.44297,0.924219 -0.60938,0 -1.24584,-0.06094 -1.90937,-0.182812 -0.65678,-0.115105 -1.35079,-0.291146 -2.08203,-0.528125 l 0,-1.929688 c 0.69062,0.358856 1.37109,0.629689 2.0414,0.8125 0.67031,0.176043 1.33385,0.264064 1.99063,0.264063 0.8802,1e-6 1.55728,-0.148957 2.03125,-0.446876 0.47395,-0.304685 0.71093,-0.731247 0.71093,-1.279687 0,-0.507809 -0.17266,-0.897132 -0.51796,-1.167969 -0.33855,-0.270829 -1.08673,-0.531506 -2.24454,-0.782031 l -0.65,-0.152344 c -1.15781,-0.243745 -1.99401,-0.61614 -2.50859,-1.117188 -0.51458,-0.507805 -0.77188,-1.201815 -0.77187,-2.082031 -1e-5,-1.069782 0.37916,-1.895823 1.1375,-2.478125 0.75833,-0.58228 1.83489,-0.873426 3.22968,-0.873438 0.69062,1.2e-5 1.34062,0.05079 1.95,0.152344 0.60937,0.101574 1.17135,0.253918 1.68594,0.457031"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4909"
+ inkscape:connector-curvature="0" /><path
+ d="m -270.59497,-65.312703 1.86875,0 0,11.375001 -1.86875,0 0,-11.375001 m 0,-4.428125 1.86875,0 0,2.366406 -1.86875,0 0,-2.366406"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4911"
+ inkscape:connector-curvature="0" /><path
+ d="m -257.34106,-59.757234 c -10e-6,-1.354159 -0.281,-2.403637 -0.84297,-3.148437 -0.55522,-0.744782 -1.33725,-1.117178 -2.3461,-1.117188 -1.00209,1e-5 -1.78412,0.372406 -2.34609,1.117188 -0.55521,0.7448 -0.83282,1.794278 -0.83281,3.148437 -1e-5,1.347401 0.2776,2.393493 0.83281,3.138282 0.56197,0.744793 1.344,1.117189 2.34609,1.117187 1.00885,2e-6 1.79088,-0.372394 2.3461,-1.117187 0.56197,-0.744789 0.84296,-1.790881 0.84297,-3.138282 m 1.86875,4.407813 c -2e-5,1.936458 -0.42996,3.375259 -1.28985,4.316406 -0.8599,0.947913 -2.17683,1.421871 -3.95078,1.421876 -0.65678,-5e-6 -1.27631,-0.05079 -1.85859,-0.152344 -0.5823,-0.0948 -1.14766,-0.243754 -1.6961,-0.446875 l 0,-1.817969 c 0.54844,0.297914 1.0901,0.517966 1.625,0.660156 0.53489,0.142185 1.07995,0.213279 1.63516,0.213281 1.22551,-2e-6 2.14296,-0.321617 2.75234,-0.964843 0.60937,-0.63646 0.91406,-1.601303 0.91407,-2.894532 l 0,-0.924219 c -0.38595,0.670314 -0.88022,1.171356 -1.48282,1.503126 -0.60261,0.331771 -1.3237,0.497656 -2.16328,0.497656 -1.39479,0 -2.51875,-0.53151 -3.37187,-1.594532 -0.85313,-1.063018 -1.27969,-2.47135 -1.27969,-4.225 0,-1.760409 0.42656,-3.172126 1.27969,-4.235156 0.85312,-1.06301 1.97708,-1.59452 3.37187,-1.594532 0.83958,1.2e-5 1.56067,0.165897 2.16328,0.497657 0.6026,0.331781 1.09687,0.832823 1.48282,1.503125 l 0,-1.726563 1.86875,0 0,9.963282"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4913"
+ inkscape:connector-curvature="0" /><path
+ d="m -242.16763,-60.803328 0,6.865626 -1.86875,0 0,-6.804688 c -1e-5,-1.076555 -0.2099,-1.882283 -0.62968,-2.417188 -0.4198,-0.534886 -1.04949,-0.802333 -1.88907,-0.802343 -1.00886,10e-6 -1.80443,0.321624 -2.38672,0.964843 -0.58229,0.643238 -0.87344,1.52006 -0.87343,2.630469 l 0,6.428907 -1.87891,0 0,-11.375001 1.87891,0 0,1.767188 c 0.44687,-0.683844 0.97161,-1.195042 1.57422,-1.533594 0.60936,-0.33853 1.31015,-0.507801 2.10234,-0.507813 1.30676,1.2e-5 2.2953,0.406262 2.96562,1.21875 0.67031,0.805739 1.00546,1.994019 1.00547,3.564844"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4915"
+ inkscape:connector-curvature="0" /><path
+ d="m -233.81919,-69.100984 12.82734,0 0,1.726562 -5.38281,0 0,13.43672 -2.06172,0 0,-13.43672 -5.38281,0 0,-1.726562"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4917"
+ inkscape:connector-curvature="0" /><path
+ d="m -212.86684,-60.09239 0,0.914063 -8.59219,0 c 0.0813,1.286462 0.46718,2.268232 1.15781,2.945312 0.69739,0.670314 1.66562,1.00547 2.90469,1.005469 0.7177,10e-7 1.41171,-0.08802 2.08203,-0.264063 0.67708,-0.176039 1.34739,-0.440102 2.01094,-0.792187 l 0,1.767188 c -0.67032,0.284375 -1.35756,0.501041 -2.06172,0.65 -0.70417,0.148958 -1.4185,0.223437 -2.14297,0.223437 -1.81459,0 -3.25339,-0.528125 -4.31641,-1.584375 -1.05625,-1.056248 -1.58437,-2.484892 -1.58437,-4.285938 0,-1.861972 0.50104,-3.338012 1.50312,-4.428125 1.00886,-1.096864 2.36641,-1.645301 4.07266,-1.645313 1.5302,1.2e-5 2.73879,0.494282 3.62578,1.482813 0.89374,0.98178 1.34062,2.319018 1.34063,4.011719 m -1.86875,-0.548438 c -0.0136,-1.022388 -0.30131,-1.838272 -0.86328,-2.447656 -0.55522,-0.609365 -1.29324,-0.914052 -2.21407,-0.914062 -1.04271,10e-6 -1.87891,0.294541 -2.50859,0.883593 -0.62292,0.589071 -0.98177,1.418498 -1.07656,2.488282 l 6.6625,-0.01016"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4919"
+ inkscape:connector-curvature="0" /><path
+ d="m -200.9231,-63.129109 c 0.46718,-0.839573 1.02577,-1.459104 1.67579,-1.858594 0.64998,-0.399468 1.41509,-0.599207 2.29531,-0.599219 1.18488,1.2e-5 2.09894,0.416418 2.74219,1.249219 0.64321,0.826052 0.96482,2.004175 0.96484,3.534375 l 0,6.865626 -1.87891,0 0,-6.804688 c -10e-6,-1.090096 -0.19298,-1.89921 -0.5789,-2.427344 -0.38596,-0.528115 -0.97502,-0.792177 -1.76719,-0.792187 -0.96824,10e-6 -1.73335,0.321624 -2.29531,0.964843 -0.56199,0.643238 -0.84298,1.52006 -0.84297,2.630469 l 0,6.428907 -1.87891,0 0,-6.804688 c -1e-5,-1.096867 -0.19298,-1.905981 -0.5789,-2.427344 -0.38595,-0.528115 -0.98178,-0.792177 -1.7875,-0.792187 -0.9547,10e-6 -1.71303,0.325009 -2.275,0.975 -0.56199,0.643237 -0.84298,1.516674 -0.84297,2.620312 l 0,6.428907 -1.87891,0 0,-11.375001 1.87891,0 0,1.767188 c 0.42656,-0.697386 0.93775,-1.211969 1.53359,-1.54375 0.59583,-0.33176 1.30338,-0.497645 2.12266,-0.497657 0.82603,1.2e-5 1.52681,0.209908 2.10234,0.629688 0.58228,0.419802 1.01223,1.029177 1.28984,1.828125"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4921"
+ inkscape:connector-curvature="0" /><path
+ d="m -187.69965,-55.643952 0,6.032813 -1.87891,0 0,-15.701564 1.87891,0 0,1.726563 c 0.3927,-0.677073 0.88697,-1.178114 1.48281,-1.503125 0.6026,-0.33176 1.32031,-0.497645 2.15313,-0.497657 1.38124,1.2e-5 2.50181,0.548449 3.36171,1.645313 0.86666,1.096884 1.29999,2.53907 1.3,4.326563 -1e-5,1.787504 -0.43334,3.22969 -1.3,4.326562 -0.8599,1.096876 -1.98047,1.645313 -3.36171,1.645313 -0.83282,0 -1.55053,-0.1625 -2.15313,-0.4875 -0.59584,-0.33177 -1.09011,-0.836197 -1.48281,-1.513281 m 6.35781,-3.971094 c -1e-5,-1.374472 -0.28438,-2.451034 -0.85312,-3.229688 -0.56199,-0.785407 -1.33725,-1.178115 -2.32579,-1.178125 -0.98854,1e-5 -1.76719,0.392718 -2.33593,1.178125 -0.56199,0.778654 -0.84298,1.855216 -0.84297,3.229688 -1e-5,1.374483 0.28098,2.45443 0.84297,3.239844 0.56874,0.778647 1.34739,1.16797 2.33593,1.167969 0.98854,1e-6 1.7638,-0.389322 2.32579,-1.167969 0.56874,-0.785414 0.85311,-1.865361 0.85312,-3.239844"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4923"
+ inkscape:connector-curvature="0" /><path
+ d="m -176.30434,-69.740828 1.86875,0 0,15.803126 -1.86875,0 0,-15.803126"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4925"
+ inkscape:connector-curvature="0" /><path
+ d="m -165.36607,-59.655671 c -1.5099,5e-6 -2.55599,0.172662 -3.13828,0.517969 -0.5823,0.345317 -0.87344,0.934379 -0.87344,1.767187 0,0.663545 0.21666,1.191669 0.65,1.584375 0.4401,0.385939 1.03593,0.578908 1.7875,0.578907 1.03593,1e-6 1.86536,-0.365624 2.48828,-1.096876 0.62968,-0.738017 0.94452,-1.716402 0.94453,-2.935156 l 0,-0.416406 -1.85859,0 m 3.72734,-0.771875 0,6.489844 -1.86875,0 0,-1.726563 c -0.42657,0.690626 -0.95808,1.201824 -1.59453,1.533594 -0.63646,0.325 -1.41511,0.4875 -2.33594,0.4875 -1.16458,0 -2.09219,-0.325 -2.78281,-0.975 -0.68385,-0.656769 -1.02578,-1.533592 -1.02578,-2.630469 0,-1.279683 0.42656,-2.244526 1.27969,-2.894531 0.85989,-0.649993 2.13958,-0.974993 3.83906,-0.975 l 2.62031,0 0,-0.182813 c -1e-5,-0.859887 -0.28438,-1.523429 -0.85312,-1.990625 -0.56199,-0.473948 -1.35417,-0.710927 -2.37656,-0.710937 -0.65001,10e-6 -1.28308,0.07787 -1.89922,0.233593 -0.61615,0.155739 -1.2086,0.389333 -1.77735,0.700782 l 0,-1.726563 c 0.68385,-0.264051 1.3474,-0.460405 1.99063,-0.589063 0.64322,-0.135405 1.26952,-0.203113 1.8789,-0.203125 1.64531,1.2e-5 2.87421,0.426574 3.68672,1.279688 0.81249,0.853135 1.21874,2.146363 1.21875,3.879688"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4927"
+ inkscape:connector-curvature="0" /><path
+ d="m -155.93091,-68.54239 0,3.229687 3.84922,0 0,1.452344 -3.84922,0 0,6.175 c 0,0.927607 0.12526,1.52344 0.37578,1.7875 0.25729,0.264065 0.77526,0.396096 1.55391,0.396094 l 1.91953,0 0,1.564063 -1.91953,0 c -1.44219,0 -2.4375,-0.267448 -2.98594,-0.802344 -0.54844,-0.541665 -0.82266,-1.523435 -0.82265,-2.945313 l 0,-6.175 -1.3711,0 0,-1.452344 1.3711,0 0,-3.229687 1.8789,0"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4929"
+ inkscape:connector-curvature="0" /><path
+ d="m -139.88404,-60.09239 0,0.914063 -8.59219,0 c 0.0812,1.286462 0.46719,2.268232 1.15782,2.945312 0.69739,0.670314 1.66562,1.00547 2.90468,1.005469 0.7177,10e-7 1.41171,-0.08802 2.08203,-0.264063 0.67708,-0.176039 1.34739,-0.440102 2.01094,-0.792187 l 0,1.767188 c -0.67032,0.284375 -1.35756,0.501041 -2.06172,0.65 -0.70417,0.148958 -1.41849,0.223437 -2.14297,0.223437 -1.81458,0 -3.25338,-0.528125 -4.3164,-1.584375 -1.05625,-1.056248 -1.58438,-2.484892 -1.58438,-4.285938 0,-1.861972 0.50104,-3.338012 1.50313,-4.428125 1.00885,-1.096864 2.3664,-1.645301 4.07265,-1.645313 1.5302,1.2e-5 2.7388,0.494282 3.62579,1.482813 0.89374,0.98178 1.34061,2.319018 1.34062,4.011719 m -1.86875,-0.548438 c -0.0136,-1.022388 -0.30131,-1.838272 -0.86328,-2.447656 -0.55522,-0.609365 -1.29324,-0.914052 -2.21406,-0.914062 -1.04272,10e-6 -1.87891,0.294541 -2.5086,0.883593 -0.62292,0.589071 -0.98177,1.418498 -1.07656,2.488282 l 6.6625,-0.01016"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4931"
+ inkscape:connector-curvature="0" /><path
+ d="m -131.1395,-60.468171 5.47422,0 0,1.665625 -5.47422,0 0,-1.665625"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4933"
+ inkscape:connector-curvature="0" /><path
+ d="m -115.97623,-69.100984 2.05156,0 0,15.163282 -2.05156,0 0,-15.163282"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4935"
+ inkscape:connector-curvature="0" /><path
+ d="m -100.46761,-60.803328 0,6.865626 -1.86875,0 0,-6.804688 c -1e-5,-1.076555 -0.20991,-1.882283 -0.62969,-2.417188 -0.4198,-0.534886 -1.04949,-0.802333 -1.88906,-0.802343 -1.00886,10e-6 -1.80444,0.321624 -2.38672,0.964843 -0.5823,0.643238 -0.87344,1.52006 -0.87344,2.630469 l 0,6.428907 -1.87891,0 0,-11.375001 1.87891,0 0,1.767188 c 0.44687,-0.683844 0.97161,-1.195042 1.57422,-1.533594 0.60937,-0.33853 1.31015,-0.507801 2.10234,-0.507813 1.30676,1.2e-5 2.2953,0.406262 2.96563,1.21875 0.6703,0.805739 1.00545,1.994019 1.00547,3.564844"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4937"
+ inkscape:connector-curvature="0" /><path
+ d="m -96.791052,-69.740828 1.878906,0 0,9.333594 5.575782,-4.905469 2.386719,0 -6.032813,5.321875 6.286719,6.053126 -2.4375,0 -5.778907,-5.555469 0,5.555469 -1.878906,0 0,-15.803126"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4939"
+ inkscape:connector-curvature="0" /><path
+ d="m -77.402783,-64.977547 0,1.767188 c -0.528133,-0.270824 -1.07657,-0.473949 -1.645312,-0.609375 -0.568757,-0.135407 -1.157819,-0.203115 -1.767188,-0.203125 -0.927609,1e-5 -1.625004,0.142197 -2.092187,0.426563 -0.46042,0.284384 -0.690629,0.710946 -0.690626,1.279687 -3e-6,0.433341 0.165883,0.775268 0.497657,1.025781 0.331767,0.243758 0.998693,0.477351 2.000781,0.700782 l 0.639844,0.142187 c 1.327076,0.284381 2.268221,0.687246 2.823438,1.208594 0.561969,0.514588 0.842959,1.235681 0.842968,2.163281 -9e-6,1.056253 -0.419801,1.89245 -1.259375,2.508594 -0.83282,0.616146 -1.980475,0.924219 -3.442969,0.924219 -0.609379,0 -1.245837,-0.06094 -1.909375,-0.182812 -0.656773,-0.115105 -1.350783,-0.291146 -2.082031,-0.528125 l 0,-1.929688 c 0.690623,0.358856 1.371091,0.629689 2.041406,0.8125 0.670309,0.176043 1.33385,0.264064 1.990625,0.264063 0.880203,1e-6 1.557285,-0.148957 2.03125,-0.446876 0.473951,-0.304685 0.71093,-0.731247 0.710938,-1.279687 -8e-6,-0.507809 -0.172664,-0.897132 -0.517969,-1.167969 -0.338549,-0.270829 -1.086725,-0.531506 -2.244531,-0.782031 l -0.65,-0.152344 c -1.157816,-0.243745 -1.994013,-0.61614 -2.508594,-1.117188 -0.514585,-0.507805 -0.771876,-1.201815 -0.771875,-2.082031 -10e-7,-1.069782 0.379165,-1.895823 1.1375,-2.478125 0.75833,-0.58228 1.834892,-0.873426 3.229688,-0.873438 0.690618,1.2e-5 1.340618,0.05079 1.95,0.152344 0.609367,0.101574 1.171345,0.253918 1.685937,0.457031"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4941"
+ inkscape:connector-curvature="0" /><path
+ d="m -65.621514,-64.875984 0,1.746875 c -0.528135,-0.291136 -1.059645,-0.507803 -1.594532,-0.65 -0.528133,-0.148948 -1.063028,-0.223427 -1.604687,-0.223437 -1.211985,10e-6 -2.15313,0.385947 -2.823438,1.157812 -0.670316,0.765112 -1.005472,1.841674 -1.005469,3.229688 -3e-6,1.388025 0.335153,2.467972 1.005469,3.239844 0.670308,0.765106 1.611453,1.147657 2.823438,1.147656 0.541659,10e-7 1.076554,-0.07109 1.604687,-0.213281 0.534887,-0.148957 1.066397,-0.369009 1.594532,-0.660157 l 0,1.726563 c -0.521364,0.24375 -1.06303,0.426563 -1.625,0.548438 -0.555217,0.121874 -1.147664,0.182812 -1.777344,0.182812 -1.713026,0 -3.073962,-0.538281 -4.082813,-1.614844 -1.008856,-1.07656 -1.513282,-2.528902 -1.513281,-4.357031 -10e-7,-1.855201 0.507811,-3.314314 1.523437,-4.377344 1.022392,-1.06301 2.420568,-1.59452 4.194532,-1.594532 0.575513,1.2e-5 1.137492,0.06095 1.685937,0.182813 0.548429,0.115115 1.079939,0.291157 1.594532,0.528125"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4943"
+ inkscape:connector-curvature="0" /><path
+ d="m -57.181683,-59.655671 c -1.509901,5e-6 -2.555994,0.172662 -3.138281,0.517969 -0.582295,0.345317 -0.873441,0.934379 -0.873438,1.767187 -3e-6,0.663545 0.216663,1.191669 0.65,1.584375 0.4401,0.385939 1.035933,0.578908 1.7875,0.578907 1.035931,1e-6 1.865357,-0.365624 2.488282,-1.096876 0.629678,-0.738017 0.944522,-1.716402 0.944531,-2.935156 l 0,-0.416406 -1.858594,0 m 3.727344,-0.771875 0,6.489844 -1.86875,0 0,-1.726563 c -0.426571,0.690626 -0.958081,1.201824 -1.594531,1.533594 -0.636466,0.325 -1.415111,0.4875 -2.335938,0.4875 -1.164587,0 -2.092191,-0.325 -2.782813,-0.975 -0.683856,-0.656769 -1.025782,-1.533592 -1.025781,-2.630469 -1e-6,-1.279683 0.426561,-2.244526 1.279688,-2.894531 0.859892,-0.649993 2.139578,-0.974993 3.839062,-0.975 l 2.620313,0 0,-0.182813 c -9e-6,-0.859887 -0.284384,-1.523429 -0.853125,-1.990625 -0.561987,-0.473948 -1.354174,-0.710927 -2.376563,-0.710937 -0.650005,10e-6 -1.283077,0.07787 -1.899219,0.233593 -0.616149,0.155739 -1.208596,0.389333 -1.777343,0.700782 l 0,-1.726563 c 0.683851,-0.264051 1.347392,-0.460405 1.990625,-0.589063 0.643224,-0.135405 1.269526,-0.203113 1.878906,-0.203125 1.645305,1.2e-5 2.87421,0.426574 3.686719,1.279688 0.81249,0.853135 1.218739,2.146363 1.21875,3.879688"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4945"
+ inkscape:connector-curvature="0" /><path
+ d="m -47.787146,-55.643952 0,6.032813 -1.878906,0 0,-15.701564 1.878906,0 0,1.726563 c 0.392704,-0.677073 0.886975,-1.178114 1.482813,-1.503125 0.602598,-0.33176 1.320306,-0.497645 2.153125,-0.497657 1.381241,1.2e-5 2.501813,0.548449 3.361719,1.645313 0.866655,1.096884 1.299988,2.53907 1.3,4.326563 -1.2e-5,1.787504 -0.433345,3.22969 -1.3,4.326562 -0.859906,1.096876 -1.980478,1.645313 -3.361719,1.645313 -0.832819,0 -1.550527,-0.1625 -2.153125,-0.4875 -0.595838,-0.33177 -1.090109,-0.836197 -1.482813,-1.513281 m 6.357813,-3.971094 c -1e-5,-1.374472 -0.284385,-2.451034 -0.853125,-3.229688 -0.561988,-0.785407 -1.337248,-1.178115 -2.325781,-1.178125 -0.988548,1e-5 -1.767193,0.392718 -2.335938,1.178125 -0.561983,0.778654 -0.842973,1.855216 -0.842969,3.229688 -4e-6,1.374483 0.280986,2.45443 0.842969,3.239844 0.568745,0.778647 1.34739,1.16797 2.335938,1.167969 0.988533,1e-6 1.763793,-0.389322 2.325781,-1.167969 0.56874,-0.785414 0.853115,-1.865361 0.853125,-3.239844"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4947"
+ inkscape:connector-curvature="0" /><path
+ d="m -26.662145,-60.09239 0,0.914063 -8.592188,0 c 0.08125,1.286462 0.467184,2.268232 1.157812,2.945312 0.697391,0.670314 1.665619,1.00547 2.904688,1.005469 0.7177,10e-7 1.41171,-0.08802 2.082031,-0.264063 0.677074,-0.176039 1.347386,-0.440102 2.010938,-0.792187 l 0,1.767188 c -0.670323,0.284375 -1.357562,0.501041 -2.061719,0.65 -0.704175,0.148958 -1.418497,0.223437 -2.142969,0.223437 -1.814589,0 -3.253389,-0.528125 -4.316406,-1.584375 -1.056252,-1.056248 -1.584377,-2.484892 -1.584375,-4.285938 -2e-6,-1.861972 0.50104,-3.338012 1.503125,-4.428125 1.00885,-1.096864 2.366401,-1.645301 4.072656,-1.645313 1.5302,1.2e-5 2.738793,0.494282 3.625782,1.482813 0.893738,0.98178 1.340613,2.319018 1.340625,4.011719 m -1.86875,-0.548438 c -0.01355,-1.022388 -0.301312,-1.838272 -0.863282,-2.447656 -0.555217,-0.609365 -1.293237,-0.914052 -2.214062,-0.914062 -1.042714,10e-6 -1.878912,0.294541 -2.508594,0.883593 -0.622921,0.589071 -0.981774,1.418498 -1.076563,2.488282 l 6.662501,-0.01016"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4949"
+ inkscape:connector-curvature="0" /></g><g
+ style="font-size:9.60000038px"
+ id="text5819"><path
+ d="m -393.83092,-40.21505 0,5.697657 2.57969,0 c 0.95468,8e-6 1.6927,-0.247128 2.21406,-0.741406 0.52134,-0.494262 0.78202,-1.198428 0.78203,-2.112501 -1e-5,-0.90728 -0.26069,-1.60806 -0.78203,-2.102343 -0.52136,-0.494258 -1.25938,-0.741393 -2.21406,-0.741407 l -2.57969,0 m -2.05156,-1.685937 4.63125,0 c 1.69947,1.5e-5 2.98254,0.385952 3.84922,1.157812 0.87342,0.765118 1.31014,1.889075 1.31015,3.371875 -10e-6,1.496364 -0.43673,2.627092 -1.31015,3.392188 -0.86668,0.765111 -2.14975,1.147663 -3.84922,1.147656 l -2.57969,0 0,6.093751 -2.05156,0 0,-15.163282"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4952"
+ inkscape:connector-curvature="0" /><path
+ d="m -382.79108,-28.464268 3.35157,0 0,-11.567969 -3.6461,0.73125 0,-1.86875 3.62578,-0.73125 2.05157,0 0,13.436719 3.35156,0 0,1.726563 -8.73438,0 0,-1.726563"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4954"
+ inkscape:connector-curvature="0" /><path
+ d="m -363.46373,-41.900987 3.05703,0 3.86953,10.31875 3.88984,-10.31875 3.05704,0 0,15.163282 -2.00079,0 0,-13.314845 -3.91015,10.400001 -2.06172,0 -3.91016,-10.400001 0,13.314845 -1.99062,0 0,-15.163282"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4956"
+ inkscape:connector-curvature="0" /><path
+ d="m -340.4192,-32.455674 c -1.5099,5e-6 -2.55599,0.172662 -3.13828,0.517968 -0.58229,0.345318 -0.87344,0.93438 -0.87344,1.767188 0,0.663545 0.21667,1.191669 0.65,1.584375 0.4401,0.385939 1.03594,0.578908 1.7875,0.578906 1.03593,2e-6 1.86536,-0.365623 2.48829,-1.096875 0.62967,-0.738017 0.94452,-1.716402 0.94453,-2.935156 l 0,-0.416406 -1.8586,0 m 3.72735,-0.771875 0,6.489844 -1.86875,0 0,-1.726563 c -0.42657,0.690626 -0.95808,1.201824 -1.59453,1.533594 -0.63647,0.325 -1.41512,0.4875 -2.33594,0.4875 -1.16459,0 -2.09219,-0.325 -2.78282,-0.975 -0.68385,-0.65677 -1.02578,-1.533592 -1.02578,-2.630469 0,-1.279683 0.42656,-2.244526 1.27969,-2.894531 0.85989,-0.649994 2.13958,-0.974993 3.83906,-0.975 l 2.62032,0 0,-0.182813 c -10e-6,-0.859888 -0.28439,-1.523429 -0.85313,-1.990625 -0.56199,-0.473949 -1.35417,-0.710927 -2.37656,-0.710938 -0.65001,1.1e-5 -1.28308,0.07787 -1.89922,0.233594 -0.61615,0.155739 -1.2086,0.389333 -1.77734,0.700782 l 0,-1.726563 c 0.68385,-0.264051 1.34739,-0.460405 1.99062,-0.589063 0.64323,-0.135405 1.26953,-0.203113 1.87891,-0.203125 1.6453,1.2e-5 2.87421,0.426574 3.68672,1.279688 0.81249,0.853135 1.21874,2.146362 1.21875,3.879688"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4958"
+ inkscape:connector-curvature="0" /><path
+ d="m -330.98404,-41.342394 0,3.229688 3.84922,0 0,1.452344 -3.84922,0 0,6.175 c -1e-5,0.927607 0.12525,1.52344 0.37578,1.7875 0.25729,0.264065 0.77525,0.396096 1.5539,0.396094 l 1.91954,0 0,1.564063 -1.91954,0 c -1.44219,0 -2.4375,-0.267448 -2.98593,-0.802344 -0.54844,-0.541665 -0.82266,-1.523435 -0.82266,-2.945313 l 0,-6.175 -1.37109,0 0,-1.452344 1.37109,0 0,-3.229688 1.87891,0"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4960"
+ inkscape:connector-curvature="0" /><path
+ d="m -314.93717,-32.892393 0,0.914062 -8.59219,0 c 0.0813,1.286463 0.46719,2.268233 1.15781,2.945313 0.6974,0.670314 1.66562,1.00547 2.90469,1.005469 0.7177,1e-6 1.41171,-0.08802 2.08203,-0.264063 0.67708,-0.17604 1.34739,-0.440102 2.01094,-0.792187 l 0,1.767187 c -0.67032,0.284376 -1.35756,0.501042 -2.06172,0.650001 -0.70417,0.148958 -1.41849,0.223437 -2.14297,0.223437 -1.81458,0 -3.25339,-0.528125 -4.3164,-1.584375 -1.05625,-1.056248 -1.58438,-2.484892 -1.58438,-4.285938 0,-1.861972 0.50104,-3.338012 1.50313,-4.428125 1.00885,-1.096864 2.3664,-1.645301 4.07265,-1.645313 1.5302,1.2e-5 2.7388,0.494282 3.62579,1.482813 0.89373,0.98178 1.34061,2.319018 1.34062,4.011719 m -1.86875,-0.548438 c -0.0136,-1.022388 -0.30131,-1.838272 -0.86328,-2.447656 -0.55522,-0.609365 -1.29324,-0.914052 -2.21406,-0.914063 -1.04272,1.1e-5 -1.87892,0.294542 -2.5086,0.883594 -0.62292,0.589071 -0.98177,1.418498 -1.07656,2.488282 l 6.6625,-0.01016"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4962"
+ inkscape:connector-curvature="0" /><path
+ d="m -305.27857,-36.365831 c -0.2099,-0.121865 -0.44011,-0.209886 -0.69062,-0.264062 -0.24376,-0.06093 -0.51459,-0.0914 -0.8125,-0.09141 -1.05626,10e-6 -1.86876,0.345323 -2.4375,1.035938 -0.56199,0.683862 -0.84298,1.669018 -0.84297,2.955469 l 0,5.992188 -1.87891,0 0,-11.375001 1.87891,0 0,1.767188 c 0.3927,-0.690615 0.9039,-1.201812 1.53359,-1.533594 0.62968,-0.33853 1.39479,-0.507801 2.29531,-0.507813 0.12864,1.2e-5 0.27083,0.01017 0.42657,0.03047 0.15572,0.01355 0.32837,0.03725 0.51797,0.07109 l 0.0102,1.919531"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4964"
+ inkscape:connector-curvature="0" /><path
+ d="m -303.29811,-38.112706 1.86875,0 0,11.375001 -1.86875,0 0,-11.375001 m 0,-4.428125 1.86875,0 0,2.366406 -1.86875,0 0,-2.366406"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4966"
+ inkscape:connector-curvature="0" /><path
+ d="m -292.35982,-32.455674 c -1.5099,5e-6 -2.556,0.172662 -3.13828,0.517968 -0.5823,0.345318 -0.87344,0.93438 -0.87344,1.767188 0,0.663545 0.21666,1.191669 0.65,1.584375 0.4401,0.385939 1.03593,0.578908 1.7875,0.578906 1.03593,2e-6 1.86536,-0.365623 2.48828,-1.096875 0.62968,-0.738017 0.94452,-1.716402 0.94453,-2.935156 l 0,-0.416406 -1.85859,0 m 3.72734,-0.771875 0,6.489844 -1.86875,0 0,-1.726563 c -0.42657,0.690626 -0.95808,1.201824 -1.59453,1.533594 -0.63646,0.325 -1.41511,0.4875 -2.33594,0.4875 -1.16458,0 -2.09219,-0.325 -2.78281,-0.975 -0.68386,-0.65677 -1.02578,-1.533592 -1.02578,-2.630469 0,-1.279683 0.42656,-2.244526 1.27969,-2.894531 0.85989,-0.649994 2.13958,-0.974993 3.83906,-0.975 l 2.62031,0 0,-0.182813 c -10e-6,-0.859888 -0.28438,-1.523429 -0.85312,-1.990625 -0.56199,-0.473949 -1.35418,-0.710927 -2.37657,-0.710938 -0.65,1.1e-5 -1.28307,0.07787 -1.89921,0.233594 -0.61615,0.155739 -1.2086,0.389333 -1.77735,0.700782 l 0,-1.726563 c 0.68385,-0.264051 1.34739,-0.460405 1.99063,-0.589063 0.64322,-0.135405 1.26952,-0.203113 1.8789,-0.203125 1.64531,1.2e-5 2.87421,0.426574 3.68672,1.279688 0.81249,0.853135 1.21874,2.146362 1.21875,3.879688"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4968"
+ inkscape:connector-curvature="0" /><path
+ d="m -284.7731,-42.540831 1.86875,0 0,15.803126 -1.86875,0 0,-15.803126"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4970"
+ inkscape:connector-curvature="0" /><path
+ d="m -263.21139,-41.403331 0,2.000781 c -0.77865,-0.372382 -1.51329,-0.649986 -2.2039,-0.832812 -0.69064,-0.182799 -1.35756,-0.274205 -2.00078,-0.274219 -1.1172,1.4e-5 -1.98048,0.21668 -2.58985,0.65 -0.60261,0.433346 -0.90391,1.049491 -0.9039,1.848438 -10e-6,0.670323 0.19973,1.178135 0.59922,1.523437 0.40624,0.338551 1.17134,0.61277 2.29531,0.822657 l 1.23906,0.253906 c 1.5302,0.291154 2.65754,0.805737 3.38203,1.54375 0.73124,0.731256 1.09687,1.713026 1.09688,2.945313 -10e-6,1.469273 -0.49429,2.583074 -1.48282,3.341406 -0.98178,0.758333 -2.42396,1.1375 -4.32656,1.1375 -0.71771,0 -1.48282,-0.08125 -2.29531,-0.24375 -0.80573,-0.1625 -1.64193,-0.402864 -2.50859,-0.721094 l 0,-2.1125 c 0.83281,0.46719 1.64869,0.819273 2.44765,1.05625 0.79896,0.236981 1.58437,0.35547 2.35625,0.355469 1.17135,1e-6 2.07525,-0.230207 2.71172,-0.690625 0.63645,-0.460414 0.95468,-1.117184 0.95469,-1.970313 -10e-6,-0.744787 -0.23022,-1.327078 -0.69063,-1.746875 -0.45365,-0.419785 -1.20183,-0.734629 -2.24453,-0.944531 l -1.24922,-0.24375 c -1.53021,-0.30468 -2.63724,-0.782024 -3.32109,-1.432031 -0.68386,-0.649991 -1.02578,-1.553897 -1.02578,-2.711719 0,-1.340613 0.47057,-2.396862 1.41172,-3.168751 0.94791,-0.77186 2.25129,-1.157797 3.91015,-1.157812 0.71093,1.5e-5 1.43541,0.06434 2.17344,0.192969 0.73801,0.128661 1.49296,0.321629 2.26484,0.578906"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4972"
+ inkscape:connector-curvature="0" /><path
+ d="m -249.72389,-33.603331 0,6.865626 -1.86875,0 0,-6.804688 c -1e-5,-1.076555 -0.2099,-1.882283 -0.62968,-2.417188 -0.4198,-0.534886 -1.04949,-0.802334 -1.88907,-0.802344 -1.00886,10e-6 -1.80443,0.321625 -2.38671,0.964844 -0.5823,0.643238 -0.87345,1.52006 -0.87344,2.630469 l 0,6.428907 -1.87891,0 0,-15.803126 1.87891,0 0,6.195313 c 0.44687,-0.683844 0.97161,-1.195042 1.57422,-1.533594 0.60937,-0.33853 1.31015,-0.507801 2.10234,-0.507813 1.30676,1.2e-5 2.2953,0.406262 2.96563,1.21875 0.6703,0.805739 1.00545,1.994019 1.00546,3.564844"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4974"
+ inkscape:connector-curvature="0" /><path
+ d="m -236.24654,-32.892393 0,0.914062 -8.59219,0 c 0.0813,1.286463 0.46718,2.268233 1.15781,2.945313 0.69739,0.670314 1.66562,1.00547 2.90469,1.005469 0.7177,1e-6 1.41171,-0.08802 2.08203,-0.264063 0.67708,-0.17604 1.34739,-0.440102 2.01094,-0.792187 l 0,1.767187 c -0.67032,0.284376 -1.35756,0.501042 -2.06172,0.650001 -0.70417,0.148958 -1.4185,0.223437 -2.14297,0.223437 -1.81459,0 -3.25339,-0.528125 -4.3164,-1.584375 -1.05626,-1.056248 -1.58438,-2.484892 -1.58438,-4.285938 0,-1.861972 0.50104,-3.338012 1.50313,-4.428125 1.00885,-1.096864 2.3664,-1.645301 4.07265,-1.645313 1.5302,1.2e-5 2.73879,0.494282 3.62578,1.482813 0.89374,0.98178 1.34062,2.319018 1.34063,4.011719 m -1.86875,-0.548438 c -0.0136,-1.022388 -0.30131,-1.838272 -0.86328,-2.447656 -0.55522,-0.609365 -1.29324,-0.914052 -2.21407,-0.914063 -1.04271,1.1e-5 -1.87891,0.294542 -2.50859,0.883594 -0.62292,0.589071 -0.98177,1.418498 -1.07656,2.488282 l 6.6625,-0.01016"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4976"
+ inkscape:connector-curvature="0" /><path
+ d="m -223.44967,-32.892393 0,0.914062 -8.59218,0 c 0.0812,1.286463 0.46718,2.268233 1.15781,2.945313 0.69739,0.670314 1.66562,1.00547 2.90469,1.005469 0.7177,1e-6 1.41171,-0.08802 2.08203,-0.264063 0.67707,-0.17604 1.34738,-0.440102 2.01093,-0.792187 l 0,1.767187 c -0.67032,0.284376 -1.35756,0.501042 -2.06171,0.650001 -0.70418,0.148958 -1.4185,0.223437 -2.14297,0.223437 -1.81459,0 -3.25339,-0.528125 -4.31641,-1.584375 -1.05625,-1.056248 -1.58438,-2.484892 -1.58437,-4.285938 -1e-5,-1.861972 0.50104,-3.338012 1.50312,-4.428125 1.00885,-1.096864 2.3664,-1.645301 4.07266,-1.645313 1.5302,1.2e-5 2.73879,0.494282 3.62578,1.482813 0.89374,0.98178 1.34061,2.319018 1.34062,4.011719 m -1.86875,-0.548438 c -0.0136,-1.022388 -0.30131,-1.838272 -0.86328,-2.447656 -0.55521,-0.609365 -1.29324,-0.914052 -2.21406,-0.914063 -1.04271,1.1e-5 -1.87891,0.294542 -2.50859,0.883594 -0.62292,0.589071 -0.98178,1.418498 -1.07657,2.488282 l 6.6625,-0.01016"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4978"
+ inkscape:connector-curvature="0" /><path
+ d="m -218.53404,-41.342394 0,3.229688 3.84922,0 0,1.452344 -3.84922,0 0,6.175 c -1e-5,0.927607 0.12525,1.52344 0.37578,1.7875 0.25729,0.264065 0.77525,0.396096 1.55391,0.396094 l 1.91953,0 0,1.564063 -1.91953,0 c -1.4422,0 -2.43751,-0.267448 -2.98594,-0.802344 -0.54844,-0.541665 -0.82266,-1.523435 -0.82266,-2.945313 l 0,-6.175 -1.37109,0 0,-1.452344 1.37109,0 0,-3.229688 1.87891,0"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4980"
+ inkscape:connector-curvature="0" /><path
+ d="m -206.5395,-33.268174 5.47421,0 0,1.665625 -5.47421,0 0,-1.665625"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4982"
+ inkscape:connector-curvature="0" /><path
+ d="m -190.83795,-28.464268 3.35157,0 0,-11.567969 -3.6461,0.73125 0,-1.86875 3.62578,-0.73125 2.05157,0 0,13.436719 3.35156,0 0,1.726563 -8.73438,0 0,-1.726563"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4984"
+ inkscape:connector-curvature="0" /><path
+ d="m -173.56215,-33.938487 c -0.97501,7e-6 -1.7435,0.260684 -2.30547,0.782031 -0.55522,0.521361 -0.83282,1.239068 -0.83282,2.153126 0,0.914065 0.2776,1.631773 0.83282,2.153125 0.56197,0.521355 1.33046,0.782032 2.30547,0.782031 0.97499,10e-7 1.74348,-0.260676 2.30546,-0.782031 0.56197,-0.528123 0.84296,-1.24583 0.84297,-2.153125 -10e-6,-0.914058 -0.281,-1.631765 -0.84297,-2.153126 -0.55521,-0.521347 -1.3237,-0.782024 -2.30546,-0.782031 m -2.05157,-0.873437 c -0.88021,-0.216659 -1.56745,-0.626294 -2.06172,-1.228907 -0.4875,-0.602594 -0.73125,-1.337229 -0.73125,-2.203906 0,-1.211967 0.42995,-2.170039 1.28985,-2.874219 0.86666,-0.704152 2.05156,-1.056235 3.55469,-1.05625 1.50988,1.5e-5 2.69478,0.352098 3.55468,1.05625 0.85989,0.70418 1.28984,1.662252 1.28985,2.874219 -1e-5,0.866677 -0.24715,1.601312 -0.74141,2.203906 -0.48751,0.602613 -1.16798,1.012248 -2.04141,1.228907 0.98854,0.230216 1.75702,0.680476 2.30547,1.350781 0.5552,0.670318 0.8328,1.489589 0.83282,2.457813 -2e-5,1.469273 -0.45028,2.596616 -1.35079,3.382031 -0.89376,0.785417 -2.17683,1.178125 -3.84921,1.178125 -1.67241,0 -2.95886,-0.392708 -3.85938,-1.178125 -0.89375,-0.785415 -1.34063,-1.912758 -1.34063,-3.382031 0,-0.968224 0.27761,-1.787495 0.83282,-2.457813 0.5552,-0.670305 1.32708,-1.120565 2.31562,-1.350781 m -0.75156,-3.239844 c 0,0.785427 0.24375,1.398187 0.73125,1.838281 0.49427,0.440113 1.18489,0.660165 2.07188,0.660156 0.8802,9e-6 1.56744,-0.220043 2.06171,-0.660156 0.50104,-0.440094 0.75156,-1.052854 0.75157,-1.838281 -1e-5,-0.785405 -0.25053,-1.398165 -0.75157,-1.838282 -0.49427,-0.44009 -1.18151,-0.660142 -2.06171,-0.660156 -0.88699,1.4e-5 -1.57761,0.220066 -2.07188,0.660156 -0.4875,0.440117 -0.73125,1.052877 -0.73125,1.838282"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4986"
+ inkscape:connector-curvature="0" /><path
+ d="m -164.35044,-28.464268 3.35156,0 0,-11.567969 -3.64609,0.73125 0,-1.86875 3.62578,-0.73125 2.05156,0 0,13.436719 3.35156,0 0,1.726563 -8.73437,0 0,-1.726563"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4988"
+ inkscape:connector-curvature="0" /><path
+ d="m -142.86996,-35.929112 c 0.46717,-0.839573 1.02577,-1.459104 1.67578,-1.858594 0.64998,-0.399468 1.41509,-0.599207 2.29531,-0.599219 1.18488,1.2e-5 2.09894,0.416418 2.74219,1.249219 0.64321,0.826051 0.96482,2.004175 0.96484,3.534375 l 0,6.865626 -1.8789,0 0,-6.804688 c -2e-5,-1.090096 -0.19299,-1.89921 -0.57891,-2.427344 -0.38595,-0.528115 -0.97502,-0.792178 -1.76719,-0.792188 -0.96824,10e-6 -1.73334,0.321625 -2.29531,0.964844 -0.56199,0.643238 -0.84298,1.52006 -0.84297,2.630469 l 0,6.428907 -1.87891,0 0,-6.804688 c -1e-5,-1.096867 -0.19297,-1.905981 -0.5789,-2.427344 -0.38595,-0.528115 -0.98178,-0.792178 -1.7875,-0.792188 -0.9547,10e-6 -1.71303,0.32501 -2.275,0.975001 -0.56199,0.643237 -0.84298,1.516674 -0.84297,2.620312 l 0,6.428907 -1.87891,0 0,-11.375001 1.87891,0 0,1.767188 c 0.42656,-0.697386 0.93775,-1.211969 1.53359,-1.54375 0.59583,-0.33176 1.30338,-0.497645 2.12266,-0.497657 0.82603,1.2e-5 1.52681,0.209908 2.10234,0.629688 0.58228,0.419802 1.01223,1.029177 1.28985,1.828125"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4990"
+ inkscape:connector-curvature="0" /><path
+ d="m -122.59808,-35.929112 c 0.46717,-0.839573 1.02577,-1.459104 1.67578,-1.858594 0.64999,-0.399468 1.41509,-0.599207 2.29531,-0.599219 1.18488,1.2e-5 2.09894,0.416418 2.74219,1.249219 0.64321,0.826051 0.96482,2.004175 0.96484,3.534375 l 0,6.865626 -1.8789,0 0,-6.804688 c -2e-5,-1.090096 -0.19299,-1.89921 -0.57891,-2.427344 -0.38595,-0.528115 -0.97502,-0.792178 -1.76719,-0.792188 -0.96824,10e-6 -1.73334,0.321625 -2.29531,0.964844 -0.56199,0.643238 -0.84298,1.52006 -0.84297,2.630469 l 0,6.428907 -1.87891,0 0,-6.804688 c 0,-1.096867 -0.19297,-1.905981 -0.5789,-2.427344 -0.38595,-0.528115 -0.98178,-0.792178 -1.7875,-0.792188 -0.9547,10e-6 -1.71303,0.32501 -2.275,0.975001 -0.56199,0.643237 -0.84297,1.516674 -0.84297,2.620312 l 0,6.428907 -1.87891,0 0,-11.375001 1.87891,0 0,1.767188 c 0.42656,-0.697386 0.93775,-1.211969 1.53359,-1.54375 0.59583,-0.33176 1.30338,-0.497645 2.12266,-0.497657 0.82603,1.2e-5 1.52681,0.209908 2.10234,0.629688 0.58228,0.419802 1.01223,1.029177 1.28985,1.828125"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4992"
+ inkscape:connector-curvature="0" /><path
+ d="m -95.105126,-38.112706 -4.113282,5.535157 4.326563,5.839844 -2.203906,0 -3.310939,-4.46875 -3.31094,4.46875 -2.2039,0 4.41797,-5.951563 -4.04219,-5.423438 2.2039,0 3.01641,4.052344 3.016407,-4.052344 2.203907,0"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4994"
+ inkscape:connector-curvature="0" /><path
+ d="m -85.00982,-28.464268 3.351562,0 0,-11.567969 -3.646094,0.73125 0,-1.86875 3.625782,-0.73125 2.051562,0 0,13.436719 3.351563,0 0,1.726563 -8.734375,0 0,-1.726563"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4996"
+ inkscape:connector-curvature="0" /><path
+ d="m -67.734015,-33.938487 c -0.975005,7e-6 -1.743494,0.260684 -2.305468,0.782031 -0.555213,0.521361 -0.832816,1.239068 -0.832813,2.153126 -3e-6,0.914065 0.2776,1.631773 0.832813,2.153125 0.561974,0.521355 1.330463,0.782032 2.305468,0.782031 0.974993,10e-7 1.743482,-0.260676 2.305469,-0.782031 0.56197,-0.528123 0.842959,-1.24583 0.842969,-2.153125 -1e-5,-0.914058 -0.280999,-1.631765 -0.842969,-2.153126 -0.555216,-0.521347 -1.323705,-0.782024 -2.305469,-0.782031 m -2.051562,-0.873437 c -0.880212,-0.216659 -1.567451,-0.626294 -2.061719,-1.228907 -0.487502,-0.602594 -0.731252,-1.337229 -0.73125,-2.203906 -2e-6,-1.211967 0.429946,-2.170039 1.289844,-2.874219 0.866663,-0.704152 2.051557,-1.056235 3.554687,-1.05625 1.509888,1.5e-5 2.694783,0.352098 3.554688,1.05625 0.859885,0.70418 1.289833,1.662252 1.289844,2.874219 -1.1e-5,0.866677 -0.247147,1.601312 -0.741406,2.203906 -0.487511,0.602613 -1.167979,1.012248 -2.041407,1.228907 0.988532,0.230216 1.757021,0.680476 2.305469,1.350781 0.555197,0.670318 0.832801,1.489589 0.832813,2.457813 -1.2e-5,1.469273 -0.450272,2.596616 -1.350782,3.382031 -0.893759,0.785417 -2.176831,1.178125 -3.849219,1.178125 -1.6724,0 -2.958858,-0.392708 -3.859375,-1.178125 -0.893752,-0.785415 -1.340626,-1.912758 -1.340625,-3.382031 -10e-7,-0.968224 0.277603,-1.787495 0.832813,-2.457813 0.555205,-0.670305 1.32708,-1.120565 2.315625,-1.350781 m -0.751563,-3.239844 c -3e-6,0.785427 0.243746,1.398187 0.73125,1.838281 0.494266,0.440113 1.184891,0.660165 2.071875,0.660156 0.880201,9e-6 1.56744,-0.220043 2.061719,-0.660156 0.501033,-0.440094 0.751553,-1.052854 0.751563,-1.838281 -1e-5,-0.785405 -0.25053,-1.398165 -0.751563,-1.838282 -0.494279,-0.44009 -1.181518,-0.660142 -2.061719,-0.660156 -0.886984,1.4e-5 -1.577609,0.220066 -2.071875,0.660156 -0.487504,0.440117 -0.731253,1.052877 -0.73125,1.838282"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path4998"
+ inkscape:connector-curvature="0" /><path
+ d="m -58.522302,-28.464268 3.351563,0 0,-11.567969 -3.646094,0.73125 0,-1.86875 3.625781,-0.73125 2.051563,0 0,13.436719 3.351562,0 0,1.726563 -8.734375,0 0,-1.726563"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path5000"
+ inkscape:connector-curvature="0" /><path
+ d="m -37.041839,-35.929112 c 0.467176,-0.839573 1.025769,-1.459104 1.675781,-1.858594 0.649987,-0.399468 1.415091,-0.599207 2.295313,-0.599219 1.18488,1.2e-5 2.098942,0.416418 2.742188,1.249219 0.643211,0.826051 0.964825,2.004175 0.964843,3.534375 l 0,6.865626 -1.878906,0 0,-6.804688 c -1.7e-5,-1.090096 -0.192985,-1.89921 -0.578906,-2.427344 -0.385953,-0.528115 -0.975015,-0.792178 -1.767188,-0.792188 -0.968242,10e-6 -1.733346,0.321625 -2.295312,0.964844 -0.561991,0.643238 -0.84298,1.52006 -0.842969,2.630469 l 0,6.428907 -1.878907,0 0,-6.804688 c -9e-6,-1.096867 -0.192977,-1.905981 -0.578906,-2.427344 -0.385946,-0.528115 -0.981778,-0.792178 -1.7875,-0.792188 -0.954693,10e-6 -1.713026,0.32501 -2.275,0.975001 -0.561983,0.643237 -0.842973,1.516674 -0.842969,2.620312 l 0,6.428907 -1.878906,0 0,-11.375001 1.878906,0 0,1.767188 c 0.426558,-0.697386 0.937756,-1.211969 1.533594,-1.54375 0.595827,-0.33176 1.303379,-0.497645 2.122656,-0.497657 0.826034,1.2e-5 1.526814,0.209908 2.102344,0.629688 0.582282,0.419802 1.012229,1.029177 1.289844,1.828125"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path5002"
+ inkscape:connector-curvature="0" /><path
+ d="m -16.769958,-35.929112 c 0.467176,-0.839573 1.02577,-1.459104 1.675781,-1.858594 0.649987,-0.399468 1.415091,-0.599207 2.295313,-0.599219 1.18488,1.2e-5 2.098942,0.416418 2.742188,1.249219 0.6432107,0.826051 0.964825,2.004175 0.9648435,3.534375 l 0,6.865626 -1.8789065,0 0,-6.804688 c -1.6e-5,-1.090096 -0.192985,-1.89921 -0.578906,-2.427344 -0.385953,-0.528115 -0.975015,-0.792178 -1.767188,-0.792188 -0.968242,10e-6 -1.733346,0.321625 -2.295312,0.964844 -0.561991,0.643238 -0.84298,1.52006 -0.842969,2.630469 l 0,6.428907 -1.878906,0 0,-6.804688 c -10e-6,-1.096867 -0.192978,-1.905981 -0.578907,-2.427344 -0.385946,-0.528115 -0.981778,-0.792178 -1.7875,-0.792188 -0.954693,10e-6 -1.713026,0.32501 -2.275,0.975001 -0.561983,0.643237 -0.842973,1.516674 -0.842969,2.620312 l 0,6.428907 -1.878906,0 0,-11.375001 1.878906,0 0,1.767188 c 0.426559,-0.697386 0.937756,-1.211969 1.533594,-1.54375 0.595828,-0.33176 1.303379,-0.497645 2.122656,-0.497657 0.826034,1.2e-5 1.526814,0.209908 2.102344,0.629688 0.582282,0.419802 1.012229,1.029177 1.289844,1.828125"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path5004"
+ inkscape:connector-curvature="0" /><path
+ d="m 4.5886233,-41.900987 1.7265626,0 -5.2812503,17.092969 -1.72656255,0 5.28125025,-17.092969"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path5006"
+ inkscape:connector-curvature="0" /><path
+ d="m 14.663617,-41.900987 9.750001,0 0,0.873437 -5.504688,14.289845 -2.142969,0 5.179688,-13.43672 -7.282032,0 0,-1.726562"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path5008"
+ inkscape:connector-curvature="0" /><path
+ d="m 28.42536,-29.317393 2.142969,0 0,2.579688 -2.142969,0 0,-2.579688"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path5010"
+ inkscape:connector-curvature="0" /><path
+ d="m 35.402686,-28.464268 3.351562,0 0,-11.567969 -3.646094,0.73125 0,-1.86875 3.625782,-0.73125 2.051562,0 0,13.436719 3.351563,0 0,1.726563 -8.734375,0 0,-1.726563"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path5012"
+ inkscape:connector-curvature="0" /><path
+ d="m 48.666742,-41.900987 2.142969,0 0,1.746875 -1.665625,3.25 -1.310156,0 0.832812,-3.25 0,-1.746875 m 4.164063,0 2.142969,0 0,1.746875 -1.665625,3.25 -1.310157,0 0.832813,-3.25 0,-1.746875"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path5014"
+ inkscape:connector-curvature="0" /><path
+ d="m 74.86988,-38.112706 -4.113282,5.535157 4.326563,5.839844 -2.203906,0 -3.310938,-4.46875 -3.310938,4.46875 -2.203906,0 4.417969,-5.951563 -4.042188,-5.423438 2.203907,0 3.016406,4.052344 3.016406,-4.052344 2.203907,0"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path5016"
+ inkscape:connector-curvature="0" /><path
+ d="m 84.091748,-41.900987 9.750001,0 0,0.873437 -5.504688,14.289845 -2.142969,0 5.179688,-13.43672 -7.282032,0 0,-1.726562"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path5018"
+ inkscape:connector-curvature="0" /><path
+ d="m 97.853491,-29.317393 2.142969,0 0,2.579688 -2.142969,0 0,-2.579688"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path5020"
+ inkscape:connector-curvature="0" /><path
+ d="m 104.83082,-28.464268 3.35156,0 0,-11.567969 -3.64609,0.73125 0,-1.86875 3.62578,-0.73125 2.05156,0 0,13.436719 3.35156,0 0,1.726563 -8.73437,0 0,-1.726563"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path5022"
+ inkscape:connector-curvature="0" /><path
+ d="m 118.09487,-41.900987 2.14297,0 0,1.746875 -1.66562,3.25 -1.31016,0 0.83281,-3.25 0,-1.746875 m 4.16407,0 2.14296,0 0,1.746875 -1.66562,3.25 -1.31016,0 0.83282,-3.25 0,-1.746875"
+ style="font-size:20.80000114px;font-family:HelveticaNeueLTPro-Md;fill:#f6921e"
+ id="path5024"
+ inkscape:connector-curvature="0" /></g><g
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.80000019px;line-height:164.99999762%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;display:inline;fill:#f6921e;fill-opacity:1"
+ id="text4741-7"><path
+ d="m -345.92125,420.07328 -2.24375,1.2125 2.24375,1.21875 -0.3625,0.6125 -2.1,-1.26875 0,2.35625 -0.7125,0 0,-2.35625 -2.1,1.26875 -0.3625,-0.6125 2.24375,-1.21875 -2.24375,-1.2125 0.3625,-0.61875 2.1,1.26875 0,-2.35625 0.7125,0 0,2.35625 2.1,-1.26875 0.3625,0.61875"
+ id="path5027"
+ inkscape:connector-curvature="0" /><path
+ d="m -343.02125,419.57328 0,7.25625 1.525,0 c 1.28749,1e-5 2.22916,-0.29166 2.825,-0.875 0.59999,-0.58333 0.89999,-1.50416 0.9,-2.7625 -10e-6,-1.24999 -0.30001,-2.16457 -0.9,-2.74375 -0.59584,-0.58332 -1.53751,-0.87499 -2.825,-0.875 l -1.525,0 m -1.2625,-1.0375 2.59375,0 c 1.80833,1e-5 3.13541,0.3771 3.98125,1.13125 0.84582,0.75001 1.26874,1.92501 1.26875,3.525 -10e-6,1.60834 -0.42501,2.78959 -1.275,3.54375 -0.85001,0.75417 -2.17501,1.13125 -3.975,1.13125 l -2.59375,0 0,-9.33125"
+ id="path5029"
+ inkscape:connector-curvature="0" /><path
+ d="m -328.49625,424.07953 0,0.5625 -5.2875,0 c 0.05,0.79167 0.2875,1.39584 0.7125,1.8125 0.42916,0.41251 1.02499,0.61876 1.7875,0.61875 0.44166,10e-6 0.86874,-0.0542 1.28125,-0.1625 0.41666,-0.10833 0.82916,-0.27083 1.2375,-0.4875 l 0,1.0875 c -0.41251,0.17501 -0.83543,0.30834 -1.26875,0.4 -0.43334,0.0917 -0.87292,0.1375 -1.31875,0.1375 -1.11667,0 -2.00209,-0.32499 -2.65625,-0.975 -0.65,-0.64999 -0.975,-1.52916 -0.975,-2.6375 0,-1.14582 0.30833,-2.05416 0.925,-2.725 0.62083,-0.67499 1.45624,-1.01249 2.50625,-1.0125 0.94166,10e-6 1.68541,0.30418 2.23125,0.9125 0.54999,0.60418 0.82499,1.42709 0.825,2.46875 m -1.15,-0.3375 c -0.008,-0.62916 -0.18542,-1.13124 -0.53125,-1.50625 -0.34167,-0.37499 -0.79584,-0.56249 -1.3625,-0.5625 -0.64167,1e-5 -1.15626,0.18126 -1.54375,0.54375 -0.38334,0.36251 -0.60417,0.87293 -0.6625,1.53125 l 4.1,-0.006"
+ id="path5031"
+ inkscape:connector-curvature="0" /><path
+ d="m -326.60875,418.14203 1.15,0 0,9.725 -1.15,0 0,-9.725"
+ id="path5033"
+ inkscape:connector-curvature="0" /><path
+ d="m -317.07125,424.07953 0,0.5625 -5.2875,0 c 0.05,0.79167 0.2875,1.39584 0.7125,1.8125 0.42916,0.41251 1.025,0.61876 1.7875,0.61875 0.44166,10e-6 0.86874,-0.0542 1.28125,-0.1625 0.41666,-0.10833 0.82916,-0.27083 1.2375,-0.4875 l 0,1.0875 c -0.41251,0.17501 -0.83542,0.30834 -1.26875,0.4 -0.43334,0.0917 -0.87292,0.1375 -1.31875,0.1375 -1.11667,0 -2.00209,-0.32499 -2.65625,-0.975 -0.65,-0.64999 -0.975,-1.52916 -0.975,-2.6375 0,-1.14582 0.30833,-2.05416 0.925,-2.725 0.62083,-0.67499 1.45625,-1.01249 2.50625,-1.0125 0.94166,10e-6 1.68541,0.30418 2.23125,0.9125 0.54999,0.60418 0.82499,1.42709 0.825,2.46875 m -1.15,-0.3375 c -0.008,-0.62916 -0.18542,-1.13124 -0.53125,-1.50625 -0.34167,-0.37499 -0.79584,-0.56249 -1.3625,-0.5625 -0.64167,1e-5 -1.15625,0.18126 -1.54375,0.54375 -0.38334,0.36251 -0.60417,0.87293 -0.6625,1.53125 l 4.1,-0.006"
+ id="path5035"
+ inkscape:connector-curvature="0" /><path
+ d="m -314.04625,418.87953 0,1.9875 2.36875,0 0,0.89375 -2.36875,0 0,3.8 c -1e-5,0.57084 0.0771,0.93751 0.23125,1.1 0.15833,0.16251 0.47708,0.24376 0.95625,0.24375 l 1.18125,0 0,0.9625 -1.18125,0 c -0.88751,0 -1.50001,-0.16458 -1.8375,-0.49375 -0.3375,-0.33333 -0.50625,-0.93749 -0.50625,-1.8125 l 0,-3.8 -0.84375,0 0,-0.89375 0.84375,0 0,-1.9875 1.15625,0"
+ id="path5037"
+ inkscape:connector-curvature="0" /><path
+ d="m -304.17125,424.07953 0,0.5625 -5.2875,0 c 0.05,0.79167 0.2875,1.39584 0.7125,1.8125 0.42916,0.41251 1.02499,0.61876 1.7875,0.61875 0.44166,10e-6 0.86874,-0.0542 1.28125,-0.1625 0.41666,-0.10833 0.82916,-0.27083 1.2375,-0.4875 l 0,1.0875 c -0.41251,0.17501 -0.83542,0.30834 -1.26875,0.4 -0.43334,0.0917 -0.87292,0.1375 -1.31875,0.1375 -1.11667,0 -2.00209,-0.32499 -2.65625,-0.975 -0.65,-0.64999 -0.975,-1.52916 -0.975,-2.6375 0,-1.14582 0.30833,-2.05416 0.925,-2.725 0.62083,-0.67499 1.45625,-1.01249 2.50625,-1.0125 0.94166,10e-6 1.68541,0.30418 2.23125,0.9125 0.54999,0.60418 0.82499,1.42709 0.825,2.46875 m -1.15,-0.3375 c -0.008,-0.62916 -0.18542,-1.13124 -0.53125,-1.50625 -0.34167,-0.37499 -0.79584,-0.56249 -1.3625,-0.5625 -0.64167,1e-5 -1.15625,0.18126 -1.54375,0.54375 -0.38334,0.36251 -0.60417,0.87293 -0.6625,1.53125 l 4.1,-0.006"
+ id="path5039"
+ inkscape:connector-curvature="0" /><path
+ d="m -297.07125,418.87953 0,1.9875 2.36875,0 0,0.89375 -2.36875,0 0,3.8 c 0,0.57084 0.0771,0.93751 0.23125,1.1 0.15833,0.16251 0.47708,0.24376 0.95625,0.24375 l 1.18125,0 0,0.9625 -1.18125,0 c -0.8875,0 -1.5,-0.16458 -1.8375,-0.49375 -0.3375,-0.33333 -0.50625,-0.93749 -0.50625,-1.8125 l 0,-3.8 -0.84375,0 0,-0.89375 0.84375,0 0,-1.9875 1.15625,0"
+ id="path5041"
+ inkscape:connector-curvature="0" /><path
+ d="m -287.365,423.64203 0,4.225 -1.15,0 0,-4.1875 c -1e-5,-0.66249 -0.12918,-1.15832 -0.3875,-1.4875 -0.25834,-0.32916 -0.64584,-0.49374 -1.1625,-0.49375 -0.62084,10e-6 -1.11042,0.19793 -1.46875,0.59375 -0.35834,0.39584 -0.53751,0.93543 -0.5375,1.61875 l 0,3.95625 -1.15625,0 0,-9.725 1.15625,0 0,3.8125 c 0.27499,-0.42082 0.59791,-0.73541 0.96875,-0.94375 0.37499,-0.20832 0.80624,-0.31249 1.29375,-0.3125 0.80416,10e-6 1.41249,0.25001 1.825,0.75 0.41249,0.49584 0.61874,1.22709 0.61875,2.19375"
+ id="path5043"
+ inkscape:connector-curvature="0" /><path
+ d="m -279.07125,424.07953 0,0.5625 -5.2875,0 c 0.05,0.79167 0.2875,1.39584 0.7125,1.8125 0.42916,0.41251 1.025,0.61876 1.7875,0.61875 0.44166,10e-6 0.86875,-0.0542 1.28125,-0.1625 0.41666,-0.10833 0.82916,-0.27083 1.2375,-0.4875 l 0,1.0875 c -0.41251,0.17501 -0.83542,0.30834 -1.26875,0.4 -0.43334,0.0917 -0.87292,0.1375 -1.31875,0.1375 -1.11667,0 -2.00209,-0.32499 -2.65625,-0.975 -0.65,-0.64999 -0.975,-1.52916 -0.975,-2.6375 0,-1.14582 0.30833,-2.05416 0.925,-2.725 0.62083,-0.67499 1.45625,-1.01249 2.50625,-1.0125 0.94166,10e-6 1.68541,0.30418 2.23125,0.9125 0.54999,0.60418 0.82499,1.42709 0.825,2.46875 m -1.15,-0.3375 c -0.008,-0.62916 -0.18542,-1.13124 -0.53125,-1.50625 -0.34167,-0.37499 -0.79584,-0.56249 -1.3625,-0.5625 -0.64167,1e-5 -1.15625,0.18126 -1.54375,0.54375 -0.38333,0.36251 -0.60417,0.87293 -0.6625,1.53125 l 4.1,-0.006"
+ id="path5045"
+ inkscape:connector-curvature="0" /><path
+ d="m -267.12125,424.07953 0,0.5625 -5.2875,0 c 0.05,0.79167 0.2875,1.39584 0.7125,1.8125 0.42916,0.41251 1.02499,0.61876 1.7875,0.61875 0.44166,10e-6 0.86874,-0.0542 1.28125,-0.1625 0.41666,-0.10833 0.82916,-0.27083 1.2375,-0.4875 l 0,1.0875 c -0.41251,0.17501 -0.83543,0.30834 -1.26875,0.4 -0.43334,0.0917 -0.87292,0.1375 -1.31875,0.1375 -1.11667,0 -2.00209,-0.32499 -2.65625,-0.975 -0.65,-0.64999 -0.975,-1.52916 -0.975,-2.6375 0,-1.14582 0.30833,-2.05416 0.925,-2.725 0.62083,-0.67499 1.45624,-1.01249 2.50625,-1.0125 0.94166,10e-6 1.68541,0.30418 2.23125,0.9125 0.54999,0.60418 0.82499,1.42709 0.825,2.46875 m -1.15,-0.3375 c -0.008,-0.62916 -0.18542,-1.13124 -0.53125,-1.50625 -0.34167,-0.37499 -0.79584,-0.56249 -1.3625,-0.5625 -0.64167,1e-5 -1.15626,0.18126 -1.54375,0.54375 -0.38334,0.36251 -0.60417,0.87293 -0.6625,1.53125 l 4.1,-0.006"
+ id="path5047"
+ inkscape:connector-curvature="0" /><path
+ d="m -259.6275,420.86703 -2.53125,3.40625 2.6625,3.59375 -1.35625,0 -2.0375,-2.75 -2.0375,2.75 -1.35625,0 2.71875,-3.6625 -2.4875,-3.3375 1.35625,0 1.85625,2.49375 1.85625,-2.49375 1.35625,0"
+ id="path5049"
+ inkscape:connector-curvature="0" /><path
+ d="m -254.6775,424.34828 c -0.92917,1e-5 -1.57292,0.10626 -1.93125,0.31875 -0.35834,0.21251 -0.5375,0.57501 -0.5375,1.0875 0,0.40834 0.13333,0.73334 0.4,0.975 0.27083,0.23751 0.63749,0.35626 1.1,0.35625 0.63749,10e-6 1.14791,-0.22499 1.53125,-0.675 0.38749,-0.45416 0.58124,-1.05624 0.58125,-1.80625 l 0,-0.25625 -1.14375,0 m 2.29375,-0.475 0,3.99375 -1.15,0 0,-1.0625 c -0.26251,0.42501 -0.58959,0.73959 -0.98125,0.94375 -0.39167,0.2 -0.87084,0.3 -1.4375,0.3 -0.71667,0 -1.2875,-0.2 -1.7125,-0.6 -0.42084,-0.40416 -0.63125,-0.94374 -0.63125,-1.61875 0,-0.78749 0.2625,-1.38124 0.7875,-1.78125 0.52916,-0.39999 1.31666,-0.59999 2.3625,-0.6 l 1.6125,0 0,-0.1125 c -1e-5,-0.52916 -0.17501,-0.93749 -0.525,-1.225 -0.34584,-0.29166 -0.83334,-0.43749 -1.4625,-0.4375 -0.40001,1e-5 -0.78959,0.0479 -1.16875,0.14375 -0.37917,0.0958 -0.74375,0.23959 -1.09375,0.43125 l 0,-1.0625 c 0.42083,-0.16249 0.82916,-0.28332 1.225,-0.3625 0.39583,-0.0833 0.78124,-0.12499 1.15625,-0.125 1.01249,10e-6 1.76874,0.26251 2.26875,0.7875 0.49999,0.52501 0.74999,1.32084 0.75,2.3875"
+ id="path5051"
+ inkscape:connector-curvature="0" /><path
+ d="m -244.55875,422.21078 c 0.28749,-0.51666 0.63124,-0.89791 1.03125,-1.14375 0.39999,-0.24582 0.87082,-0.36874 1.4125,-0.36875 0.72915,10e-6 1.29165,0.25626 1.6875,0.76875 0.39582,0.50834 0.59373,1.23334 0.59375,2.175 l 0,4.225 -1.15625,0 0,-4.1875 c -1e-5,-0.67082 -0.11876,-1.16874 -0.35625,-1.49375 -0.23751,-0.32499 -0.60001,-0.48749 -1.0875,-0.4875 -0.59585,10e-6 -1.06668,0.19793 -1.4125,0.59375 -0.34584,0.39584 -0.51876,0.93543 -0.51875,1.61875 l 0,3.95625 -1.15625,0 0,-4.1875 c -1e-5,-0.67499 -0.11876,-1.17291 -0.35625,-1.49375 -0.23751,-0.32499 -0.60418,-0.48749 -1.1,-0.4875 -0.58751,10e-6 -1.05417,0.20001 -1.4,0.6 -0.34584,0.39584 -0.51876,0.93334 -0.51875,1.6125 l 0,3.95625 -1.15625,0 0,-7 1.15625,0 0,1.0875 c 0.26249,-0.42916 0.57708,-0.74582 0.94375,-0.95 0.36666,-0.20415 0.80208,-0.30624 1.30625,-0.30625 0.50832,10e-6 0.93957,0.12918 1.29375,0.3875 0.35832,0.25834 0.62291,0.63334 0.79375,1.125"
+ id="path5053"
+ inkscape:connector-curvature="0" /><path
+ d="m -236.42125,426.81703 0,3.7125 -1.15625,0 0,-9.6625 1.15625,0 0,1.0625 c 0.24167,-0.41666 0.54583,-0.72499 0.9125,-0.925 0.37083,-0.20415 0.8125,-0.30624 1.325,-0.30625 0.85,10e-6 1.53958,0.33751 2.06875,1.0125 0.53333,0.67501 0.79999,1.56251 0.8,2.6625 -1e-5,1.10001 -0.26667,1.98751 -0.8,2.6625 -0.52917,0.67501 -1.21875,1.0125 -2.06875,1.0125 -0.5125,0 -0.95417,-0.1 -1.325,-0.3 -0.36667,-0.20416 -0.67083,-0.51458 -0.9125,-0.93125 m 3.9125,-2.44375 c 0,-0.84582 -0.175,-1.50832 -0.525,-1.9875 -0.34584,-0.48332 -0.82292,-0.72499 -1.43125,-0.725 -0.60833,1e-5 -1.0875,0.24168 -1.4375,0.725 -0.34583,0.47918 -0.51875,1.14168 -0.51875,1.9875 0,0.84584 0.17292,1.51042 0.51875,1.99375 0.35,0.47917 0.82917,0.71876 1.4375,0.71875 0.60833,10e-6 1.08541,-0.23958 1.43125,-0.71875 0.35,-0.48333 0.525,-1.14791 0.525,-1.99375"
+ id="path5055"
+ inkscape:connector-curvature="0" /><path
+ d="m -229.40875,418.14203 1.15,0 0,9.725 -1.15,0 0,-9.725"
+ id="path5057"
+ inkscape:connector-curvature="0" /><path
+ d="m -219.87125,424.07953 0,0.5625 -5.2875,0 c 0.05,0.79167 0.2875,1.39584 0.7125,1.8125 0.42916,0.41251 1.02499,0.61876 1.7875,0.61875 0.44166,10e-6 0.86874,-0.0542 1.28125,-0.1625 0.41666,-0.10833 0.82916,-0.27083 1.2375,-0.4875 l 0,1.0875 c -0.41251,0.17501 -0.83543,0.30834 -1.26875,0.4 -0.43334,0.0917 -0.87292,0.1375 -1.31875,0.1375 -1.11667,0 -2.00209,-0.32499 -2.65625,-0.975 -0.65,-0.64999 -0.975,-1.52916 -0.975,-2.6375 0,-1.14582 0.30833,-2.05416 0.925,-2.725 0.62083,-0.67499 1.45624,-1.01249 2.50625,-1.0125 0.94166,10e-6 1.68541,0.30418 2.23125,0.9125 0.54999,0.60418 0.82499,1.42709 0.825,2.46875 m -1.15,-0.3375 c -0.008,-0.62916 -0.18542,-1.13124 -0.53125,-1.50625 -0.34167,-0.37499 -0.79584,-0.56249 -1.3625,-0.5625 -0.64167,1e-5 -1.15626,0.18126 -1.54375,0.54375 -0.38334,0.36251 -0.60417,0.87293 -0.6625,1.53125 l 4.1,-0.006"
+ id="path5059"
+ inkscape:connector-curvature="0" /><path
+ d="m -208.88376,424.37328 c 0,-0.84582 -0.175,-1.50832 -0.525,-1.9875 -0.34583,-0.48332 -0.82292,-0.72499 -1.43125,-0.725 -0.60833,1e-5 -1.0875,0.24168 -1.4375,0.725 -0.34583,0.47918 -0.51875,1.14168 -0.51875,1.9875 0,0.84584 0.17292,1.51042 0.51875,1.99375 0.35,0.47917 0.82917,0.71876 1.4375,0.71875 0.60833,10e-6 1.08542,-0.23958 1.43125,-0.71875 0.35,-0.48333 0.525,-1.14791 0.525,-1.99375 m -3.9125,-2.44375 c 0.24167,-0.41666 0.54584,-0.72499 0.9125,-0.925 0.37083,-0.20415 0.8125,-0.30624 1.325,-0.30625 0.85,10e-6 1.53958,0.33751 2.06875,1.0125 0.53333,0.67501 0.8,1.56251 0.8,2.6625 0,1.10001 -0.26667,1.98751 -0.8,2.6625 -0.52917,0.67501 -1.21875,1.0125 -2.06875,1.0125 -0.5125,0 -0.95417,-0.1 -1.325,-0.3 -0.36666,-0.20416 -0.67083,-0.51458 -0.9125,-0.93125 l 0,1.05 -1.15625,0 0,-9.725 1.15625,0 0,3.7875"
+ id="path5061"
+ inkscape:connector-curvature="0" /><path
+ d="m -205.78376,420.86703 1.15,0 0,7 -1.15,0 0,-7 m 0,-2.725 1.15,0 0,1.45625 -1.15,0 0,-1.45625"
+ id="path5063"
+ inkscape:connector-curvature="0" /><path
+ d="m -198.1775,421.94203 c -0.12917,-0.075 -0.27084,-0.12916 -0.425,-0.1625 -0.15001,-0.0375 -0.31667,-0.0562 -0.5,-0.0563 -0.65001,10e-6 -1.15001,0.21251 -1.5,0.6375 -0.34584,0.42084 -0.51875,1.02709 -0.51875,1.81875 l 0,3.6875 -1.15625,0 0,-7 1.15625,0 0,1.0875 c 0.24166,-0.42499 0.55624,-0.73957 0.94375,-0.94375 0.38749,-0.20832 0.85833,-0.31249 1.4125,-0.3125 0.0792,10e-6 0.16666,0.006 0.2625,0.0188 0.0958,0.008 0.20208,0.0229 0.31875,0.0437 l 0.006,1.18125"
+ id="path5065"
+ inkscape:connector-curvature="0" /><path
+ d="m -192.565,421.92953 0,-3.7875 1.15,0 0,9.725 -1.15,0 0,-1.05 c -0.24167,0.41667 -0.54792,0.72709 -0.91875,0.93125 -0.36667,0.2 -0.80834,0.3 -1.325,0.3 -0.84584,0 -1.53542,-0.33749 -2.06875,-1.0125 -0.52917,-0.67499 -0.79375,-1.56249 -0.79375,-2.6625 0,-1.09999 0.26458,-1.98749 0.79375,-2.6625 0.53333,-0.67499 1.22291,-1.01249 2.06875,-1.0125 0.51666,10e-6 0.95833,0.1021 1.325,0.30625 0.37083,0.20001 0.67708,0.50834 0.91875,0.925 m -3.91875,2.44375 c 0,0.84584 0.17291,1.51042 0.51875,1.99375 0.34999,0.47917 0.82916,0.71876 1.4375,0.71875 0.60833,10e-6 1.08749,-0.23958 1.4375,-0.71875 0.34999,-0.48333 0.52499,-1.14791 0.525,-1.99375 -1e-5,-0.84582 -0.17501,-1.50832 -0.525,-1.9875 -0.35001,-0.48332 -0.82917,-0.72499 -1.4375,-0.725 -0.60834,1e-5 -1.08751,0.24168 -1.4375,0.725 -0.34584,0.47918 -0.51875,1.14168 -0.51875,1.9875"
+ id="path5067"
+ inkscape:connector-curvature="0" /><path
+ d="m -180.35249,421.92953 0,-3.7875 1.15,0 0,9.725 -1.15,0 0,-1.05 c -0.24168,0.41667 -0.54793,0.72709 -0.91875,0.93125 -0.36667,0.2 -0.80834,0.3 -1.325,0.3 -0.84584,0 -1.53542,-0.33749 -2.06875,-1.0125 -0.52917,-0.67499 -0.79375,-1.56249 -0.79375,-2.6625 0,-1.09999 0.26458,-1.98749 0.79375,-2.6625 0.53333,-0.67499 1.22291,-1.01249 2.06875,-1.0125 0.51666,10e-6 0.95833,0.1021 1.325,0.30625 0.37082,0.20001 0.67707,0.50834 0.91875,0.925 m -3.91875,2.44375 c -1e-5,0.84584 0.17291,1.51042 0.51875,1.99375 0.34999,0.47917 0.82916,0.71876 1.4375,0.71875 0.60833,10e-6 1.08749,-0.23958 1.4375,-0.71875 0.34999,-0.48333 0.52499,-1.14791 0.525,-1.99375 -1e-5,-0.84582 -0.17501,-1.50832 -0.525,-1.9875 -0.35001,-0.48332 -0.82917,-0.72499 -1.4375,-0.725 -0.60834,1e-5 -1.08751,0.24168 -1.4375,0.725 -0.34584,0.47918 -0.51876,1.14168 -0.51875,1.9875"
+ id="path5069"
+ inkscape:connector-curvature="0" /><path
+ d="m -170.84624,424.07953 0,0.5625 -5.2875,0 c 0.05,0.79167 0.28749,1.39584 0.7125,1.8125 0.42916,0.41251 1.02499,0.61876 1.7875,0.61875 0.44166,10e-6 0.86874,-0.0542 1.28125,-0.1625 0.41666,-0.10833 0.82916,-0.27083 1.2375,-0.4875 l 0,1.0875 c -0.41251,0.17501 -0.83543,0.30834 -1.26875,0.4 -0.43334,0.0917 -0.87292,0.1375 -1.31875,0.1375 -1.11667,0 -2.00209,-0.32499 -2.65625,-0.975 -0.65,-0.64999 -0.975,-1.52916 -0.975,-2.6375 0,-1.14582 0.30833,-2.05416 0.925,-2.725 0.62083,-0.67499 1.45624,-1.01249 2.50625,-1.0125 0.94166,10e-6 1.68541,0.30418 2.23125,0.9125 0.54999,0.60418 0.82499,1.42709 0.825,2.46875 m -1.15,-0.3375 c -0.008,-0.62916 -0.18543,-1.13124 -0.53125,-1.50625 -0.34168,-0.37499 -0.79584,-0.56249 -1.3625,-0.5625 -0.64167,1e-5 -1.15626,0.18126 -1.54375,0.54375 -0.38334,0.36251 -0.60417,0.87293 -0.6625,1.53125 l 4.1,-0.006"
+ id="path5071"
+ inkscape:connector-curvature="0" /><path
+ d="m -164.49624,421.07328 0,1.0875 c -0.32501,-0.16666 -0.66251,-0.29166 -1.0125,-0.375 -0.35001,-0.0833 -0.71251,-0.12499 -1.0875,-0.125 -0.57084,1e-5 -1.00001,0.0875 -1.2875,0.2625 -0.28334,0.17501 -0.42501,0.43751 -0.425,0.7875 -1e-5,0.26668 0.10208,0.47709 0.30625,0.63125 0.20416,0.15001 0.61458,0.29376 1.23125,0.43125 l 0.39375,0.0875 c 0.81666,0.17501 1.39582,0.42293 1.7375,0.74375 0.34582,0.31667 0.51874,0.76042 0.51875,1.33125 -1e-5,0.65001 -0.25834,1.16459 -0.775,1.54375 -0.51251,0.37917 -1.21876,0.56875 -2.11875,0.56875 -0.37501,0 -0.76667,-0.0375 -1.175,-0.1125 -0.40417,-0.0708 -0.83125,-0.17916 -1.28125,-0.325 l 0,-1.1875 c 0.425,0.22084 0.84375,0.38751 1.25625,0.5 0.41249,0.10834 0.82083,0.16251 1.225,0.1625 0.54166,10e-6 0.95833,-0.0917 1.25,-0.275 0.29166,-0.18749 0.43749,-0.44999 0.4375,-0.7875 -1e-5,-0.31249 -0.10626,-0.55208 -0.31875,-0.71875 -0.20834,-0.16666 -0.66876,-0.32708 -1.38125,-0.48125 l -0.4,-0.0937 c -0.71251,-0.14999 -1.22709,-0.37916 -1.54375,-0.6875 -0.31667,-0.31249 -0.475,-0.73957 -0.475,-1.28125 0,-0.65832 0.23333,-1.16666 0.7,-1.525 0.46666,-0.35832 1.12916,-0.53749 1.9875,-0.5375 0.42499,10e-6 0.82499,0.0313 1.2,0.0937 0.37499,0.0625 0.72082,0.15626 1.0375,0.28125"
+ id="path5073"
+ inkscape:connector-curvature="0" /><path
+ d="m -162.28376,420.86703 1.15,0 0,7 -1.15,0 0,-7 m 0,-2.725 1.15,0 0,1.45625 -1.15,0 0,-1.45625"
+ id="path5075"
+ inkscape:connector-curvature="0" /><path
+ d="m -154.1275,424.28578 c -1e-5,-0.83332 -0.17292,-1.47916 -0.51875,-1.9375 -0.34167,-0.45832 -0.82292,-0.68749 -1.44375,-0.6875 -0.61667,1e-5 -1.09792,0.22918 -1.44375,0.6875 -0.34167,0.45834 -0.5125,1.10418 -0.5125,1.9375 0,0.82917 0.17083,1.47292 0.5125,1.93125 0.34583,0.45834 0.82708,0.68751 1.44375,0.6875 0.62083,10e-6 1.10208,-0.22916 1.44375,-0.6875 0.34583,-0.45833 0.51874,-1.10208 0.51875,-1.93125 m 1.15,2.7125 c -1e-5,1.19167 -0.26459,2.07709 -0.79375,2.65625 -0.52917,0.58334 -1.33959,0.875 -2.43125,0.875 -0.40417,0 -0.78542,-0.0312 -1.14375,-0.0937 -0.35834,-0.0583 -0.70625,-0.15 -1.04375,-0.275 l 0,-1.11875 c 0.3375,0.18334 0.67083,0.31875 1,0.40625 0.32916,0.0875 0.66458,0.13125 1.00625,0.13125 0.75416,0 1.31874,-0.19791 1.69375,-0.59375 0.37499,-0.39166 0.56249,-0.98541 0.5625,-1.78125 l 0,-0.56875 c -0.23751,0.41251 -0.54167,0.72084 -0.9125,0.925 -0.37084,0.20417 -0.81459,0.30625 -1.33125,0.30625 -0.85834,0 -1.55,-0.32708 -2.075,-0.98125 -0.525,-0.65416 -0.7875,-1.52083 -0.7875,-2.6 0,-1.08332 0.2625,-1.95207 0.7875,-2.60625 0.525,-0.65416 1.21666,-0.98124 2.075,-0.98125 0.51666,10e-6 0.96041,0.1021 1.33125,0.30625 0.37083,0.20418 0.67499,0.51251 0.9125,0.925 l 0,-1.0625 1.15,0 0,6.13125"
+ id="path5077"
+ inkscape:connector-curvature="0" /><path
+ d="m -144.79,423.64203 0,4.225 -1.15,0 0,-4.1875 c -1e-5,-0.66249 -0.12917,-1.15832 -0.3875,-1.4875 -0.25834,-0.32916 -0.64584,-0.49374 -1.1625,-0.49375 -0.62084,10e-6 -1.11042,0.19793 -1.46875,0.59375 -0.35834,0.39584 -0.5375,0.93543 -0.5375,1.61875 l 0,3.95625 -1.15625,0 0,-7 1.15625,0 0,1.0875 c 0.275,-0.42082 0.59791,-0.73541 0.96875,-0.94375 0.37499,-0.20832 0.80624,-0.31249 1.29375,-0.3125 0.80416,10e-6 1.41249,0.25001 1.825,0.75 0.41249,0.49584 0.61874,1.22709 0.61875,2.19375"
+ id="path5079"
+ inkscape:connector-curvature="0" /><path
+ d="m -138.02125,421.07328 0,1.0875 c -0.32501,-0.16666 -0.66251,-0.29166 -1.0125,-0.375 -0.35001,-0.0833 -0.71251,-0.12499 -1.0875,-0.125 -0.57084,1e-5 -1,0.0875 -1.2875,0.2625 -0.28334,0.17501 -0.425,0.43751 -0.425,0.7875 0,0.26668 0.10208,0.47709 0.30625,0.63125 0.20416,0.15001 0.61458,0.29376 1.23125,0.43125 l 0.39375,0.0875 c 0.81666,0.17501 1.39583,0.42293 1.7375,0.74375 0.34583,0.31667 0.51874,0.76042 0.51875,1.33125 -1e-5,0.65001 -0.25834,1.16459 -0.775,1.54375 -0.51251,0.37917 -1.21876,0.56875 -2.11875,0.56875 -0.37501,0 -0.76667,-0.0375 -1.175,-0.1125 -0.40417,-0.0708 -0.83125,-0.17916 -1.28125,-0.325 l 0,-1.1875 c 0.425,0.22084 0.84375,0.38751 1.25625,0.5 0.4125,0.10834 0.82083,0.16251 1.225,0.1625 0.54166,10e-6 0.95833,-0.0917 1.25,-0.275 0.29166,-0.18749 0.43749,-0.44999 0.4375,-0.7875 -1e-5,-0.31249 -0.10626,-0.55208 -0.31875,-0.71875 -0.20834,-0.16666 -0.66876,-0.32708 -1.38125,-0.48125 l -0.4,-0.0937 c -0.7125,-0.14999 -1.22709,-0.37916 -1.54375,-0.6875 -0.31667,-0.31249 -0.475,-0.73957 -0.475,-1.28125 0,-0.65832 0.23333,-1.16666 0.7,-1.525 0.46666,-0.35832 1.12916,-0.53749 1.9875,-0.5375 0.42499,10e-6 0.82499,0.0313 1.2,0.0937 0.37499,0.0625 0.72083,0.15626 1.0375,0.28125"
+ id="path5081"
+ inkscape:connector-curvature="0" /><path
+ d="m -126.70875,424.37328 c -1e-5,-0.84582 -0.17501,-1.50832 -0.525,-1.9875 -0.34584,-0.48332 -0.82292,-0.72499 -1.43125,-0.725 -0.60834,1e-5 -1.08751,0.24168 -1.4375,0.725 -0.34584,0.47918 -0.51875,1.14168 -0.51875,1.9875 0,0.84584 0.17291,1.51042 0.51875,1.99375 0.34999,0.47917 0.82916,0.71876 1.4375,0.71875 0.60833,10e-6 1.08541,-0.23958 1.43125,-0.71875 0.34999,-0.48333 0.52499,-1.14791 0.525,-1.99375 m -3.9125,-2.44375 c 0.24166,-0.41666 0.54583,-0.72499 0.9125,-0.925 0.37083,-0.20415 0.81249,-0.30624 1.325,-0.30625 0.84999,10e-6 1.53957,0.33751 2.06875,1.0125 0.53332,0.67501 0.79999,1.56251 0.8,2.6625 -1e-5,1.10001 -0.26668,1.98751 -0.8,2.6625 -0.52918,0.67501 -1.21876,1.0125 -2.06875,1.0125 -0.51251,0 -0.95417,-0.1 -1.325,-0.3 -0.36667,-0.20416 -0.67084,-0.51458 -0.9125,-0.93125 l 0,1.05 -1.15625,0 0,-9.725 1.15625,0 0,3.7875"
+ id="path5083"
+ inkscape:connector-curvature="0" /><path
+ d="m -117.62125,424.07953 0,0.5625 -5.2875,0 c 0.05,0.79167 0.2875,1.39584 0.7125,1.8125 0.42916,0.41251 1.02499,0.61876 1.7875,0.61875 0.44166,10e-6 0.86874,-0.0542 1.28125,-0.1625 0.41666,-0.10833 0.82916,-0.27083 1.2375,-0.4875 l 0,1.0875 c -0.41251,0.17501 -0.83543,0.30834 -1.26875,0.4 -0.43334,0.0917 -0.87292,0.1375 -1.31875,0.1375 -1.11667,0 -2.00209,-0.32499 -2.65625,-0.975 -0.65,-0.64999 -0.975,-1.52916 -0.975,-2.6375 0,-1.14582 0.30833,-2.05416 0.925,-2.725 0.62083,-0.67499 1.45624,-1.01249 2.50625,-1.0125 0.94166,10e-6 1.68541,0.30418 2.23125,0.9125 0.54999,0.60418 0.82499,1.42709 0.825,2.46875 m -1.15,-0.3375 c -0.008,-0.62916 -0.18542,-1.13124 -0.53125,-1.50625 -0.34167,-0.37499 -0.79584,-0.56249 -1.3625,-0.5625 -0.64167,1e-5 -1.15626,0.18126 -1.54375,0.54375 -0.38334,0.36251 -0.60417,0.87293 -0.6625,1.53125 l 4.1,-0.006"
+ id="path5085"
+ inkscape:connector-curvature="0" /><path
+ d="m -112.19,418.14203 0,0.95625 -1.1,0 c -0.41251,1e-5 -0.70001,0.0833 -0.8625,0.25 -0.15834,0.16668 -0.2375,0.46668 -0.2375,0.9 l 0,0.61875 1.89375,0 0,0.89375 -1.89375,0 0,6.10625 -1.15625,0 0,-6.10625 -1.1,0 0,-0.89375 1.1,0 0,-0.4875 c 0,-0.77915 0.18125,-1.34582 0.54375,-1.7 0.3625,-0.35832 0.93749,-0.53749 1.725,-0.5375 l 1.0875,0"
+ id="path5087"
+ inkscape:connector-curvature="0" /><path
+ d="m -108.52125,421.67328 c -0.61667,1e-5 -1.10417,0.24168 -1.4625,0.725 -0.35834,0.47918 -0.5375,1.13751 -0.5375,1.975 0,0.83751 0.17708,1.49792 0.53125,1.98125 0.35833,0.47917 0.84791,0.71876 1.46875,0.71875 0.61249,10e-6 1.09791,-0.24166 1.45625,-0.725 0.35833,-0.48333 0.53749,-1.14166 0.5375,-1.975 -1e-5,-0.82916 -0.17917,-1.48541 -0.5375,-1.96875 -0.35834,-0.48749 -0.84376,-0.73124 -1.45625,-0.73125 m 0,-0.975 c 0.99999,10e-6 1.78541,0.32501 2.35625,0.975 0.57082,0.65001 0.85624,1.55001 0.85625,2.7 -1e-5,1.14584 -0.28543,2.04584 -0.85625,2.7 -0.57084,0.65001 -1.35626,0.975 -2.35625,0.975 -1.00417,0 -1.79167,-0.32499 -2.3625,-0.975 -0.56667,-0.65416 -0.85,-1.55416 -0.85,-2.7 0,-1.14999 0.28333,-2.04999 0.85,-2.7 0.57083,-0.64999 1.35833,-0.97499 2.3625,-0.975"
+ id="path5089"
+ inkscape:connector-curvature="0" /><path
+ d="m -99.352505,421.94203 c -0.129172,-0.075 -0.270839,-0.12916 -0.425,-0.1625 -0.150005,-0.0375 -0.316675,-0.0562 -0.500005,-0.0563 -0.65,10e-6 -1.15,0.21251 -1.5,0.6375 -0.34583,0.42084 -0.51875,1.02709 -0.51875,1.81875 l 0,3.6875 -1.15625,0 0,-7 1.15625,0 0,1.0875 c 0.24167,-0.42499 0.55625,-0.73957 0.94375,-0.94375 0.3875,-0.20832 0.85833,-0.31249 1.412505,-0.3125 0.07916,10e-6 0.166661,0.006 0.2625,0.0188 0.09583,0.008 0.202078,0.0229 0.31875,0.0437 l 0.0063,1.18125"
+ id="path5091"
+ inkscape:connector-curvature="0" /><path
+ d="m -92.408743,424.07953 0,0.5625 -5.2875,0 c 0.05,0.79167 0.287498,1.39584 0.7125,1.8125 0.429163,0.41251 1.024996,0.61876 1.7875,0.61875 0.441662,10e-6 0.868745,-0.0542 1.28125,-0.1625 0.41666,-0.10833 0.82916,-0.27083 1.2375,-0.4875 l 0,1.0875 c -0.412507,0.17501 -0.835423,0.30834 -1.26875,0.4 -0.433339,0.0917 -0.872922,0.1375 -1.31875,0.1375 -1.11667,0 -2.002086,-0.32499 -2.65625,-0.975 -0.650001,-0.64999 -0.975001,-1.52916 -0.975,-2.6375 -10e-7,-1.14582 0.308332,-2.05416 0.925,-2.725 0.620831,-0.67499 1.456247,-1.01249 2.50625,-1.0125 0.941661,10e-6 1.685411,0.30418 2.23125,0.9125 0.549993,0.60418 0.824993,1.42709 0.825,2.46875 m -1.15,-0.3375 c -0.0083,-0.62916 -0.185423,-1.13124 -0.53125,-1.50625 -0.341672,-0.37499 -0.795838,-0.56249 -1.3625,-0.5625 -0.64167,1e-5 -1.156253,0.18126 -1.54375,0.54375 -0.383336,0.36251 -0.604169,0.87293 -0.6625,1.53125 l 4.1,-0.006"
+ id="path5093"
+ inkscape:connector-curvature="0" /><path
+ d="m -86.552484,425.10453 0,-4.2375 1.15,0 0,4.19375 c -2e-6,0.66251 0.129164,1.16042 0.3875,1.49375 0.25833,0.32917 0.64583,0.49376 1.1625,0.49375 0.620829,1e-5 1.110412,-0.19791 1.46875,-0.59375 0.362494,-0.39583 0.543744,-0.93541 0.54375,-1.61875 l 0,-3.96875 1.15,0 0,7 -1.15,0 0,-1.075 c -0.279172,0.42501 -0.604172,0.74167 -0.975,0.95 -0.366671,0.20417 -0.793754,0.30625 -1.28125,0.30625 -0.804169,0 -1.414586,-0.25 -1.83125,-0.75 -0.416668,-0.49999 -0.625001,-1.23124 -0.625,-2.19375"
+ id="path5095"
+ inkscape:connector-curvature="0" /><path
+ d="m -77.196234,426.81703 0,3.7125 -1.15625,0 0,-9.6625 1.15625,0 0,1.0625 c 0.241664,-0.41666 0.54583,-0.72499 0.9125,-0.925 0.37083,-0.20415 0.812496,-0.30624 1.325,-0.30625 0.849995,10e-6 1.539577,0.33751 2.06875,1.0125 0.533326,0.67501 0.799993,1.56251 0.8,2.6625 -7e-6,1.10001 -0.266674,1.98751 -0.8,2.6625 -0.529173,0.67501 -1.218755,1.0125 -2.06875,1.0125 -0.512504,0 -0.95417,-0.1 -1.325,-0.3 -0.36667,-0.20416 -0.670836,-0.51458 -0.9125,-0.93125 m 3.9125,-2.44375 c -6e-6,-0.84582 -0.175006,-1.50832 -0.525,-1.9875 -0.345839,-0.48332 -0.822922,-0.72499 -1.43125,-0.725 -0.608337,1e-5 -1.087503,0.24168 -1.4375,0.725 -0.345836,0.47918 -0.518752,1.14168 -0.51875,1.9875 -2e-6,0.84584 0.172914,1.51042 0.51875,1.99375 0.349997,0.47917 0.829163,0.71876 1.4375,0.71875 0.608328,10e-6 1.085411,-0.23958 1.43125,-0.71875 0.349994,-0.48333 0.524994,-1.14791 0.525,-1.99375"
+ id="path5097"
+ inkscape:connector-curvature="0" /><path
+ d="m -70.183734,418.14203 1.15,0 0,9.725 -1.15,0 0,-9.725"
+ id="path5099"
+ inkscape:connector-curvature="0" /><path
+ d="m -63.921246,421.67328 c -0.61667,1e-5 -1.10417,0.24168 -1.4625,0.725 -0.358336,0.47918 -0.537502,1.13751 -0.5375,1.975 -2e-6,0.83751 0.177081,1.49792 0.53125,1.98125 0.35833,0.47917 0.847913,0.71876 1.46875,0.71875 0.612495,10e-6 1.097911,-0.24166 1.45625,-0.725 0.358327,-0.48333 0.537494,-1.14166 0.5375,-1.975 -6e-6,-0.82916 -0.179173,-1.48541 -0.5375,-1.96875 -0.358339,-0.48749 -0.843755,-0.73124 -1.45625,-0.73125 m 0,-0.975 c 0.999995,10e-6 1.785411,0.32501 2.35625,0.975 0.570826,0.65001 0.856243,1.55001 0.85625,2.7 -7e-6,1.14584 -0.285424,2.04584 -0.85625,2.7 -0.570839,0.65001 -1.356255,0.975 -2.35625,0.975 -1.00417,0 -1.791669,-0.32499 -2.3625,-0.975 -0.566668,-0.65416 -0.850001,-1.55416 -0.85,-2.7 -10e-7,-1.14999 0.283332,-2.04999 0.85,-2.7 0.570831,-0.64999 1.35833,-0.97499 2.3625,-0.975"
+ id="path5101"
+ inkscape:connector-curvature="0" /><path
+ d="m -55.627484,424.34828 c -0.92917,1e-5 -1.57292,0.10626 -1.93125,0.31875 -0.358336,0.21251 -0.537502,0.57501 -0.5375,1.0875 -2e-6,0.40834 0.133331,0.73334 0.4,0.975 0.270831,0.23751 0.637497,0.35626 1.1,0.35625 0.637496,10e-6 1.147912,-0.22499 1.53125,-0.675 0.387495,-0.45416 0.581244,-1.05624 0.58125,-1.80625 l 0,-0.25625 -1.14375,0 m 2.29375,-0.475 0,3.99375 -1.15,0 0,-1.0625 c -0.262505,0.42501 -0.589588,0.73959 -0.98125,0.94375 -0.391671,0.2 -0.870837,0.3 -1.4375,0.3 -0.716669,0 -1.287502,-0.2 -1.7125,-0.6 -0.420834,-0.40416 -0.631251,-0.94374 -0.63125,-1.61875 -10e-7,-0.78749 0.262499,-1.38124 0.7875,-1.78125 0.529164,-0.39999 1.316664,-0.59999 2.3625,-0.6 l 1.6125,0 0,-0.1125 c -6e-6,-0.52916 -0.175005,-0.93749 -0.525,-1.225 -0.345838,-0.29166 -0.833338,-0.43749 -1.4625,-0.4375 -0.400003,1e-5 -0.789586,0.0479 -1.16875,0.14375 -0.379169,0.0958 -0.743752,0.23959 -1.09375,0.43125 l 0,-1.0625 c 0.420832,-0.16249 0.829164,-0.28332 1.225,-0.3625 0.39583,-0.0833 0.781247,-0.12499 1.15625,-0.125 1.012495,10e-6 1.768745,0.26251 2.26875,0.7875 0.499994,0.52501 0.749993,1.32084 0.75,2.3875"
+ id="path5103"
+ inkscape:connector-curvature="0" /><path
+ d="m -46.352508,421.92953 0,-3.7875 1.15,0 0,9.725 -1.15,0 0,-1.05 c -0.241673,0.41667 -0.547922,0.72709 -0.91875,0.93125 -0.366672,0.2 -0.808338,0.3 -1.325,0.3 -0.845837,0 -1.535419,-0.33749 -2.068751,-1.0125 -0.529167,-0.67499 -0.79375,-1.56249 -0.79375,-2.6625 0,-1.09999 0.264583,-1.98749 0.79375,-2.6625 0.533332,-0.67499 1.222914,-1.01249 2.068751,-1.0125 0.516662,10e-6 0.958328,0.1021 1.325,0.30625 0.370828,0.20001 0.677077,0.50834 0.91875,0.925 m -3.918751,2.44375 c -10e-7,0.84584 0.172915,1.51042 0.51875,1.99375 0.349998,0.47917 0.829164,0.71876 1.437501,0.71875 0.608328,10e-6 1.087495,-0.23958 1.4375,-0.71875 0.349994,-0.48333 0.524994,-1.14791 0.525,-1.99375 -6e-6,-0.84582 -0.175006,-1.50832 -0.525,-1.9875 -0.350005,-0.48332 -0.829172,-0.72499 -1.4375,-0.725 -0.608337,1e-5 -1.087503,0.24168 -1.437501,0.725 -0.345835,0.47918 -0.518751,1.14168 -0.51875,1.9875"
+ id="path5105"
+ inkscape:connector-curvature="0" /><path
+ d="m -42.833759,420.86703 1.15,0 0,7 -1.15,0 0,-7 m 0,-2.725 1.15,0 0,1.45625 -1.15,0 0,-1.45625"
+ id="path5107"
+ inkscape:connector-curvature="0" /><path
+ d="m -33.46499,423.64203 0,4.225 -1.15,0 0,-4.1875 c -6e-6,-0.66249 -0.129173,-1.15832 -0.3875,-1.4875 -0.258339,-0.32916 -0.645838,-0.49374 -1.1625,-0.49375 -0.620837,10e-6 -1.11042,0.19793 -1.46875,0.59375 -0.358336,0.39584 -0.537503,0.93543 -0.5375,1.61875 l 0,3.95625 -1.15625,0 0,-7 1.15625,0 0,1.0875 c 0.274997,-0.42082 0.597914,-0.73541 0.96875,-0.94375 0.374996,-0.20832 0.806246,-0.31249 1.29375,-0.3125 0.804161,10e-6 1.412494,0.25001 1.825,0.75 0.412493,0.49584 0.618743,1.22709 0.61875,2.19375"
+ id="path5109"
+ inkscape:connector-curvature="0" /><path
+ d="m -26.55249,424.28578 c -6e-6,-0.83332 -0.172922,-1.47916 -0.51875,-1.9375 -0.341672,-0.45832 -0.822921,-0.68749 -1.44375,-0.6875 -0.61667,1e-5 -1.09792,0.22918 -1.44375,0.6875 -0.341669,0.45834 -0.512502,1.10418 -0.5125,1.9375 -2e-6,0.82917 0.170831,1.47292 0.5125,1.93125 0.34583,0.45834 0.82708,0.68751 1.44375,0.6875 0.620829,10e-6 1.102078,-0.22916 1.44375,-0.6875 0.345828,-0.45833 0.518744,-1.10208 0.51875,-1.93125 m 1.15,2.7125 c -7e-6,1.19167 -0.26459,2.07709 -0.79375,2.65625 -0.529172,0.58334 -1.339588,0.875 -2.43125,0.875 -0.40417,0 -0.78542,-0.0312 -1.14375,-0.0937 -0.358336,-0.0583 -0.706252,-0.15 -1.04375,-0.275 l 0,-1.11875 c 0.337498,0.18334 0.670831,0.31875 1,0.40625 0.329164,0.0875 0.66458,0.13125 1.00625,0.13125 0.754162,0 1.318745,-0.19791 1.69375,-0.59375 0.374994,-0.39166 0.562494,-0.98541 0.5625,-1.78125 l 0,-0.56875 c -0.237506,0.41251 -0.541672,0.72084 -0.9125,0.925 -0.370838,0.20417 -0.814588,0.30625 -1.33125,0.30625 -0.858336,0 -1.550002,-0.32708 -2.075,-0.98125 -0.525001,-0.65416 -0.787501,-1.52083 -0.7875,-2.6 -10e-7,-1.08332 0.262499,-1.95207 0.7875,-2.60625 0.524998,-0.65416 1.216664,-0.98124 2.075,-0.98125 0.516662,10e-6 0.960412,0.1021 1.33125,0.30625 0.370828,0.20418 0.674994,0.51251 0.9125,0.925 l 0,-1.0625 1.15,0 0,6.13125"
+ id="path5111"
+ inkscape:connector-curvature="0" /><path
+ d="m -18.22124,420.07328 -2.24375,1.2125 2.24375,1.21875 -0.3625,0.6125 -2.1,-1.26875 0,2.35625 -0.7125,0 0,-2.35625 -2.1,1.26875 -0.3625,-0.6125 2.24375,-1.21875 -2.24375,-1.2125 0.3625,-0.61875 2.1,1.26875 0,-2.35625 0.7125,0 0,2.35625 2.1,-1.26875 0.3625,0.61875"
+ id="path5113"
+ inkscape:connector-curvature="0" /></g><g
+ id="g14777"><path
+ d="m 590.02932,44.404687 0,7.07968 1.48788,0 c 1.2562,1e-6 2.17493,-0.284568 2.75629,-0.853708 0.58536,-0.569136 0.87806,-1.467562 0.8781,-2.695279 -4e-5,-1.219577 -0.29274,-2.111905 -0.8781,-2.676985 -0.58136,-0.569131 -1.50009,-0.8537 -2.75629,-0.853708 l -1.48788,0 m -1.23177,-1.012254 2.53062,0 c 1.76433,9e-6 3.05914,0.367916 3.8844,1.103722 0.8252,0.731758 1.23783,1.878165 1.23788,3.439225 -5e-5,1.5692 -0.4147,2.721705 -1.24399,3.457518 -0.82934,0.735816 -2.12209,1.103724 -3.87829,1.103724 l -2.53062,0 0,-9.104189"
+ id="path3477"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 604.20087,48.801284 0,0.548813 -5.15882,0 c 0.0488,0.772405 0.28048,1.361869 0.69518,1.768395 0.41868,0.402464 1.00004,0.603695 1.74398,0.603694 0.4309,10e-7 0.84762,-0.05285 1.25005,-0.158546 0.40657,-0.105696 0.809,-0.264242 1.20739,-0.475637 l 0,1.061037 c -0.40243,0.170742 -0.81506,0.300831 -1.23788,0.390267 -0.42277,0.08944 -0.85165,0.134154 -1.28664,0.134154 -1.08948,0 -1.95335,-0.317092 -2.5916,-0.951275 -0.6342,-0.634182 -0.95128,-1.491954 -0.95128,-2.573321 0,-1.117946 0.30082,-2.004176 0.90248,-2.658691 0.60574,-0.658568 1.4208,-0.987855 2.44527,-0.987862 0.91873,7e-6 1.6444,0.296771 2.17695,0.890295 0.5366,0.589471 0.80492,1.392363 0.80492,2.408677 m -1.122,-0.329287 c -0.008,-0.613853 -0.1809,-1.103718 -0.51832,-1.469598 -0.33338,-0.365869 -0.77649,-0.548806 -1.32934,-0.548812 -0.62608,6e-6 -1.12814,0.176845 -1.5062,0.530518 -0.37401,0.353685 -0.58948,0.851681 -0.64637,1.49399 l 4.00023,-0.0061"
+ id="path3479"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 610.39637,45.868187 0,1.061037 c -0.31712,-0.162605 -0.64637,-0.284564 -0.98788,-0.365875 -0.34146,-0.0813 -0.69518,-0.121952 -1.06102,-0.121958 -0.55693,6e-6 -0.97566,0.08538 -1.2562,0.256112 -0.2764,0.170748 -0.41464,0.42686 -0.41464,0.768338 0,0.260182 0.0996,0.465478 0.2988,0.615889 0.19918,0.146355 0.59964,0.286606 1.20129,0.420757 l 0.38416,0.08537 c 0.79679,0.170745 1.36189,0.412629 1.69523,0.725652 0.33742,0.308964 0.5061,0.741916 0.50615,1.298856 -5e-5,0.634185 -0.25207,1.136246 -0.75615,1.506186 -0.50005,0.36994 -1.18912,0.55491 -2.06722,0.55491 -0.36584,0 -0.74798,-0.03659 -1.14638,-0.109762 -0.39435,-0.06911 -0.81102,-0.174807 -1.25009,-0.317092 l 0,-1.158604 c 0.41465,0.215461 0.82323,0.378072 1.22567,0.487833 0.40248,0.105698 0.80087,0.158547 1.19522,0.158546 0.52847,1e-6 0.93499,-0.08943 1.21956,-0.268309 0.28458,-0.182935 0.42686,-0.439048 0.42686,-0.768337 0,-0.304893 -0.10367,-0.538647 -0.31097,-0.70126 -0.20331,-0.162609 -0.65248,-0.319122 -1.34766,-0.46954 l -0.39027,-0.09147 c -0.69518,-0.146347 -1.19724,-0.369937 -1.5062,-0.670771 -0.30895,-0.304892 -0.4634,-0.721582 -0.4634,-1.250073 0,-0.642308 0.22764,-1.138271 0.68296,-1.487892 0.45528,-0.349606 1.10166,-0.524413 1.93912,-0.52442 0.41465,7e-6 0.80492,0.0305 1.1708,0.09147 0.36589,0.06099 0.70331,0.152455 1.01226,0.274407"
+ id="path3481"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 612.55501,45.666955 1.12204,0 0,6.829667 -1.12204,0 0,-6.829667 m 0,-2.658691 1.12204,0 0,1.420815 -1.12204,0 0,-1.420815"
+ id="path3483"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 620.51282,49.002515 c 0,-0.813051 -0.16874,-1.443168 -0.50616,-1.890353 -0.33333,-0.447175 -0.80289,-0.670765 -1.40858,-0.670771 -0.6017,6e-6 -1.07122,0.223596 -1.40864,0.670771 -0.33337,0.447185 -0.50004,1.077302 -0.50004,1.890353 0,0.808993 0.16667,1.437078 0.50004,1.884257 0.33742,0.447181 0.80694,0.670771 1.40864,0.67077 0.60569,1e-6 1.07525,-0.223589 1.40858,-0.67077 0.33742,-0.447179 0.50616,-1.075264 0.50616,-1.884257 m 1.12199,2.646496 c 0,1.162669 -0.25813,2.02654 -0.77443,2.591614 -0.5163,0.569137 -1.30698,0.853706 -2.37208,0.853709 -0.39435,-3e-6 -0.7663,-0.03049 -1.11593,-0.09147 -0.34959,-0.05692 -0.68908,-0.146352 -1.01833,-0.268308 l 0,-1.091527 c 0.32925,0.17887 0.6545,0.310992 0.97567,0.396364 0.32112,0.08537 0.64839,0.128055 0.98173,0.128056 0.73581,-10e-7 1.28668,-0.193102 1.65257,-0.579301 0.36584,-0.382138 0.54881,-0.961439 0.54881,-1.737907 l 0,-0.55491 c -0.23173,0.402463 -0.52852,0.703293 -0.89032,0.902492 -0.3618,0.199198 -0.79476,0.298798 -1.29885,0.298798 -0.83746,0 -1.51226,-0.319125 -2.02452,-0.957374 -0.51221,-0.638246 -0.76832,-1.483823 -0.76832,-2.536733 0,-1.056967 0.25611,-1.904576 0.76832,-2.54283 0.51226,-0.638242 1.18706,-0.957366 2.02452,-0.957373 0.50409,7e-6 0.93705,0.09961 1.29885,0.298798 0.3618,0.199205 0.65859,0.500035 0.89032,0.902491 l 0,-1.036646 1.12199,0 0,5.982056"
+ id="path3485"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 629.62311,48.37443 0,4.122192 -1.12204,0 0,-4.085604 c 0,-0.646375 -0.12603,-1.130142 -0.37805,-1.451305 -0.25207,-0.32115 -0.63012,-0.481729 -1.13421,-0.481735 -0.60574,6e-6 -1.08343,0.193107 -1.43301,0.579302 -0.34964,0.386207 -0.52443,0.91266 -0.52443,1.57936 l 0,3.859982 -1.1281,0 0,-6.829667 1.1281,0 0,1.061038 c 0.26832,-0.410587 0.58333,-0.717515 0.94518,-0.920786 0.36584,-0.203256 0.78659,-0.304888 1.26226,-0.304895 0.78457,7e-6 1.3781,0.243923 1.78058,0.73175 0.40248,0.483773 0.60367,1.197229 0.60372,2.140368"
+ id="path3487"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 637.12964,44.404687 0,3.420931 1.54885,0 c 0.57323,4e-6 1.01635,-0.148378 1.32934,-0.445148 0.31304,-0.29676 0.46956,-0.719548 0.46956,-1.268367 0,-0.54474 -0.15652,-0.965496 -0.46956,-1.262268 -0.31299,-0.296758 -0.75611,-0.44514 -1.32934,-0.445148 l -1.54885,0 m -1.23178,-1.012254 2.78063,0 c 1.02039,9e-6 1.79077,0.231729 2.31111,0.695162 0.52443,0.459385 0.78664,1.13422 0.78664,2.024508 0,0.898432 -0.26221,1.577333 -0.78664,2.036704 -0.52034,0.459381 -1.29072,0.689069 -2.31111,0.689065 l -1.54885,0 0,3.65875 -1.23178,0 0,-9.104189"
+ id="path3489"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 645.59355,46.453587 c -0.60169,6e-6 -1.07732,0.235791 -1.42695,0.707358 -0.34959,0.467512 -0.52438,1.109825 -0.52438,1.926941 0,0.817124 0.17277,1.46147 0.51832,1.93304 0.34959,0.467508 0.82727,0.701261 1.43301,0.70126 0.59757,10e-7 1.07117,-0.235785 1.4208,-0.707358 0.34959,-0.47157 0.52443,-1.113884 0.52443,-1.926942 0,-0.808986 -0.17484,-1.449266 -0.52443,-1.920843 -0.34963,-0.475632 -0.82323,-0.71345 -1.4208,-0.713456 m 0,-0.951275 c 0.97563,7e-6 1.74197,0.317098 2.2989,0.951275 0.55694,0.634188 0.8354,1.512287 0.8354,2.634299 0,1.117954 -0.27846,1.996053 -0.8354,2.6343 -0.55693,0.634183 -1.32327,0.951275 -2.2989,0.951275 -0.97975,0 -1.74807,-0.317092 -2.30505,-0.951275 -0.55285,-0.638247 -0.82929,-1.516346 -0.82929,-2.6343 0,-1.122012 0.27644,-2.000111 0.82929,-2.634299 0.55698,-0.634177 1.3253,-0.951268 2.30505,-0.951275"
+ id="path3491"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 654.93553,45.868187 0,1.061037 c -0.31708,-0.162605 -0.64638,-0.284564 -0.98784,-0.365875 -0.3415,-0.0813 -0.69518,-0.121952 -1.06106,-0.121958 -0.55694,6e-6 -0.97567,0.08538 -1.25616,0.256112 -0.27644,0.170748 -0.41464,0.42686 -0.41464,0.768338 0,0.260182 0.0996,0.465478 0.29876,0.615889 0.19922,0.146355 0.59963,0.286606 1.20133,0.420757 l 0.38416,0.08537 c 0.79679,0.170745 1.36185,0.412629 1.69523,0.725652 0.33737,0.308964 0.5061,0.741916 0.5061,1.298856 0,0.634185 -0.25206,1.136246 -0.75615,1.506186 -0.5,0.36994 -1.18907,0.55491 -2.06717,0.55491 -0.36589,0 -0.74803,-0.03659 -1.14642,-0.109762 -0.39431,-0.06911 -0.81102,-0.174807 -1.25005,-0.317092 l 0,-1.158604 c 0.41465,0.215461 0.82319,0.378072 1.22567,0.487833 0.40243,0.105698 0.80087,0.158547 1.19518,0.158546 0.52846,1e-6 0.93503,-0.08943 1.2196,-0.268309 0.28453,-0.182935 0.42682,-0.439048 0.42682,-0.768337 0,-0.304893 -0.10363,-0.538647 -0.31098,-0.70126 -0.20326,-0.162609 -0.65248,-0.319122 -1.34766,-0.46954 l -0.39026,-0.09147 c -0.69514,-0.146347 -1.1972,-0.369937 -1.50616,-0.670771 -0.30895,-0.304892 -0.46345,-0.721582 -0.46345,-1.250073 0,-0.642308 0.22764,-1.138271 0.68297,-1.487892 0.45532,-0.349606 1.1017,-0.524413 1.93912,-0.52442 0.41469,7e-6 0.80496,0.0305 1.1708,0.09147 0.36588,0.06099 0.7033,0.152455 1.01226,0.274407"
+ id="path3493"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 657.09421,45.666955 1.12199,0 0,6.829667 -1.12199,0 0,-6.829667 m 0,-2.658691 1.12199,0 0,1.420815 -1.12199,0 0,-1.420815"
+ id="path3495"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 661.66763,43.727818 0,1.939137 2.31111,0 0,0.872002 -2.31111,0 0,3.707533 c 0,0.556945 0.0752,0.914689 0.22562,1.073233 0.1545,0.158547 0.46547,0.23782 0.93301,0.237819 l 1.15248,0 0,0.93908 -1.15248,0 c -0.86593,0 -1.4635,-0.160579 -1.79279,-0.481736 -0.3293,-0.325221 -0.49394,-0.914686 -0.49394,-1.768396 l 0,-3.707533 -0.82324,0 0,-0.872002 0.82324,0 0,-1.939137 1.1281,0"
+ id="path3497"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 665.46056,45.666955 1.12199,0 0,6.829667 -1.12199,0 0,-6.829667 m 0,-2.658691 1.12199,0 0,1.420815 -1.12199,0 0,-1.420815"
+ id="path3499"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 671.57066,46.453587 c -0.60165,6e-6 -1.07731,0.235791 -1.4269,0.707358 -0.34963,0.467512 -0.52443,1.109825 -0.52443,1.926941 0,0.817124 0.17278,1.46147 0.51832,1.93304 0.34959,0.467508 0.82728,0.701261 1.43301,0.70126 0.59757,10e-7 1.07117,-0.235785 1.4208,-0.707358 0.34964,-0.47157 0.52443,-1.113884 0.52443,-1.926942 0,-0.808986 -0.17479,-1.449266 -0.52443,-1.920843 -0.34963,-0.475632 -0.82323,-0.71345 -1.4208,-0.713456 m 0,-0.951275 c 0.97567,7e-6 1.74197,0.317098 2.2989,0.951275 0.55694,0.634188 0.83541,1.512287 0.83541,2.634299 0,1.117954 -0.27847,1.996053 -0.83541,2.6343 -0.55693,0.634183 -1.32323,0.951275 -2.2989,0.951275 -0.97975,0 -1.74807,-0.317092 -2.305,-0.951275 -0.55289,-0.638247 -0.82934,-1.516346 -0.82934,-2.6343 0,-1.122012 0.27645,-2.000111 0.82934,-2.634299 0.55693,-0.634177 1.32525,-0.951268 2.305,-0.951275"
+ id="path3501"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 682.23592,48.37443 0,4.122192 -1.12204,0 0,-4.085604 c 0,-0.646375 -0.12604,-1.130142 -0.37806,-1.451305 -0.25206,-0.32115 -0.63012,-0.481729 -1.1342,-0.481735 -0.60574,6e-6 -1.08343,0.193107 -1.43302,0.579302 -0.34963,0.386207 -0.52442,0.91266 -0.52442,1.57936 l 0,3.859982 -1.1281,0 0,-6.829667 1.1281,0 0,1.061038 c 0.26832,-0.410587 0.58338,-0.717515 0.94518,-0.920786 0.36588,-0.203256 0.78664,-0.304888 1.26226,-0.304895 0.78462,7e-6 1.37814,0.243923 1.78058,0.73175 0.40248,0.483773 0.60372,1.197229 0.60372,2.140368"
+ id="path3503"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 684.48606,45.666955 1.12199,0 0,6.829667 -1.12199,0 0,-6.829667 m 0,-2.658691 1.12199,0 0,1.420815 -1.12199,0 0,-1.420815"
+ id="path3505"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 693.62684,48.37443 0,4.122192 -1.12204,0 0,-4.085604 c 0,-0.646375 -0.12604,-1.130142 -0.37806,-1.451305 -0.25206,-0.32115 -0.63012,-0.481729 -1.1342,-0.481735 -0.60574,6e-6 -1.08343,0.193107 -1.43302,0.579302 -0.34963,0.386207 -0.52442,0.91266 -0.52442,1.57936 l 0,3.859982 -1.1281,0 0,-6.829667 1.1281,0 0,1.061038 c 0.26832,-0.410587 0.58338,-0.717515 0.94518,-0.920786 0.36588,-0.203256 0.78664,-0.304888 1.26226,-0.304895 0.78457,7e-6 1.37814,0.243923 1.78058,0.73175 0.40248,0.483773 0.60372,1.197229 0.60372,2.140368"
+ id="path3507"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 700.3711,49.002515 c 0,-0.813051 -0.16869,-1.443168 -0.50611,-1.890353 -0.33337,-0.447175 -0.80289,-0.670765 -1.40863,-0.670771 -0.60165,6e-6 -1.07121,0.223596 -1.40859,0.670771 -0.33337,0.447185 -0.50004,1.077302 -0.50004,1.890353 0,0.808993 0.16667,1.437078 0.50004,1.884257 0.33738,0.447181 0.80694,0.670771 1.40859,0.67077 0.60574,1e-6 1.07526,-0.223589 1.40863,-0.67077 0.33742,-0.447179 0.50611,-1.075264 0.50611,-1.884257 m 1.12204,2.646496 c 0,1.162669 -0.25817,2.02654 -0.77443,2.591614 -0.5163,0.569137 -1.30702,0.853706 -2.37208,0.853709 -0.39435,-3e-6 -0.76635,-0.03049 -1.11593,-0.09147 -0.34964,-0.05692 -0.68908,-0.146352 -1.01837,-0.268308 l 0,-1.091527 c 0.32929,0.17887 0.6545,0.310992 0.97567,0.396364 0.32116,0.08537 0.64843,0.128055 0.98177,0.128056 0.73581,-10e-7 1.28664,-0.193102 1.65253,-0.579301 0.36588,-0.382138 0.5488,-0.961439 0.5488,-1.737907 l 0,-0.55491 c -0.23172,0.402463 -0.52847,0.703293 -0.89027,0.902492 -0.36184,0.199198 -0.79476,0.298798 -1.29885,0.298798 -0.83746,0 -1.5123,-0.319125 -2.02452,-0.957374 -0.51221,-0.638246 -0.76832,-1.483823 -0.76832,-2.536733 0,-1.056967 0.25611,-1.904576 0.76832,-2.54283 0.51222,-0.638242 1.18706,-0.957366 2.02452,-0.957373 0.50409,7e-6 0.93701,0.09961 1.29885,0.298798 0.3618,0.199205 0.65855,0.500035 0.89027,0.902491 l 0,-1.036646 1.12204,0 0,5.982056"
+ id="path3509"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 704.09085,50.947751 1.28664,0 0,1.548871 -1.28664,0 0,-1.548871 m 0,-4.908823 1.28664,0 0,1.548871 -1.28664,0 0,-1.548871"
+ id="path3511"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 715.74398,44.227847 c -0.8944,8e-6 -1.60579,0.333361 -2.1343,1.000058 -0.52443,0.666713 -0.78664,1.575301 -0.78659,2.725769 -5e-5,1.146412 0.26216,2.052968 0.78659,2.719671 0.52851,0.666706 1.2399,1.000059 2.1343,1.000058 0.89435,10e-7 1.6017,-0.333352 2.12204,-1.000058 0.52443,-0.666703 0.78664,-1.573259 0.78664,-2.719671 0,-1.150468 -0.26221,-2.059056 -0.78664,-2.725769 -0.52034,-0.666697 -1.22769,-1.00005 -2.12204,-1.000058 m 0,-1.000058 c 1.27649,9e-6 2.29688,0.428896 3.06116,1.28666 0.76423,0.853716 1.14637,2.000123 1.14637,3.439225 0,1.435046 -0.38214,2.581453 -1.14637,3.439224 -0.76428,0.853709 -1.78467,1.280563 -3.06116,1.280563 -1.28058,0 -2.30501,-0.426854 -3.07337,-1.280563 -0.76428,-0.853706 -1.14642,-2.000113 -1.14642,-3.439224 0,-1.439102 0.38214,-2.585509 1.14642,-3.439225 0.76836,-0.857764 1.79279,-1.286651 3.07337,-1.28666"
+ id="path3513"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 727.50684,48.37443 0,4.122192 -1.12203,0 0,-4.085604 c 0,-0.646375 -0.12599,-1.130142 -0.37806,-1.451305 -0.25206,-0.32115 -0.63012,-0.481729 -1.1342,-0.481735 -0.60574,6e-6 -1.08343,0.193107 -1.43302,0.579302 -0.34963,0.386207 -0.52442,0.91266 -0.52442,1.57936 l 0,3.859982 -1.1281,0 0,-6.829667 1.1281,0 0,1.061038 c 0.26832,-0.410587 0.58338,-0.717515 0.94518,-0.920786 0.36588,-0.203256 0.78664,-0.304888 1.26226,-0.304895 0.78462,7e-6 1.37814,0.243923 1.78058,0.73175 0.40248,0.483773 0.60371,1.197229 0.60371,2.140368"
+ id="path3515"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 734.84262,43.727818 0,1.939137 2.31111,0 0,0.872002 -2.31111,0 0,3.707533 c 0,0.556945 0.0752,0.914689 0.22562,1.073233 0.1545,0.158547 0.46547,0.23782 0.93301,0.237819 l 1.15248,0 0,0.93908 -1.15248,0 c -0.86593,0 -1.4635,-0.160579 -1.79279,-0.481736 -0.3293,-0.325221 -0.49394,-0.914686 -0.49394,-1.768396 l 0,-3.707533 -0.82324,0 0,-0.872002 0.82324,0 0,-1.939137 1.1281,0"
+ id="path3517"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 744.31269,48.37443 0,4.122192 -1.12199,0 0,-4.085604 c -5e-5,-0.646375 -0.12604,-1.130142 -0.3781,-1.451305 -0.25202,-0.32115 -0.63012,-0.481729 -1.13421,-0.481735 -0.60574,6e-6 -1.08338,0.193107 -1.43301,0.579302 -0.34959,0.386207 -0.52443,0.91266 -0.52443,1.57936 l 0,3.859982 -1.1281,0 0,-9.488358 1.1281,0 0,3.719729 c 0.26832,-0.410587 0.58338,-0.717515 0.94518,-0.920786 0.36589,-0.203256 0.78664,-0.304888 1.26226,-0.304895 0.78462,7e-6 1.37815,0.243923 1.78063,0.73175 0.40243,0.483773 0.60367,1.197229 0.60367,2.140368"
+ id="path3519"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 752.40462,48.801284 0,0.548813 -5.15882,0 c 0.0488,0.772405 0.28048,1.361869 0.69518,1.768395 0.41868,0.402464 1.00004,0.603695 1.74398,0.603694 0.4309,10e-7 0.84762,-0.05285 1.25005,-0.158546 0.40657,-0.105696 0.809,-0.264242 1.20739,-0.475637 l 0,1.061037 c -0.40243,0.170742 -0.81506,0.300831 -1.23788,0.390267 -0.42277,0.08944 -0.85165,0.134154 -1.28664,0.134154 -1.08948,0 -1.95335,-0.317092 -2.5916,-0.951275 -0.6342,-0.634182 -0.95128,-1.491954 -0.95128,-2.573321 0,-1.117946 0.30082,-2.004176 0.90248,-2.658691 0.60574,-0.658568 1.4208,-0.987855 2.44527,-0.987862 0.91873,7e-6 1.6444,0.296771 2.17695,0.890295 0.5366,0.589471 0.80492,1.392363 0.80492,2.408677 m -1.122,-0.329287 c -0.008,-0.613853 -0.1809,-1.103718 -0.51832,-1.469598 -0.33338,-0.365869 -0.77649,-0.548806 -1.32934,-0.548812 -0.62608,6e-6 -1.12814,0.176845 -1.5062,0.530518 -0.37401,0.353685 -0.58948,0.851681 -0.64637,1.49399 l 4.00023,-0.0061"
+ id="path3521"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 757.56959,45.666955 1.12199,0 1.40253,5.329579 1.39642,-5.329579 1.32323,0 1.40253,5.329579 1.39642,-5.329579 1.12204,0 -1.78669,6.829667 -1.32328,0 -1.46956,-5.597887 -1.47571,5.597887 -1.32324,0 -1.78668,-6.829667"
+ id="path3523"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 774.11933,48.37443 0,4.122192 -1.12204,0 0,-4.085604 c 0,-0.646375 -0.12604,-1.130142 -0.37806,-1.451305 -0.25206,-0.32115 -0.63012,-0.481729 -1.1342,-0.481735 -0.60574,6e-6 -1.08343,0.193107 -1.43302,0.579302 -0.34963,0.386207 -0.52442,0.91266 -0.52442,1.57936 l 0,3.859982 -1.1281,0 0,-9.488358 1.1281,0 0,3.719729 c 0.26832,-0.410587 0.58338,-0.717515 0.94518,-0.920786 0.36588,-0.203256 0.78664,-0.304888 1.26226,-0.304895 0.78457,7e-6 1.37814,0.243923 1.78058,0.73175 0.40248,0.483773 0.60372,1.197229 0.60372,2.140368"
+ id="path3525"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 776.36947,45.666955 1.12199,0 0,6.829667 -1.12199,0 0,-6.829667 m 0,-2.658691 1.12199,0 0,1.420815 -1.12199,0 0,-1.420815"
+ id="path3527"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 780.94289,43.727818 0,1.939137 2.31111,0 0,0.872002 -2.31111,0 0,3.707533 c 0,0.556945 0.0752,0.914689 0.22562,1.073233 0.15449,0.158547 0.46547,0.23782 0.93296,0.237819 l 1.15253,0 0,0.93908 -1.15253,0 c -0.86588,0 -1.4635,-0.160579 -1.79275,-0.481736 -0.32929,-0.325221 -0.49393,-0.914686 -0.49393,-1.768396 l 0,-3.707533 -0.82324,0 0,-0.872002 0.82324,0 0,-1.939137 1.1281,0"
+ id="path3529"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 790.5776,48.801284 0,0.548813 -5.15886,0 c 0.0488,0.772405 0.28049,1.361869 0.69518,1.768395 0.41873,0.402464 1.00004,0.603695 1.74398,0.603694 0.4309,10e-7 0.84762,-0.05285 1.2501,-0.158546 0.40652,-0.105696 0.80895,-0.264242 1.20739,-0.475637 l 0,1.061037 c -0.40248,0.170742 -0.81511,0.300831 -1.23788,0.390267 -0.42282,0.08944 -0.8517,0.134154 -1.28669,0.134154 -1.08948,0 -1.95335,-0.317092 -2.5916,-0.951275 -0.6342,-0.634182 -0.95128,-1.491954 -0.95128,-2.573321 0,-1.117946 0.30083,-2.004176 0.90248,-2.658691 0.60574,-0.658568 1.42084,-0.987855 2.44527,-0.987862 0.91878,7e-6 1.6444,0.296771 2.17695,0.890295 0.53664,0.589471 0.80492,1.392363 0.80496,2.408677 m -1.12204,-0.329287 c -0.008,-0.613853 -0.1809,-1.103718 -0.51832,-1.469598 -0.33338,-0.365869 -0.77649,-0.548806 -1.32934,-0.548812 -0.62608,6e-6 -1.12814,0.176845 -1.5062,0.530518 -0.37401,0.353685 -0.58944,0.851681 -0.64637,1.49399 l 4.00023,-0.0061"
+ id="path3531"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 799.49882,49.063495 c -0.90652,3e-6 -1.53462,0.103667 -1.88425,0.310994 -0.34959,0.207331 -0.52443,0.56101 -0.52443,1.061037 0,0.398399 0.13012,0.71549 0.39027,0.951275 0.26428,0.231722 0.62199,0.347582 1.07323,0.347581 0.622,1e-6 1.12002,-0.219524 1.49404,-0.658575 0.37805,-0.443114 0.56708,-1.030546 0.56708,-1.762298 l 0,-0.250014 -1.11594,0 m 2.23798,-0.463442 0,3.896569 -1.12204,0 0,-1.036646 c -0.25611,0.414659 -0.57526,0.721587 -0.95735,0.920785 -0.38214,0.195133 -0.84968,0.2927 -1.40253,0.2927 -0.69926,0 -1.2562,-0.195133 -1.67084,-0.5854 -0.41061,-0.394331 -0.61589,-0.920784 -0.61589,-1.57936 0,-0.768335 0.25611,-1.347636 0.76832,-1.737906 0.5163,-0.390263 1.28462,-0.585396 2.30501,-0.5854 l 1.57328,0 0,-0.109763 c 0,-0.516285 -0.17076,-0.914682 -0.51222,-1.195191 -0.33742,-0.284564 -0.81308,-0.426848 -1.4269,-0.426854 -0.39027,6e-6 -0.77039,0.04676 -1.14032,0.140251 -0.36997,0.09351 -0.72566,0.23376 -1.06712,0.420757 l 0,-1.036646 c 0.41056,-0.158539 0.80895,-0.276432 1.19518,-0.353679 0.38618,-0.0813 0.76221,-0.121951 1.1281,-0.121958 0.98788,7e-6 1.72571,0.256119 2.21354,0.768337 0.48784,0.512231 0.73173,1.288698 0.73178,2.329404"
+ id="path3533"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 808.01155,46.715797 c -0.12603,-0.07317 -0.26428,-0.126018 -0.41469,-0.158546 -0.14633,-0.03658 -0.30896,-0.05488 -0.48784,-0.05488 -0.63416,6e-6 -1.12199,0.207335 -1.4635,0.621987 -0.33742,0.410598 -0.5061,1.002096 -0.5061,1.774494 l 0,3.597771 -1.1281,0 0,-6.829667 1.1281,0 0,1.061038 c 0.23576,-0.414652 0.5427,-0.721581 0.9208,-0.920786 0.37805,-0.203256 0.83742,-0.304888 1.3781,-0.304895 0.0772,7e-6 0.16262,0.0061 0.2561,0.01829 0.0935,0.0081 0.1972,0.02236 0.31102,0.04269 l 0.006,1.152506"
+ id="path3535"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 814.7863,48.801284 0,0.548813 -5.15882,0 c 0.0488,0.772405 0.28049,1.361869 0.69514,1.768395 0.41873,0.402464 1.00009,0.603695 1.74403,0.603694 0.4309,10e-7 0.84761,-0.05285 1.25005,-0.158546 0.40652,-0.105696 0.80899,-0.264242 1.20739,-0.475637 l 0,1.061037 c -0.40248,0.170742 -0.81506,0.300831 -1.23788,0.390267 -0.42278,0.08944 -0.85166,0.134154 -1.28664,0.134154 -1.08949,0 -1.95336,-0.317092 -2.5916,-0.951275 -0.63421,-0.634182 -0.95129,-1.491954 -0.95129,-2.573321 0,-1.117946 0.30083,-2.004176 0.90248,-2.658691 0.60574,-0.658568 1.4208,-0.987855 2.44527,-0.987862 0.91874,7e-6 1.6444,0.296771 2.17696,0.890295 0.53659,0.589471 0.80491,1.392363 0.80491,2.408677 m -1.12199,-0.329287 c -0.008,-0.613853 -0.18095,-1.103718 -0.51832,-1.469598 -0.33338,-0.365869 -0.77649,-0.548806 -1.32939,-0.548812 -0.62603,6e-6 -1.1281,0.176845 -1.50615,0.530518 -0.37401,0.353685 -0.58949,0.851681 -0.64638,1.49399 l 4.00024,-0.0061"
+ id="path3537"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 819.74393,49.063495 c -0.90657,3e-6 -1.53467,0.103667 -1.88426,0.310994 -0.34963,0.207331 -0.52442,0.56101 -0.52442,1.061037 0,0.398399 0.13007,0.71549 0.39026,0.951275 0.26424,0.231722 0.622,0.347582 1.07324,0.347581 0.62199,1e-6 1.11997,-0.219524 1.49398,-0.658575 0.37806,-0.443114 0.56708,-1.030546 0.56713,-1.762298 l 0,-0.250014 -1.11593,0 m 2.23792,-0.463442 0,3.896569 -1.12199,0 0,-1.036646 c -0.25615,0.414659 -0.57525,0.721587 -0.95739,0.920785 -0.38214,0.195133 -0.84964,0.2927 -1.40253,0.2927 -0.69922,0 -1.25615,-0.195133 -1.6708,-0.5854 -0.41061,-0.394331 -0.61593,-0.920784 -0.61593,-1.57936 0,-0.768335 0.25615,-1.347636 0.76836,-1.737906 0.5163,-0.390263 1.28462,-0.585396 2.30501,-0.5854 l 1.57328,0 0,-0.109763 c -5e-5,-0.516285 -0.17075,-0.914682 -0.51226,-1.195191 -0.33742,-0.284564 -0.81304,-0.426848 -1.42691,-0.426854 -0.39026,6e-6 -0.77034,0.04676 -1.14031,0.140251 -0.36993,0.09351 -0.72562,0.23376 -1.06713,0.420757 l 0,-1.036646 c 0.41061,-0.158539 0.809,-0.276432 1.19518,-0.353679 0.38623,-0.0813 0.76226,-0.121951 1.12815,-0.121958 0.98783,7e-6 1.72567,0.256119 2.21355,0.768337 0.48778,0.512231 0.73172,1.288698 0.73172,2.329404"
+ id="path3539"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 830.92139,46.453587 c -0.60165,6e-6 -1.07732,0.235791 -1.4269,0.707358 -0.34964,0.467512 -0.52443,1.109825 -0.52443,1.926941 0,0.817124 0.17277,1.46147 0.51832,1.93304 0.34963,0.467508 0.82727,0.701261 1.43301,0.70126 0.59762,10e-7 1.07122,-0.235785 1.4208,-0.707358 0.34964,-0.47157 0.52443,-1.113884 0.52443,-1.926942 0,-0.808986 -0.17479,-1.449266 -0.52443,-1.920843 -0.34958,-0.475632 -0.82318,-0.71345 -1.4208,-0.713456 m 0,-0.951275 c 0.97567,7e-6 1.74197,0.317098 2.2989,0.951275 0.55694,0.634188 0.83545,1.512287 0.83545,2.634299 0,1.117954 -0.27851,1.996053 -0.83545,2.6343 -0.55693,0.634183 -1.32323,0.951275 -2.2989,0.951275 -0.97975,0 -1.74807,-0.317092 -2.305,-0.951275 -0.5529,-0.638247 -0.82934,-1.516346 -0.82934,-2.6343 0,-1.122012 0.27644,-2.000111 0.82934,-2.634299 0.55693,-0.634177 1.32525,-0.951268 2.305,-0.951275"
+ id="path3541"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 841.58664,48.37443 0,4.122192 -1.12203,0 0,-4.085604 c 0,-0.646375 -0.12599,-1.130142 -0.37806,-1.451305 -0.25206,-0.32115 -0.63012,-0.481729 -1.1342,-0.481735 -0.60574,6e-6 -1.08339,0.193107 -1.43302,0.579302 -0.34963,0.386207 -0.52442,0.91266 -0.52442,1.57936 l 0,3.859982 -1.1281,0 0,-6.829667 1.1281,0 0,1.061038 c 0.26832,-0.410587 0.58338,-0.717515 0.94518,-0.920786 0.36588,-0.203256 0.78664,-0.304888 1.26226,-0.304895 0.78461,7e-6 1.37814,0.243923 1.78062,0.73175 0.40243,0.483773 0.60367,1.197229 0.60367,2.140368"
+ id="path3543"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 843.83678,43.008264 1.122,0 0,9.488358 -1.122,0 0,-9.488358"
+ id="path3545"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 850.14202,53.130805 c -0.31708,0.813054 -0.62603,1.343572 -0.92686,1.591556 -0.30087,0.247979 -0.7033,0.37197 -1.20739,0.371973 l -0.89642,0 0,-0.939079 0.65859,0 c 0.30895,-2e-6 0.5488,-0.07318 0.71956,-0.219525 0.17075,-0.146352 0.35978,-0.4919 0.56708,-1.036646 l 0.20124,-0.512225 -2.76236,-6.719904 1.18912,0 2.13426,5.341775 2.13425,-5.341775 1.18912,0 -3.00019,7.46385"
+ id="path3547"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 853.08124,50.947751 1.28664,0 0,1.548871 -1.28664,0 0,-1.548871"
+ id="path3549"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 588.79755,62.12523 1.23177,0 0,8.067546 4.4332,0 0,1.036644 -5.66497,0 0,-9.10419"
+ id="path3551"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 598.80421,67.796291 c -0.90656,4e-6 -1.53462,0.103668 -1.88425,0.310996 -0.34959,0.207333 -0.52443,0.561011 -0.52443,1.061039 0,0.398398 0.13012,0.715487 0.39027,0.951272 0.26423,0.231722 0.62199,0.347581 1.07323,0.347581 0.622,0 1.11998,-0.219523 1.49399,-0.658573 0.3781,-0.443113 0.56713,-1.030547 0.56713,-1.762297 l 0,-0.250018 -1.11594,0 m 2.23793,-0.46344 0,3.896569 -1.12199,0 0,-1.036644 c -0.25611,0.414656 -0.57526,0.721584 -0.9574,0.920786 -0.38214,0.195133 -0.84963,0.292695 -1.40252,0.2927 -0.69922,-5e-6 -1.25616,-0.195134 -1.6708,-0.5854 -0.41061,-0.394335 -0.61589,-0.920786 -0.61589,-1.579364 0,-0.768333 0.25611,-1.347636 0.76832,-1.737907 0.5163,-0.390262 1.28462,-0.585396 2.30501,-0.5854 l 1.57328,0 0,-0.109762 c 0,-0.516286 -0.17076,-0.914679 -0.51222,-1.195189 -0.33742,-0.284564 -0.81308,-0.42685 -1.4269,-0.426855 -0.39032,5e-6 -0.77039,0.04676 -1.14032,0.140253 -0.36997,0.09351 -0.72566,0.23376 -1.06717,0.420753 l 0,-1.036645 c 0.41061,-0.15854 0.809,-0.276432 1.19523,-0.353678 0.38618,-0.0813 0.76221,-0.121951 1.1281,-0.12196 0.98788,9e-6 1.72571,0.25612 2.21354,0.768338 0.48784,0.512232 0.73173,1.288697 0.73173,2.329405"
+ id="path3553"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 607.71327,64.600985 0,1.061039 c -0.31708,-0.162608 -0.64638,-0.284564 -0.98784,-0.365878 -0.3415,-0.0813 -0.69518,-0.121951 -1.06106,-0.121956 -0.55694,5e-6 -0.97567,0.08538 -1.25616,0.256112 -0.27644,0.170748 -0.41464,0.426859 -0.41464,0.768338 0,0.260179 0.0996,0.465478 0.29876,0.615887 0.19922,0.146354 0.59963,0.286607 1.20133,0.420758 l 0.38416,0.08537 c 0.79679,0.170744 1.36185,0.412626 1.69523,0.725652 0.33737,0.308963 0.5061,0.741915 0.5061,1.298853 0,0.634188 -0.25206,1.136246 -0.75615,1.506186 -0.5,0.369941 -1.18907,0.554909 -2.06717,0.554914 -0.36589,-5e-6 -0.74803,-0.03659 -1.14642,-0.109766 -0.39431,-0.06911 -0.81102,-0.174808 -1.25005,-0.31709 l 0,-1.158605 c 0.41465,0.215459 0.82319,0.378072 1.22567,0.487833 0.40243,0.105698 0.80087,0.158545 1.19518,0.158545 0.52846,0 0.93503,-0.08943 1.2196,-0.268306 0.28453,-0.182939 0.42682,-0.43905 0.42682,-0.768339 0,-0.304894 -0.10363,-0.538646 -0.31098,-0.701258 -0.20326,-0.162608 -0.65248,-0.319123 -1.34766,-0.469541 l -0.39026,-0.09147 c -0.69514,-0.146345 -1.1972,-0.369936 -1.50616,-0.670772 -0.30895,-0.30489 -0.46345,-0.72158 -0.46345,-1.25007 0,-0.642309 0.22764,-1.138274 0.68297,-1.487893 0.45532,-0.349606 1.1017,-0.524413 1.93912,-0.524422 0.41469,9e-6 0.80496,0.03049 1.1708,0.09147 0.36588,0.06099 0.7033,0.152457 1.01226,0.274408"
+ id="path3555"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 615.71373,67.534082 0,0.548811 -5.15882,0 c 0.0488,0.772407 0.28049,1.36187 0.69518,1.768399 0.41869,0.402462 1.00005,0.603692 1.74399,0.603692 0.4309,0 0.84761,-0.05285 1.25005,-0.158544 0.40656,-0.105698 0.809,-0.264243 1.20739,-0.475639 l 0,1.061039 c -0.40244,0.170739 -0.81506,0.300831 -1.23788,0.390266 -0.42277,0.08944 -0.85165,0.134151 -1.28664,0.134156 -1.08949,-5e-6 -1.95335,-0.317094 -2.5916,-0.951278 -0.63421,-0.634183 -0.95129,-1.491952 -0.95129,-2.573321 0,-1.117944 0.30083,-2.004176 0.90248,-2.658689 0.60574,-0.658568 1.4208,-0.987857 2.44528,-0.987866 0.91873,9e-6 1.6444,0.296772 2.17695,0.890299 0.53659,0.589468 0.80491,1.392361 0.80491,2.408675 m -1.12199,-0.329289 c -0.008,-0.613852 -0.1809,-1.103715 -0.51832,-1.469597 -0.33338,-0.365868 -0.77649,-0.548806 -1.32934,-0.548811 -0.62608,5e-6 -1.12815,0.176846 -1.5062,0.530519 -0.37401,0.353683 -0.58949,0.851681 -0.64637,1.493987 l 4.00023,-0.0061"
+ id="path3557"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 621.51286,65.448594 c -0.12603,-0.07317 -0.26423,-0.126015 -0.41464,-0.158545 -0.14638,-0.03659 -0.309,-0.05488 -0.48784,-0.05488 -0.6342,5e-6 -1.12204,0.207333 -1.4635,0.621989 -0.33742,0.410597 -0.50615,1.002094 -0.50615,1.774492 l 0,3.597771 -1.1281,0 0,-6.829666 1.1281,0 0,1.061039 c 0.23581,-0.414656 0.54275,-0.72158 0.9208,-0.920786 0.37805,-0.20326 0.83742,-0.30489 1.37815,-0.304899 0.0772,9e-6 0.16258,0.0061 0.2561,0.01832 0.0935,0.0081 0.19716,0.02236 0.31098,0.0427 l 0.006,1.152503"
+ id="path3559"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 627.95837,66.881607 0,3.335558 1.97571,0 c 0.66263,0 1.15248,-0.136185 1.46961,-0.408559 0.32117,-0.276437 0.48173,-0.697195 0.48173,-1.262269 0,-0.569137 -0.16056,-0.987861 -0.48173,-1.256172 -0.31713,-0.272369 -0.80698,-0.408554 -1.46961,-0.408558 l -1.97571,0 m 0,-3.744122 0,2.744061 1.82328,0 c 0.60165,5e-6 1.04881,-0.11179 1.34151,-0.335386 0.29678,-0.227649 0.44518,-0.573196 0.44518,-1.036644 0,-0.459367 -0.1484,-0.802884 -0.44518,-1.030547 -0.2927,-0.22765 -0.73986,-0.341475 -1.34151,-0.341484 l -1.82328,0 m -1.23177,-1.012255 3.14651,0 c 0.93907,9e-6 1.66267,0.195143 2.17085,0.5854 0.50817,0.390276 0.76226,0.945184 0.76226,1.66473 0,0.556952 -0.13012,1.000066 -0.39027,1.32935 -0.26019,0.329288 -0.64233,0.534587 -1.14642,0.615886 0.60574,0.130097 1.07525,0.402466 1.40863,0.817122 0.33738,0.410597 0.50611,0.924854 0.50611,1.542775 0,0.813053 -0.27645,1.441139 -0.82929,1.884253 -0.5529,0.443118 -1.33954,0.664674 -2.35992,0.664674 l -3.26846,0 0,-9.10419"
+ id="path3561"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 641.08106,67.534082 0,0.548811 -5.15882,0 c 0.0488,0.772407 0.28049,1.36187 0.69518,1.768399 0.41869,0.402462 1.00005,0.603692 1.74399,0.603692 0.4309,0 0.84761,-0.05285 1.25005,-0.158544 0.40656,-0.105698 0.809,-0.264243 1.20739,-0.475639 l 0,1.061039 c -0.40243,0.170739 -0.81506,0.300831 -1.23788,0.390266 -0.42277,0.08944 -0.85165,0.134151 -1.28664,0.134156 -1.08949,-5e-6 -1.95335,-0.317094 -2.5916,-0.951278 -0.63421,-0.634183 -0.95129,-1.491952 -0.95129,-2.573321 0,-1.117944 0.30083,-2.004176 0.90248,-2.658689 0.60574,-0.658568 1.4208,-0.987857 2.44528,-0.987866 0.91873,9e-6 1.6444,0.296772 2.17695,0.890299 0.53659,0.589468 0.80491,1.392361 0.80491,2.408675 m -1.12199,-0.329289 c -0.008,-0.613852 -0.1809,-1.103715 -0.51832,-1.469597 -0.33338,-0.365868 -0.77649,-0.548806 -1.32934,-0.548811 -0.62608,5e-6 -1.12815,0.176846 -1.5062,0.530519 -0.37401,0.353683 -0.58949,0.851681 -0.64637,1.493987 l 4.00023,-0.0061"
+ id="path3563"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 646.02647,67.796291 c -0.90656,4e-6 -1.53462,0.103668 -1.88425,0.310996 -0.34959,0.207333 -0.52442,0.561011 -0.52442,1.061039 0,0.398398 0.13011,0.715487 0.39026,0.951272 0.26424,0.231722 0.622,0.347581 1.07324,0.347581 0.62199,0 1.11997,-0.219523 1.49398,-0.658573 0.3781,-0.443113 0.56713,-1.030547 0.56713,-1.762297 l 0,-0.250018 -1.11594,0 m 2.23793,-0.46344 0,3.896569 -1.12199,0 0,-1.036644 c -0.25611,0.414656 -0.57526,0.721584 -0.95739,0.920786 -0.38214,0.195133 -0.84964,0.292695 -1.40253,0.2927 -0.69922,-5e-6 -1.25615,-0.195134 -1.6708,-0.5854 -0.41061,-0.394335 -0.61589,-0.920786 -0.61589,-1.579364 0,-0.768333 0.25611,-1.347636 0.76832,-1.737907 0.5163,-0.390262 1.28462,-0.585396 2.30501,-0.5854 l 1.57328,0 0,-0.109762 c 0,-0.516286 -0.17076,-0.914679 -0.51222,-1.195189 -0.33742,-0.284564 -0.81308,-0.42685 -1.4269,-0.426855 -0.39031,5e-6 -0.77039,0.04676 -1.14032,0.140253 -0.36997,0.09351 -0.72566,0.23376 -1.06717,0.420753 l 0,-1.036645 c 0.41061,-0.15854 0.809,-0.276432 1.19523,-0.353678 0.38618,-0.0813 0.76221,-0.121951 1.1281,-0.12196 0.98783,9e-6 1.72571,0.25612 2.21354,0.768338 0.48784,0.512232 0.73173,1.288697 0.73173,2.329405"
+ id="path3565"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 655.89903,65.710807 c 0.28048,-0.504091 0.61588,-0.876061 1.00615,-1.115919 0.39027,-0.239844 0.84963,-0.359771 1.3781,-0.35978 0.71143,9e-6 1.26024,0.250023 1.64647,0.750046 0.38618,0.49597 0.57929,1.203325 0.57929,2.122073 l 0,4.122193 -1.1281,0 0,-4.085605 c -5e-5,-0.654504 -0.11589,-1.140304 -0.34761,-1.457402 -0.23173,-0.317085 -0.5854,-0.475629 -1.06102,-0.475639 -0.58136,1e-5 -1.04073,0.193109 -1.37815,0.579303 -0.33742,0.386208 -0.50611,0.912659 -0.50611,1.579363 l 0,3.85998 -1.1281,0 0,-4.085605 c -4e-5,-0.658568 -0.11588,-1.144372 -0.34761,-1.457402 -0.23173,-0.317085 -0.58944,-0.475629 -1.07323,-0.475639 -0.57319,1e-5 -1.02852,0.195143 -1.36594,0.5854 -0.33742,0.386208 -0.5061,0.91063 -0.5061,1.573266 l 0,3.85998 -1.12815,0 0,-6.829666 1.12815,0 0,1.061039 c 0.2561,-0.418719 0.56304,-0.727682 0.92075,-0.926883 0.35776,-0.199192 0.7826,-0.298793 1.27447,-0.298802 0.49596,9e-6 0.91672,0.126033 1.26226,0.378072 0.34964,0.252052 0.60776,0.61793 0.77448,1.097627"
+ id="path3567"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 673.59518,62.826493 0,1.298853 c -0.41469,-0.386194 -0.8578,-0.674826 -1.32938,-0.865905 -0.46749,-0.191056 -0.96548,-0.286593 -1.49399,-0.286598 -1.04068,5e-6 -1.83751,0.319133 -2.39036,0.95737 -0.55289,0.634193 -0.82934,1.552944 -0.82934,2.75626 0,1.199258 0.27645,2.11801 0.82934,2.756256 0.55285,0.634188 1.34968,0.951277 2.39036,0.951277 0.52851,0 1.0265,-0.09553 1.49399,-0.286602 0.47158,-0.191066 0.91469,-0.479702 1.32938,-0.865906 l 0,1.286664 c -0.43094,0.2927 -0.88829,0.512222 -1.37204,0.658572 -0.4797,0.14635 -0.98787,0.219523 -1.52447,0.219528 -1.37814,-5e-6 -2.46359,-0.420758 -3.25629,-1.26227 -0.79275,-0.845579 -1.18912,-1.998082 -1.18912,-3.457519 0,-1.463495 0.39637,-2.615998 1.18912,-3.457518 0.7927,-0.84557 1.87815,-1.268358 3.25629,-1.268367 0.54472,9e-6 1.05694,0.07318 1.53664,0.219523 0.48379,0.142295 0.93706,0.357755 1.35987,0.646382"
+ id="path3569"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 675.34528,68.534143 0,-4.134389 1.12199,0 0,4.091703 c 0,0.646378 0.12603,1.132181 0.3781,1.457402 0.25202,0.321157 0.63007,0.481736 1.13421,0.481736 0.60569,0 1.08338,-0.193104 1.43301,-0.579303 0.35367,-0.386203 0.53049,-0.912654 0.53049,-1.579363 l 0,-3.872175 1.12204,0 0,6.829666 -1.12204,0 0,-1.048844 c -0.27236,0.414661 -0.58944,0.723624 -0.95124,0.926884 -0.35776,0.199201 -0.77448,0.298797 -1.2501,0.298802 -0.78462,-5e-6 -1.38016,-0.243917 -1.78668,-0.73175 -0.40652,-0.487834 -0.60978,-1.201292 -0.60978,-2.140369"
+ id="path3571"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 684.49822,62.460616 0,1.939138 2.31112,0 0,0.872003 -2.31112,0 0,3.707533 c 0,0.556942 0.0752,0.914688 0.22562,1.073233 0.1545,0.158545 0.46548,0.237819 0.93302,0.237819 l 1.15248,0 0,0.939078 -1.15248,0 c -0.86594,0 -1.4635,-0.160578 -1.7928,-0.481736 -0.32929,-0.32522 -0.49394,-0.914684 -0.49394,-1.768394 l 0,-3.707533 -0.82323,0 0,-0.872003 0.82323,0 0,-1.939138 1.1281,0"
+ id="path3573"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 692.64506,64.600985 0,1.061039 c -0.31712,-0.162608 -0.64637,-0.284564 -0.98788,-0.365878 -0.34146,-0.0813 -0.69513,-0.121951 -1.06102,-0.121956 -0.55693,5e-6 -0.97566,0.08538 -1.2562,0.256112 -0.2764,0.170748 -0.41464,0.426859 -0.41464,0.768338 0,0.260179 0.0996,0.465478 0.2988,0.615887 0.19922,0.146354 0.59964,0.286607 1.20129,0.420758 l 0.38416,0.08537 c 0.79679,0.170744 1.36189,0.412626 1.69523,0.725652 0.33742,0.308963 0.5061,0.741915 0.50615,1.298853 -5e-5,0.634188 -0.25207,1.136246 -0.75615,1.506186 -0.50005,0.369941 -1.18912,0.554909 -2.06722,0.554914 -0.36584,-5e-6 -0.74798,-0.03659 -1.14638,-0.109766 -0.39435,-0.06911 -0.81102,-0.174808 -1.25009,-0.31709 l 0,-1.158605 c 0.41465,0.215459 0.82323,0.378072 1.22567,0.487833 0.40248,0.105698 0.80087,0.158545 1.19522,0.158545 0.52847,0 0.93499,-0.08943 1.21956,-0.268306 0.28458,-0.182939 0.42686,-0.43905 0.42686,-0.768339 0,-0.304894 -0.10367,-0.538646 -0.31097,-0.701258 -0.20331,-0.162608 -0.65248,-0.319123 -1.34766,-0.469541 l -0.39027,-0.09147 c -0.69518,-0.146345 -1.19724,-0.369936 -1.5062,-0.670772 -0.30895,-0.30489 -0.4634,-0.72158 -0.4634,-1.25007 0,-0.642309 0.22764,-1.138274 0.68296,-1.487893 0.45528,-0.349606 1.10166,-0.524413 1.93912,-0.524422 0.41465,9e-6 0.80492,0.03049 1.1708,0.09147 0.36589,0.06099 0.70331,0.152457 1.01226,0.274408"
+ id="path3575"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 701.87119,63.338716 -1.6708,4.530752 3.34776,0 -1.67696,-4.530752 m -0.69513,-1.213486 1.39642,0 3.4697,9.10419 -1.28058,0 -0.82929,-2.335502 -4.10391,0 -0.82934,2.335502 -1.29885,0 3.47585,-9.10419"
+ id="path3577"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 706.16413,64.399754 1.12204,0 1.40252,5.329578 1.39642,-5.329578 1.32324,0 1.40252,5.329578 1.39642,-5.329578 1.122,0 -1.78669,6.829666 -1.32323,0 -1.46961,-5.597888 -1.47567,5.597888 -1.32328,0 -1.78668,-6.829666"
+ id="path3579"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 720.15275,67.796291 c -0.90656,4e-6 -1.53466,0.103668 -1.88425,0.310996 -0.34963,0.207333 -0.52443,0.561011 -0.52443,1.061039 0,0.398398 0.13008,0.715487 0.39027,0.951272 0.26423,0.231722 0.62199,0.347581 1.07323,0.347581 0.622,0 1.11998,-0.219523 1.49399,-0.658573 0.37805,-0.443113 0.56713,-1.030547 0.56713,-1.762297 l 0,-0.250018 -1.11594,0 m 2.23793,-0.46344 0,3.896569 -1.12199,0 0,-1.036644 c -0.25616,0.414656 -0.57526,0.721584 -0.9574,0.920786 -0.38214,0.195133 -0.84963,0.292695 -1.40252,0.2927 -0.69922,-5e-6 -1.25616,-0.195134 -1.6708,-0.5854 -0.41061,-0.394335 -0.61589,-0.920786 -0.61589,-1.579364 0,-0.768333 0.25611,-1.347636 0.76832,-1.737907 0.5163,-0.390262 1.28462,-0.585396 2.30501,-0.5854 l 1.57328,0 0,-0.109762 c 0,-0.516286 -0.17076,-0.914679 -0.51226,-1.195189 -0.33742,-0.284564 -0.81304,-0.42685 -1.42691,-0.426855 -0.39027,5e-6 -0.77034,0.04676 -1.14031,0.140253 -0.36993,0.09351 -0.72562,0.23376 -1.06713,0.420753 l 0,-1.036645 c 0.41061,-0.15854 0.809,-0.276432 1.19518,-0.353678 0.38623,-0.0813 0.76226,-0.121951 1.12815,-0.12196 0.98783,9e-6 1.72571,0.25612 2.21354,0.768338 0.48784,0.512232 0.73173,1.288697 0.73173,2.329405"
+ id="path3581"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 727.5495,71.863603 c -0.31708,0.813054 -0.62603,1.343574 -0.92686,1.591558 -0.30083,0.247976 -0.70331,0.37197 -1.20739,0.37197 l -0.89638,0 0,-0.939078 0.65854,0 c 0.309,0 0.54881,-0.07318 0.71956,-0.219527 0.17076,-0.14635 0.35978,-0.491897 0.56713,-1.036644 l 0.20124,-0.512223 -2.76235,-6.719905 1.18907,0 2.13425,5.341772 2.1343,-5.341772 1.18907,0 -3.00018,7.463849"
+ id="path3583"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 731.49486,69.680548 1.28669,0 0,1.548872 -1.28669,0 0,-1.548872 m 0,-4.908824 1.28669,0 0,1.548872 -1.28669,0 0,-1.548872"
+ id="path3585"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 742.20892,62.936255 c -0.6342,9e-6 -1.11184,0.313035 -1.43301,0.939077 -0.31708,0.621994 -0.47562,1.559042 -0.47562,2.811141 0,1.248041 0.15854,2.185089 0.47562,2.811137 0.32117,0.621988 0.79881,0.932985 1.43301,0.932985 0.63825,0 1.11589,-0.310997 1.43302,-0.932985 0.32116,-0.626048 0.48172,-1.563096 0.48172,-2.811137 0,-1.252099 -0.16056,-2.189147 -0.48172,-2.811141 -0.31713,-0.626042 -0.79477,-0.939068 -1.43302,-0.939077 m 0,-0.975667 c 1.02039,9e-6 1.79886,0.404504 2.3355,1.213486 0.54068,0.804932 0.81102,1.975732 0.81102,3.512399 0,1.53261 -0.27034,2.703409 -0.81102,3.5124 -0.53664,0.804923 -1.31511,1.207384 -2.3355,1.207389 -1.02038,-5e-6 -1.80092,-0.402466 -2.3416,-1.207389 -0.53664,-0.808991 -0.80491,-1.97979 -0.80491,-3.5124 0,-1.536667 0.26827,-2.707467 0.80491,-3.512399 0.54068,-0.808982 1.32122,-1.213477 2.3416,-1.213486"
+ id="path3587"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 747.52628,69.680548 1.28669,0 0,1.548872 -1.28669,0 0,-1.548872"
+ id="path3589"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 751.71559,70.192776 2.0123,0 0,-6.945529 -2.18916,0.43905 0,-1.122017 2.17695,-0.43905 1.23178,0 0,8.067546 2.0123,0 0,1.036644 -5.24417,0 0,-1.036644"
+ id="path3591"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 762.70403,67.308457 3.28678,0 0,1.000061 -3.28678,0 0,-1.000061"
+ id="path3593"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 774.55225,62.936255 c -0.63416,9e-6 -1.11185,0.313035 -1.43297,0.939077 -0.31713,0.621994 -0.47567,1.559042 -0.47567,2.811141 0,1.248041 0.15854,2.185089 0.47567,2.811137 0.32112,0.621988 0.79881,0.932985 1.43297,0.932985 0.63824,0 1.11593,-0.310997 1.43301,-0.932985 0.32117,-0.626048 0.48173,-1.563096 0.48177,-2.811137 -4e-5,-1.252099 -0.1606,-2.189147 -0.48177,-2.811141 -0.31708,-0.626042 -0.79477,-0.939068 -1.43301,-0.939077 m 0,-0.975667 c 1.02038,9e-6 1.7989,0.404504 2.33554,1.213486 0.54068,0.804932 0.81102,1.975732 0.81102,3.512399 0,1.53261 -0.27034,2.703409 -0.81102,3.5124 -0.53664,0.804923 -1.31516,1.207384 -2.33554,1.207389 -1.02039,-5e-6 -1.80092,-0.402466 -2.3416,-1.207389 -0.5366,-0.808991 -0.80492,-1.97979 -0.80492,-3.5124 0,-1.536667 0.26832,-2.707467 0.80492,-3.512399 0.54068,-0.808982 1.32121,-1.213477 2.3416,-1.213486"
+ id="path3595"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 779.86965,69.680548 1.28664,0 0,1.548872 -1.28664,0 0,-1.548872"
+ id="path3597"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 784.90652,70.192776 4.29904,0 0,1.036644 -5.78081,0 0,-1.036644 c 0.46749,-0.48377 1.10372,-1.132178 1.90863,-1.945236 0.809,-0.817117 1.31713,-1.343573 1.52448,-1.579363 0.3943,-0.443109 0.66873,-0.817113 0.82323,-1.122017 0.15854,-0.308953 0.23779,-0.611814 0.23779,-0.908586 0,-0.483761 -0.17071,-0.878096 -0.51222,-1.182999 -0.33742,-0.304886 -0.77851,-0.457333 -1.32323,-0.457342 -0.38623,9e-6 -0.79477,0.06708 -1.22567,0.20123 -0.42686,0.134165 -0.8842,0.337425 -1.37204,0.609794 l 0,-1.243977 c 0.49596,-0.199188 0.95942,-0.349605 1.39032,-0.451245 0.4309,-0.10162 0.82525,-0.152438 1.18301,-0.152447 0.94311,9e-6 1.69518,0.235795 2.2562,0.707356 0.56102,0.47158 0.84151,1.1017 0.84151,1.890355 0,0.374013 -0.0711,0.729725 -0.21341,1.067136 -0.13825,0.333356 -0.39229,0.727691 -0.76226,1.182994 -0.10161,0.117898 -0.42479,0.459381 -0.96956,1.02445 -0.54477,0.561011 -1.31309,1.347641 -2.30501,2.359897"
+ id="path3599"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 796.95603,65.710807 c 0.28049,-0.504091 0.61589,-0.876061 1.00615,-1.115919 0.39022,-0.239844 0.84964,-0.359771 1.3781,-0.35978 0.71144,9e-6 1.26024,0.250023 1.64647,0.750046 0.38618,0.49597 0.57929,1.203325 0.57929,2.122073 l 0,4.122193 -1.1281,0 0,-4.085605 c -4e-5,-0.654504 -0.11588,-1.140304 -0.34761,-1.457402 -0.23173,-0.317085 -0.5854,-0.475629 -1.06102,-0.475639 -0.58136,1e-5 -1.04073,0.193109 -1.37815,0.579303 -0.33742,0.386208 -0.5061,0.912659 -0.5061,1.579363 l 0,3.85998 -1.12815,0 0,-4.085605 c 0,-0.658568 -0.11584,-1.144372 -0.34757,-1.457402 -0.23172,-0.317085 -0.58944,-0.475629 -1.07323,-0.475639 -0.57319,1e-5 -1.02851,0.195143 -1.36593,0.5854 -0.33742,0.386208 -0.50611,0.91063 -0.50611,1.573266 l 0,3.85998 -1.12815,0 0,-6.829666 1.12815,0 0,1.061039 c 0.25611,-0.418719 0.56304,-0.727682 0.92075,-0.926883 0.35776,-0.199192 0.7826,-0.298793 1.27448,-0.298802 0.49596,9e-6 0.91671,0.126033 1.26226,0.378072 0.34963,0.252052 0.60776,0.61793 0.77447,1.097627"
+ id="path3601"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 809.12744,65.710807 c 0.28053,-0.504091 0.61588,-0.876061 1.00615,-1.115919 0.39027,-0.239844 0.84963,-0.359771 1.37814,-0.35978 0.71144,9e-6 1.26024,0.250023 1.64642,0.750046 0.38623,0.49597 0.5793,1.203325 0.57934,2.122073 l 0,4.122193 -1.12814,0 0,-4.085605 c 0,-0.654504 -0.11584,-1.140304 -0.34757,-1.457402 -0.23173,-0.317085 -0.5854,-0.475629 -1.06102,-0.475639 -0.58136,1e-5 -1.04073,0.193109 -1.37814,0.579303 -0.33742,0.386208 -0.50616,0.912659 -0.50616,1.579363 l 0,3.85998 -1.1281,0 0,-4.085605 c 0,-0.658568 -0.11584,-1.144372 -0.34756,-1.457402 -0.23173,-0.317085 -0.58949,-0.475629 -1.07324,-0.475639 -0.57323,1e-5 -1.02851,0.195143 -1.36593,0.5854 -0.33742,0.386208 -0.50615,0.91063 -0.50615,1.573266 l 0,3.85998 -1.1281,0 0,-6.829666 1.1281,0 0,1.061039 c 0.2561,-0.418719 0.56304,-0.727682 0.9208,-0.926883 0.35776,-0.199192 0.78255,-0.298793 1.27447,-0.298802 0.49596,9e-6 0.91671,0.126033 1.26226,0.378072 0.34963,0.252052 0.60776,0.61793 0.77443,1.097627"
+ id="path3603"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 824.86009,67.820685 c 0,-0.825249 -0.17075,-1.471627 -0.51226,-1.939139 -0.33742,-0.471566 -0.80289,-0.707351 -1.39642,-0.707356 -0.59352,5e-6 -1.06102,0.23579 -1.40252,0.707356 -0.33742,0.467512 -0.50611,1.11389 -0.50611,1.939139 0,0.825253 0.16869,1.473665 0.50611,1.945235 0.3415,0.467508 0.809,0.701259 1.40252,0.701259 0.59353,0 1.059,-0.233751 1.39642,-0.701259 0.34151,-0.47157 0.51226,-1.119982 0.51226,-1.945235 m -3.81731,-2.384286 c 0.23577,-0.40652 0.53255,-0.707351 0.89031,-0.902489 0.3618,-0.199192 0.7927,-0.298793 1.29275,-0.298802 0.82929,9e-6 1.50211,0.329298 2.01841,0.987866 0.52034,0.658577 0.78054,1.524482 0.78054,2.597711 0,1.073237 -0.2602,1.939138 -0.78054,2.597711 -0.5163,0.658577 -1.18912,0.987861 -2.01841,0.987866 -0.50005,-5e-6 -0.93095,-0.09757 -1.29275,-0.2927 -0.35776,-0.199202 -0.65454,-0.502062 -0.89031,-0.908592 l 0,1.02445 -1.1281,0 0,-9.488359 1.1281,0 0,3.695338"
+ id="path3605"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 830.53113,65.186385 c -0.60166,5e-6 -1.07728,0.23579 -1.42691,0.707356 -0.34959,0.467512 -0.52443,1.109826 -0.52443,1.926944 0,0.817122 0.17278,1.46147 0.51832,1.933041 0.34964,0.467507 0.82732,0.701258 1.43302,0.701258 0.59761,0 1.07121,-0.235785 1.42084,-0.707356 0.34959,-0.47157 0.52438,-1.113885 0.52438,-1.926943 0,-0.808986 -0.17479,-1.449267 -0.52438,-1.920842 -0.34963,-0.475634 -0.82323,-0.713453 -1.42084,-0.713458 m 0,-0.951277 c 0.97566,9e-6 1.74196,0.317098 2.29894,0.951277 0.55694,0.634188 0.8354,1.512288 0.8354,2.6343 0,1.117953 -0.27846,1.996053 -0.8354,2.634299 -0.55698,0.634184 -1.32328,0.951273 -2.29894,0.951278 -0.97971,-5e-6 -1.74808,-0.317094 -2.30501,-0.951278 -0.55289,-0.638246 -0.82929,-1.516346 -0.82929,-2.634299 0,-1.122012 0.2764,-2.000112 0.82929,-2.6343 0.55693,-0.634179 1.3253,-0.951268 2.30501,-0.951277"
+ id="path3607"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 836.62906,62.460616 0,1.939138 2.31112,0 0,0.872003 -2.31112,0 0,3.707533 c 0,0.556942 0.0752,0.914688 0.22563,1.073233 0.15445,0.158545 0.46547,0.237819 0.93296,0.237819 l 1.15253,0 0,0.939078 -1.15253,0 c -0.86589,0 -1.4635,-0.160578 -1.79279,-0.481736 -0.32929,-0.32522 -0.49394,-0.914684 -0.49394,-1.768394 l 0,-3.707533 -0.82319,0 0,-0.872003 0.82319,0 0,-1.939138 1.12814,0"
+ id="path3609"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 846.09909,67.107227 0,4.122193 -1.12199,0 0,-4.085605 c 0,-0.646373 -0.12604,-1.130143 -0.3781,-1.451305 -0.25202,-0.321148 -0.63012,-0.481726 -1.13421,-0.481736 -0.60574,1e-5 -1.08338,0.193109 -1.43301,0.579303 -0.34959,0.386208 -0.52443,0.912659 -0.52443,1.579363 l 0,3.85998 -1.1281,0 0,-9.488359 1.1281,0 0,3.719732 c 0.26832,-0.410588 0.58338,-0.717517 0.94518,-0.920786 0.36589,-0.20326 0.78664,-0.30489 1.26231,-0.304899 0.78457,9e-6 1.3781,0.243926 1.78058,0.73175 0.40243,0.483774 0.60367,1.197232 0.60367,2.140369"
+ id="path3611"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 856.67899,64.600985 0,1.061039 c -0.31708,-0.162608 -0.64637,-0.284564 -0.98783,-0.365878 -0.34151,-0.0813 -0.69518,-0.121951 -1.06107,-0.121956 -0.55693,5e-6 -0.97567,0.08538 -1.25615,0.256112 -0.27645,0.170748 -0.41465,0.426859 -0.41465,0.768338 0,0.260179 0.0996,0.465478 0.29881,0.615887 0.19917,0.146354 0.59958,0.286607 1.20128,0.420758 l 0.38416,0.08537 c 0.79679,0.170744 1.36185,0.412626 1.69523,0.725652 0.33742,0.308963 0.50611,0.741915 0.50611,1.298853 0,0.634188 -0.25207,1.136246 -0.75616,1.506186 -0.5,0.369941 -1.18907,0.554909 -2.06717,0.554914 -0.36589,-5e-6 -0.74803,-0.03659 -1.14642,-0.109766 -0.39431,-0.06911 -0.81102,-0.174808 -1.25005,-0.31709 l 0,-1.158605 c 0.41465,0.215459 0.82319,0.378072 1.22567,0.487833 0.40248,0.105698 0.80087,0.158545 1.19518,0.158545 0.52851,0 0.93503,-0.08943 1.21961,-0.268306 0.28457,-0.182939 0.42681,-0.43905 0.42686,-0.768339 -5e-5,-0.304894 -0.10368,-0.538646 -0.31102,-0.701258 -0.20326,-0.162608 -0.65248,-0.319123 -1.34762,-0.469541 l -0.39026,-0.09147 c -0.69518,-0.146345 -1.19725,-0.369936 -1.5062,-0.670772 -0.30896,-0.30489 -0.46346,-0.72158 -0.46346,-1.25007 0,-0.642309 0.22764,-1.138274 0.68297,-1.487893 0.45533,-0.349606 1.1017,-0.524413 1.93917,-0.524422 0.41464,9e-6 0.80491,0.03049 1.1708,0.09147 0.36584,0.06099 0.70326,0.152457 1.01221,0.274408"
+ id="path3613"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 858.83767,64.399754 1.12199,0 0,6.829666 -1.12199,0 0,-6.829666 m 0,-2.658693 1.12199,0 0,1.420814 -1.12199,0 0,-1.420814"
+ id="path3615"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 866.79544,65.436399 0,-3.695338 1.12199,0 0,9.488359 -1.12199,0 0,-1.02445 c -0.23582,0.40653 -0.53458,0.70939 -0.89638,0.908592 -0.35776,0.195133 -0.7887,0.292695 -1.29279,0.2927 -0.82525,-5e-6 -1.49803,-0.329289 -2.01841,-0.987866 -0.51626,-0.658573 -0.77443,-1.524474 -0.77443,-2.597711 0,-1.073229 0.25817,-1.939134 0.77443,-2.597711 0.52038,-0.658568 1.19316,-0.987857 2.01841,-0.987866 0.50409,9e-6 0.93503,0.09961 1.29279,0.298802 0.3618,0.195138 0.66056,0.495969 0.89638,0.902489 m -3.82338,2.384286 c 0,0.825253 0.16869,1.473665 0.50611,1.945235 0.34146,0.467508 0.809,0.701259 1.40253,0.701259 0.59352,0 1.06102,-0.233751 1.40252,-0.701259 0.34146,-0.47157 0.51222,-1.119982 0.51222,-1.945235 0,-0.825249 -0.17076,-1.471627 -0.51222,-1.939139 -0.3415,-0.471566 -0.809,-0.707351 -1.40252,-0.707356 -0.59353,5e-6 -1.06107,0.23579 -1.40253,0.707356 -0.33742,0.467512 -0.50611,1.11389 -0.50611,1.939139"
+ id="path3617"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 876.07037,67.534082 0,0.548811 -5.15886,0 c 0.0488,0.772407 0.28053,1.36187 0.69518,1.768399 0.41873,0.402462 1.00004,0.603692 1.74398,0.603692 0.43095,0 0.84762,-0.05285 1.2501,-0.158544 0.40652,-0.105698 0.809,-0.264243 1.20739,-0.475639 l 0,1.061039 c -0.40248,0.170739 -0.81511,0.300831 -1.23788,0.390266 -0.42282,0.08944 -0.8517,0.134151 -1.28669,0.134156 -1.08948,-5e-6 -1.95335,-0.317094 -2.5916,-0.951278 -0.63416,-0.634183 -0.95128,-1.491952 -0.95128,-2.573321 0,-1.117944 0.30083,-2.004176 0.90252,-2.658689 0.6057,-0.658568 1.4208,-0.987857 2.44523,-0.987866 0.91878,9e-6 1.6444,0.296772 2.177,0.890299 0.53659,0.589468 0.80491,1.392361 0.80491,2.408675 m -1.12204,-0.329289 c -0.008,-0.613852 -0.1809,-1.103715 -0.51832,-1.469597 -0.33333,-0.365868 -0.77644,-0.548806 -1.32934,-0.548811 -0.62603,5e-6 -1.1281,0.176846 -1.5062,0.530519 -0.37396,0.353683 -0.58944,0.851681 -0.64637,1.493987 l 4.00023,-0.0061"
+ id="path3619"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 882.26583,64.600985 0,1.061039 c -0.31708,-0.162608 -0.64637,-0.284564 -0.98783,-0.365878 -0.34151,-0.0813 -0.69518,-0.121951 -1.06107,-0.121956 -0.55693,5e-6 -0.97566,0.08538 -1.25615,0.256112 -0.27645,0.170748 -0.41465,0.426859 -0.41465,0.768338 0,0.260179 0.0996,0.465478 0.29876,0.615887 0.19922,0.146354 0.59964,0.286607 1.20134,0.420758 l 0.38416,0.08537 c 0.79678,0.170744 1.36184,0.412626 1.69522,0.725652 0.33738,0.308963 0.50611,0.741915 0.50611,1.298853 0,0.634188 -0.25207,1.136246 -0.75615,1.506186 -0.5,0.369941 -1.18908,0.554909 -2.06718,0.554914 -0.36588,-5e-6 -0.74802,-0.03659 -1.14642,-0.109766 -0.3943,-0.06911 -0.81102,-0.174808 -1.25004,-0.31709 l 0,-1.158605 c 0.41464,0.215459 0.82318,0.378072 1.22566,0.487833 0.40244,0.105698 0.80088,0.158545 1.19518,0.158545 0.52847,0 0.93504,-0.08943 1.21961,-0.268306 0.28453,-0.182939 0.42681,-0.43905 0.42681,-0.768339 0,-0.304894 -0.10362,-0.538646 -0.31097,-0.701258 -0.20326,-0.162608 -0.65248,-0.319123 -1.34766,-0.469541 l -0.39027,-0.09147 c -0.69513,-0.146345 -1.1972,-0.369936 -1.50615,-0.670772 -0.30895,-0.30489 -0.46345,-0.72158 -0.46345,-1.25007 0,-0.642309 0.22764,-1.138274 0.68296,-1.487893 0.45533,-0.349606 1.1017,-0.524413 1.93912,-0.524422 0.4147,9e-6 0.80496,0.03049 1.1708,0.09147 0.36589,0.06099 0.70331,0.152457 1.01226,0.274408"
+ id="path3621"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 891.04683,65.186385 c -0.60165,5e-6 -1.07727,0.23579 -1.4269,0.707356 -0.34959,0.467512 -0.52443,1.109826 -0.52443,1.926944 0,0.817122 0.17277,1.46147 0.51832,1.933041 0.34963,0.467507 0.82732,0.701258 1.43301,0.701258 0.59762,0 1.07122,-0.235785 1.42085,-0.707356 0.34959,-0.47157 0.52438,-1.113885 0.52438,-1.926943 0,-0.808986 -0.17479,-1.449267 -0.52438,-1.920842 -0.34963,-0.475634 -0.82323,-0.713453 -1.42085,-0.713458 m 0,-0.951277 c 0.97567,9e-6 1.74197,0.317098 2.29895,0.951277 0.55693,0.634188 0.8354,1.512288 0.8354,2.6343 0,1.117953 -0.27847,1.996053 -0.8354,2.634299 -0.55698,0.634184 -1.32328,0.951273 -2.29895,0.951278 -0.9797,-5e-6 -1.74807,-0.317094 -2.305,-0.951278 -0.5529,-0.638246 -0.8293,-1.516346 -0.8293,-2.634299 0,-1.122012 0.2764,-2.000112 0.8293,-2.6343 0.55693,-0.634179 1.3253,-0.951268 2.305,-0.951277"
+ id="path3623"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 899.49243,61.741061 0,0.93298 -1.07323,0 c -0.40244,9e-6 -0.68297,0.08132 -0.84151,0.243917 -0.15445,0.162622 -0.23172,0.455322 -0.23172,0.8781 l 0,0.603696 1.8477,0 0,0.872003 -1.8477,0 0,5.957663 -1.1281,0 0,-5.957663 -1.07324,0 0,-0.872003 1.07324,0 0,-0.475638 c 0,-0.760198 0.17685,-1.313077 0.53053,-1.658633 0.35367,-0.349606 0.91469,-0.524413 1.68301,-0.524422 l 1.06102,0"
+ id="path3625"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 909.31622,64.661963 0,1.048844 c -0.31708,-0.174803 -0.63622,-0.30489 -0.95739,-0.390267 -0.31708,-0.08943 -0.63825,-0.13415 -0.96345,-0.134155 -0.72769,5e-6 -1.29275,0.231727 -1.69523,0.695161 -0.40248,0.459381 -0.60367,1.105763 -0.60367,1.939139 0,0.833384 0.20119,1.481796 0.60367,1.945235 0.40248,0.459376 0.96754,0.689064 1.69523,0.689064 0.3252,0 0.64637,-0.0427 0.96345,-0.128058 0.32117,-0.08943 0.64031,-0.221556 0.95739,-0.396364 l 0,1.03665 c -0.31304,0.14635 -0.63824,0.256111 -0.97566,0.329284 -0.33338,0.07318 -0.68908,0.109761 -1.06713,0.109766 -1.02851,-5e-6 -1.84564,-0.323192 -2.45138,-0.96957 -0.60574,-0.646378 -0.90859,-1.51838 -0.90859,-2.616007 0,-1.113881 0.30492,-1.989947 0.9147,-2.628203 0.61386,-0.638242 1.4533,-0.957365 2.51841,-0.957374 0.34555,9e-6 0.68297,0.03659 1.01226,0.109766 0.32929,0.06911 0.64844,0.174812 0.95739,0.317089"
+ id="path3627"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 911.16388,68.534143 0,-4.134389 1.122,0 0,4.091703 c 0,0.646378 0.12603,1.132181 0.37805,1.457402 0.25207,0.321157 0.63012,0.481736 1.13425,0.481736 0.6057,0 1.08338,-0.193104 1.43302,-0.579303 0.35367,-0.386203 0.53048,-0.912654 0.53048,-1.579363 l 0,-3.872175 1.12204,0 0,6.829666 -1.12204,0 0,-1.048844 c -0.27236,0.414661 -0.58944,0.723624 -0.95128,0.926884 -0.35772,0.199201 -0.77443,0.298797 -1.25005,0.298802 -0.78462,-5e-6 -1.38017,-0.243917 -1.78669,-0.73175 -0.40652,-0.487834 -0.60978,-1.201292 -0.60978,-2.140369"
+ id="path3629"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 920.31683,62.460616 0,1.939138 2.31111,0 0,0.872003 -2.31111,0 0,3.707533 c 0,0.556942 0.0752,0.914688 0.22562,1.073233 0.1545,0.158545 0.46547,0.237819 0.93301,0.237819 l 1.15248,0 0,0.939078 -1.15248,0 c -0.86593,0 -1.4635,-0.160578 -1.79279,-0.481736 -0.32929,-0.32522 -0.49394,-0.914684 -0.49394,-1.768394 l 0,-3.707533 -0.82323,0 0,-0.872003 0.82323,0 0,-1.939138 1.1281,0"
+ id="path3631"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 925.21959,62.460616 0,1.939138 2.31111,0 0,0.872003 -2.31111,0 0,3.707533 c 0,0.556942 0.0752,0.914688 0.22562,1.073233 0.15445,0.158545 0.46547,0.237819 0.93296,0.237819 l 1.15253,0 0,0.939078 -1.15253,0 c -0.86588,0 -1.4635,-0.160578 -1.79279,-0.481736 -0.32929,-0.32522 -0.49394,-0.914684 -0.49394,-1.768394 l 0,-3.707533 -0.82319,0 0,-0.872003 0.82319,0 0,-1.939138 1.12815,0"
+ id="path3633"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 929.01247,64.399754 1.122,0 0,6.829666 -1.122,0 0,-6.829666 m 0,-2.658693 1.122,0 0,1.420814 -1.122,0 0,-1.420814"
+ id="path3635"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 938.15325,67.107227 0,4.122193 -1.12204,0 0,-4.085605 c 0,-0.646373 -0.12598,-1.130143 -0.37805,-1.451305 -0.25207,-0.321148 -0.63012,-0.481726 -1.13421,-0.481736 -0.60574,1e-5 -1.08338,0.193109 -1.43301,0.579303 -0.34963,0.386208 -0.52443,0.912659 -0.52443,1.579363 l 0,3.85998 -1.1281,0 0,-6.829666 1.1281,0 0,1.061039 c 0.26832,-0.410588 0.58338,-0.717517 0.94518,-0.920786 0.36589,-0.20326 0.78664,-0.30489 1.26226,-0.304899 0.78462,9e-6 1.37815,0.243926 1.78063,0.73175 0.40243,0.483774 0.60367,1.197232 0.60367,2.140369"
+ id="path3637"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 944.89757,67.735313 c -5e-5,-0.81305 -0.16874,-1.44317 -0.50616,-1.890355 -0.33333,-0.447172 -0.80289,-0.670763 -1.40863,-0.670768 -0.60165,5e-6 -1.07117,0.223596 -1.40859,0.670768 -0.33338,0.447185 -0.50004,1.077305 -0.50004,1.890355 0,0.808995 0.16666,1.437076 0.50004,1.884257 0.33742,0.447182 0.80694,0.670772 1.40859,0.670772 0.60574,0 1.0753,-0.22359 1.40863,-0.670772 0.33742,-0.447181 0.50611,-1.075262 0.50616,-1.884257 m 1.12199,2.646499 c 0,1.162668 -0.25813,2.026535 -0.77443,2.591613 -0.5163,0.569133 -1.30698,0.853706 -2.37208,0.853706 -0.39436,0 -0.7663,-0.03049 -1.11594,-0.09147 -0.34958,-0.05692 -0.68907,-0.14635 -1.01836,-0.268306 l 0,-1.09153 c 0.32929,0.178871 0.65454,0.310992 0.97566,0.396369 0.32117,0.08537 0.64844,0.128053 0.98178,0.128053 0.73581,0 1.28668,-0.193099 1.65252,-0.579303 0.36589,-0.382135 0.54881,-0.961437 0.54886,-1.737903 l 0,-0.554913 c -0.23173,0.402466 -0.52852,0.703293 -0.89032,0.902494 -0.3618,0.199197 -0.79476,0.298797 -1.29885,0.298797 -0.83747,0 -1.51231,-0.319123 -2.02452,-0.957374 -0.51221,-0.638247 -0.76832,-1.483822 -0.76832,-2.536733 0,-1.056966 0.25611,-1.904575 0.76832,-2.542831 0.51221,-0.638242 1.18705,-0.957365 2.02452,-0.957374 0.50409,9e-6 0.93705,0.09961 1.29885,0.298802 0.3618,0.199201 0.65859,0.500032 0.89032,0.902489 l 0,-1.036645 1.12199,0 0,5.982058"
+ id="path3639"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 952.30652,61.741061 1.122,0 0,9.488359 -1.122,0 0,-9.488359"
+ id="path3641"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 955.77012,64.399754 1.12204,0 0,6.829666 -1.12204,0 0,-6.829666 m 0,-2.658693 1.12204,0 0,1.420814 -1.12204,0 0,-1.420814"
+ id="path3643"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 964.9109,67.107227 0,4.122193 -1.122,0 0,-4.085605 c 0,-0.646373 -0.12603,-1.130143 -0.3781,-1.451305 -0.25202,-0.321148 -0.63012,-0.481726 -1.1342,-0.481736 -0.6057,1e-5 -1.08338,0.193109 -1.43302,0.579303 -0.34958,0.386208 -0.52442,0.912659 -0.52438,1.579363 l 0,3.85998 -1.12814,0 0,-6.829666 1.12814,0 0,1.061039 c 0.26828,-0.410588 0.58334,-0.717517 0.94514,-0.920786 0.36588,-0.20326 0.78664,-0.30489 1.2623,-0.304899 0.78458,9e-6 1.3781,0.243926 1.78058,0.73175 0.40244,0.483774 0.60368,1.197232 0.60368,2.140369"
+ id="path3645"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 973.00287,67.534082 0,0.548811 -5.15887,0 c 0.0488,0.772407 0.28049,1.36187 0.69518,1.768399 0.41874,0.402462 1.00005,0.603692 1.74399,0.603692 0.4309,0 0.84761,-0.05285 1.25009,-0.158544 0.40652,-0.105698 0.80896,-0.264243 1.2074,-0.475639 l 0,1.061039 c -0.40248,0.170739 -0.81511,0.300831 -1.23788,0.390266 -0.42282,0.08944 -0.8517,0.134151 -1.28669,0.134156 -1.08949,-5e-6 -1.95335,-0.317094 -2.5916,-0.951278 -0.63421,-0.634183 -0.95129,-1.491952 -0.95129,-2.573321 0,-1.117944 0.30083,-2.004176 0.90248,-2.658689 0.60574,-0.658568 1.42085,-0.987857 2.44528,-0.987866 0.91878,9e-6 1.6444,0.296772 2.17695,0.890299 0.53664,0.589468 0.80491,1.392361 0.80496,2.408675 m -1.12204,-0.329289 c -0.008,-0.613852 -0.1809,-1.103715 -0.51832,-1.469597 -0.33338,-0.365868 -0.77649,-0.548806 -1.32934,-0.548811 -0.62608,5e-6 -1.12815,0.176846 -1.5062,0.530519 -0.37401,0.353683 -0.58944,0.851681 -0.64637,1.493987 l 4.00023,-0.0061"
+ id="path3647"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 979.19833,64.600985 0,1.061039 c -0.31708,-0.162608 -0.64638,-0.284564 -0.98788,-0.365878 -0.34146,-0.0813 -0.69514,-0.121951 -1.06102,-0.121956 -0.55694,5e-6 -0.97567,0.08538 -1.25616,0.256112 -0.27644,0.170748 -0.41469,0.426859 -0.41469,0.768338 0,0.260179 0.0996,0.465478 0.29881,0.615887 0.19922,0.146354 0.59963,0.286607 1.20129,0.420758 l 0.38416,0.08537 c 0.79683,0.170744 1.36189,0.412626 1.69522,0.725652 0.33742,0.308963 0.50615,0.741915 0.50615,1.298853 0,0.634188 -0.25206,1.136246 -0.75615,1.506186 -0.50004,0.369941 -1.18907,0.554909 -2.06717,0.554914 -0.36589,-5e-6 -0.74803,-0.03659 -1.14642,-0.109766 -0.39435,-0.06911 -0.81102,-0.174808 -1.25009,-0.31709 l 0,-1.158605 c 0.41469,0.215459 0.82323,0.378072 1.22571,0.487833 0.40243,0.105698 0.80083,0.158545 1.19518,0.158545 0.52847,0 0.93499,-0.08943 1.21956,-0.268306 0.28457,-0.182939 0.42686,-0.43905 0.42686,-0.768339 0,-0.304894 -0.10367,-0.538646 -0.31098,-0.701258 -0.20326,-0.162608 -0.65248,-0.319123 -1.34765,-0.469541 l -0.39027,-0.09147 c -0.69514,-0.146345 -1.1972,-0.369936 -1.50616,-0.670772 -0.30899,-0.30489 -0.46345,-0.72158 -0.46345,-1.25007 0,-0.642309 0.22764,-1.138274 0.68297,-1.487893 0.45528,-0.349606 1.1017,-0.524413 1.93912,-0.524422 0.41465,9e-6 0.80491,0.03049 1.1708,0.09147 0.36588,0.06099 0.7033,0.152457 1.01226,0.274408"
+ id="path3649"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 981.51555,69.680548 1.28664,0 0,1.548872 -1.28664,0 0,-1.548872"
+ id="path3651"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 588.79755,80.858028 1.83545,0 2.32332,6.195482 2.33549,-6.195482 1.8355,0 0,9.10419 -1.20129,0 0,-7.994368 -2.34771,6.244266 -1.23788,0 -2.3477,-6.244266 0,7.994368 -1.19518,0 0,-9.10419"
+ id="path3653"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 599.52988,83.132552 1.12199,0 0,6.829666 -1.12199,0 0,-6.829666 m 0,-2.658693 1.12199,0 0,1.420818 -1.12199,0 0,-1.420818"
+ id="path3655"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 608.67066,85.840025 0,4.122193 -1.12204,0 0,-4.085605 c 0,-0.646373 -0.12603,-1.130138 -0.37805,-1.451305 -0.25207,-0.321148 -0.63012,-0.481727 -1.13421,-0.481731 -0.60574,4e-6 -1.08343,0.193104 -1.43301,0.579298 -0.34964,0.386208 -0.52443,0.912663 -0.52443,1.579363 l 0,3.85998 -1.1281,0 0,-6.829666 1.1281,0 0,1.061039 c 0.26832,-0.410588 0.58338,-0.717517 0.94518,-0.920786 0.36589,-0.203256 0.78664,-0.30489 1.26226,-0.304895 0.78462,5e-6 1.37815,0.243921 1.78058,0.73175 0.40248,0.48377 0.60372,1.197228 0.60372,2.140365"
+ id="path3657"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 610.9208,83.132552 1.12199,0 0,6.829666 -1.12199,0 0,-6.829666 m 0,-2.658693 1.12199,0 0,1.420818 -1.12199,0 0,-1.420818"
+ id="path3659"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 619.7018,84.443605 c 0.28048,-0.504092 0.61588,-0.876062 1.00615,-1.11592 0.39027,-0.239844 0.84963,-0.35977 1.3781,-0.359775 0.71143,5e-6 1.26024,0.250019 1.64647,0.750042 0.38618,0.495969 0.57929,1.203325 0.57929,2.122073 l 0,4.122193 -1.1281,0 0,-4.085605 c -5e-5,-0.654504 -0.11589,-1.140304 -0.34761,-1.457402 -0.23173,-0.317085 -0.5854,-0.47563 -1.06102,-0.475634 -0.58136,4e-6 -1.04073,0.193104 -1.37815,0.579298 -0.33742,0.386208 -0.50611,0.912663 -0.50611,1.579363 l 0,3.85998 -1.1281,0 0,-4.085605 c -4e-5,-0.658568 -0.11588,-1.144367 -0.34761,-1.457402 -0.23172,-0.317085 -0.58944,-0.47563 -1.07323,-0.475634 -0.57319,4e-6 -1.02851,0.195138 -1.36593,0.5854 -0.33742,0.386203 -0.50611,0.910625 -0.50611,1.573261 l 0,3.85998 -1.1281,0 0,-6.829666 1.1281,0 0,1.061039 c 0.25611,-0.41872 0.56304,-0.727678 0.9208,-0.926884 0.35771,-0.199192 0.78255,-0.298792 1.27443,-0.298797 0.49596,5e-6 0.91671,0.126029 1.2623,0.378067 0.34959,0.252058 0.60771,0.61793 0.77443,1.097628"
+ id="path3661"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 626.43996,87.26694 0,-4.134388 1.12204,0 0,4.091702 c 0,0.646383 0.12603,1.132182 0.37805,1.457403 0.25207,0.321157 0.63012,0.481736 1.13421,0.481736 0.60574,0 1.08342,-0.1931 1.43301,-0.579303 0.35367,-0.386199 0.53053,-0.912654 0.53053,-1.579363 l 0,-3.872175 1.12204,0 0,6.829666 -1.12204,0 0,-1.048839 c -0.27236,0.414656 -0.58948,0.723618 -0.95128,0.926883 -0.35772,0.199197 -0.77443,0.298797 -1.25005,0.298797 -0.78462,0 -1.38017,-0.243916 -1.78669,-0.73175 -0.40652,-0.487833 -0.60982,-1.201291 -0.60982,-2.140369"
+ id="path3663"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 639.80053,84.443605 c 0.28049,-0.504092 0.61589,-0.876062 1.00615,-1.11592 0.39027,-0.239844 0.84964,-0.35977 1.3781,-0.359775 0.71144,5e-6 1.26024,0.250019 1.64647,0.750042 0.38618,0.495969 0.57929,1.203325 0.57929,2.122073 l 0,4.122193 -1.1281,0 0,-4.085605 c -4e-5,-0.654504 -0.11588,-1.140304 -0.34761,-1.457402 -0.23173,-0.317085 -0.5854,-0.47563 -1.06102,-0.475634 -0.58136,4e-6 -1.04073,0.193104 -1.37815,0.579298 -0.33742,0.386208 -0.5061,0.912663 -0.5061,1.579363 l 0,3.85998 -1.1281,0 0,-4.085605 c -5e-5,-0.658568 -0.11589,-1.144367 -0.34762,-1.457402 -0.23172,-0.317085 -0.58944,-0.47563 -1.07323,-0.475634 -0.57319,4e-6 -1.02851,0.195138 -1.36593,0.5854 -0.33742,0.386203 -0.50611,0.910625 -0.50611,1.573261 l 0,3.85998 -1.12815,0 0,-6.829666 1.12815,0 0,1.061039 c 0.25611,-0.41872 0.56304,-0.727678 0.92075,-0.926884 0.35776,-0.199192 0.7826,-0.298792 1.27448,-0.298797 0.49596,5e-6 0.91671,0.126029 1.26226,0.378067 0.34963,0.252058 0.60776,0.61793 0.77447,1.097628"
+ id="path3665"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 651.91096,81.870283 0,3.42093 1.5489,0 c 0.57319,5e-6 1.0163,-0.148375 1.32934,-0.445147 0.31304,-0.296759 0.46951,-0.719546 0.46951,-1.268367 0,-0.544738 -0.15647,-0.965496 -0.46951,-1.262269 -0.31304,-0.296754 -0.75615,-0.445138 -1.32934,-0.445147 l -1.5489,0 m -1.23177,-1.012255 2.78067,0 c 1.02039,9e-6 1.79073,0.231731 2.31111,0.695166 0.52438,0.45938 0.7866,1.134215 0.78664,2.024505 -4e-5,0.898431 -0.26226,1.577334 -0.78664,2.036706 -0.52038,0.45938 -1.29072,0.689068 -2.31111,0.689063 l -1.5489,0 0,3.65875 -1.23177,0 0,-9.10419"
+ id="path3667"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 660.72245,86.529093 c -0.90652,0 -1.53462,0.103664 -1.88426,0.310992 -0.34958,0.207333 -0.52442,0.561011 -0.52442,1.061039 0,0.398398 0.13012,0.715487 0.39026,0.951272 0.26428,0.231722 0.622,0.347585 1.07324,0.347581 0.62199,4e-6 1.12002,-0.219523 1.49403,-0.658573 0.37805,-0.443113 0.56708,-1.030547 0.56708,-1.762297 l 0,-0.250014 -1.11593,0 m 2.23797,-0.463444 0,3.896569 -1.12204,0 0,-1.036645 c -0.25611,0.414656 -0.57525,0.721585 -0.95735,0.920786 -0.38214,0.195134 -0.84968,0.2927 -1.40252,0.2927 -0.69927,0 -1.2562,-0.195133 -1.67085,-0.5854 -0.41061,-0.394334 -0.61589,-0.920786 -0.61589,-1.579363 0,-0.768334 0.25611,-1.347636 0.76832,-1.737903 0.5163,-0.390262 1.28462,-0.585395 2.30501,-0.5854 l 1.57328,0 0,-0.109766 c 0,-0.516281 -0.17075,-0.914679 -0.51221,-1.195189 -0.33742,-0.284564 -0.81309,-0.426851 -1.42691,-0.426855 -0.39027,4e-6 -0.77039,0.04676 -1.14031,0.140252 -0.36998,0.09351 -0.72567,0.233761 -1.06713,0.420758 l 0,-1.036649 c 0.41056,-0.158535 0.80895,-0.276433 1.19518,-0.353678 0.38618,-0.0813 0.76221,-0.121951 1.1281,-0.121956 0.98788,5e-6 1.72571,0.256116 2.21355,0.768334 0.48783,0.512232 0.73172,1.288702 0.73177,2.329405"
+ id="path3669"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 669.24734,84.181391 c -0.12603,-0.07317 -0.26423,-0.126014 -0.41465,-0.158544 -0.14637,-0.03659 -0.30895,-0.05488 -0.48783,-0.05488 -0.63421,5e-6 -1.12204,0.207337 -1.4635,0.621989 -0.33742,0.410597 -0.50611,1.002094 -0.50611,1.774491 l 0,3.597772 -1.12814,0 0,-6.829666 1.12814,0 0,1.061039 c 0.23577,-0.414652 0.5427,-0.72158 0.92076,-0.920786 0.3781,-0.203256 0.83746,-0.30489 1.37814,-0.304895 0.0772,5e-6 0.16258,0.0061 0.25611,0.01827 0.0935,0.0081 0.19715,0.02236 0.31097,0.0427 l 0.006,1.152503"
+ id="path3671"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 671.54628,81.193414 0,1.939138 2.31112,0 0,0.872003 -2.31112,0 0,3.707533 c 0,0.556942 0.0752,0.914688 0.22562,1.073233 0.15446,0.158544 0.46548,0.237819 0.93297,0.237819 l 1.15253,0 0,0.939078 -1.15253,0 c -0.86589,0 -1.4635,-0.160579 -1.79279,-0.481736 -0.32929,-0.325221 -0.49394,-0.914684 -0.49394,-1.768394 l 0,-3.707533 -0.82319,0 0,-0.872003 0.82319,0 0,-1.939138 1.12814,0"
+ id="path3673"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 684.82141,81.156825 0,1.201291 c -0.46749,-0.223581 -0.90859,-0.390257 -1.32323,-0.500028 -0.41465,-0.109756 -0.81511,-0.164637 -1.20129,-0.164646 -0.67075,9e-6 -1.18907,0.130101 -1.55496,0.390266 -0.3618,0.260189 -0.54275,0.630129 -0.5427,1.109822 -5e-5,0.402471 0.11988,0.707365 0.35973,0.914689 0.24394,0.203269 0.70331,0.367911 1.37815,0.49393 l 0.74394,0.152448 c 0.91873,0.174812 1.59564,0.483774 2.03063,0.926883 0.43902,0.439054 0.65854,1.028518 0.65858,1.768394 -4e-5,0.882168 -0.29678,1.550906 -0.89031,2.006219 -0.58949,0.455308 -1.45537,0.682966 -2.59771,0.682966 -0.43094,0 -0.89031,-0.04878 -1.37814,-0.14635 -0.48375,-0.09757 -0.98582,-0.241887 -1.5062,-0.432952 l 0,-1.268367 c 0.50004,0.280505 0.9899,0.491897 1.4696,0.634183 0.47971,0.142287 0.95129,0.213426 1.41474,0.213426 0.70326,0 1.24601,-0.138219 1.62815,-0.414656 0.38209,-0.276438 0.57319,-0.670772 0.57319,-1.182999 0,-0.447177 -0.1382,-0.796792 -0.41465,-1.04884 -0.27241,-0.252043 -0.72158,-0.441079 -1.34766,-0.567107 l -0.75005,-0.14635 c -0.91873,-0.182935 -1.58342,-0.469533 -1.99398,-0.859804 -0.41061,-0.390262 -0.61589,-0.932976 -0.61589,-1.628146 0,-0.804918 0.28251,-1.439101 0.84761,-1.90255 0.5691,-0.46343 1.3517,-0.695152 2.34766,-0.695161 0.42686,9e-6 0.86185,0.03861 1.30496,0.115858 0.44312,0.07725 0.89642,0.193114 1.35983,0.347581"
+ id="path3675"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 687.2423,83.132552 1.122,0 0,6.829666 -1.122,0 0,-6.829666 m 0,-2.658693 1.122,0 0,1.420818 -1.122,0 0,-1.420818"
+ id="path3677"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 690.21806,83.132552 5.32962,0 0,1.02445 -4.21979,4.908824 4.21979,0 0,0.896392 -5.48205,0 0,-1.02445 4.21975,-4.908824 -4.06732,0 0,-0.896392"
+ id="path3679"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 703.10907,86.26688 0,0.548811 -5.15882,0 c 0.0488,0.772407 0.28049,1.36187 0.69514,1.768399 0.41873,0.402461 1.00009,0.603692 1.74403,0.603692 0.4309,0 0.84761,-0.05285 1.25005,-0.158545 0.40652,-0.105698 0.809,-0.264242 1.20739,-0.475638 l 0,1.061038 c -0.40248,0.17074 -0.8151,0.300832 -1.23788,0.390267 -0.42277,0.08944 -0.85165,0.134155 -1.28664,0.134155 -1.08949,0 -1.95335,-0.317094 -2.5916,-0.951277 -0.6342,-0.634183 -0.95128,-1.491952 -0.95128,-2.573322 0,-1.117944 0.30082,-2.004175 0.90248,-2.658689 0.60573,-0.658568 1.4208,-0.987856 2.44527,-0.987861 0.91873,5e-6 1.6444,0.296768 2.17695,0.890295 0.53659,0.589468 0.80491,1.392361 0.80491,2.408675 m -1.12199,-0.329289 c -0.008,-0.613848 -0.18094,-1.103715 -0.51832,-1.469597 -0.33338,-0.365868 -0.77649,-0.548807 -1.32938,-0.548811 -0.62604,4e-6 -1.1281,0.176846 -1.50616,0.530519 -0.37401,0.353683 -0.58948,0.851681 -0.64637,1.493991 l 4.00023,-0.0061"
+ id="path3681"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 705.23727,88.413346 1.28664,0 0,1.548872 -1.28664,0 0,-1.548872 m 0,-4.908819 1.28664,0 0,1.548867 -1.28664,0 0,-1.548867"
+ id="path3683"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 713.31698,80.858028 4.83563,0 0,1.036649 -3.70753,0 0,2.231834 c 0.17888,-0.06097 0.35776,-0.105689 0.53664,-0.134151 0.17888,-0.03251 0.35776,-0.04878 0.53659,-0.04878 1.01635,4e-6 1.82126,0.278476 2.41479,0.835414 0.59353,0.556947 0.89031,1.311052 0.89031,2.262325 0,0.979734 -0.30491,1.741971 -0.91469,2.286719 -0.60978,0.54068 -1.46961,0.811024 -2.57943,0.811024 -0.38214,0 -0.77241,-0.03251 -1.1708,-0.09757 -0.39431,-0.06505 -0.8029,-0.162613 -1.22567,-0.2927 l 0,-1.23788 c 0.36589,0.199201 0.74394,0.347585 1.13421,0.445147 0.39026,0.09757 0.80289,0.146355 1.23788,0.14635 0.7033,5e-6 1.26024,-0.184968 1.67084,-0.554908 0.41056,-0.369941 0.61589,-0.871998 0.61589,-1.506186 0,-0.634179 -0.20533,-1.136241 -0.61589,-1.506186 -0.4106,-0.369936 -0.96754,-0.554904 -1.67084,-0.554909 -0.3293,5e-6 -0.65859,0.03659 -0.98788,0.109762 -0.32521,0.07318 -0.65854,0.187006 -1.00005,0.341483 l 0,-4.573438"
+ id="path3685"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 721.25647,88.413346 1.28669,0 0,1.548872 -1.28669,0 0,-1.548872"
+ id="path3687"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 727.86662,81.669052 c -0.6342,1e-5 -1.11184,0.313035 -1.43301,0.939078 -0.31712,0.621993 -0.47566,1.559042 -0.47566,2.811141 0,1.248041 0.15854,2.185089 0.47566,2.811137 0.32117,0.621988 0.79881,0.932985 1.43301,0.932985 0.63825,0 1.11589,-0.310997 1.43302,-0.932985 0.32112,-0.626048 0.48172,-1.563096 0.48172,-2.811137 0,-1.252099 -0.1606,-2.189148 -0.48172,-2.811141 -0.31713,-0.626043 -0.79477,-0.939068 -1.43302,-0.939078 m 0,-0.975666 c 1.02039,9e-6 1.79886,0.404504 2.3355,1.213486 0.54068,0.804931 0.81102,1.975731 0.81102,3.512399 0,1.532614 -0.27034,2.703409 -0.81102,3.5124 -0.53664,0.804922 -1.31511,1.207388 -2.3355,1.207388 -1.02038,0 -1.80091,-0.402466 -2.34159,-1.207388 -0.53664,-0.808991 -0.80496,-1.979786 -0.80496,-3.5124 0,-1.536668 0.26832,-2.707468 0.80496,-3.512399 0.54068,-0.808982 1.32121,-1.213477 2.34159,-1.213486"
+ id="path3689"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 738.34285,84.443605 c 0.28049,-0.504092 0.61589,-0.876062 1.00615,-1.11592 0.39027,-0.239844 0.84964,-0.35977 1.3781,-0.359775 0.71144,5e-6 1.26024,0.250019 1.64647,0.750042 0.38618,0.495969 0.57929,1.203325 0.57929,2.122073 l 0,4.122193 -1.1281,0 0,-4.085605 c -4e-5,-0.654504 -0.11588,-1.140304 -0.34761,-1.457402 -0.23173,-0.317085 -0.5854,-0.47563 -1.06102,-0.475634 -0.58136,4e-6 -1.04073,0.193104 -1.37815,0.579298 -0.33742,0.386208 -0.5061,0.912663 -0.5061,1.579363 l 0,3.85998 -1.1281,0 0,-4.085605 c -5e-5,-0.658568 -0.11589,-1.144367 -0.34762,-1.457402 -0.23172,-0.317085 -0.58944,-0.47563 -1.07323,-0.475634 -0.57319,4e-6 -1.02851,0.195138 -1.36593,0.5854 -0.33742,0.386203 -0.50611,0.910625 -0.50611,1.573261 l 0,3.85998 -1.12815,0 0,-6.829666 1.12815,0 0,1.061039 c 0.25611,-0.41872 0.56304,-0.727678 0.92075,-0.926884 0.35776,-0.199192 0.7826,-0.298792 1.27448,-0.298797 0.49596,5e-6 0.91671,0.126029 1.26226,0.378067 0.34963,0.252058 0.60776,0.61793 0.77447,1.097628"
+ id="path3691"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 750.5143,84.443605 c 0.28049,-0.504092 0.61589,-0.876062 1.00616,-1.11592 0.39026,-0.239844 0.84963,-0.35977 1.3781,-0.359775 0.71143,5e-6 1.26024,0.250019 1.64646,0.750042 0.38618,0.495969 0.57929,1.203325 0.57929,2.122073 l 0,4.122193 -1.1281,0 0,-4.085605 c -4e-5,-0.654504 -0.11588,-1.140304 -0.34761,-1.457402 -0.23172,-0.317085 -0.5854,-0.47563 -1.06102,-0.475634 -0.58136,4e-6 -1.04072,0.193104 -1.37814,0.579298 -0.33742,0.386208 -0.50611,0.912663 -0.50611,1.579363 l 0,3.85998 -1.1281,0 0,-4.085605 c -5e-5,-0.658568 -0.11589,-1.144367 -0.34761,-1.457402 -0.23173,-0.317085 -0.58944,-0.47563 -1.07324,-0.475634 -0.57318,4e-6 -1.02851,0.195138 -1.36593,0.5854 -0.33742,0.386203 -0.50611,0.910625 -0.50611,1.573261 l 0,3.85998 -1.12814,0 0,-6.829666 1.12814,0 0,1.061039 c 0.25611,-0.41872 0.56304,-0.727678 0.92076,-0.926884 0.35776,-0.199192 0.7826,-0.298792 1.27447,-0.298797 0.49596,5e-6 0.91671,0.126029 1.26226,0.378067 0.34963,0.252058 0.60776,0.61793 0.77447,1.097628"
+ id="path3693"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 765.69811,83.333783 0,1.061038 c -0.31713,-0.162608 -0.64642,-0.284564 -0.98788,-0.365877 -0.34151,-0.0813 -0.69518,-0.121951 -1.06102,-0.121956 -0.55698,5e-6 -0.97567,0.08538 -1.2562,0.256111 -0.27645,0.170749 -0.41465,0.42686 -0.41465,0.768339 0,0.260184 0.0996,0.465478 0.29881,0.615887 0.19917,0.146354 0.59963,0.286607 1.20128,0.420757 l 0.38416,0.08537 c 0.79679,0.170744 1.36185,0.412627 1.69523,0.725653 0.33742,0.308963 0.50611,0.741915 0.50611,1.298853 0,0.634188 -0.25202,1.136245 -0.75611,1.506186 -0.50005,0.369941 -1.18912,0.554913 -2.06722,0.554913 -0.36589,0 -0.74803,-0.03659 -1.14642,-0.109766 -0.39431,-0.06911 -0.81102,-0.174807 -1.25005,-0.317089 l 0,-1.158605 c 0.41465,0.215459 0.82324,0.378072 1.22567,0.487833 0.40248,0.105698 0.80087,0.158549 1.19518,0.158545 0.52851,4e-6 0.93503,-0.08944 1.21961,-0.268306 0.28457,-0.182939 0.42686,-0.43905 0.42686,-0.768339 0,-0.304894 -0.10368,-0.538646 -0.31102,-0.701258 -0.20326,-0.162608 -0.65248,-0.319124 -1.34762,-0.469542 l -0.39026,-0.09147 c -0.69518,-0.146345 -1.19725,-0.369936 -1.5062,-0.670772 -0.30896,-0.30489 -0.46346,-0.72158 -0.46346,-1.25007 0,-0.64231 0.22769,-1.13827 0.68297,-1.487894 0.45533,-0.349605 1.1017,-0.524412 1.93917,-0.524417 0.41464,5e-6 0.80491,0.03049 1.1708,0.09146 0.36584,0.06099 0.70326,0.152456 1.01226,0.274408"
+ id="path3695"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 768.52754,86.553482 c 0,0.825254 0.16869,1.473666 0.50611,1.945236 0.3415,0.467507 0.809,0.701263 1.40252,0.701259 0.59353,4e-6 1.06102,-0.233752 1.40253,-0.701259 0.34146,-0.47157 0.51221,-1.119982 0.51221,-1.945236 0,-0.825248 -0.17075,-1.471626 -0.51221,-1.939138 -0.34151,-0.471566 -0.809,-0.707351 -1.40253,-0.707356 -0.59352,5e-6 -1.06102,0.23579 -1.40252,0.707356 -0.33742,0.467512 -0.50611,1.11389 -0.50611,1.939138 m 3.82337,2.384286 c -0.23576,0.406529 -0.53457,0.70939 -0.89637,0.908591 -0.35776,0.195134 -0.78866,0.2927 -1.29279,0.2927 -0.82526,0 -1.49803,-0.329288 -2.01837,-0.987866 -0.5163,-0.658572 -0.77447,-1.524473 -0.77447,-2.597711 0,-1.073228 0.25817,-1.939129 0.77447,-2.597711 0.52034,-0.658568 1.19311,-0.987856 2.01837,-0.987861 0.50413,5e-6 0.93503,0.0996 1.29279,0.298797 0.3618,0.195138 0.66061,0.49597 0.89637,0.90249 l 0,-1.036645 1.12204,0 0,9.427377 -1.12204,0 0,-3.622161"
+ id="path3697"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 775.66818,87.26694 0,-4.134388 1.12204,0 0,4.091702 c 0,0.646383 0.12599,1.132182 0.37805,1.457403 0.25207,0.321157 0.63012,0.481736 1.13421,0.481736 0.60574,0 1.08338,-0.1931 1.43301,-0.579303 0.35368,-0.386199 0.53054,-0.912654 0.53054,-1.579363 l 0,-3.872175 1.12199,0 0,6.829666 -1.12199,0 0,-1.048839 c -0.27241,0.414656 -0.58949,0.723618 -0.95129,0.926883 -0.35776,0.199197 -0.77443,0.298797 -1.25009,0.298797 -0.78458,0 -1.38012,-0.243916 -1.78669,-0.73175 -0.40652,-0.487833 -0.60978,-1.201291 -0.60978,-2.140369"
+ id="path3699"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 786.81516,86.529093 c -0.90652,0 -1.53462,0.103664 -1.88426,0.310992 -0.34958,0.207333 -0.52442,0.561011 -0.52442,1.061039 0,0.398398 0.13012,0.715487 0.39027,0.951272 0.26427,0.231722 0.62199,0.347585 1.07323,0.347581 0.62199,4e-6 1.12002,-0.219523 1.49403,-0.658573 0.37805,-0.443113 0.56708,-1.030547 0.56708,-1.762297 l 0,-0.250014 -1.11593,0 m 2.23797,-0.463444 0,3.896569 -1.12204,0 0,-1.036645 c -0.25611,0.414656 -0.57525,0.721585 -0.95735,0.920786 -0.38214,0.195134 -0.84968,0.2927 -1.40252,0.2927 -0.69927,0 -1.2562,-0.195133 -1.67085,-0.5854 -0.4106,-0.394334 -0.61589,-0.920786 -0.61589,-1.579363 0,-0.768334 0.25611,-1.347636 0.76833,-1.737903 0.51629,-0.390262 1.28462,-0.585395 2.305,-0.5854 l 1.57328,0 0,-0.109766 c 0,-0.516281 -0.17075,-0.914679 -0.51221,-1.195189 -0.33742,-0.284564 -0.81309,-0.426851 -1.42691,-0.426855 -0.39027,4e-6 -0.77039,0.04676 -1.14031,0.140252 -0.36997,0.09351 -0.72567,0.233761 -1.06713,0.420758 l 0,-1.036649 c 0.41056,-0.158535 0.80896,-0.276433 1.19518,-0.353678 0.38618,-0.0813 0.76221,-0.121951 1.1281,-0.121956 0.98788,5e-6 1.72571,0.256116 2.21355,0.768334 0.48783,0.512232 0.73172,1.288702 0.73177,2.329405"
+ id="path3701"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 795.32788,84.181391 c -0.12603,-0.07317 -0.26428,-0.126014 -0.41469,-0.158544 -0.14633,-0.03659 -0.30895,-0.05488 -0.48783,-0.05488 -0.63416,5e-6 -1.122,0.207337 -1.4635,0.621989 -0.33742,0.410597 -0.50611,1.002094 -0.50611,1.774491 l 0,3.597772 -1.1281,0 0,-6.829666 1.1281,0 0,1.061039 c 0.23577,-0.414652 0.5427,-0.72158 0.9208,-0.920786 0.37805,-0.203256 0.83742,-0.30489 1.3781,-0.304895 0.0772,5e-6 0.16263,0.0061 0.25611,0.01827 0.0935,0.0081 0.1972,0.02236 0.31102,0.0427 l 0.006,1.152503"
+ id="path3703"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 802.10264,86.26688 0,0.548811 -5.15882,0 c 0.0488,0.772407 0.28048,1.36187 0.69513,1.768399 0.41873,0.402461 1.00009,0.603692 1.74403,0.603692 0.4309,0 0.84762,-0.05285 1.25005,-0.158545 0.40652,-0.105698 0.809,-0.264242 1.20739,-0.475638 l 0,1.061038 c -0.40248,0.17074 -0.81506,0.300832 -1.23788,0.390267 -0.42277,0.08944 -0.85165,0.134155 -1.28664,0.134155 -1.08948,0 -1.95335,-0.317094 -2.5916,-0.951277 -0.6342,-0.634183 -0.95128,-1.491952 -0.95128,-2.573322 0,-1.117944 0.30082,-2.004175 0.90248,-2.658689 0.60574,-0.658568 1.4208,-0.987856 2.44527,-0.987861 0.91873,5e-6 1.6444,0.296768 2.17695,0.890295 0.5366,0.589468 0.80492,1.392361 0.80492,2.408675 m -1.122,-0.329289 c -0.008,-0.613848 -0.18094,-1.103715 -0.51832,-1.469597 -0.33338,-0.365868 -0.77649,-0.548807 -1.32938,-0.548811 -0.62604,4e-6 -1.1281,0.176846 -1.50616,0.530519 -0.37401,0.353683 -0.58948,0.851681 -0.64637,1.493991 l 4.00023,-0.0061"
+ id="path3705"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 805.95044,80.858028 1.03664,0 -3.1709,10.262795 -1.03664,0 3.1709,-10.262795"
+ id="path3707"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 812.67032,84.169197 0,-3.695338 1.12204,0 0,9.488359 -1.12204,0 0,-1.02445 c -0.23577,0.406529 -0.53457,0.70939 -0.89637,0.908591 -0.35776,0.195134 -0.78866,0.2927 -1.29275,0.2927 -0.82525,0 -1.49807,-0.329288 -2.01841,-0.987866 -0.5163,-0.658572 -0.77447,-1.524473 -0.77447,-2.597711 0,-1.073228 0.25817,-1.939129 0.77447,-2.597711 0.52034,-0.658568 1.19316,-0.987856 2.01841,-0.987861 0.50409,5e-6 0.93499,0.0996 1.29275,0.298797 0.3618,0.195138 0.6606,0.49597 0.89637,0.90249 m -3.82337,2.384285 c 0,0.825254 0.16869,1.473666 0.50611,1.945236 0.3415,0.467507 0.809,0.701263 1.40252,0.701259 0.59353,4e-6 1.06102,-0.233752 1.40253,-0.701259 0.34146,-0.47157 0.51221,-1.119982 0.51221,-1.945236 0,-0.825248 -0.17075,-1.471626 -0.51221,-1.939138 -0.34151,-0.471566 -0.809,-0.707351 -1.40253,-0.707356 -0.59352,5e-6 -1.06102,0.23579 -1.40252,0.707356 -0.33742,0.467512 -0.50611,1.11389 -0.50611,1.939138"
+ id="path3709"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 816.10347,83.132552 1.122,0 0,6.829666 -1.122,0 0,-6.829666 m 0,-2.658693 1.122,0 0,1.420818 -1.122,0 0,-1.420818"
+ id="path3711"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 822.67093,86.529093 c -0.90657,0 -1.53467,0.103664 -1.88426,0.310992 -0.34963,0.207333 -0.52442,0.561011 -0.52442,1.061039 0,0.398398 0.13007,0.715487 0.39026,0.951272 0.26424,0.231722 0.622,0.347585 1.07324,0.347581 0.62199,4e-6 1.11997,-0.219523 1.49398,-0.658573 0.37806,-0.443113 0.56708,-1.030547 0.56713,-1.762297 l 0,-0.250014 -1.11593,0 m 2.23792,-0.463444 0,3.896569 -1.12199,0 0,-1.036645 c -0.25615,0.414656 -0.57525,0.721585 -0.95739,0.920786 -0.38214,0.195134 -0.84964,0.2927 -1.40253,0.2927 -0.69922,0 -1.25615,-0.195133 -1.6708,-0.5854 -0.41061,-0.394334 -0.61593,-0.920786 -0.61593,-1.579363 0,-0.768334 0.25615,-1.347636 0.76836,-1.737903 0.5163,-0.390262 1.28462,-0.585395 2.30501,-0.5854 l 1.57328,0 0,-0.109766 c -5e-5,-0.516281 -0.17075,-0.914679 -0.51226,-1.195189 -0.33742,-0.284564 -0.81304,-0.426851 -1.42691,-0.426855 -0.39026,4e-6 -0.77034,0.04676 -1.14031,0.140252 -0.36993,0.09351 -0.72562,0.233761 -1.06713,0.420758 l 0,-1.036649 c 0.41061,-0.158535 0.809,-0.276433 1.19518,-0.353678 0.38623,-0.0813 0.76226,-0.121951 1.12815,-0.121956 0.98783,5e-6 1.72567,0.256116 2.21355,0.768334 0.48778,0.512232 0.73172,1.288702 0.73172,2.329405"
+ id="path3713"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 832.54343,84.443605 c 0.28054,-0.504092 0.61589,-0.876062 1.00616,-1.11592 0.39026,-0.239844 0.84963,-0.35977 1.37814,-0.359775 0.71144,5e-6 1.26024,0.250019 1.64642,0.750042 0.38623,0.495969 0.5793,1.203325 0.57934,2.122073 l 0,4.122193 -1.12814,0 0,-4.085605 c 0,-0.654504 -0.11584,-1.140304 -0.34757,-1.457402 -0.23173,-0.317085 -0.5854,-0.47563 -1.06102,-0.475634 -0.58136,4e-6 -1.04073,0.193104 -1.37815,0.579298 -0.33742,0.386208 -0.50615,0.912663 -0.50615,1.579363 l 0,3.85998 -1.1281,0 0,-4.085605 c 0,-0.658568 -0.11584,-1.144367 -0.34757,-1.457402 -0.23172,-0.317085 -0.58948,-0.47563 -1.07323,-0.475634 -0.57323,4e-6 -1.02851,0.195138 -1.36593,0.5854 -0.33742,0.386203 -0.50616,0.910625 -0.50616,1.573261 l 0,3.85998 -1.1281,0 0,-6.829666 1.1281,0 0,1.061039 c 0.25611,-0.41872 0.56304,-0.727678 0.9208,-0.926884 0.35776,-0.199192 0.78256,-0.298792 1.27448,-0.298797 0.49596,5e-6 0.91671,0.126029 1.26226,0.378067 0.34963,0.252058 0.60776,0.61793 0.77442,1.097628"
+ id="path3715"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 845.23931,86.26688 0,0.548811 -5.15882,0 c 0.0488,0.772407 0.28049,1.36187 0.69513,1.768399 0.41874,0.402461 1.0001,0.603692 1.74404,0.603692 0.4309,0 0.84761,-0.05285 1.25004,-0.158545 0.40652,-0.105698 0.809,-0.264242 1.2074,-0.475638 l 0,1.061038 c -0.40248,0.17074 -0.81511,0.300832 -1.23788,0.390267 -0.42278,0.08944 -0.85166,0.134155 -1.28664,0.134155 -1.08949,0 -1.95336,-0.317094 -2.5916,-0.951277 -0.63421,-0.634183 -0.95129,-1.491952 -0.95129,-2.573322 0,-1.117944 0.30083,-2.004175 0.90248,-2.658689 0.60574,-0.658568 1.4208,-0.987856 2.44527,-0.987861 0.91874,5e-6 1.6444,0.296768 2.17696,0.890295 0.53659,0.589468 0.80491,1.392361 0.80491,2.408675 m -1.12199,-0.329289 c -0.008,-0.613848 -0.18095,-1.103715 -0.51832,-1.469597 -0.33338,-0.365868 -0.7765,-0.548807 -1.32939,-0.548811 -0.62603,4e-6 -1.1281,0.176846 -1.50615,0.530519 -0.37402,0.353683 -0.58949,0.851681 -0.64638,1.493991 l 4.00024,-0.0061"
+ id="path3717"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 848.19069,81.193414 0,1.939138 2.31111,0 0,0.872003 -2.31111,0 0,3.707533 c 0,0.556942 0.0752,0.914688 0.22562,1.073233 0.1545,0.158544 0.46547,0.237819 0.93301,0.237819 l 1.15248,0 0,0.939078 -1.15248,0 c -0.86593,0 -1.4635,-0.160579 -1.79279,-0.481736 -0.32929,-0.325221 -0.49394,-0.914684 -0.49394,-1.768394 l 0,-3.707533 -0.82323,0 0,-0.872003 0.82323,0 0,-1.939138 1.1281,0"
+ id="path3719"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 857.82541,86.26688 0,0.548811 -5.15882,0 c 0.0488,0.772407 0.28049,1.36187 0.69513,1.768399 0.41874,0.402461 1.00005,0.603692 1.74404,0.603692 0.4309,0 0.84756,-0.05285 1.25004,-0.158545 0.40652,-0.105698 0.809,-0.264242 1.2074,-0.475638 l 0,1.061038 c -0.40248,0.17074 -0.81511,0.300832 -1.23788,0.390267 -0.42278,0.08944 -0.8517,0.134155 -1.28664,0.134155 -1.08954,0 -1.9534,-0.317094 -2.59165,-0.951277 -0.63416,-0.634183 -0.95124,-1.491952 -0.95124,-2.573322 0,-1.117944 0.30083,-2.004175 0.90248,-2.658689 0.60569,-0.658568 1.4208,-0.987856 2.44527,-0.987861 0.91874,5e-6 1.6444,0.296768 2.17696,0.890295 0.53659,0.589468 0.80491,1.392361 0.80491,2.408675 m -1.12204,-0.329289 c -0.008,-0.613848 -0.1809,-1.103715 -0.51832,-1.469597 -0.33333,-0.365868 -0.77645,-0.548807 -1.32934,-0.548811 -0.62603,4e-6 -1.1281,0.176846 -1.50615,0.530519 -0.37402,0.353683 -0.58949,0.851681 -0.64642,1.493991 l 4.00023,-0.0061"
+ id="path3721"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 863.62454,84.181391 c -0.12603,-0.07317 -0.26428,-0.126014 -0.41469,-0.158544 -0.14633,-0.03659 -0.30895,-0.05488 -0.48783,-0.05488 -0.63416,5e-6 -1.122,0.207337 -1.4635,0.621989 -0.33742,0.410597 -0.50611,1.002094 -0.50611,1.774491 l 0,3.597772 -1.1281,0 0,-6.829666 1.1281,0 0,1.061039 c 0.23577,-0.414652 0.5427,-0.72158 0.9208,-0.920786 0.37805,-0.203256 0.83742,-0.30489 1.3781,-0.304895 0.0772,5e-6 0.16263,0.0061 0.25611,0.01827 0.0935,0.0081 0.1972,0.02236 0.31102,0.0427 l 0.006,1.152503"
+ id="path3723"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 863.83795,88.413346 1.28668,0 0,1.548872 -1.28668,0 0,-1.548872"
+ id="path3725"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 588.79755,99.590826 1.83545,0 2.32332,6.195484 2.33549,-6.195484 1.8355,0 0,9.104194 -1.20129,0 0,-7.99437 -2.34771,6.24426 -1.23788,0 -2.3477,-6.24426 0,7.99437 -1.19518,0 0,-9.104194"
+ id="path3727"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 599.52988,101.86535 1.12199,0 0,6.82967 -1.12199,0 0,-6.82967 m 0,-2.658689 1.12199,0 0,1.420809 -1.12199,0 0,-1.420809"
+ id="path3729"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 608.67066,104.57283 0,4.12219 -1.12204,0 0,-4.08561 c 0,-0.64637 -0.12603,-1.13014 -0.37805,-1.4513 -0.25207,-0.32115 -0.63012,-0.48173 -1.13421,-0.48174 -0.60574,10e-6 -1.08343,0.19311 -1.43301,0.57931 -0.34964,0.3862 -0.52443,0.91266 -0.52443,1.57936 l 0,3.85998 -1.1281,0 0,-6.82967 1.1281,0 0,1.06104 c 0.26832,-0.41059 0.58338,-0.71752 0.94518,-0.92079 0.36589,-0.20325 0.78664,-0.30489 1.26226,-0.30489 0.78462,0 1.37815,0.24392 1.78058,0.73175 0.40248,0.48377 0.60372,1.19723 0.60372,2.14037"
+ id="path3731"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 610.9208,101.86535 1.12199,0 0,6.82967 -1.12199,0 0,-6.82967 m 0,-2.658689 1.12199,0 0,1.420809 -1.12199,0 0,-1.420809"
+ id="path3733"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 619.7018,103.1764 c 0.28048,-0.50408 0.61588,-0.87606 1.00615,-1.11592 0.39027,-0.23984 0.84963,-0.35977 1.3781,-0.35977 0.71143,0 1.26024,0.25002 1.64647,0.75004 0.38618,0.49597 0.57929,1.20333 0.57929,2.12208 l 0,4.12219 -1.1281,0 0,-4.08561 c -5e-5,-0.6545 -0.11589,-1.1403 -0.34761,-1.4574 -0.23173,-0.31709 -0.5854,-0.47563 -1.06102,-0.47564 -0.58136,10e-6 -1.04073,0.19311 -1.37815,0.57931 -0.33742,0.3862 -0.50611,0.91266 -0.50611,1.57936 l 0,3.85998 -1.1281,0 0,-4.08561 c -4e-5,-0.65857 -0.11588,-1.14437 -0.34761,-1.4574 -0.23172,-0.31709 -0.58944,-0.47563 -1.07323,-0.47564 -0.57319,10e-6 -1.02851,0.19514 -1.36593,0.5854 -0.33742,0.38621 -0.50611,0.91063 -0.50611,1.57327 l 0,3.85998 -1.1281,0 0,-6.82967 1.1281,0 0,1.06104 c 0.25611,-0.41872 0.56304,-0.72768 0.9208,-0.92688 0.35771,-0.1992 0.78255,-0.2988 1.27443,-0.2988 0.49596,0 0.91671,0.12603 1.2623,0.37807 0.34959,0.25205 0.60771,0.61793 0.77443,1.09762"
+ id="path3735"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 626.43996,105.99974 0,-4.13439 1.12204,0 0,4.0917 c 0,0.64638 0.12603,1.13218 0.37805,1.4574 0.25207,0.32116 0.63012,0.48174 1.13421,0.48174 0.60574,0 1.08342,-0.1931 1.43301,-0.5793 0.35367,-0.3862 0.53053,-0.91266 0.53053,-1.57937 l 0,-3.87217 1.12204,0 0,6.82967 -1.12204,0 0,-1.04884 c -0.27236,0.41465 -0.58948,0.72362 -0.95128,0.92688 -0.35772,0.1992 -0.77443,0.2988 -1.25005,0.2988 -0.78462,0 -1.38017,-0.24392 -1.78669,-0.73175 -0.40652,-0.48784 -0.60982,-1.20129 -0.60982,-2.14037"
+ id="path3737"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 639.80053,103.1764 c 0.28049,-0.50408 0.61589,-0.87606 1.00615,-1.11592 0.39027,-0.23984 0.84964,-0.35977 1.3781,-0.35977 0.71144,0 1.26024,0.25002 1.64647,0.75004 0.38618,0.49597 0.57929,1.20333 0.57929,2.12208 l 0,4.12219 -1.1281,0 0,-4.08561 c -4e-5,-0.6545 -0.11588,-1.1403 -0.34761,-1.4574 -0.23173,-0.31709 -0.5854,-0.47563 -1.06102,-0.47564 -0.58136,10e-6 -1.04073,0.19311 -1.37815,0.57931 -0.33742,0.3862 -0.5061,0.91266 -0.5061,1.57936 l 0,3.85998 -1.1281,0 0,-4.08561 c -5e-5,-0.65857 -0.11589,-1.14437 -0.34762,-1.4574 -0.23172,-0.31709 -0.58944,-0.47563 -1.07323,-0.47564 -0.57319,10e-6 -1.02851,0.19514 -1.36593,0.5854 -0.33742,0.38621 -0.50611,0.91063 -0.50611,1.57327 l 0,3.85998 -1.12815,0 0,-6.82967 1.12815,0 0,1.06104 c 0.25611,-0.41872 0.56304,-0.72768 0.92075,-0.92688 0.35776,-0.1992 0.7826,-0.2988 1.27448,-0.2988 0.49596,0 0.91671,0.12603 1.26226,0.37807 0.34963,0.25205 0.60776,0.61793 0.77447,1.09762"
+ id="path3739"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 650.67919,99.590826 5.232,0 0,1.036644 -4.00023,0 0,2.68309 3.60997,0 0,1.03664 -3.60997,0 0,4.34782 -1.23177,0 0,-9.104194"
+ id="path3741"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 662.9848,104.99968 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69513,1.7684 0.41874,0.40246 1.00005,0.60369 1.74404,0.60369 0.4309,0 0.84756,-0.0529 1.25004,-0.15854 0.40652,-0.1057 0.809,-0.26425 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39026 -0.42278,0.0894 -0.8517,0.13416 -1.28664,0.13416 -1.08954,0 -1.9534,-0.3171 -2.59165,-0.95128 -0.63416,-0.63418 -0.95129,-1.49195 -0.95124,-2.57332 -5e-5,-1.11795 0.30083,-2.00418 0.90248,-2.65869 0.60569,-0.65857 1.4208,-0.98786 2.44527,-0.98786 0.91874,0 1.6444,0.29677 2.17696,0.89029 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10372 -0.51832,-1.4696 -0.33333,-0.36587 -0.77645,-0.5488 -1.32934,-0.54881 -0.62603,1e-5 -1.1281,0.17685 -1.50615,0.53052 -0.37402,0.35368 -0.58949,0.85168 -0.64642,1.49399 l 4.00023,-0.006"
+ id="path3743"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 667.93021,105.26189 c -0.90656,0 -1.53466,0.10367 -1.88425,0.31099 -0.34963,0.20734 -0.52443,0.56101 -0.52443,1.06104 0,0.3984 0.13008,0.71549 0.39027,0.95127 0.26423,0.23173 0.62199,0.34759 1.07323,0.34758 0.622,10e-6 1.11998,-0.21952 1.49399,-0.65857 0.37805,-0.44311 0.56708,-1.03055 0.56712,-1.7623 l 0,-0.25001 -1.11593,0 m 2.23793,-0.46344 0,3.89657 -1.122,0 0,-1.03665 c -0.25615,0.41466 -0.57525,0.72159 -0.95739,0.92079 -0.38214,0.19513 -0.84963,0.2927 -1.40252,0.2927 -0.69922,0 -1.25616,-0.19514 -1.67085,-0.5854 -0.41056,-0.39433 -0.61589,-0.92079 -0.61589,-1.57937 0,-0.76833 0.25611,-1.34763 0.76837,-1.7379 0.5163,-0.39026 1.28462,-0.58539 2.30501,-0.5854 l 1.57327,0 0,-0.10977 c -4e-5,-0.51628 -0.17075,-0.91467 -0.51225,-1.19518 -0.33742,-0.28457 -0.81304,-0.42685 -1.42691,-0.42686 -0.39027,1e-5 -0.77039,0.0468 -1.14031,0.14025 -0.36993,0.0935 -0.72567,0.23376 -1.06713,0.42076 l 0,-1.03665 c 0.41061,-0.15853 0.809,-0.27643 1.19518,-0.35368 0.38623,-0.0813 0.76226,-0.12195 1.12815,-0.12195 0.98783,0 1.72566,0.25611 2.21354,0.76833 0.48779,0.51223 0.73173,1.2887 0.73173,2.32941"
+ id="path3745"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 673.59518,99.926211 0,1.939139 2.31112,0 0,0.872 -2.31112,0 0,3.70754 c 0,0.55694 0.0752,0.91468 0.22562,1.07323 0.15446,0.15854 0.46548,0.23782 0.93297,0.23782 l 1.15253,0 0,0.93908 -1.15253,0 c -0.86589,0 -1.4635,-0.16058 -1.79279,-0.48174 -0.32929,-0.32522 -0.49394,-0.91468 -0.49394,-1.76839 l 0,-3.70754 -0.82319,0 0,-0.872 0.82319,0 0,-1.939139 1.12814,0"
+ id="path3747"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 677.27223,105.99974 0,-4.13439 1.12199,0 0,4.0917 c 0,0.64638 0.12604,1.13218 0.37806,1.4574 0.25206,0.32116 0.63012,0.48174 1.13425,0.48174 0.60569,0 1.08338,-0.1931 1.43301,-0.5793 0.35368,-0.3862 0.53049,-0.91266 0.53049,-1.57937 l 0,-3.87217 1.12204,0 0,6.82967 -1.12204,0 0,-1.04884 c -0.27236,0.41465 -0.58944,0.72362 -0.95129,0.92688 -0.35771,0.1992 -0.77442,0.2988 -1.25004,0.2988 -0.78462,0 -1.38017,-0.24392 -1.78669,-0.73175 -0.40652,-0.48784 -0.60978,-1.20129 -0.60978,-2.14037"
+ id="path3749"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 689.27293,102.91419 c -0.12603,-0.0732 -0.26428,-0.12602 -0.41469,-0.15855 -0.14633,-0.0366 -0.30896,-0.0549 -0.48784,-0.0549 -0.63416,1e-5 -1.12199,0.20734 -1.4635,0.62199 -0.33742,0.4106 -0.5061,1.0021 -0.5061,1.77449 l 0,3.59778 -1.1281,0 0,-6.82967 1.1281,0 0,1.06104 c 0.23576,-0.41465 0.5427,-0.72158 0.9208,-0.92079 0.37805,-0.20325 0.83742,-0.30489 1.3781,-0.30489 0.0772,0 0.16262,0.006 0.2561,0.0183 0.0935,0.008 0.19716,0.0224 0.31102,0.0427 l 0.006,1.15251"
+ id="path3751"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 696.04768,104.99968 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69518,1.7684 0.41869,0.40246 1.00005,0.60369 1.74399,0.60369 0.4309,0 0.84761,-0.0529 1.25005,-0.15854 0.40656,-0.1057 0.809,-0.26425 1.20739,-0.47564 l 0,1.06104 c -0.40243,0.17074 -0.81506,0.30083 -1.23788,0.39026 -0.42277,0.0894 -0.85165,0.13416 -1.28664,0.13416 -1.08949,0 -1.95335,-0.3171 -2.5916,-0.95128 -0.63421,-0.63418 -0.95129,-1.49195 -0.95129,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.65869 0.60574,-0.65857 1.4208,-0.98786 2.44528,-0.98786 0.91873,0 1.6444,0.29677 2.17695,0.89029 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61385 -0.1809,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.5488 -1.32934,-0.54881 -0.62608,1e-5 -1.12815,0.17685 -1.5062,0.53052 -0.37401,0.35368 -0.58949,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+ id="path3753"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 707.38373,99.889627 0,1.201283 c -0.46754,-0.22358 -0.90863,-0.39025 -1.32328,-0.50002 -0.41464,-0.10976 -0.81506,-0.16464 -1.20128,-0.16465 -0.67076,10e-6 -1.18908,0.1301 -1.55496,0.39027 -0.3618,0.26018 -0.5427,0.63013 -0.5427,1.10982 0,0.40247 0.11992,0.70736 0.35978,0.91469 0.24389,0.20327 0.70326,0.36791 1.3781,0.49393 l 0.74394,0.15244 c 0.91878,0.17482 1.59564,0.48378 2.03062,0.92689 0.43903,0.43905 0.65859,1.02852 0.65859,1.7684 0,0.88216 -0.29679,1.5509 -0.89031,2.00621 -0.58949,0.45531 -1.45538,0.68297 -2.59771,0.68297 -0.4309,0 -0.89031,-0.0488 -1.37815,-0.14635 -0.48374,-0.0976 -0.98581,-0.24189 -1.50615,-0.43296 l 0,-1.26836 c 0.5,0.2805 0.9899,0.4919 1.46961,0.63418 0.47966,0.14229 0.95124,0.21343 1.41469,0.21343 0.70331,0 1.24601,-0.13822 1.62815,-0.41466 0.38214,-0.27644 0.57318,-0.67077 0.57318,-1.183 0,-0.44718 -0.1382,-0.79679 -0.41464,-1.04884 -0.27236,-0.25204 -0.72158,-0.44108 -1.34762,-0.56711 l -0.75004,-0.14635 c -0.91878,-0.18293 -1.58343,-0.46953 -1.99404,-0.8598 -0.4106,-0.39026 -0.61588,-0.93297 -0.61588,-1.62815 0,-0.80491 0.28251,-1.43909 0.84761,-1.90255 0.56915,-0.463425 1.3517,-0.695147 2.34771,-0.695156 0.42681,9e-6 0.8618,0.03861 1.30491,0.115858 0.44311,0.07725 0.89642,0.193113 1.35987,0.347585"
+ id="path3755"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 709.80458,101.86535 1.12204,0 0,6.82967 -1.12204,0 0,-6.82967 m 0,-2.658689 1.12204,0 0,1.420809 -1.12204,0 0,-1.420809"
+ id="path3757"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 712.78039,101.86535 5.32957,0 0,1.02445 -4.21975,4.90882 4.21975,0 0,0.8964 -5.48205,0 0,-1.02445 4.21979,-4.90883 -4.06731,0 0,-0.89639"
+ id="path3759"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 725.67135,104.99968 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69514,1.7684 0.41873,0.40246 1.00009,0.60369 1.74403,0.60369 0.4309,0 0.84761,-0.0529 1.25005,-0.15854 0.40652,-0.1057 0.809,-0.26425 1.20739,-0.47564 l 0,1.06104 c -0.40243,0.17074 -0.81506,0.30083 -1.23788,0.39026 -0.42277,0.0894 -0.85165,0.13416 -1.28664,0.13416 -1.08949,0 -1.95335,-0.3171 -2.5916,-0.95128 -0.63421,-0.63418 -0.95129,-1.49195 -0.95129,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.65869 0.60574,-0.65857 1.4208,-0.98786 2.44528,-0.98786 0.91873,0 1.6444,0.29677 2.17695,0.89029 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61385 -0.1809,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.5488 -1.32934,-0.54881 -0.62608,1e-5 -1.12815,0.17685 -1.5062,0.53052 -0.37401,0.35368 -0.58949,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+ id="path3761"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 727.79954,107.14614 1.28665,0 0,1.54888 -1.28665,0 0,-1.54888 m 0,-4.90882 1.28665,0 0,1.54887 -1.28665,0 0,-1.54887"
+ id="path3763"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 736.0805,107.65837 2.0123,0 0,-6.94553 -2.18912,0.43905 0,-1.12201 2.17696,-0.439054 1.23177,0 0,8.067544 2.01231,0 0,1.03665 -5.24422,0 0,-1.03665"
+ id="path3765"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 743.81875,107.14614 1.28669,0 0,1.54888 -1.28669,0 0,-1.54888"
+ id="path3767"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 750.4289,100.40185 c -0.6342,1e-5 -1.11184,0.31304 -1.43301,0.93908 -0.31708,0.622 -0.47562,1.55904 -0.47562,2.81114 0,1.24804 0.15854,2.18509 0.47562,2.81114 0.32117,0.62199 0.79881,0.93298 1.43301,0.93298 0.63825,0 1.11594,-0.31099 1.43302,-0.93298 0.32116,-0.62605 0.48172,-1.5631 0.48172,-2.81114 0,-1.2521 -0.16056,-2.18914 -0.48172,-2.81114 -0.31708,-0.62604 -0.79477,-0.93907 -1.43302,-0.93908 m 0,-0.975666 c 1.02039,9e-6 1.7989,0.404504 2.3355,1.213486 0.54068,0.80493 0.81102,1.97573 0.81102,3.5124 0,1.53261 -0.27034,2.70341 -0.81102,3.5124 -0.5366,0.80493 -1.31511,1.20739 -2.3355,1.20739 -1.02038,0 -1.80092,-0.40246 -2.3416,-1.20739 -0.53664,-0.80899 -0.80491,-1.97979 -0.80491,-3.5124 0,-1.53667 0.26827,-2.70747 0.80491,-3.5124 0.54068,-0.808982 1.32122,-1.213477 2.3416,-1.213486"
+ id="path3769"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 760.90513,103.1764 c 0.28048,-0.50408 0.61588,-0.87606 1.00615,-1.11592 0.39027,-0.23984 0.84963,-0.35977 1.37815,-0.35977 0.71138,0 1.26019,0.25002 1.64642,0.75004 0.38618,0.49597 0.57929,1.20333 0.57929,2.12208 l 0,4.12219 -1.1281,0 0,-4.08561 c 0,-0.6545 -0.11589,-1.1403 -0.34757,-1.4574 -0.23177,-0.31709 -0.58544,-0.47563 -1.06106,-0.47564 -0.58132,10e-6 -1.04073,0.19311 -1.3781,0.57931 -0.33747,0.3862 -0.50616,0.91266 -0.50616,1.57936 l 0,3.85998 -1.1281,0 0,-4.08561 c 0,-0.65857 -0.11588,-1.14437 -0.34761,-1.4574 -0.23168,-0.31709 -0.58944,-0.47563 -1.07323,-0.47564 -0.57319,10e-6 -1.02851,0.19514 -1.36593,0.5854 -0.33742,0.38621 -0.50611,0.91063 -0.50611,1.57327 l 0,3.85998 -1.1281,0 0,-6.82967 1.1281,0 0,1.06104 c 0.2561,-0.41872 0.56304,-0.72768 0.9208,-0.92688 0.35771,-0.1992 0.78255,-0.2988 1.27447,-0.2988 0.49596,0 0.91671,0.12603 1.26226,0.37807 0.34959,0.25205 0.60776,0.61793 0.77443,1.09762"
+ id="path3771"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 773.07658,103.1764 c 0.28049,-0.50408 0.61589,-0.87606 1.00615,-1.11592 0.39027,-0.23984 0.84964,-0.35977 1.37815,-0.35977 0.71139,0 1.26019,0.25002 1.64642,0.75004 0.38618,0.49597 0.57929,1.20333 0.57929,2.12208 l 0,4.12219 -1.1281,0 0,-4.08561 c 0,-0.6545 -0.11588,-1.1403 -0.34756,-1.4574 -0.23178,-0.31709 -0.58545,-0.47563 -1.06107,-0.47564 -0.58131,10e-6 -1.04073,0.19311 -1.3781,0.57931 -0.33747,0.3862 -0.50615,0.91266 -0.50615,1.57936 l 0,3.85998 -1.1281,0 0,-4.08561 c 0,-0.65857 -0.11589,-1.14437 -0.34762,-1.4574 -0.23172,-0.31709 -0.58944,-0.47563 -1.07323,-0.47564 -0.57319,10e-6 -1.02851,0.19514 -1.36593,0.5854 -0.33742,0.38621 -0.50611,0.91063 -0.50611,1.57327 l 0,3.85998 -1.1281,0 0,-6.82967 1.1281,0 0,1.06104 c 0.25611,-0.41872 0.56304,-0.72768 0.9208,-0.92688 0.35771,-0.1992 0.78255,-0.2988 1.27447,-0.2988 0.49596,0 0.91672,0.12603 1.26226,0.37807 0.34959,0.25205 0.60776,0.61793 0.77443,1.09762"
+ id="path3773"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 783.254,101.86535 1.12199,0 1.40253,5.32958 1.39642,-5.32958 1.32328,0 1.40248,5.32958 1.39642,-5.32958 1.12204,0 -1.78669,6.82967 -1.32323,0 -1.46961,-5.59789 -1.47571,5.59789 -1.32324,0 -1.78668,-6.82967"
+ id="path3775"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 794.12655,101.86535 1.12204,0 0,6.82967 -1.12204,0 0,-6.82967 m 0,-2.658689 1.12204,0 0,1.420809 -1.12204,0 0,-1.420809"
+ id="path3777"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 802.08436,102.90199 0,-3.695329 1.122,0 0,9.488359 -1.122,0 0,-1.02445 c -0.23581,0.40653 -0.53457,0.70939 -0.89642,0.90859 -0.35771,0.19513 -0.78866,0.2927 -1.29274,0.2927 -0.82526,0 -1.49803,-0.32929 -2.01842,-0.98787 -0.5163,-0.65857 -0.77442,-1.52447 -0.77442,-2.59771 0,-1.07323 0.25812,-1.93913 0.77442,-2.59771 0.52039,-0.65857 1.19316,-0.98786 2.01842,-0.98786 0.50408,0 0.93503,0.0996 1.29274,0.2988 0.36185,0.19513 0.66061,0.49596 0.89642,0.90248 m -3.82342,2.38429 c 0,0.82525 0.16874,1.47367 0.50616,1.94524 0.34146,0.4675 0.809,0.70126 1.40252,0.70125 0.59353,10e-6 1.06102,-0.23375 1.40253,-0.70125 0.34146,-0.47157 0.51221,-1.11999 0.51221,-1.94524 0,-0.82524 -0.17075,-1.47163 -0.51221,-1.93914 -0.34151,-0.47156 -0.809,-0.70735 -1.40253,-0.70735 -0.59352,0 -1.06106,0.23579 -1.40252,0.70735 -0.33742,0.46751 -0.50616,1.1139 -0.50616,1.93914"
+ id="path3779"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 811.3593,104.99968 0,0.54881 -5.15886,0 c 0.0488,0.77241 0.28053,1.36187 0.69518,1.7684 0.41873,0.40246 1.00004,0.60369 1.74398,0.60369 0.43095,0 0.84762,-0.0529 1.25009,-0.15854 0.40653,-0.1057 0.809,-0.26425 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39026 -0.42282,0.0894 -0.8517,0.13416 -1.28669,0.13416 -1.08948,0 -1.95335,-0.3171 -2.5916,-0.95128 -0.63416,-0.63418 -0.95128,-1.49195 -0.95128,-2.57332 0,-1.11795 0.30082,-2.00418 0.90252,-2.65869 0.6057,-0.65857 1.4208,-0.98786 2.44523,-0.98786 0.91878,0 1.6444,0.29677 2.17695,0.89029 0.53664,0.58947 0.80496,1.39236 0.80496,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10372 -0.51832,-1.4696 -0.33333,-0.36587 -0.77645,-0.5488 -1.32934,-0.54881 -0.62608,1e-5 -1.1281,0.17685 -1.5062,0.53052 -0.37401,0.35368 -0.58944,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+ id="path3781"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 813.35939,107.14614 1.28669,0 0,1.54888 -1.28669,0 0,-1.54888"
+ id="path3783"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 588.79755,118.32363 1.23177,0 0,9.10418 -1.23177,0 0,-9.10418"
+ id="path3785"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 597.7493,121.9092 c 0.28049,-0.50409 0.61589,-0.87606 1.00615,-1.11592 0.39027,-0.23984 0.84964,-0.35977 1.3781,-0.35977 0.71144,0 1.26024,0.25001 1.64647,0.75004 0.38618,0.49597 0.57929,1.20333 0.57929,2.12207 l 0,4.12219 -1.1281,0 0,-4.0856 c -4e-5,-0.65451 -0.11588,-1.14031 -0.34761,-1.4574 -0.23173,-0.31709 -0.5854,-0.47563 -1.06102,-0.47564 -0.58136,1e-5 -1.04073,0.19311 -1.37815,0.5793 -0.33742,0.38621 -0.5061,0.91266 -0.5061,1.57936 l 0,3.85998 -1.1281,0 0,-4.0856 c -5e-5,-0.65857 -0.11589,-1.14437 -0.34762,-1.4574 -0.23172,-0.31709 -0.58944,-0.47563 -1.07323,-0.47564 -0.57319,1e-5 -1.02851,0.19514 -1.36593,0.5854 -0.33742,0.38621 -0.50611,0.91063 -0.50611,1.57326 l 0,3.85998 -1.12815,0 0,-6.82966 1.12815,0 0,1.06104 c 0.25611,-0.41872 0.56304,-0.72768 0.92075,-0.92689 0.35776,-0.19919 0.7826,-0.29879 1.27448,-0.29879 0.49596,0 0.91671,0.12602 1.26226,0.37807 0.34963,0.25205 0.60776,0.61792 0.77447,1.09762"
+ id="path3787"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 607.70716,123.99469 c -0.90652,0 -1.53462,0.10367 -1.88425,0.31099 -0.34959,0.20733 -0.52438,0.56101 -0.52438,1.06104 0,0.3984 0.13007,0.71549 0.39026,0.95127 0.26424,0.23172 0.62195,0.34759 1.07324,0.34759 0.62194,0 1.11997,-0.21953 1.49398,-0.65858 0.37806,-0.44311 0.56708,-1.03054 0.56708,-1.7623 l 0,-0.25001 -1.11593,0 m 2.23797,-0.46345 0,3.89657 -1.12204,0 0,-1.03664 c -0.2561,0.41466 -0.57525,0.72159 -0.95734,0.92078 -0.38214,0.19514 -0.84968,0.2927 -1.40253,0.2927 -0.69922,0 -1.2562,-0.19513 -1.67085,-0.5854 -0.4106,-0.39433 -0.61588,-0.92078 -0.61588,-1.57936 0,-0.76833 0.2561,-1.34763 0.76832,-1.7379 0.5163,-0.39026 1.28466,-0.5854 2.30505,-0.5854 l 1.57323,0 0,-0.10976 c 0,-0.51629 -0.17075,-0.91469 -0.51221,-1.1952 -0.33742,-0.28456 -0.81309,-0.42684 -1.42691,-0.42685 -0.39026,10e-6 -0.77038,0.0468 -1.14031,0.14025 -0.36993,0.0935 -0.72567,0.23376 -1.06713,0.42076 l 0,-1.03665 c 0.41056,-0.15854 0.80896,-0.27643 1.19518,-0.35368 0.38618,-0.0813 0.76222,-0.12195 1.1281,-0.12195 0.98788,0 1.72572,0.25612 2.21355,0.76833 0.48783,0.51223 0.73177,1.2887 0.73177,2.3294"
+ id="path3789"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 616.75648,123.93371 c 0,-0.81305 -0.16869,-1.44317 -0.50611,-1.89035 -0.33338,-0.44718 -0.80289,-0.67077 -1.40863,-0.67078 -0.60165,1e-5 -1.07121,0.2236 -1.40863,0.67078 -0.33334,0.44718 -0.5,1.0773 -0.5,1.89035 0,0.80899 0.16666,1.43708 0.5,1.88425 0.33742,0.44718 0.80698,0.67078 1.40863,0.67078 0.60574,0 1.07525,-0.2236 1.40863,-0.67078 0.33742,-0.44717 0.50611,-1.07526 0.50611,-1.88425 m 1.12204,2.64649 c 0,1.16267 -0.25817,2.02654 -0.77443,2.59162 -0.5163,0.56914 -1.30702,0.8537 -2.37213,0.85371 -0.39431,-1e-5 -0.7663,-0.0305 -1.11589,-0.0915 -0.34963,-0.0569 -0.68907,-0.14635 -1.01836,-0.26831 l 0,-1.09153 c 0.32929,0.17887 0.6545,0.311 0.97566,0.39637 0.32117,0.0854 0.6484,0.12805 0.98178,0.12805 0.73581,0 1.28664,-0.1931 1.65252,-0.5793 0.36589,-0.38214 0.54881,-0.96143 0.54881,-1.7379 l 0,-0.55491 c -0.23173,0.40246 -0.52847,0.70329 -0.89027,0.90249 -0.36184,0.1992 -0.79477,0.29879 -1.29885,0.29879 -0.83747,0 -1.51231,-0.31912 -2.02452,-0.95737 -0.51221,-0.63824 -0.76837,-1.48382 -0.76837,-2.53673 0,-1.05697 0.25616,-1.90458 0.76837,-2.54283 0.51221,-0.63825 1.18705,-0.95737 2.02452,-0.95737 0.50408,0 0.93701,0.0996 1.29885,0.29879 0.3618,0.19921 0.65854,0.50004 0.89027,0.90249 l 0,-1.03664 1.12204,0 0,5.98205"
+ id="path3791"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 626.03142,123.73248 0,0.54881 -5.15882,0 c 0.0488,0.7724 0.28048,1.36187 0.69513,1.7684 0.41873,0.40246 1.00005,0.60369 1.74403,0.60369 0.4309,0 0.84762,-0.0528 1.25005,-0.15855 0.40652,-0.1057 0.809,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40248,0.17075 -0.8151,0.30083 -1.23788,0.39027 -0.42277,0.0894 -0.85165,0.13415 -1.28664,0.13415 -1.08948,0 -1.9534,-0.31709 -2.59164,-0.95127 -0.63416,-0.63418 -0.95124,-1.49195 -0.95124,-2.57332 0,-1.11795 0.30082,-2.00418 0.90248,-2.65869 0.60574,-0.65857 1.4208,-0.98786 2.44527,-0.98786 0.91873,0 1.6444,0.29677 2.17695,0.89029 0.5366,0.58947 0.80492,1.39236 0.80492,2.40868 m -1.122,-0.32929 c -0.008,-0.61385 -0.18094,-1.10372 -0.51836,-1.4696 -0.33334,-0.36587 -0.77645,-0.5488 -1.32934,-0.54881 -0.62604,10e-6 -1.1281,0.17684 -1.50616,0.53052 -0.37401,0.35368 -0.58948,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+ id="path3793"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 632.22692,120.79938 0,1.06104 c -0.31712,-0.16261 -0.64642,-0.28457 -0.98788,-0.36588 -0.3415,-0.0813 -0.69518,-0.12195 -1.06102,-0.12196 -0.55698,1e-5 -0.97566,0.0854 -1.2562,0.25611 -0.27644,0.17075 -0.41464,0.42686 -0.41464,0.76834 0,0.26019 0.0996,0.46548 0.2988,0.61589 0.19918,0.14636 0.59964,0.28661 1.20129,0.42076 l 0.38416,0.0854 c 0.79679,0.17074 1.36185,0.41263 1.69523,0.72565 0.33742,0.30897 0.5061,0.74192 0.5061,1.29886 0,0.63418 -0.25202,1.13625 -0.7561,1.50618 -0.50005,0.36994 -1.18912,0.55491 -2.06722,0.55491 -0.36589,0 -0.74803,-0.0366 -1.14642,-0.10976 -0.39431,-0.0691 -0.81102,-0.1748 -1.25005,-0.31709 l 0,-1.15861 c 0.41465,0.21547 0.82319,0.37808 1.22567,0.48784 0.40248,0.1057 0.80087,0.15855 1.19518,0.15855 0.52851,0 0.93503,-0.0894 1.2196,-0.26831 0.28458,-0.18294 0.42686,-0.43905 0.42686,-0.76834 0,-0.30489 -0.10367,-0.53865 -0.31102,-0.70126 -0.20326,-0.16261 -0.65248,-0.31912 -1.34761,-0.46954 l -0.39027,-0.0915 c -0.69518,-0.14635 -1.19724,-0.36994 -1.5062,-0.67077 -0.30895,-0.30489 -0.46345,-0.72158 -0.46345,-1.25007 0,-0.64231 0.22769,-1.13827 0.68297,-1.48789 0.45532,-0.34961 1.1017,-0.52442 1.93916,-0.52442 0.41465,0 0.80492,0.0305 1.1708,0.0915 0.36584,0.061 0.70326,0.15246 1.01226,0.27441"
+ id="path3795"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 641.05668,117.95165 c -0.54476,0.93503 -0.94922,1.85988 -1.2135,2.77456 -0.26423,0.91469 -0.39632,1.84157 -0.39632,2.78065 0,0.93908 0.13209,1.87002 0.39632,2.79284 0.26832,0.91875 0.67282,1.8436 1.2135,2.77455 l -0.97566,0 c -0.60978,-0.95534 -1.06713,-1.89442 -1.37204,-2.81724 -0.30083,-0.92281 -0.45124,-1.83953 -0.45124,-2.75015 0,-0.90656 0.15041,-1.81921 0.45124,-2.73797 0.30082,-0.91875 0.75817,-1.85782 1.37204,-2.81724 l 0.97566,0"
+ id="path3797"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 643.23974,120.59815 1.122,0 0,6.95162 c 0,0.86997 -0.16667,1.50009 -0.50001,1.89035 -0.32929,0.39027 -0.86184,0.5854 -1.59765,0.58541 l -0.42686,0 0,-0.95128 0.2988,0 c 0.42686,0 0.7175,-0.0996 0.872,-0.2988 0.15449,-0.19513 0.23172,-0.60369 0.23172,-1.22568 l 0,-6.95162 m 0,-2.65869 1.122,0 0,1.42081 -1.122,0 0,-1.42081"
+ id="path3799"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 647.78878,126.40336 0,3.62217 -1.1281,0 0,-9.42738 1.1281,0 0,1.03664 c 0.23577,-0.40652 0.53255,-0.70735 0.89031,-0.90249 0.3618,-0.19919 0.7927,-0.29879 1.29275,-0.29879 0.82929,0 1.50211,0.32929 2.01841,0.98786 0.52034,0.65858 0.78054,1.52448 0.78054,2.59771 0,1.07324 -0.2602,1.93914 -0.78054,2.59771 -0.5163,0.65858 -1.18912,0.98786 -2.01841,0.98786 -0.50005,0 -0.93095,-0.0976 -1.29275,-0.2927 -0.35776,-0.19919 -0.65454,-0.50206 -0.89031,-0.90859 m 3.81731,-2.38428 c 0,-0.82525 -0.17075,-1.47162 -0.51226,-1.93914 -0.33742,-0.47156 -0.80289,-0.70735 -1.39642,-0.70736 -0.59352,1e-5 -1.06102,0.2358 -1.40248,0.70736 -0.33742,0.46752 -0.50615,1.11389 -0.50615,1.93914 0,0.82525 0.16873,1.47366 0.50615,1.94523 0.34146,0.46751 0.80896,0.70127 1.40248,0.70127 0.59353,0 1.059,-0.23376 1.39642,-0.70127 0.34151,-0.47157 0.51226,-1.11998 0.51226,-1.94523"
+ id="path3801"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 659.12483,123.93371 c -4e-5,-0.81305 -0.16873,-1.44317 -0.50615,-1.89035 -0.33333,-0.44718 -0.80289,-0.67077 -1.40863,-0.67078 -0.60166,1e-5 -1.07117,0.2236 -1.40859,0.67078 -0.33338,0.44718 -0.50005,1.0773 -0.50005,1.89035 0,0.80899 0.16667,1.43708 0.50005,1.88425 0.33742,0.44718 0.80693,0.67078 1.40859,0.67078 0.60574,0 1.0753,-0.2236 1.40863,-0.67078 0.33742,-0.44717 0.50611,-1.07526 0.50615,-1.88425 m 1.122,2.64649 c 0,1.16267 -0.25813,2.02654 -0.77443,2.59162 -0.5163,0.56914 -1.30698,0.8537 -2.37209,0.85371 -0.39435,-1e-5 -0.7663,-0.0305 -1.11593,-0.0915 -0.34963,-0.0569 -0.68907,-0.14635 -1.01837,-0.26831 l 0,-1.09153 c 0.3293,0.17887 0.65455,0.311 0.97567,0.39637 0.32117,0.0854 0.64844,0.12805 0.98177,0.12805 0.73582,0 1.28669,-0.1931 1.65253,-0.5793 0.36589,-0.38214 0.54881,-0.96143 0.54885,-1.7379 l 0,-0.55491 c -0.23172,0.40246 -0.52851,0.70329 -0.89031,0.90249 -0.3618,0.1992 -0.79477,0.29879 -1.29885,0.29879 -0.83747,0 -1.51231,-0.31912 -2.02452,-0.95737 -0.51222,-0.63824 -0.76832,-1.48382 -0.76832,-2.53673 0,-1.05697 0.2561,-1.90458 0.76832,-2.54283 0.51221,-0.63825 1.18705,-0.95737 2.02452,-0.95737 0.50408,0 0.93705,0.0996 1.29885,0.29879 0.3618,0.19921 0.65859,0.50004 0.89031,0.90249 l 0,-1.03664 1.122,0 0,5.98205"
+ id="path3803"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 662.38108,117.95165 0.97567,0 c 0.60982,0.95942 1.0651,1.89849 1.36593,2.81724 0.30491,0.91876 0.45735,1.83141 0.45735,2.73797 0,0.91062 -0.15244,1.82734 -0.45735,2.75015 -0.30083,0.92282 -0.75611,1.8619 -1.36593,2.81724 l -0.97567,0 c 0.54068,-0.93095 0.94316,-1.8558 1.20739,-2.77455 0.26832,-0.92282 0.40248,-1.85376 0.40248,-2.79284 0,-0.93908 -0.13416,-1.86596 -0.40248,-2.78065 -0.26423,-0.91468 -0.66671,-1.83953 -1.20739,-2.77456"
+ id="path3805"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 667.72287,125.87894 1.28668,0 0,1.54887 -1.28668,0 0,-1.54887 m 0,-4.90882 1.28668,0 0,1.54887 -1.28668,0 0,-1.54887"
+ id="path3807"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 682.49813,119.02489 0,1.29885 c -0.41469,-0.38619 -0.85781,-0.67483 -1.32934,-0.8659 -0.46754,-0.19106 -0.96552,-0.28659 -1.49399,-0.2866 -1.04072,1e-5 -1.83751,0.31913 -2.3904,0.95737 -0.5529,0.63419 -0.8293,1.55294 -0.8293,2.75626 0,1.19926 0.2764,2.11801 0.8293,2.75626 0.55289,0.63418 1.34968,0.95127 2.3904,0.95127 0.52847,0 1.02645,-0.0955 1.49399,-0.2866 0.47153,-0.19107 0.91465,-0.4797 1.32934,-0.86591 l 0,1.28666 c -0.43095,0.2927 -0.88829,0.51223 -1.37204,0.65858 -0.47971,0.14635 -0.98788,0.21952 -1.52447,0.21952 -1.37815,0 -2.46355,-0.42075 -3.2563,-1.26226 -0.79274,-0.84558 -1.18911,-1.99809 -1.18907,-3.45752 -4e-5,-1.4635 0.39633,-2.616 1.18907,-3.45752 0.79275,-0.84557 1.87815,-1.26836 3.2563,-1.26837 0.54472,1e-5 1.05698,0.0732 1.53668,0.21953 0.48375,0.14229 0.93701,0.35775 1.35983,0.64638"
+ id="path3809"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 687.01058,121.38478 c -0.60166,10e-6 -1.07732,0.23579 -1.42691,0.70736 -0.34963,0.46751 -0.52443,1.10983 -0.52443,1.92694 0,0.81712 0.17278,1.46147 0.51832,1.93304 0.34964,0.46751 0.82728,0.70126 1.43302,0.70126 0.59761,0 1.07121,-0.23579 1.4208,-0.70736 0.34963,-0.47157 0.52442,-1.11388 0.52442,-1.92694 0,-0.80899 -0.17479,-1.44927 -0.52442,-1.92084 -0.34959,-0.47564 -0.82319,-0.71345 -1.4208,-0.71346 m 0,-0.95127 c 0.97566,0 1.74196,0.31709 2.2989,0.95127 0.55693,0.63419 0.83544,1.51229 0.83544,2.6343 0,1.11795 -0.27851,1.99605 -0.83544,2.6343 -0.55694,0.63418 -1.32324,0.95127 -2.2989,0.95127 -0.97976,0 -1.74808,-0.31709 -2.30501,-0.95127 -0.55289,-0.63825 -0.82934,-1.51635 -0.82934,-2.6343 0,-1.12201 0.27645,-2.00011 0.82934,-2.6343 0.55693,-0.63418 1.32525,-0.95127 2.30501,-0.95127"
+ id="path3811"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 697.67583,123.30562 0,4.12219 -1.12199,0 0,-4.0856 c 0,-0.64637 -0.12604,-1.13014 -0.3781,-1.4513 -0.25202,-0.32115 -0.63012,-0.48173 -1.13421,-0.48174 -0.60574,1e-5 -1.08338,0.19311 -1.43301,0.5793 -0.34959,0.38621 -0.52443,0.91266 -0.52443,1.57936 l 0,3.85998 -1.1281,0 0,-6.82966 1.1281,0 0,1.06104 c 0.26832,-0.41059 0.58338,-0.71752 0.94518,-0.92079 0.36589,-0.20326 0.78664,-0.30489 1.26226,-0.30489 0.78462,0 1.37815,0.24392 1.78063,0.73175 0.40243,0.48377 0.60367,1.19722 0.60367,2.14036"
+ id="path3813"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 699.12105,120.59815 1.18908,0 2.1343,5.73204 2.13425,-5.73204 1.18907,0 -2.56111,6.82966 -1.52447,0 -2.56112,-6.82966"
+ id="path3815"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 713.15844,123.73248 0,0.54881 -5.15882,0 c 0.0488,0.7724 0.28049,1.36187 0.69513,1.7684 0.41874,0.40246 1.0001,0.60369 1.74404,0.60369 0.4309,0 0.84761,-0.0528 1.25004,-0.15855 0.40652,-0.1057 0.809,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17075 -0.81511,0.30083 -1.23788,0.39027 -0.42278,0.0894 -0.85166,0.13415 -1.28664,0.13415 -1.08949,0 -1.9534,-0.31709 -2.59165,-0.95127 -0.63416,-0.63418 -0.95124,-1.49195 -0.95124,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.65869 0.60574,-0.65857 1.4208,-0.98786 2.44527,-0.98786 0.91874,0 1.6444,0.29677 2.17696,0.89029 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61385 -0.18095,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.7765,-0.5488 -1.32939,-0.54881 -0.62603,10e-6 -1.1281,0.17684 -1.50615,0.53052 -0.37402,0.35368 -0.58949,0.85168 -0.64638,1.49399 l 4.00024,-0.006"
+ id="path3817"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 718.95757,121.64699 c -0.12603,-0.0732 -0.26428,-0.12602 -0.41464,-0.15855 -0.14638,-0.0366 -0.309,-0.0549 -0.48784,-0.0549 -0.6342,1e-5 -1.12204,0.20734 -1.4635,0.62199 -0.33742,0.4106 -0.50615,1.00209 -0.50615,1.77449 l 0,3.59777 -1.1281,0 0,-6.82966 1.1281,0 0,1.06104 c 0.23577,-0.41466 0.5427,-0.72158 0.9208,-0.92079 0.37805,-0.20326 0.83742,-0.30489 1.3781,-0.30489 0.0773,0 0.16263,0.006 0.25615,0.0183 0.0935,0.008 0.19716,0.0224 0.31098,0.0427 l 0.006,1.15251"
+ id="path3819"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 721.25647,118.65901 0,1.93914 2.31112,0 0,0.872 -2.31112,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07324 0.1545,0.15855 0.46548,0.23782 0.93302,0.23782 l 1.15248,0 0,0.93907 -1.15248,0 c -0.86594,0 -1.46355,-0.16058 -1.7928,-0.48173 -0.32929,-0.32522 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82323,0 0,-0.872 0.82323,0 0,-1.93914 1.1281,0"
+ id="path3821"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 730.13504,118.65901 0,1.93914 2.31111,0 0,0.872 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07324 0.1545,0.15855 0.46547,0.23782 0.93296,0.23782 l 1.15253,0 0,0.93907 -1.15253,0 c -0.86588,0 -1.46349,-0.16058 -1.79274,-0.48173 -0.3293,-0.32522 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82324,0 0,-0.872 0.82324,0 0,-1.93914 1.1281,0"
+ id="path3823"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 736.57444,121.38478 c -0.60166,10e-6 -1.07728,0.23579 -1.42691,0.70736 -0.34963,0.46751 -0.52443,1.10983 -0.52443,1.92694 0,0.81712 0.17278,1.46147 0.51832,1.93304 0.34964,0.46751 0.82728,0.70126 1.43302,0.70126 0.59761,0 1.07121,-0.23579 1.4208,-0.70736 0.34963,-0.47157 0.52442,-1.11388 0.52442,-1.92694 0,-0.80899 -0.17479,-1.44927 -0.52442,-1.92084 -0.34959,-0.47564 -0.82319,-0.71345 -1.4208,-0.71346 m 0,-0.95127 c 0.97566,0 1.74196,0.31709 2.2989,0.95127 0.55698,0.63419 0.83544,1.51229 0.83544,2.6343 0,1.11795 -0.27846,1.99605 -0.83544,2.6343 -0.55694,0.63418 -1.32324,0.95127 -2.2989,0.95127 -0.97971,0 -1.74808,-0.31709 -2.30501,-0.95127 -0.55289,-0.63825 -0.82929,-1.51635 -0.82929,-2.6343 0,-1.12201 0.2764,-2.00011 0.82929,-2.6343 0.55693,-0.63418 1.3253,-0.95127 2.30501,-0.95127"
+ id="path3825"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 744.73344,120.59815 1.18912,0 2.13426,5.73204 2.1343,-5.73204 1.18907,0 -2.56111,6.82966 -1.52448,0 -2.56116,-6.82966"
+ id="path3827"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 758.77087,123.73248 0,0.54881 -5.15886,0 c 0.0488,0.7724 0.28053,1.36187 0.69518,1.7684 0.41873,0.40246 1.00005,0.60369 1.74399,0.60369 0.43094,0 0.84761,-0.0528 1.25009,-0.15855 0.40652,-0.1057 0.80895,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40248,0.17075 -0.81511,0.30083 -1.23788,0.39027 -0.42282,0.0894 -0.8517,0.13415 -1.28668,0.13415 -1.08949,0 -1.95336,-0.31709 -2.5916,-0.95127 -0.63421,-0.63418 -0.95129,-1.49195 -0.95129,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.65869 0.60574,-0.65857 1.42084,-0.98786 2.44527,-0.98786 0.91878,0 1.6444,0.29677 2.17695,0.89029 0.53664,0.58947 0.80492,1.39236 0.80496,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10372 -0.51832,-1.4696 -0.33333,-0.36587 -0.77649,-0.5488 -1.32934,-0.54881 -0.62607,10e-6 -1.1281,0.17684 -1.50619,0.53052 -0.37402,0.35368 -0.58945,0.85168 -0.64638,1.49399 l 4.00023,-0.006"
+ id="path3829"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 765.52735,120.86036 0,1.04884 c -0.31712,-0.1748 -0.63622,-0.30489 -0.95739,-0.39027 -0.31708,-0.0894 -0.63825,-0.13414 -0.96345,-0.13415 -0.72769,10e-6 -1.29275,0.23172 -1.69523,0.69516 -0.40248,0.45938 -0.60367,1.10576 -0.60367,1.93914 0,0.83338 0.20119,1.48179 0.60367,1.94523 0.40248,0.45938 0.96754,0.68907 1.69523,0.68907 0.3252,0 0.64637,-0.0427 0.96345,-0.12806 0.32117,-0.0894 0.64027,-0.22155 0.95739,-0.39636 l 0,1.03664 c -0.31304,0.14635 -0.63824,0.25612 -0.97566,0.32929 -0.33338,0.0732 -0.68908,0.10976 -1.06713,0.10976 -1.02851,0 -1.84564,-0.32319 -2.45138,-0.96956 -0.60574,-0.64638 -0.90859,-1.51838 -0.90859,-2.61601 0,-1.11388 0.30492,-1.98995 0.9147,-2.6282 0.61386,-0.63825 1.4533,-0.95737 2.51841,-0.95737 0.34555,0 0.68297,0.0366 1.01226,0.10976 0.32929,0.0691 0.64844,0.17481 0.95739,0.31709"
+ id="path3831"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 768.60068,118.65901 0,1.93914 2.31111,0 0,0.872 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22567,1.07324 0.15445,0.15855 0.46542,0.23782 0.93296,0.23782 l 1.15248,0 0,0.93907 -1.15248,0 c -0.86593,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.32929,-0.32522 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82323,0 0,-0.872 0.82323,0 0,-1.93914 1.1281,0"
+ id="path3833"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 775.04013,121.38478 c -0.6017,10e-6 -1.07732,0.23579 -1.42696,0.70736 -0.34958,0.46751 -0.52442,1.10983 -0.52438,1.92694 -4e-5,0.81712 0.17278,1.46147 0.51832,1.93304 0.34959,0.46751 0.82728,0.70126 1.43302,0.70126 0.59756,0 1.07116,-0.23579 1.4208,-0.70736 0.34958,-0.47157 0.52442,-1.11388 0.52442,-1.92694 0,-0.80899 -0.17484,-1.44927 -0.52442,-1.92084 -0.34964,-0.47564 -0.82324,-0.71345 -1.4208,-0.71346 m 0,-0.95127 c 0.97562,0 1.74196,0.31709 2.2989,0.95127 0.55693,0.63419 0.8354,1.51229 0.8354,2.6343 0,1.11795 -0.27847,1.99605 -0.8354,2.6343 -0.55694,0.63418 -1.32328,0.95127 -2.2989,0.95127 -0.97976,0 -1.74808,-0.31709 -2.30506,-0.95127 -0.55284,-0.63825 -0.82929,-1.51635 -0.82929,-2.6343 0,-1.12201 0.27645,-2.00011 0.82929,-2.6343 0.55698,-0.63418 1.3253,-0.95127 2.30506,-0.95127"
+ id="path3835"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 783.98573,121.64699 c -0.12604,-0.0732 -0.26424,-0.12602 -0.41465,-0.15855 -0.14633,-0.0366 -0.30896,-0.0549 -0.48783,-0.0549 -0.63417,1e-5 -1.122,0.20734 -1.4635,0.62199 -0.33742,0.4106 -0.50611,1.00209 -0.50611,1.77449 l 0,3.59777 -1.12815,0 0,-6.82966 1.12815,0 0,1.06104 c 0.23577,-0.41466 0.5427,-0.72158 0.92075,-0.92079 0.3781,-0.20326 0.83747,-0.30489 1.37815,-0.30489 0.0772,0 0.16262,0.006 0.2561,0.0183 0.0935,0.008 0.19716,0.0224 0.31102,0.0427 l 0.006,1.15251"
+ id="path3837"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 789.03481,124.73254 0,-4.13439 1.12204,0 0,4.0917 c -5e-5,0.64638 0.12599,1.13218 0.37805,1.4574 0.25202,0.32116 0.63012,0.48174 1.13421,0.48174 0.60574,0 1.08338,-0.1931 1.43301,-0.5793 0.35368,-0.3862 0.53054,-0.91266 0.53054,-1.57936 l 0,-3.87218 1.12199,0 0,6.82966 -1.12199,0 0,-1.04884 c -0.27241,0.41466 -0.58949,0.72362 -0.95129,0.92689 -0.35776,0.19919 -0.77443,0.29879 -1.25009,0.29879 -0.78458,0 -1.38017,-0.24391 -1.78669,-0.73175 -0.40652,-0.48783 -0.60978,-1.20128 -0.60978,-2.14036"
+ id="path3839"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 801.43188,120.79938 0,1.06104 c -0.31712,-0.16261 -0.64637,-0.28457 -0.98788,-0.36588 -0.34146,-0.0813 -0.69513,-0.12195 -1.06102,-0.12196 -0.55693,1e-5 -0.97566,0.0854 -1.2562,0.25611 -0.2764,0.17075 -0.41464,0.42686 -0.41464,0.76834 0,0.26019 0.0996,0.46548 0.2988,0.61589 0.19922,0.14636 0.59964,0.28661 1.20129,0.42076 l 0.38416,0.0854 c 0.79679,0.17074 1.36189,0.41263 1.69523,0.72565 0.33742,0.30897 0.5061,0.74192 0.50615,1.29886 -5e-5,0.63418 -0.25207,1.13625 -0.75615,1.50618 -0.50005,0.36994 -1.18912,0.55491 -2.06722,0.55491 -0.36584,0 -0.74798,-0.0366 -1.14638,-0.10976 -0.39435,-0.0691 -0.81102,-0.1748 -1.25009,-0.31709 l 0,-1.15861 c 0.41465,0.21547 0.82323,0.37808 1.22567,0.48784 0.40248,0.1057 0.80087,0.15855 1.19522,0.15855 0.52847,0 0.93499,-0.0894 1.21956,-0.26831 0.28458,-0.18294 0.42686,-0.43905 0.42686,-0.76834 0,-0.30489 -0.10367,-0.53865 -0.31097,-0.70126 -0.20331,-0.16261 -0.65248,-0.31912 -1.34766,-0.46954 l -0.39027,-0.0915 c -0.69518,-0.14635 -1.19724,-0.36994 -1.5062,-0.67077 -0.30895,-0.30489 -0.4634,-0.72158 -0.4634,-1.25007 0,-0.64231 0.22764,-1.13827 0.68296,-1.48789 0.45528,-0.34961 1.10166,-0.52442 1.93912,-0.52442 0.41465,0 0.80492,0.0305 1.1708,0.0915 0.36589,0.061 0.70331,0.15246 1.01226,0.27441"
+ id="path3841"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 803.59056,120.59815 1.122,0 0,6.82966 -1.122,0 0,-6.82966 m 0,-2.65869 1.122,0 0,1.42081 -1.122,0 0,-1.42081"
+ id="path3843"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 812.7313,123.30562 0,4.12219 -1.122,0 0,-4.0856 c 0,-0.64637 -0.12603,-1.13014 -0.3781,-1.4513 -0.25202,-0.32115 -0.63012,-0.48173 -1.1342,-0.48174 -0.6057,1e-5 -1.08338,0.19311 -1.43302,0.5793 -0.34958,0.38621 -0.52442,0.91266 -0.52438,1.57936 l 0,3.85998 -1.12814,0 0,-6.82966 1.12814,0 0,1.06104 c 0.26828,-0.41059 0.58334,-0.71752 0.94514,-0.92079 0.36588,-0.20326 0.78664,-0.30489 1.2623,-0.30489 0.78458,0 1.3781,0.24392 1.78058,0.73175 0.40244,0.48377 0.60368,1.19722 0.60368,2.14036"
+ id="path3845"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 819.47561,123.93371 c 0,-0.81305 -0.16874,-1.44317 -0.50611,-1.89035 -0.33338,-0.44718 -0.80294,-0.67077 -1.40863,-0.67078 -0.60166,1e-5 -1.07122,0.2236 -1.40864,0.67078 -0.33333,0.44718 -0.5,1.0773 -0.5,1.89035 0,0.80899 0.16667,1.43708 0.5,1.88425 0.33742,0.44718 0.80698,0.67078 1.40864,0.67078 0.60569,0 1.07525,-0.2236 1.40863,-0.67078 0.33737,-0.44717 0.50611,-1.07526 0.50611,-1.88425 m 1.12199,2.64649 c 0,1.16267 -0.25813,2.02654 -0.77443,2.59162 -0.5163,0.56914 -1.30698,0.8537 -2.37208,0.85371 -0.39431,-1e-5 -0.7663,-0.0305 -1.11589,-0.0915 -0.34963,-0.0569 -0.68907,-0.14635 -1.01837,-0.26831 l 0,-1.09153 c 0.3293,0.17887 0.6545,0.311 0.97567,0.39637 0.32117,0.0854 0.64839,0.12805 0.98177,0.12805 0.73582,0 1.28664,-0.1931 1.65253,-0.5793 0.36584,-0.38214 0.54881,-0.96143 0.54881,-1.7379 l 0,-0.55491 c -0.23173,0.40246 -0.52852,0.70329 -0.89032,0.90249 -0.3618,0.1992 -0.79476,0.29879 -1.29885,0.29879 -0.83742,0 -1.51226,-0.31912 -2.02447,-0.95737 -0.51226,-0.63824 -0.76837,-1.48382 -0.76837,-2.53673 0,-1.05697 0.25611,-1.90458 0.76837,-2.54283 0.51221,-0.63825 1.18705,-0.95737 2.02447,-0.95737 0.50409,0 0.93705,0.0996 1.29885,0.29879 0.3618,0.19921 0.65859,0.50004 0.89032,0.90249 l 0,-1.03664 1.12199,0 0,5.98205"
+ id="path3847"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 828.05537,121.3238 -1.28664,0 0,-1.05494 1.00004,-1.94523 0.78664,0 -0.50004,1.94523 0,1.05494"
+ id="path3849"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 832.141,119.33588 0,3.42093 1.54885,0 c 0.57324,0 1.01635,-0.14838 1.32934,-0.44515 0.31304,-0.29676 0.46956,-0.71954 0.46956,-1.26837 0,-0.54473 -0.15652,-0.96549 -0.46956,-1.26226 -0.31299,-0.29676 -0.7561,-0.44514 -1.32934,-0.44515 l -1.54885,0 m -1.23177,-1.01225 2.78062,0 c 1.02039,1e-5 1.79078,0.23172 2.31112,0.69516 0.52442,0.45938 0.78664,1.13422 0.78664,2.0245 0,0.89844 -0.26222,1.57734 -0.78664,2.03671 -0.52034,0.45938 -1.29073,0.68907 -2.31112,0.68906 l -1.54885,0 0,3.65875 -1.23177,0 0,-9.10418"
+ id="path3851"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 840.95248,123.99469 c -0.90656,0 -1.53466,0.10367 -1.88425,0.31099 -0.34963,0.20733 -0.52443,0.56101 -0.52443,1.06104 0,0.3984 0.13008,0.71549 0.39027,0.95127 0.26423,0.23172 0.62195,0.34759 1.07323,0.34759 0.62195,0 1.11998,-0.21953 1.49399,-0.65858 0.37805,-0.44311 0.56708,-1.03054 0.56708,-1.7623 l 0,-0.25001 -1.11589,0 m 2.23793,-0.46345 0,3.89657 -1.12204,0 0,-1.03664 c -0.25611,0.41466 -0.57521,0.72159 -0.95735,0.92078 -0.38214,0.19514 -0.84967,0.2927 -1.40252,0.2927 -0.69922,0 -1.2562,-0.19513 -1.67085,-0.5854 -0.41056,-0.39433 -0.61588,-0.92078 -0.61588,-1.57936 0,-0.76833 0.2561,-1.34763 0.76836,-1.7379 0.51626,-0.39026 1.28462,-0.5854 2.30501,-0.5854 l 1.57323,0 0,-0.10976 c 0,-0.51629 -0.17075,-0.91469 -0.51221,-1.1952 -0.33742,-0.28456 -0.81304,-0.42684 -1.42691,-0.42685 -0.39027,10e-6 -0.77038,0.0468 -1.14031,0.14025 -0.36993,0.0935 -0.72567,0.23376 -1.06713,0.42076 l 0,-1.03665 c 0.41056,-0.15854 0.809,-0.27643 1.19518,-0.35368 0.38618,-0.0813 0.76226,-0.12195 1.1281,-0.12195 0.98788,0 1.72571,0.25612 2.21355,0.76833 0.48783,0.51223 0.73177,1.2887 0.73177,2.3294"
+ id="path3853"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 846.62962,118.65901 0,1.93914 2.31112,0 0,0.872 -2.31112,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07324 0.1545,0.15855 0.46548,0.23782 0.93302,0.23782 l 1.15248,0 0,0.93907 -1.15248,0 c -0.86594,0 -1.46355,-0.16058 -1.7928,-0.48173 -0.32929,-0.32522 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82323,0 0,-0.872 0.82323,0 0,-1.93914 1.1281,0"
+ id="path3855"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 856.0997,123.30562 0,4.12219 -1.12204,0 0,-4.0856 c 0,-0.64637 -0.12604,-1.13014 -0.37806,-1.4513 -0.25206,-0.32115 -0.63012,-0.48173 -1.1342,-0.48174 -0.60574,1e-5 -1.08343,0.19311 -1.43302,0.5793 -0.34963,0.38621 -0.52442,0.91266 -0.52442,1.57936 l 0,3.85998 -1.1281,0 0,-9.48835 1.1281,0 0,3.71973 c 0.26832,-0.41059 0.58338,-0.71752 0.94518,-0.92079 0.36588,-0.20326 0.78664,-0.30489 1.26226,-0.30489 0.78457,0 1.37814,0.24392 1.78058,0.73175 0.40248,0.48377 0.60372,1.19722 0.60372,2.14036"
+ id="path3857"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 862.47202,121.28111 0,-1.10982 7.81754,2.83554 0,1.01225 -7.81754,2.83553 0,-1.10982 6.28085,-2.22574 -6.28085,-2.23794"
+ id="path3859"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 875.55205,118.32363 7.70166,0 0,1.03664 -3.23186,0 0,8.06754 -1.23788,0 0,-8.06754 -3.23192,0 0,-1.03664"
+ id="path3861"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 886.54049,121.64699 c -0.12603,-0.0732 -0.26423,-0.12602 -0.41464,-0.15855 -0.14638,-0.0366 -0.30896,-0.0549 -0.48784,-0.0549 -0.6342,1e-5 -1.12204,0.20734 -1.4635,0.62199 -0.33742,0.4106 -0.50615,1.00209 -0.50615,1.77449 l 0,3.59777 -1.1281,0 0,-6.82966 1.1281,0 0,1.06104 c 0.23581,-0.41466 0.54275,-0.72158 0.9208,-0.92079 0.37805,-0.20326 0.83747,-0.30489 1.37815,-0.30489 0.0772,0 0.16258,0.006 0.2561,0.0183 0.0935,0.008 0.19716,0.0224 0.31098,0.0427 l 0.006,1.15251"
+ id="path3863"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 890.84564,123.99469 c -0.90657,0 -1.53467,0.10367 -1.88425,0.31099 -0.34964,0.20733 -0.52443,0.56101 -0.52443,1.06104 0,0.3984 0.13007,0.71549 0.39027,0.95127 0.26423,0.23172 0.62199,0.34759 1.07323,0.34759 0.62199,0 1.11997,-0.21953 1.49399,-0.65858 0.37805,-0.44311 0.56712,-1.03054 0.56712,-1.7623 l 0,-0.25001 -1.11593,0 m 2.23792,-0.46345 0,3.89657 -1.12199,0 0,-1.03664 c -0.25615,0.41466 -0.57525,0.72159 -0.95739,0.92078 -0.38214,0.19514 -0.84963,0.2927 -1.40253,0.2927 -0.69922,0 -1.25615,-0.19513 -1.6708,-0.5854 -0.4106,-0.39433 -0.61588,-0.92078 -0.61588,-1.57936 0,-0.76833 0.2561,-1.34763 0.76832,-1.7379 0.5163,-0.39026 1.28462,-0.5854 2.305,-0.5854 l 1.57328,0 0,-0.10976 c 0,-0.51629 -0.17075,-0.91469 -0.51226,-1.1952 -0.33742,-0.28456 -0.81304,-0.42684 -1.4269,-0.42685 -0.39027,10e-6 -0.77034,0.0468 -1.14032,0.14025 -0.36992,0.0935 -0.72562,0.23376 -1.06712,0.42076 l 0,-1.03665 c 0.4106,-0.15854 0.809,-0.27643 1.19518,-0.35368 0.38622,-0.0813 0.76226,-0.12195 1.12814,-0.12195 0.98784,0 1.72571,0.25612 2.21355,0.76833 0.48783,0.51223 0.73172,1.2887 0.73172,2.3294"
+ id="path3865"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 900.31566,120.86036 0,1.04884 c -0.31708,-0.1748 -0.63618,-0.30489 -0.95734,-0.39027 -0.31708,-0.0894 -0.63825,-0.13414 -0.9635,-0.13415 -0.72769,10e-6 -1.29275,0.23172 -1.69518,0.69516 -0.40248,0.45938 -0.60372,1.10576 -0.60372,1.93914 0,0.83338 0.20124,1.48179 0.60372,1.94523 0.40243,0.45938 0.96749,0.68907 1.69518,0.68907 0.32525,0 0.64642,-0.0427 0.9635,-0.12806 0.32116,-0.0894 0.64026,-0.22155 0.95734,-0.39636 l 0,1.03664 c -0.31299,0.14635 -0.63824,0.25612 -0.97566,0.32929 -0.33334,0.0732 -0.68903,0.10976 -1.06713,0.10976 -1.02851,0 -1.84564,-0.32319 -2.45133,-0.96956 -0.60574,-0.64638 -0.90859,-1.51838 -0.90859,-2.61601 0,-1.11388 0.30487,-1.98995 0.91465,-2.6282 0.61386,-0.63825 1.45335,-0.95737 2.51846,-0.95737 0.34554,0 0.68296,0.0366 1.01226,0.10976 0.32929,0.0691 0.64839,0.17481 0.95734,0.31709"
+ id="path3867"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 908.12104,123.73248 0,0.54881 -5.15886,0 c 0.0488,0.7724 0.28048,1.36187 0.69518,1.7684 0.41873,0.40246 1.00004,0.60369 1.74398,0.60369 0.4309,0 0.84762,-0.0528 1.2501,-0.15855 0.40652,-0.1057 0.80895,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40248,0.17075 -0.81511,0.30083 -1.23788,0.39027 -0.42282,0.0894 -0.8517,0.13415 -1.28669,0.13415 -1.08948,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.6342,-0.63418 -0.95128,-1.49195 -0.95128,-2.57332 0,-1.11795 0.30082,-2.00418 0.90248,-2.65869 0.60574,-0.65857 1.42084,-0.98786 2.44527,-0.98786 0.91878,0 1.6444,0.29677 2.17695,0.89029 0.53664,0.58947 0.80492,1.39236 0.80496,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.5488 -1.32934,-0.54881 -0.62608,10e-6 -1.12814,0.17684 -1.5062,0.53052 -0.37401,0.35368 -0.58944,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+ id="path3869"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 915.21898,123.08 0,3.33556 1.97572,0 c 0.66267,0 1.15252,-0.13619 1.4696,-0.40856 0.32117,-0.27644 0.48173,-0.69719 0.48173,-1.26227 0,-0.56913 -0.16056,-0.98786 -0.48173,-1.25617 -0.31708,-0.27237 -0.80693,-0.40856 -1.4696,-0.40856 l -1.97572,0 m 0,-3.74412 0,2.74406 1.82328,0 c 0.60166,1e-5 1.04886,-0.11179 1.34156,-0.33538 0.29674,-0.22765 0.44513,-0.5732 0.44513,-1.03665 0,-0.45937 -0.14839,-0.80289 -0.44513,-1.03055 -0.2927,-0.22764 -0.7399,-0.34147 -1.34156,-0.34148 l -1.82328,0 m -1.23177,-1.01225 3.14651,0 c 0.93908,1e-5 1.66272,0.19514 2.1709,0.5854 0.50812,0.39027 0.76221,0.94518 0.76221,1.66473 0,0.55695 -0.13007,1.00006 -0.39027,1.32934 -0.26019,0.3293 -0.64233,0.53459 -1.14642,0.61589 0.60574,0.1301 1.07526,0.40247 1.40864,0.81712 0.33742,0.4106 0.5061,0.92486 0.5061,1.54278 0,0.81305 -0.27644,1.44114 -0.82929,1.88425 -0.55289,0.44312 -1.33953,0.66467 -2.35987,0.66467 l -3.26851,0 0,-9.10418"
+ id="path3871"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 922.49993,120.59815 1.122,0 0,6.82966 -1.122,0 0,-6.82966 m 0,-2.65869 1.122,0 0,1.42081 -1.122,0 0,-1.42081"
+ id="path3873"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 927.07335,118.65901 0,1.93914 2.31107,0 0,0.872 -2.31107,0 0,3.70753 c -4e-5,0.55695 0.0752,0.91469 0.22562,1.07324 0.15446,0.15855 0.46548,0.23782 0.93297,0.23782 l 1.15248,0 0,0.93907 -1.15248,0 c -0.86593,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.3293,-0.32522 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82319,0 0,-0.872 0.82319,0 0,-1.93914 1.12814,0"
+ id="path3875"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 936.18365,121.9092 c 0.28048,-0.50409 0.61588,-0.87606 1.00615,-1.11592 0.39027,-0.23984 0.84963,-0.35977 1.3781,-0.35977 0.71143,0 1.26024,0.25001 1.64647,0.75004 0.38618,0.49597 0.57929,1.20333 0.57929,2.12207 l 0,4.12219 -1.1281,0 0,-4.0856 c 0,-0.65451 -0.11589,-1.14031 -0.34761,-1.4574 -0.23173,-0.31709 -0.5854,-0.47563 -1.06102,-0.47564 -0.58136,1e-5 -1.04073,0.19311 -1.37815,0.5793 -0.33742,0.38621 -0.50611,0.91266 -0.50611,1.57936 l 0,3.85998 -1.1281,0 0,-4.0856 c 0,-0.65857 -0.11588,-1.14437 -0.34761,-1.4574 -0.23173,-0.31709 -0.58944,-0.47563 -1.07323,-0.47564 -0.57319,1e-5 -1.02852,0.19514 -1.36594,0.5854 -0.33742,0.38621 -0.5061,0.91063 -0.5061,1.57326 l 0,3.85998 -1.1281,0 0,-6.82966 1.1281,0 0,1.06104 c 0.2561,-0.41872 0.56304,-0.72768 0.9208,-0.92689 0.35771,-0.19919 0.78255,-0.29879 1.27442,-0.29879 0.49596,0 0.91672,0.12602 1.26231,0.37807 0.34959,0.25205 0.60771,0.61792 0.77443,1.09762"
+ id="path3877"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 946.14151,123.99469 c -0.90657,0 -1.53462,0.10367 -1.88426,0.31099 -0.34958,0.20733 -0.52442,0.56101 -0.52442,1.06104 0,0.3984 0.13012,0.71549 0.39026,0.95127 0.26424,0.23172 0.622,0.34759 1.07324,0.34759 0.62199,0 1.11997,-0.21953 1.49398,-0.65858 0.3781,-0.44311 0.56713,-1.03054 0.56713,-1.7623 l 0,-0.25001 -1.11593,0 m 2.23792,-0.46345 0,3.89657 -1.12199,0 0,-1.03664 c -0.25611,0.41466 -0.57525,0.72159 -0.95739,0.92078 -0.38214,0.19514 -0.84964,0.2927 -1.40253,0.2927 -0.69922,0 -1.25615,-0.19513 -1.6708,-0.5854 -0.41061,-0.39433 -0.61589,-0.92078 -0.61589,-1.57936 0,-0.76833 0.25611,-1.34763 0.76832,-1.7379 0.5163,-0.39026 1.28462,-0.5854 2.30501,-0.5854 l 1.57328,0 0,-0.10976 c 0,-0.51629 -0.17075,-0.91469 -0.51221,-1.1952 -0.33742,-0.28456 -0.81309,-0.42684 -1.42691,-0.42685 -0.39031,10e-6 -0.77039,0.0468 -1.14031,0.14025 -0.36998,0.0935 -0.72567,0.23376 -1.06718,0.42076 l 0,-1.03665 c 0.41061,-0.15854 0.809,-0.27643 1.19523,-0.35368 0.38618,-0.0813 0.76221,-0.12195 1.1281,-0.12195 0.98788,0 1.72571,0.25612 2.21355,0.76833 0.48783,0.51223 0.73172,1.2887 0.73172,2.3294"
+ id="path3879"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 951.7821,126.40336 0,3.62217 -1.1281,0 0,-9.42738 1.1281,0 0,1.03664 c 0.23577,-0.40652 0.53255,-0.70735 0.89031,-0.90249 0.3618,-0.19919 0.7927,-0.29879 1.29275,-0.29879 0.82929,0 1.50211,0.32929 2.01841,0.98786 0.52034,0.65858 0.78053,1.52448 0.78053,2.59771 0,1.07324 -0.26019,1.93914 -0.78053,2.59771 -0.5163,0.65858 -1.18912,0.98786 -2.01841,0.98786 -0.50005,0 -0.93095,-0.0976 -1.29275,-0.2927 -0.35776,-0.19919 -0.65454,-0.50206 -0.89031,-0.90859 m 3.81731,-2.38428 c 0,-0.82525 -0.17075,-1.47162 -0.51226,-1.93914 -0.33742,-0.47156 -0.80289,-0.70735 -1.39642,-0.70736 -0.59353,1e-5 -1.06102,0.2358 -1.40252,0.70736 -0.33742,0.46752 -0.50611,1.11389 -0.50611,1.93914 0,0.82525 0.16869,1.47366 0.50611,1.94523 0.3415,0.46751 0.80899,0.70127 1.40252,0.70127 0.59353,0 1.059,-0.23376 1.39642,-0.70127 0.34151,-0.47157 0.51226,-1.11998 0.51226,-1.94523"
+ id="path3881"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 959.03252,118.32363 1.28668,0 0,0.92688 -1.00009,1.94523 -0.78664,0 0.50005,-1.94523 0,-0.92688"
+ id="path3883"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 962.75832,125.87894 1.28669,0 0,1.54887 -1.28669,0 0,-1.54887"
+ id="path3885"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 587.53529,137.05643 7.70166,0 0,1.03664 -3.23192,0 0,8.06754 -1.23788,0 0,-8.06754 -3.23186,0 0,-1.03664"
+ id="path3887"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 600.11528,142.46528 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69513,1.76839 0.41874,0.40247 1.00005,0.6037 1.74404,0.6037 0.4309,0 0.84756,-0.0529 1.25004,-0.15855 0.40652,-0.10569 0.809,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39027 -0.42278,0.0894 -0.8517,0.13415 -1.28664,0.13415 -1.08954,0 -1.9534,-0.31709 -2.59165,-0.95127 -0.63416,-0.63418 -0.95124,-1.49196 -0.95124,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.6587 0.60569,-0.65856 1.4208,-0.98785 2.44527,-0.98786 0.91874,1e-5 1.6444,0.29678 2.17696,0.8903 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10372 -0.51832,-1.4696 -0.33333,-0.36587 -0.77645,-0.5488 -1.32934,-0.54881 -0.62603,1e-5 -1.1281,0.17684 -1.50615,0.53052 -0.37402,0.35368 -0.58949,0.85168 -0.64642,1.49399 l 4.00023,-0.006"
+ id="path3889"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 607.41446,139.33095 -2.46965,3.32336 2.59775,3.5063 -1.32328,0 -1.98793,-2.68308 -1.98792,2.68308 -1.32324,0 2.65262,-3.57338 -2.427,-3.25628 1.32328,0 1.81107,2.43306 1.81107,-2.43306 1.32323,0"
+ id="path3891"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 610.25,137.39181 0,1.93914 2.31111,0 0,0.872 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.1545,0.15855 0.46547,0.23782 0.93301,0.23782 l 1.15248,0 0,0.93908 -1.15248,0 c -0.86593,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.32929,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82323,0 0,-0.872 0.82323,0 0,-1.93914 1.1281,0"
+ id="path3893"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 614.32953,144.61174 1.28664,0 0,1.54887 -1.28664,0 0,-1.54887 m 0,-4.90882 1.28664,0 0,1.54887 -1.28664,0 0,-1.54887"
+ id="path3895"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 629.10479,137.75768 0,1.29886 c -0.41469,-0.38619 -0.85781,-0.67483 -1.32939,-0.8659 -0.46749,-0.19106 -0.96547,-0.2866 -1.49398,-0.28661 -1.04068,1e-5 -1.83752,0.31914 -2.39036,0.95738 -0.5529,0.63419 -0.82934,1.55294 -0.82934,2.75625 0,1.19927 0.27644,2.11802 0.82934,2.75626 0.55284,0.63419 1.34968,0.95128 2.39036,0.95128 0.52851,0 1.02649,-0.0955 1.49398,-0.28661 0.47158,-0.19106 0.9147,-0.47969 1.32939,-0.8659 l 0,1.28666 c -0.43095,0.2927 -0.88829,0.51223 -1.37204,0.65858 -0.47971,0.14635 -0.98788,0.21952 -1.52447,0.21952 -1.37815,0 -2.4636,-0.42076 -3.2563,-1.26227 -0.79274,-0.84557 -1.18912,-1.99808 -1.18912,-3.45752 0,-1.46349 0.39638,-2.61599 1.18912,-3.45751 0.7927,-0.84557 1.87815,-1.26836 3.2563,-1.26837 0.54472,10e-6 1.05693,0.0732 1.53664,0.21953 0.48379,0.14229 0.93705,0.35775 1.35987,0.64637"
+ id="path3897"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 633.61724,140.11758 c -0.60166,1e-5 -1.07732,0.23579 -1.42691,0.70736 -0.34963,0.46751 -0.52443,1.10982 -0.52443,1.92694 0,0.81712 0.17278,1.46147 0.51832,1.93304 0.34959,0.4675 0.82728,0.70126 1.43302,0.70126 0.59756,0 1.07116,-0.23579 1.4208,-0.70736 0.34963,-0.47157 0.52442,-1.11389 0.52442,-1.92694 0,-0.80899 -0.17479,-1.44927 -0.52442,-1.92085 -0.34964,-0.47563 -0.82324,-0.71344 -1.4208,-0.71345 m 0,-0.95128 c 0.97566,1e-5 1.74196,0.3171 2.2989,0.95128 0.55693,0.63419 0.8354,1.51228 0.8354,2.6343 0,1.11795 -0.27847,1.99605 -0.8354,2.6343 -0.55694,0.63418 -1.32324,0.95127 -2.2989,0.95127 -0.97976,0 -1.74808,-0.31709 -2.30501,-0.95127 -0.55289,-0.63825 -0.82934,-1.51635 -0.82934,-2.6343 0,-1.12202 0.27645,-2.00011 0.82934,-2.6343 0.55693,-0.63418 1.32525,-0.95127 2.30501,-0.95128"
+ id="path3899"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 644.28249,142.03842 0,4.12219 -1.12204,0 0,-4.0856 c 0,-0.64638 -0.12603,-1.13014 -0.37805,-1.4513 -0.25207,-0.32116 -0.63012,-0.48174 -1.13421,-0.48174 -0.60574,0 -1.08343,0.19311 -1.43301,0.5793 -0.34964,0.38621 -0.52443,0.91266 -0.52443,1.57936 l 0,3.85998 -1.1281,0 0,-6.82966 1.1281,0 0,1.06103 c 0.26832,-0.41058 0.58338,-0.71751 0.94518,-0.92078 0.36589,-0.20326 0.78664,-0.30489 1.26226,-0.3049 0.78462,1e-5 1.37814,0.24392 1.78058,0.73175 0.40248,0.48378 0.60372,1.19723 0.60372,2.14037"
+ id="path3901"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 645.72767,139.33095 1.18912,0 2.13425,5.73204 2.1343,-5.73204 1.18907,0 -2.56111,6.82966 -1.52447,0 -2.56116,-6.82966"
+ id="path3903"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 659.7651,142.46528 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69513,1.76839 0.41874,0.40247 1.00005,0.6037 1.74404,0.6037 0.4309,0 0.84756,-0.0529 1.25004,-0.15855 0.40652,-0.10569 0.809,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39027 -0.42278,0.0894 -0.8517,0.13415 -1.28664,0.13415 -1.08954,0 -1.9534,-0.31709 -2.59165,-0.95127 -0.63416,-0.63418 -0.95124,-1.49196 -0.95124,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.6587 0.60569,-0.65856 1.4208,-0.98785 2.44527,-0.98786 0.91874,1e-5 1.6444,0.29678 2.17696,0.8903 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10372 -0.51832,-1.4696 -0.33333,-0.36587 -0.77645,-0.5488 -1.32934,-0.54881 -0.62603,1e-5 -1.1281,0.17684 -1.50615,0.53052 -0.37402,0.35368 -0.58949,0.85168 -0.64642,1.49399 l 4.00023,-0.006"
+ id="path3905"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 665.56423,140.37979 c -0.12603,-0.0732 -0.26428,-0.12602 -0.41469,-0.15855 -0.14633,-0.0366 -0.30895,-0.0549 -0.48783,-0.0549 -0.63416,1e-5 -1.122,0.20734 -1.4635,0.62199 -0.33742,0.4106 -0.50611,1.00209 -0.50611,1.77449 l 0,3.59777 -1.1281,0 0,-6.82966 1.1281,0 0,1.06103 c 0.23577,-0.41465 0.5427,-0.72158 0.9208,-0.92078 0.37805,-0.20326 0.83742,-0.30489 1.3781,-0.3049 0.0772,1e-5 0.16263,0.006 0.25611,0.0183 0.0935,0.008 0.1972,0.0224 0.31102,0.0427 l 0.006,1.1525"
+ id="path3907"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 667.86313,137.39181 0,1.93914 2.31112,0 0,0.872 -2.31112,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.15446,0.15855 0.46548,0.23782 0.93297,0.23782 l 1.15253,0 0,0.93908 -1.15253,0 c -0.86589,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.3293,-0.32523 -0.49394,-0.91469 -0.4939,-1.7684 l 0,-3.70753 -0.82323,0 0,-0.872 0.82323,0 0,-1.93914 1.1281,0"
+ id="path3909"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 676.7417,137.39181 0,1.93914 2.31111,0 0,0.872 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.1545,0.15855 0.46547,0.23782 0.93296,0.23782 l 1.15253,0 0,0.93908 -1.15253,0 c -0.86588,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.32925,-0.32523 -0.49389,-0.91469 -0.49389,-1.7684 l 0,-3.70753 -0.82324,0 0,-0.872 0.82324,0 0,-1.93914 1.1281,0"
+ id="path3911"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 683.1811,140.11758 c -0.60166,1e-5 -1.07732,0.23579 -1.42691,0.70736 -0.34963,0.46751 -0.52443,1.10982 -0.52443,1.92694 0,0.81712 0.17278,1.46147 0.51832,1.93304 0.34959,0.4675 0.82728,0.70126 1.43302,0.70126 0.59756,0 1.07116,-0.23579 1.4208,-0.70736 0.34963,-0.47157 0.52442,-1.11389 0.52442,-1.92694 0,-0.80899 -0.17479,-1.44927 -0.52442,-1.92085 -0.34964,-0.47563 -0.82324,-0.71344 -1.4208,-0.71345 m 0,-0.95128 c 0.97566,1e-5 1.74196,0.3171 2.2989,0.95128 0.55693,0.63419 0.8354,1.51228 0.8354,2.6343 0,1.11795 -0.27847,1.99605 -0.8354,2.6343 -0.55694,0.63418 -1.32324,0.95127 -2.2989,0.95127 -0.97976,0 -1.74808,-0.31709 -2.30501,-0.95127 -0.55289,-0.63825 -0.82934,-1.51635 -0.82934,-2.6343 0,-1.12202 0.27645,-2.00011 0.82934,-2.6343 0.55693,-0.63418 1.32525,-0.95127 2.30501,-0.95128"
+ id="path3913"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 691.3401,139.33095 1.18908,0 2.1343,5.73204 2.13425,-5.73204 1.18912,0 -2.56116,6.82966 -1.52447,0 -2.56112,-6.82966"
+ id="path3915"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 705.37749,142.46528 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69518,1.76839 0.41869,0.40247 1.00004,0.6037 1.74398,0.6037 0.4309,0 0.84762,-0.0529 1.2501,-0.15855 0.40652,-0.10569 0.80895,-0.26424 1.20734,-0.47564 l 0,1.06104 c -0.40243,0.17074 -0.81506,0.30083 -1.23783,0.39027 -0.42282,0.0894 -0.8517,0.13415 -1.28669,0.13415 -1.08948,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.6342,-0.63418 -0.95128,-1.49196 -0.95128,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.6587 0.60574,-0.65856 1.42084,-0.98785 2.44527,-0.98786 0.91873,1e-5 1.6444,0.29678 2.17695,0.8903 0.53664,0.58947 0.80492,1.39236 0.80492,2.40868 m -1.122,-0.32929 c -0.008,-0.61385 -0.1809,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.5488 -1.32934,-0.54881 -0.62608,1e-5 -1.12814,0.17684 -1.5062,0.53052 -0.37401,0.35368 -0.58948,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+ id="path3917"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 712.13401,139.59316 0,1.04884 c -0.31712,-0.1748 -0.63622,-0.30489 -0.95739,-0.39027 -0.31708,-0.0894 -0.63825,-0.13414 -0.96345,-0.13415 -0.72769,1e-5 -1.2928,0.23172 -1.69523,0.69516 -0.40248,0.45938 -0.60372,1.10576 -0.60372,1.93914 0,0.83338 0.20124,1.48179 0.60372,1.94523 0.40243,0.45938 0.96754,0.68907 1.69523,0.68907 0.3252,0 0.64637,-0.0427 0.96345,-0.12806 0.32117,-0.0894 0.64027,-0.22155 0.95739,-0.39636 l 0,1.03664 c -0.31304,0.14635 -0.63824,0.25611 -0.97566,0.32929 -0.33338,0.0732 -0.68908,0.10976 -1.06718,0.10976 -1.02851,0 -1.84559,-0.32319 -2.45133,-0.96957 -0.60574,-0.64637 -0.90859,-1.51838 -0.90859,-2.616 0,-1.11388 0.30487,-1.98995 0.9147,-2.6282 0.61382,-0.63824 1.4533,-0.95737 2.51841,-0.95738 0.34555,1e-5 0.68297,0.0366 1.01226,0.10976 0.32929,0.0691 0.64839,0.17482 0.95739,0.3171"
+ id="path3919"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 715.20734,137.39181 0,1.93914 2.31111,0 0,0.872 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.1545,0.15855 0.46547,0.23782 0.93301,0.23782 l 1.15248,0 0,0.93908 -1.15248,0 c -0.86593,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.32929,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82323,0 0,-0.872 0.82323,0 0,-1.93914 1.1281,0"
+ id="path3921"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 721.64674,140.11758 c -0.60165,1e-5 -1.07732,0.23579 -1.42691,0.70736 -0.34963,0.46751 -0.52442,1.10982 -0.52442,1.92694 0,0.81712 0.17277,1.46147 0.51832,1.93304 0.34963,0.4675 0.82727,0.70126 1.43301,0.70126 0.59761,0 1.07121,-0.23579 1.4208,-0.70736 0.34963,-0.47157 0.52443,-1.11389 0.52443,-1.92694 0,-0.80899 -0.1748,-1.44927 -0.52443,-1.92085 -0.34959,-0.47563 -0.82319,-0.71344 -1.4208,-0.71345 m 0,-0.95128 c 0.97567,1e-5 1.74197,0.3171 2.2989,0.95128 0.55693,0.63419 0.83545,1.51228 0.83545,2.6343 0,1.11795 -0.27852,1.99605 -0.83545,2.6343 -0.55693,0.63418 -1.32323,0.95127 -2.2989,0.95127 -0.97975,0 -1.74807,-0.31709 -2.30501,-0.95127 -0.55289,-0.63825 -0.82934,-1.51635 -0.82934,-2.6343 0,-1.12202 0.27645,-2.00011 0.82934,-2.6343 0.55694,-0.63418 1.32526,-0.95127 2.30501,-0.95128"
+ id="path3923"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 730.59238,140.37979 c -0.12603,-0.0732 -0.26423,-0.12602 -0.41464,-0.15855 -0.14638,-0.0366 -0.30896,-0.0549 -0.48784,-0.0549 -0.6342,1e-5 -1.12203,0.20734 -1.4635,0.62199 -0.33742,0.4106 -0.50615,1.00209 -0.50615,1.77449 l 0,3.59777 -1.1281,0 0,-6.82966 1.1281,0 0,1.06103 c 0.23581,-0.41465 0.54275,-0.72158 0.9208,-0.92078 0.37806,-0.20326 0.83747,-0.30489 1.37815,-0.3049 0.0772,1e-5 0.16258,0.006 0.2561,0.0183 0.0935,0.008 0.19716,0.0224 0.31098,0.0427 l 0.006,1.1525"
+ id="path3925"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 735.64147,143.46533 0,-4.13438 1.12199,0 0,4.0917 c 0,0.64638 0.12604,1.13218 0.3781,1.4574 0.25202,0.32116 0.63012,0.48174 1.13421,0.48174 0.60569,0 1.08338,-0.1931 1.43301,-0.57931 0.35368,-0.3862 0.53049,-0.91265 0.53049,-1.57936 l 0,-3.87217 1.12204,0 0,6.82966 -1.12204,0 0,-1.04884 c -0.27236,0.41466 -0.58944,0.72362 -0.95124,0.92689 -0.35776,0.19919 -0.77447,0.29879 -1.25009,0.29879 -0.78458,0 -1.38017,-0.24391 -1.78669,-0.73175 -0.40652,-0.48783 -0.60978,-1.20128 -0.60978,-2.14037"
+ id="path3927"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 748.03854,139.53218 0,1.06103 c -0.31712,-0.1626 -0.64642,-0.28456 -0.98788,-0.36587 -0.3415,-0.0813 -0.69518,-0.12195 -1.06102,-0.12196 -0.55698,1e-5 -0.97566,0.0854 -1.2562,0.25611 -0.27644,0.17075 -0.41464,0.42686 -0.41464,0.76834 0,0.26019 0.0996,0.46548 0.2988,0.61589 0.19918,0.14636 0.59964,0.28661 1.20129,0.42076 l 0.38416,0.0854 c 0.79679,0.17075 1.36185,0.41263 1.69523,0.72565 0.33742,0.30896 0.5061,0.74192 0.5061,1.29886 0,0.63418 -0.25202,1.13624 -0.7561,1.50618 -0.50005,0.36994 -1.18912,0.55491 -2.06722,0.55491 -0.36589,0 -0.74798,-0.0366 -1.14642,-0.10976 -0.39431,-0.0691 -0.81102,-0.17481 -1.25005,-0.31709 l 0,-1.15861 c 0.41465,0.21547 0.82323,0.37807 1.22567,0.48784 0.40248,0.10569 0.80087,0.15854 1.19518,0.15854 0.52851,0 0.93503,-0.0894 1.2196,-0.26831 0.28458,-0.18293 0.42686,-0.43904 0.42686,-0.76833 0,-0.30489 -0.10367,-0.53865 -0.31102,-0.70126 -0.20326,-0.16261 -0.65248,-0.31913 -1.34761,-0.46954 l -0.39027,-0.0915 c -0.69518,-0.14635 -1.19724,-0.36994 -1.5062,-0.67077 -0.30895,-0.3049 -0.46345,-0.72159 -0.46345,-1.25008 0,-0.6423 0.22769,-1.13827 0.68297,-1.48788 0.45532,-0.34961 1.1017,-0.52442 1.93916,-0.52443 0.41465,1e-5 0.80492,0.0305 1.1708,0.0915 0.36584,0.061 0.70326,0.15245 1.01226,0.27441"
+ id="path3929"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 750.19718,139.33095 1.12204,0 0,6.82966 -1.12204,0 0,-6.82966 m 0,-2.65869 1.12204,0 0,1.42081 -1.12204,0 0,-1.42081"
+ id="path3931"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 759.33795,142.03842 0,4.12219 -1.12199,0 0,-4.0856 c 0,-0.64638 -0.12603,-1.13014 -0.3781,-1.4513 -0.25202,-0.32116 -0.63012,-0.48174 -1.13421,-0.48174 -0.60573,0 -1.08338,0.19311 -1.43301,0.5793 -0.34959,0.38621 -0.52442,0.91266 -0.52442,1.57936 l 0,3.85998 -1.1281,0 0,-6.82966 1.1281,0 0,1.06103 c 0.26832,-0.41058 0.58338,-0.71751 0.94518,-0.92078 0.36588,-0.20326 0.78663,-0.30489 1.26226,-0.3049 0.78461,1e-5 1.37814,0.24392 1.78062,0.73175 0.40243,0.48378 0.60367,1.19723 0.60367,2.14037"
+ id="path3933"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 766.08227,142.66651 c 0,-0.81306 -0.16874,-1.44317 -0.50616,-1.89036 -0.33333,-0.44717 -0.80289,-0.67076 -1.40858,-0.67077 -0.6017,1e-5 -1.07122,0.2236 -1.40864,0.67077 -0.33333,0.44719 -0.50004,1.0773 -0.50004,1.89036 0,0.80899 0.16671,1.43707 0.50004,1.88425 0.33742,0.44718 0.80694,0.67077 1.40864,0.67077 0.60569,0 1.07525,-0.22359 1.40858,-0.67077 0.33742,-0.44718 0.50616,-1.07526 0.50616,-1.88425 m 1.12199,2.64649 c 0,1.16267 -0.25813,2.02654 -0.77443,2.59162 -0.5163,0.56913 -1.30698,0.8537 -2.37208,0.85371 -0.39436,-1e-5 -0.7663,-0.0305 -1.11594,-0.0915 -0.34958,-0.0569 -0.68902,-0.14636 -1.01832,-0.26831 l 0,-1.09153 c 0.3293,0.17887 0.6545,0.31099 0.97567,0.39637 0.32112,0.0854 0.64839,0.12805 0.98173,0.12805 0.73581,0 1.28668,-0.1931 1.65257,-0.5793 0.36584,-0.38214 0.54881,-0.96144 0.54881,-1.73791 l 0,-0.55491 c -0.23173,0.40247 -0.52852,0.7033 -0.89032,0.90249 -0.3618,0.19921 -0.79476,0.2988 -1.29885,0.2988 -0.83747,0 -1.51226,-0.31912 -2.02452,-0.95737 -0.51221,-0.63825 -0.76832,-1.48382 -0.76832,-2.53673 0,-1.05697 0.25611,-1.90458 0.76832,-2.54283 0.51226,-0.63824 1.18705,-0.95737 2.02452,-0.95738 0.50409,1e-5 0.93705,0.0996 1.29885,0.2988 0.3618,0.19921 0.65859,0.50004 0.89032,0.90249 l 0,-1.03664 1.12199,0 0,5.98205"
+ id="path3935"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 774.66203,140.0566 -1.28664,0 0,-1.05494 1.00004,-1.94523 0.78664,0 -0.50004,1.94523 0,1.05494"
+ id="path3937"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 778.74761,138.06868 0,3.42093 1.5489,0 c 0.57319,1e-5 1.0163,-0.14838 1.32934,-0.44515 0.31304,-0.29676 0.46952,-0.71955 0.46952,-1.26837 0,-0.54474 -0.15648,-0.96549 -0.46952,-1.26226 -0.31304,-0.29676 -0.75615,-0.44514 -1.32934,-0.44515 l -1.5489,0 m -1.23177,-1.01225 2.78067,0 c 1.02039,0 1.79073,0.23172 2.31111,0.69516 0.52439,0.45938 0.7866,1.13422 0.78664,2.0245 -4e-5,0.89844 -0.26225,1.57734 -0.78664,2.03671 -0.52038,0.45938 -1.29072,0.68907 -2.31111,0.68906 l -1.5489,0 0,3.65875 -1.23177,0 0,-9.10418"
+ id="path3939"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 787.5591,142.72749 c -0.90652,0 -1.53462,0.10366 -1.88426,0.31099 -0.34958,0.20733 -0.52442,0.56101 -0.52442,1.06104 0,0.39839 0.13012,0.71549 0.39027,0.95127 0.26427,0.23173 0.62199,0.34758 1.07323,0.34758 0.62199,0 1.12002,-0.21952 1.49403,-0.65857 0.37805,-0.44312 0.56708,-1.03055 0.56708,-1.7623 l 0,-0.25001 -1.11593,0 m 2.23797,-0.46345 0,3.89657 -1.12204,0 0,-1.03664 c -0.25611,0.41466 -0.57525,0.72159 -0.95735,0.92078 -0.38214,0.19514 -0.84968,0.2927 -1.40252,0.2927 -0.69927,0 -1.2562,-0.19513 -1.67085,-0.5854 -0.4106,-0.39433 -0.61589,-0.92078 -0.61589,-1.57936 0,-0.76833 0.25611,-1.34763 0.76833,-1.7379 0.51629,-0.39027 1.28462,-0.5854 2.305,-0.5854 l 1.57328,0 0,-0.10976 c 0,-0.51629 -0.17075,-0.91469 -0.51221,-1.1952 -0.33742,-0.28456 -0.81309,-0.42684 -1.42691,-0.42685 -0.39027,1e-5 -0.77039,0.0468 -1.14031,0.14025 -0.36997,0.0935 -0.72567,0.23376 -1.06713,0.42076 l 0,-1.03665 c 0.41056,-0.15854 0.80896,-0.27643 1.19518,-0.35368 0.38618,-0.0813 0.76221,-0.12195 1.1281,-0.12196 0.98788,1e-5 1.72571,0.25612 2.21355,0.76834 0.48783,0.51223 0.73172,1.2887 0.73177,2.3294"
+ id="path3941"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 793.23628,137.39181 0,1.93914 2.31112,0 0,0.872 -2.31112,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.1545,0.15855 0.46548,0.23782 0.93297,0.23782 l 1.15253,0 0,0.93908 -1.15253,0 c -0.86589,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.32925,-0.32523 -0.4939,-0.91469 -0.4939,-1.7684 l 0,-3.70753 -0.82323,0 0,-0.872 0.82323,0 0,-1.93914 1.1281,0"
+ id="path3943"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 802.70636,142.03842 0,4.12219 -1.12204,0 0,-4.0856 c 0,-0.64638 -0.12604,-1.13014 -0.37806,-1.4513 -0.25206,-0.32116 -0.63012,-0.48174 -1.1342,-0.48174 -0.60574,0 -1.08343,0.19311 -1.43302,0.5793 -0.34963,0.38621 -0.52442,0.91266 -0.52442,1.57936 l 0,3.85998 -1.1281,0 0,-9.48835 1.1281,0 0,3.71972 c 0.26832,-0.41058 0.58338,-0.71751 0.94518,-0.92078 0.36588,-0.20326 0.78664,-0.30489 1.26226,-0.3049 0.78462,1e-5 1.37814,0.24392 1.78058,0.73175 0.40248,0.48378 0.60372,1.19723 0.60372,2.14037"
+ id="path3945"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 809.07868,140.01391 0,-1.10982 7.81749,2.83554 0,1.01225 -7.81749,2.83553 0,-1.10982 6.28085,-2.22574 -6.28085,-2.23794"
+ id="path3947"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 827.11629,137.89184 c -0.89435,1e-5 -1.60578,0.33336 -2.13425,1.00006 -0.52443,0.66671 -0.78664,1.5753 -0.78664,2.72576 0,1.14641 0.26221,2.05297 0.78664,2.71968 0.52847,0.6667 1.2399,1.00006 2.13425,1.00005 0.89436,1e-5 1.60175,-0.33335 2.12209,-1.00005 0.52443,-0.66671 0.78664,-1.57327 0.78664,-2.71968 0,-1.15046 -0.26221,-2.05905 -0.78664,-2.72576 -0.52034,-0.6667 -1.22773,-1.00005 -2.12209,-1.00006 m 0,-1.00006 c 1.2765,10e-6 2.29688,0.4289 3.06116,1.28666 0.76428,0.85372 1.14642,2.00012 1.14642,3.43922 0,1.43505 -0.38214,2.58146 -1.14642,3.43923 -0.76428,0.85371 -1.78466,1.28056 -3.06116,1.28056 -1.28053,0 -2.305,-0.42685 -3.07332,-1.28056 -0.76428,-0.8537 -1.14642,-2.00012 -1.14642,-3.43923 0,-1.4391 0.38214,-2.5855 1.14642,-3.43922 0.76832,-0.85776 1.79279,-1.28665 3.07332,-1.28666"
+ id="path3949"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 838.10473,142.75188 c 0,-0.82525 -0.17075,-1.47163 -0.51221,-1.93914 -0.33742,-0.47156 -0.80289,-0.70735 -1.39642,-0.70736 -0.59353,1e-5 -1.06102,0.2358 -1.40253,0.70736 -0.33742,0.46751 -0.5061,1.11389 -0.5061,1.93914 0,0.82525 0.16868,1.47366 0.5061,1.94523 0.34151,0.46751 0.809,0.70126 1.40253,0.70126 0.59353,0 1.059,-0.23375 1.39642,-0.70126 0.34146,-0.47157 0.51221,-1.11998 0.51221,-1.94523 m -3.81726,-2.38429 c 0.23576,-0.40652 0.53255,-0.70735 0.89026,-0.90249 0.3618,-0.19919 0.79275,-0.29879 1.29279,-0.2988 0.8293,1e-5 1.50212,0.3293 2.01837,0.98786 0.52039,0.65859 0.78054,1.52449 0.78054,2.59772 0,1.07323 -0.26015,1.93914 -0.78054,2.59771 -0.51625,0.65857 -1.18907,0.98786 -2.01837,0.98786 -0.50004,0 -0.93099,-0.0976 -1.29279,-0.2927 -0.35771,-0.19919 -0.6545,-0.50206 -0.89026,-0.90859 l 0,1.02445 -1.12815,0 0,-9.48835 1.12815,0 0,3.69533"
+ id="path3951"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 841.1293,139.33095 1.12204,0 0,6.95162 c 0,0.86997 -0.16667,1.50009 -0.50005,1.89036 -0.32929,0.39026 -0.86185,0.58539 -1.59766,0.5854 l -0.42686,0 0,-0.95128 0.29881,0 c 0.42686,0 0.71754,-0.0996 0.87199,-0.2988 0.1545,-0.19513 0.23173,-0.60369 0.23173,-1.22568 l 0,-6.95162 m 0,-2.65869 1.12204,0 0,1.42081 -1.12204,0 0,-1.42081"
+ id="path3953"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 850.43472,142.46528 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69518,1.76839 0.41869,0.40247 1.00005,0.6037 1.74399,0.6037 0.4309,0 0.84761,-0.0529 1.25005,-0.15855 0.40656,-0.10569 0.809,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40243,0.17074 -0.81506,0.30083 -1.23788,0.39027 -0.42277,0.0894 -0.85165,0.13415 -1.28664,0.13415 -1.08949,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.63421,-0.63418 -0.95129,-1.49196 -0.95129,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.6587 0.60574,-0.65856 1.4208,-0.98785 2.44528,-0.98786 0.91873,1e-5 1.6444,0.29678 2.17695,0.8903 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61385 -0.1809,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.5488 -1.32934,-0.54881 -0.62608,1e-5 -1.12815,0.17684 -1.5062,0.53052 -0.37401,0.35368 -0.58949,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+ id="path3955"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 857.19125,139.59316 0,1.04884 c -0.31713,-0.1748 -0.63623,-0.30489 -0.95739,-0.39027 -0.31708,-0.0894 -0.63825,-0.13414 -0.96346,-0.13415 -0.72768,1e-5 -1.29279,0.23172 -1.69522,0.69516 -0.40248,0.45938 -0.60372,1.10576 -0.60372,1.93914 0,0.83338 0.20124,1.48179 0.60372,1.94523 0.40243,0.45938 0.96754,0.68907 1.69522,0.68907 0.32521,0 0.64638,-0.0427 0.96346,-0.12806 0.32116,-0.0894 0.64026,-0.22155 0.95739,-0.39636 l 0,1.03664 c -0.31304,0.14635 -0.63829,0.25611 -0.97567,0.32929 -0.33338,0.0732 -0.68907,0.10976 -1.06717,0.10976 -1.02851,0 -1.84564,-0.32319 -2.45133,-0.96957 -0.60574,-0.64637 -0.90859,-1.51838 -0.90859,-2.616 0,-1.11388 0.30487,-1.98995 0.91469,-2.6282 0.61382,-0.63824 1.45331,-0.95737 2.51842,-0.95738 0.34554,1e-5 0.68296,0.0366 1.01226,0.10976 0.32929,0.0691 0.64839,0.17482 0.95739,0.3171"
+ id="path3957"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 860.26458,137.39181 0,1.93914 2.31111,0 0,0.872 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.1545,0.15855 0.46547,0.23782 0.93301,0.23782 l 1.15248,0 0,0.93908 -1.15248,0 c -0.86593,0 -1.46355,-0.16058 -1.79279,-0.48173 -0.3293,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82324,0 0,-0.872 0.82324,0 0,-1.93914 1.1281,0"
+ id="path3959"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 869.14314,137.39181 0,1.93914 2.31111,0 0,0.872 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.15446,0.15855 0.46547,0.23782 0.93297,0.23782 l 1.15252,0 0,0.93908 -1.15252,0 c -0.86589,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.3293,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82319,0 0,-0.872 0.82319,0 0,-1.93914 1.12814,0"
+ id="path3961"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 875.58254,140.11758 c -0.60165,1e-5 -1.07727,0.23579 -1.42691,0.70736 -0.34963,0.46751 -0.52442,1.10982 -0.52442,1.92694 0,0.81712 0.17277,1.46147 0.51832,1.93304 0.34963,0.4675 0.82727,0.70126 1.43301,0.70126 0.59761,0 1.07121,-0.23579 1.4208,-0.70736 0.34963,-0.47157 0.52443,-1.11389 0.52443,-1.92694 0,-0.80899 -0.1748,-1.44927 -0.52443,-1.92085 -0.34959,-0.47563 -0.82319,-0.71344 -1.4208,-0.71345 m 0,-0.95128 c 0.97567,1e-5 1.74197,0.3171 2.2989,0.95128 0.55698,0.63419 0.83545,1.51228 0.83545,2.6343 0,1.11795 -0.27847,1.99605 -0.83545,2.6343 -0.55693,0.63418 -1.32323,0.95127 -2.2989,0.95127 -0.97971,0 -1.74807,-0.31709 -2.30501,-0.95127 -0.55289,-0.63825 -0.82929,-1.51635 -0.82929,-2.6343 0,-1.12202 0.2764,-2.00011 0.82929,-2.6343 0.55694,-0.63418 1.3253,-0.95127 2.30501,-0.95128"
+ id="path3963"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 885.82704,138.06868 0,3.42093 1.54885,0 c 0.57324,1e-5 1.01635,-0.14838 1.32934,-0.44515 0.31304,-0.29676 0.46956,-0.71955 0.46956,-1.26837 0,-0.54474 -0.15652,-0.96549 -0.46956,-1.26226 -0.31299,-0.29676 -0.7561,-0.44514 -1.32934,-0.44515 l -1.54885,0 m -1.23177,-1.01225 2.78062,0 c 1.02039,0 1.79078,0.23172 2.31112,0.69516 0.52442,0.45938 0.78664,1.13422 0.78664,2.0245 0,0.89844 -0.26222,1.57734 -0.78664,2.03671 -0.52034,0.45938 -1.29073,0.68907 -2.31112,0.68906 l -1.54885,0 0,3.65875 -1.23177,0 0,-9.10418"
+ id="path3965"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 894.63852,142.72749 c -0.90656,0 -1.53462,0.10366 -1.88425,0.31099 -0.34959,0.20733 -0.52442,0.56101 -0.52442,1.06104 0,0.39839 0.13011,0.71549 0.39026,0.95127 0.26424,0.23173 0.622,0.34758 1.07324,0.34758 0.62199,0 1.11997,-0.21952 1.49398,-0.65857 0.3781,-0.44312 0.56713,-1.03055 0.56713,-1.7623 l 0,-0.25001 -1.11594,0 m 2.23793,-0.46345 0,3.89657 -1.12199,0 0,-1.03664 c -0.25611,0.41466 -0.57526,0.72159 -0.95739,0.92078 -0.38214,0.19514 -0.84964,0.2927 -1.40253,0.2927 -0.69922,0 -1.25615,-0.19513 -1.6708,-0.5854 -0.41061,-0.39433 -0.61589,-0.92078 -0.61589,-1.57936 0,-0.76833 0.25611,-1.34763 0.76832,-1.7379 0.5163,-0.39027 1.28462,-0.5854 2.30501,-0.5854 l 1.57328,0 0,-0.10976 c 0,-0.51629 -0.17076,-0.91469 -0.51222,-1.1952 -0.33742,-0.28456 -0.81308,-0.42684 -1.4269,-0.42685 -0.39031,1e-5 -0.77039,0.0468 -1.14032,0.14025 -0.36997,0.0935 -0.72566,0.23376 -1.06717,0.42076 l 0,-1.03665 c 0.41061,-0.15854 0.809,-0.27643 1.19523,-0.35368 0.38618,-0.0813 0.76221,-0.12195 1.1281,-0.12196 0.98788,1e-5 1.72571,0.25612 2.21354,0.76834 0.48784,0.51223 0.73173,1.2887 0.73173,2.3294"
+ id="path3967"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 900.31571,137.39181 0,1.93914 2.31111,0 0,0.872 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.15445,0.15855 0.46547,0.23782 0.93297,0.23782 l 1.15252,0 0,0.93908 -1.15252,0 c -0.86589,0 -1.4635,-0.16058 -1.7928,-0.48173 -0.32929,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82318,0 0,-0.872 0.82318,0 0,-1.93914 1.12815,0"
+ id="path3969"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 909.78574,142.03842 0,4.12219 -1.122,0 0,-4.0856 c 0,-0.64638 -0.12603,-1.13014 -0.3781,-1.4513 -0.25202,-0.32116 -0.63012,-0.48174 -1.1342,-0.48174 -0.6057,0 -1.08338,0.19311 -1.43302,0.5793 -0.34958,0.38621 -0.52442,0.91266 -0.52438,1.57936 l 0,3.85998 -1.12814,0 0,-9.48835 1.12814,0 0,3.71972 c 0.26828,-0.41058 0.58334,-0.71751 0.94514,-0.92078 0.36588,-0.20326 0.78664,-0.30489 1.2623,-0.3049 0.78458,1e-5 1.3781,0.24392 1.78058,0.73175 0.40244,0.48378 0.60368,1.19723 0.60368,2.14037"
+ id="path3971"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 912.44446,137.05643 1.28664,0 0,0.92688 -1.00004,1.94523 -0.78664,0 0.50004,-1.94523 0,-0.92688"
+ id="path3973"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 916.17027,144.61174 1.28664,0 0,1.54887 -1.28664,0 0,-1.54887"
+ id="path3975"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 590.02932,156.80148 0,7.07968 1.48788,0 c 1.2562,0 2.17493,-0.28457 2.75629,-0.85371 0.58536,-0.56914 0.87806,-1.46756 0.8781,-2.69528 -4e-5,-1.21958 -0.29274,-2.11191 -0.8781,-2.67699 -0.58136,-0.56913 -1.50009,-0.8537 -2.75629,-0.8537 l -1.48788,0 m -1.23177,-1.01226 2.53062,0 c 1.76433,1e-5 3.05914,0.36792 3.8844,1.10372 0.8252,0.73176 1.23783,1.87817 1.23788,3.43923 -5e-5,1.5692 -0.4147,2.72171 -1.24399,3.45752 -0.82934,0.73581 -2.12209,1.10372 -3.87829,1.10372 l -2.53062,0 0,-9.10419"
+ id="path3977"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 601.00559,158.85038 c -0.6017,0 -1.07732,0.23579 -1.42695,0.70735 -0.34959,0.46752 -0.52438,1.10983 -0.52438,1.92695 0,0.81712 0.17277,1.46146 0.51832,1.93303 0.34959,0.46751 0.82727,0.70127 1.43301,0.70127 0.59757,0 1.07117,-0.23579 1.4208,-0.70736 0.34959,-0.47157 0.52443,-1.11389 0.52443,-1.92694 0,-0.80899 -0.17484,-1.44927 -0.52443,-1.92085 -0.34963,-0.47563 -0.82323,-0.71345 -1.4208,-0.71345 m 0,-0.95128 c 0.97562,1e-5 1.74197,0.3171 2.2989,0.95128 0.55694,0.63419 0.8354,1.51229 0.8354,2.6343 0,1.11795 -0.27846,1.99605 -0.8354,2.6343 -0.55693,0.63418 -1.32328,0.95127 -2.2989,0.95127 -0.97975,0 -1.74807,-0.31709 -2.30505,-0.95127 -0.55285,-0.63825 -0.82929,-1.51635 -0.82929,-2.6343 0,-1.12201 0.27644,-2.00011 0.82929,-2.6343 0.55698,-0.63418 1.3253,-0.95127 2.30505,-0.95128"
+ id="path3979"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 605.87782,162.19813 0,-4.13439 1.12199,0 0,4.09171 c 0,0.64638 0.12604,1.13218 0.3781,1.4574 0.25202,0.32116 0.63012,0.48173 1.13421,0.48173 0.60569,0 1.08338,-0.1931 1.43301,-0.5793 0.35368,-0.3862 0.53049,-0.91265 0.53049,-1.57936 l 0,-3.87218 1.12204,0 0,6.82967 -1.12204,0 0,-1.04884 c -0.27236,0.41466 -0.58944,0.72362 -0.95124,0.92688 -0.35776,0.1992 -0.77447,0.2988 -1.25009,0.2988 -0.78462,0 -1.38017,-0.24392 -1.78669,-0.73175 -0.40652,-0.48783 -0.60978,-1.20129 -0.60978,-2.14037"
+ id="path3981"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 618.8237,161.48468 c 0,-0.82525 -0.17076,-1.47163 -0.51226,-1.93914 -0.33742,-0.47157 -0.80289,-0.70735 -1.39642,-0.70736 -0.59353,1e-5 -1.06102,0.23579 -1.40248,0.70736 -0.33742,0.46751 -0.50615,1.11389 -0.50615,1.93914 0,0.82525 0.16873,1.47366 0.50615,1.94523 0.34146,0.46751 0.80895,0.70126 1.40248,0.70126 0.59353,0 1.059,-0.23375 1.39642,-0.70126 0.3415,-0.47157 0.51226,-1.11998 0.51226,-1.94523 m -3.81731,-2.38429 c 0.23576,-0.40652 0.53255,-0.70735 0.89031,-0.90249 0.3618,-0.19919 0.7927,-0.29879 1.29274,-0.2988 0.8293,1e-5 1.50212,0.32929 2.01842,0.98786 0.52034,0.65858 0.78053,1.52449 0.78053,2.59772 0,1.07323 -0.26019,1.93914 -0.78053,2.59771 -0.5163,0.65857 -1.18912,0.98786 -2.01842,0.98786 -0.50004,0 -0.93094,-0.0976 -1.29274,-0.2927 -0.35776,-0.1992 -0.65455,-0.50206 -0.89031,-0.90859 l 0,1.02445 -1.1281,0 0,-9.48836 1.1281,0 0,3.69534"
+ id="path3983"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 621.84826,155.40505 1.122,0 0,9.48836 -1.122,0 0,-9.48836"
+ id="path3985"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 631.15369,161.19808 0,0.54881 -5.15887,0 c 0.0488,0.7724 0.28054,1.36187 0.69518,1.76839 0.41874,0.40247 1.00005,0.6037 1.74399,0.6037 0.4309,0 0.84761,-0.0529 1.25009,-0.15855 0.40652,-0.10569 0.80896,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39027 -0.42282,0.0894 -0.8517,0.13415 -1.28669,0.13415 -1.08949,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.63421,-0.63419 -0.95129,-1.49196 -0.95129,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.6587 0.60574,-0.65857 1.42085,-0.98785 2.44528,-0.98786 0.91878,1e-5 1.6444,0.29677 2.17695,0.8903 0.53664,0.58947 0.80491,1.39236 0.80496,2.40868 m -1.12204,-0.32929 c -0.008,-0.61386 -0.1809,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.54881 -1.32934,-0.54881 -0.62608,0 -1.12815,0.17684 -1.5062,0.53051 -0.37401,0.35369 -0.58944,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+ id="path3987"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 637.01986,155.78922 1.23177,0 0,8.06754 4.4332,0 0,1.03665 -5.66497,0 0,-9.10419"
+ id="path3989"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 643.92271,158.06374 1.12199,0 0,6.82967 -1.12199,0 0,-6.82967 m 0,-2.65869 1.12199,0 0,1.42082 -1.12199,0 0,-1.42082"
+ id="path3991"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 653.06349,160.77122 0,4.12219 -1.12204,0 0,-4.0856 c 0,-0.64638 -0.12604,-1.13014 -0.37806,-1.45131 -0.25206,-0.32115 -0.63012,-0.48173 -1.1342,-0.48173 -0.60574,0 -1.08343,0.19311 -1.43302,0.5793 -0.34963,0.38621 -0.52442,0.91266 -0.52442,1.57936 l 0,3.85998 -1.1281,0 0,-6.82967 1.1281,0 0,1.06104 c 0.26832,-0.41059 0.58338,-0.71751 0.94518,-0.92078 0.36588,-0.20326 0.78664,-0.30489 1.26226,-0.3049 0.78462,1e-5 1.37814,0.24393 1.78058,0.73175 0.40248,0.48378 0.60372,1.19723 0.60372,2.14037"
+ id="path3993"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 661.15541,161.19808 0,0.54881 -5.15882,0 c 0.0488,0.7724 0.28049,1.36187 0.69514,1.76839 0.41873,0.40247 1.00009,0.6037 1.74403,0.6037 0.4309,0 0.84761,-0.0529 1.25005,-0.15855 0.40652,-0.10569 0.809,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39027 -0.42277,0.0894 -0.85165,0.13415 -1.28664,0.13415 -1.08949,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.63421,-0.63419 -0.95129,-1.49196 -0.95129,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.6587 0.60574,-0.65857 1.4208,-0.98785 2.44528,-0.98786 0.91873,1e-5 1.6444,0.29677 2.17695,0.8903 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61386 -0.18095,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.54881 -1.32939,-0.54881 -0.62603,0 -1.1281,0.17684 -1.50615,0.53051 -0.37401,0.35369 -0.58949,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+ id="path3995"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 667.35092,158.26498 0,1.06103 c -0.31713,-0.1626 -0.64642,-0.28456 -0.98788,-0.36587 -0.34151,-0.0813 -0.69518,-0.12195 -1.06102,-0.12196 -0.55698,1e-5 -0.97567,0.0854 -1.2562,0.25612 -0.27645,0.17074 -0.41465,0.42685 -0.41465,0.76833 0,0.26018 0.0996,0.46548 0.29881,0.61589 0.19917,0.14635 0.59963,0.28661 1.20129,0.42076 l 0.38416,0.0854 c 0.79678,0.17074 1.36184,0.41263 1.69522,0.72565 0.33742,0.30896 0.50611,0.74191 0.50611,1.29886 0,0.63418 -0.25202,1.13624 -0.75611,1.50618 -0.50004,0.36994 -1.18912,0.55491 -2.06722,0.55491 -0.36588,0 -0.74802,-0.0366 -1.14642,-0.10976 -0.3943,-0.0691 -0.81102,-0.17481 -1.25004,-0.31709 l 0,-1.15861 c 0.41464,0.21546 0.82323,0.37808 1.22566,0.48784 0.40248,0.1057 0.80088,0.15854 1.19518,0.15854 0.52852,0 0.93504,-0.0894 1.21961,-0.26831 0.28457,-0.18293 0.42686,-0.43904 0.42686,-0.76833 0,-0.3049 -0.10367,-0.53865 -0.31102,-0.70127 -0.20326,-0.1626 -0.65248,-0.31911 -1.34761,-0.46953 l -0.39027,-0.0915 c -0.69518,-0.14635 -1.19725,-0.36994 -1.5062,-0.67077 -0.30895,-0.30489 -0.46345,-0.72159 -0.46345,-1.25008 0,-0.6423 0.22768,-1.13827 0.68296,-1.48789 0.45533,-0.34961 1.1017,-0.52441 1.93917,-0.52442 0.41465,1e-5 0.80491,0.0305 1.1708,0.0915 0.36584,0.061 0.70326,0.15246 1.01226,0.27441"
+ id="path3997"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 669.79615,163.34454 1.28668,0 0,1.54887 -1.28668,0 0,-1.54887 m 0,-4.90882 1.28668,0 0,1.54887 -1.28668,0 0,-1.54887"
+ id="path3999"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 678.98573,156.80148 0,7.07968 1.48788,0 c 1.25615,0 2.17493,-0.28457 2.75625,-0.85371 0.5854,-0.56914 0.8781,-1.46756 0.8781,-2.69528 0,-1.21958 -0.2927,-2.11191 -0.8781,-2.67699 -0.58132,-0.56913 -1.5001,-0.8537 -2.75625,-0.8537 l -1.48788,0 m -1.23177,-1.01226 2.53062,0 c 1.76433,1e-5 3.0591,0.36792 3.8844,1.10372 0.8252,0.73176 1.23783,1.87817 1.23783,3.43923 0,1.5692 -0.41465,2.72171 -1.24394,3.45752 -0.82934,0.73581 -2.12209,1.10372 -3.87829,1.10372 l -2.53062,0 0,-9.10419"
+ id="path4001"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 693.15728,161.19808 0,0.54881 -5.15882,0 c 0.0488,0.7724 0.28048,1.36187 0.69513,1.76839 0.41873,0.40247 1.00009,0.6037 1.74403,0.6037 0.4309,0 0.84762,-0.0529 1.25005,-0.15855 0.40652,-0.10569 0.809,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.8151,0.30083 -1.23788,0.39027 -0.42277,0.0894 -0.85165,0.13415 -1.28664,0.13415 -1.08948,0 -1.9534,-0.31709 -2.59164,-0.95127 -0.63416,-0.63419 -0.95124,-1.49196 -0.95124,-2.57332 0,-1.11795 0.30082,-2.00418 0.90248,-2.6587 0.60574,-0.65857 1.4208,-0.98785 2.44527,-0.98786 0.91873,1e-5 1.6444,0.29677 2.17695,0.8903 0.5366,0.58947 0.80492,1.39236 0.80492,2.40868 m -1.122,-0.32929 c -0.008,-0.61386 -0.18094,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.54881 -1.32938,-0.54881 -0.62604,0 -1.1281,0.17684 -1.50616,0.53051 -0.37401,0.35369 -0.58948,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+ id="path4003"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 694.99883,155.40505 1.12204,0 0,9.48836 -1.12204,0 0,-9.48836"
+ id="path4005"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 704.30425,161.19808 0,0.54881 -5.15881,0 c 0.0488,0.7724 0.28048,1.36187 0.69517,1.76839 0.41869,0.40247 1.00005,0.6037 1.74399,0.6037 0.4309,0 0.84761,-0.0529 1.25009,-0.15855 0.40652,-0.10569 0.80896,-0.26424 1.20735,-0.47564 l 0,1.06104 c -0.40243,0.17074 -0.81506,0.30083 -1.23788,0.39027 -0.42277,0.0894 -0.85165,0.13415 -1.28664,0.13415 -1.08949,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.6342,-0.63419 -0.95128,-1.49196 -0.95128,-2.57332 0,-1.11795 0.30082,-2.00418 0.90248,-2.6587 0.60573,-0.65857 1.4208,-0.98785 2.44527,-0.98786 0.91873,1e-5 1.6444,0.29677 2.17695,0.8903 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61386 -0.1809,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.54881 -1.32934,-0.54881 -0.62608,0 -1.12814,0.17684 -1.5062,0.53051 -0.37401,0.35369 -0.58948,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+ id="path4007"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 707.25568,156.12461 0,1.93913 2.31111,0 0,0.87201 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.15445,0.15855 0.46547,0.23782 0.93297,0.23782 l 1.15252,0 0,0.93908 -1.15252,0 c -0.86589,0 -1.4635,-0.16058 -1.7928,-0.48173 -0.32929,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82318,0 0,-0.87201 0.82318,0 0,-1.93913 1.12815,0"
+ id="path4009"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 716.89035,161.19808 0,0.54881 -5.15882,0 c 0.0488,0.7724 0.28049,1.36187 0.69514,1.76839 0.41873,0.40247 1.00009,0.6037 1.74403,0.6037 0.4309,0 0.84761,-0.0529 1.25005,-0.15855 0.40652,-0.10569 0.809,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40243,0.17074 -0.81506,0.30083 -1.23788,0.39027 -0.42277,0.0894 -0.85165,0.13415 -1.28664,0.13415 -1.08949,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.63421,-0.63419 -0.95129,-1.49196 -0.95129,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.6587 0.60574,-0.65857 1.4208,-0.98785 2.44528,-0.98786 0.91873,1e-5 1.6444,0.29677 2.17695,0.8903 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61386 -0.1809,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.54881 -1.32934,-0.54881 -0.62608,0 -1.12815,0.17684 -1.5062,0.53051 -0.37401,0.35369 -0.58949,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+ id="path4011"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 722.59192,162.19813 0,-4.13439 1.12204,0 0,4.09171 c 0,0.64638 0.12599,1.13218 0.37805,1.4574 0.25207,0.32116 0.63012,0.48173 1.13421,0.48173 0.60574,0 1.08338,-0.1931 1.43301,-0.5793 0.35368,-0.3862 0.53053,-0.91265 0.53053,-1.57936 l 0,-3.87218 1.122,0 0,6.82967 -1.122,0 0,-1.04884 c -0.2724,0.41466 -0.58948,0.72362 -0.95128,0.92688 -0.35776,0.1992 -0.77443,0.2988 -1.25009,0.2988 -0.78458,0 -1.38017,-0.24392 -1.78669,-0.73175 -0.40652,-0.48783 -0.60978,-1.20129 -0.60978,-2.14037"
+ id="path4013"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 734.98899,158.26498 0,1.06103 c -0.31708,-0.1626 -0.64637,-0.28456 -0.98788,-0.36587 -0.34146,-0.0813 -0.69513,-0.12195 -1.06102,-0.12196 -0.55693,1e-5 -0.97567,0.0854 -1.25615,0.25612 -0.27645,0.17074 -0.4147,0.42685 -0.4147,0.76833 0,0.26018 0.0996,0.46548 0.29881,0.61589 0.19922,0.14635 0.59963,0.28661 1.20129,0.42076 l 0.38416,0.0854 c 0.79678,0.17074 1.36189,0.41263 1.69522,0.72565 0.33742,0.30896 0.50616,0.74191 0.50616,1.29886 0,0.63418 -0.25207,1.13624 -0.75616,1.50618 -0.50004,0.36994 -1.18912,0.55491 -2.06722,0.55491 -0.36584,0 -0.74798,-0.0366 -1.14637,-0.10976 -0.39435,-0.0691 -0.81102,-0.17481 -1.25009,-0.31709 l 0,-1.15861 c 0.41464,0.21546 0.82323,0.37808 1.22566,0.48784 0.40248,0.1057 0.80088,0.15854 1.19523,0.15854 0.52847,0 0.93499,-0.0894 1.21956,-0.26831 0.28457,-0.18293 0.42686,-0.43904 0.42686,-0.76833 0,-0.3049 -0.10367,-0.53865 -0.31097,-0.70127 -0.20331,-0.1626 -0.65248,-0.31911 -1.34766,-0.46953 l -0.39027,-0.0915 c -0.69518,-0.14635 -1.1972,-0.36994 -1.5062,-0.67077 -0.30895,-0.30489 -0.46341,-0.72159 -0.46341,-1.25008 0,-0.6423 0.22764,-1.13827 0.68297,-1.48789 0.45528,-0.34961 1.10165,-0.52441 1.93912,-0.52442 0.41465,1e-5 0.80491,0.0305 1.1708,0.0915 0.36589,0.061 0.70331,0.15246 1.01226,0.27441"
+ id="path4015"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 737.14762,158.06374 1.12204,0 0,6.82967 -1.12204,0 0,-6.82967 m 0,-2.65869 1.12204,0 0,1.42082 -1.12204,0 0,-1.42082"
+ id="path4017"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 746.2884,160.77122 0,4.12219 -1.12199,0 0,-4.0856 c 0,-0.64638 -0.12603,-1.13014 -0.37805,-1.45131 -0.25207,-0.32115 -0.63017,-0.48173 -1.13426,-0.48173 -0.60569,0 -1.08338,0.19311 -1.43301,0.5793 -0.34959,0.38621 -0.52438,0.91266 -0.52438,1.57936 l 0,3.85998 -1.12815,0 0,-6.82967 1.12815,0 0,1.06104 c 0.26827,-0.41059 0.58333,-0.71751 0.94518,-0.92078 0.36584,-0.20326 0.78659,-0.30489 1.26226,-0.3049 0.78457,1e-5 1.3781,0.24393 1.78058,0.73175 0.40243,0.48378 0.60367,1.19723 0.60367,2.14037"
+ id="path4019"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 753.03272,161.39931 c 0,-0.81306 -0.16874,-1.44317 -0.50611,-1.89036 -0.33338,-0.44718 -0.80289,-0.67076 -1.40863,-0.67077 -0.60166,1e-5 -1.07122,0.22359 -1.40864,0.67077 -0.33333,0.44719 -0.5,1.0773 -0.5,1.89036 0,0.80899 0.16667,1.43707 0.5,1.88425 0.33742,0.44719 0.80698,0.67077 1.40864,0.67077 0.60574,0 1.07525,-0.22358 1.40863,-0.67077 0.33737,-0.44718 0.50611,-1.07526 0.50611,-1.88425 m 1.12203,2.64649 c -4e-5,1.16267 -0.25817,2.02654 -0.77447,2.59161 -0.5163,0.56914 -1.30698,0.85371 -2.37208,0.85371 -0.39431,0 -0.7663,-0.0305 -1.11589,-0.0915 -0.34963,-0.0569 -0.68907,-0.14636 -1.01837,-0.26832 l 0,-1.09152 c 0.3293,0.17887 0.6545,0.31099 0.97567,0.39636 0.32117,0.0854 0.64839,0.12806 0.98177,0.12806 0.73582,0 1.28664,-0.1931 1.65253,-0.5793 0.36589,-0.38214 0.54881,-0.96144 0.54881,-1.73791 l 0,-0.55491 c -0.23173,0.40246 -0.52847,0.7033 -0.89032,0.90249 -0.3618,0.1992 -0.79476,0.2988 -1.29885,0.2988 -0.83742,0 -1.51226,-0.31912 -2.02447,-0.95737 -0.51226,-0.63825 -0.76837,-1.48383 -0.76837,-2.53673 0,-1.05697 0.25611,-1.90458 0.76837,-2.54283 0.51221,-0.63825 1.18705,-0.95737 2.02447,-0.95738 0.50409,1e-5 0.93705,0.0996 1.29885,0.2988 0.36185,0.1992 0.65859,0.50004 0.89032,0.90249 l 0,-1.03665 1.12203,0 0,5.98206"
+ id="path4021"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 761.5515,156.12461 0,1.93913 2.31111,0 0,0.87201 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.1545,0.15855 0.46547,0.23782 0.93297,0.23782 l 1.15252,0 0,0.93908 -1.15252,0 c -0.86589,0 -1.4635,-0.16058 -1.7928,-0.48173 -0.32924,-0.32523 -0.49389,-0.91469 -0.49389,-1.7684 l 0,-3.70753 -0.82323,0 0,-0.87201 0.82323,0 0,-1.93913 1.1281,0"
+ id="path4023"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 771.02157,160.77122 0,4.12219 -1.12204,0 0,-4.0856 c 0,-0.64638 -0.12603,-1.13014 -0.37805,-1.45131 -0.25207,-0.32115 -0.63012,-0.48173 -1.13421,-0.48173 -0.60574,0 -1.08342,0.19311 -1.43301,0.5793 -0.34963,0.38621 -0.52443,0.91266 -0.52443,1.57936 l 0,3.85998 -1.1281,0 0,-9.48836 1.1281,0 0,3.71973 c 0.26832,-0.41059 0.58338,-0.71751 0.94518,-0.92078 0.36589,-0.20326 0.78664,-0.30489 1.26226,-0.3049 0.78462,1e-5 1.37815,0.24393 1.78058,0.73175 0.40248,0.48378 0.60372,1.19723 0.60372,2.14037"
+ id="path4025"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 779.1135,161.19808 0,0.54881 -5.15882,0 c 0.0488,0.7724 0.28049,1.36187 0.69513,1.76839 0.41874,0.40247 1.00005,0.6037 1.74404,0.6037 0.4309,0 0.84756,-0.0529 1.25004,-0.15855 0.40652,-0.10569 0.809,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39027 -0.42278,0.0894 -0.85166,0.13415 -1.28664,0.13415 -1.08954,0 -1.9534,-0.31709 -2.59165,-0.95127 -0.63416,-0.63419 -0.95124,-1.49196 -0.95124,-2.57332 0,-1.11795 0.30083,-2.00418 0.90248,-2.6587 0.60574,-0.65857 1.4208,-0.98785 2.44527,-0.98786 0.91874,1e-5 1.6444,0.29677 2.17696,0.8903 0.53659,0.58947 0.80491,1.39236 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61386 -0.18095,-1.10372 -0.51837,-1.4696 -0.33333,-0.36587 -0.77645,-0.54881 -1.32934,-0.54881 -0.62603,0 -1.1281,0.17684 -1.50615,0.53051 -0.37402,0.35369 -0.58949,0.85168 -0.64638,1.49399 l 4.00024,-0.006"
+ id="path4027"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 786.1017,158.7894 -1.28664,0 0,-1.05494 1.00005,-1.94524 0.78664,0 -0.50005,1.94524 0,1.05494"
+ id="path4029"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 788.95552,155.78922 5.75643,0 0,1.03665 -4.52461,0 0,2.69528 4.33558,0 0,1.03664 -4.33558,0 0,3.29897 4.63439,0 0,1.03665 -5.86621,0 0,-9.10419"
+ id="path4031"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 801.30383,159.10039 0,-3.69534 1.12199,0 0,9.48836 -1.12199,0 0,-1.02445 c -0.23581,0.40653 -0.53462,0.70939 -0.89642,0.90859 -0.35771,0.19513 -0.78866,0.2927 -1.29275,0.2927 -0.82525,0 -1.49807,-0.32929 -2.01841,-0.98786 -0.5163,-0.65857 -0.77443,-1.52448 -0.77443,-2.59771 0,-1.07323 0.25813,-1.93914 0.77443,-2.59772 0.52034,-0.65857 1.19316,-0.98785 2.01841,-0.98786 0.50409,1e-5 0.93504,0.0996 1.29275,0.2988 0.3618,0.19514 0.66061,0.49597 0.89642,0.90249 m -3.82342,2.38429 c 0,0.82525 0.16873,1.47366 0.50615,1.94523 0.34146,0.46751 0.80896,0.70126 1.40253,0.70126 0.59353,0 1.06102,-0.23375 1.40248,-0.70126 0.34151,-0.47157 0.51226,-1.11998 0.51226,-1.94523 0,-0.82525 -0.17075,-1.47163 -0.51226,-1.93914 -0.34146,-0.47157 -0.80895,-0.70735 -1.40248,-0.70736 -0.59357,1e-5 -1.06107,0.23579 -1.40253,0.70736 -0.33742,0.46751 -0.50615,1.11389 -0.50615,1.93914"
+ id="path4033"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 804.73694,158.06374 1.12204,0 0,6.82967 -1.12204,0 0,-6.82967 m 0,-2.65869 1.12204,0 0,1.42082 -1.12204,0 0,-1.42082"
+ id="path4035"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 809.3104,156.12461 0,1.93913 2.31111,0 0,0.87201 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.15446,0.15855 0.46547,0.23782 0.93297,0.23782 l 1.15252,0 0,0.93908 -1.15252,0 c -0.86589,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.3293,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82319,0 0,-0.87201 0.82319,0 0,-1.93913 1.12814,0"
+ id="path4037"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 818.16454,163.86896 0,3.62216 -1.1281,0 0,-9.42738 1.1281,0 0,1.03665 c 0.23581,-0.40652 0.53255,-0.70735 0.89031,-0.90249 0.3618,-0.19919 0.79275,-0.29879 1.29275,-0.2988 0.82934,1e-5 1.50211,0.32929 2.01841,0.98786 0.52034,0.65858 0.78054,1.52449 0.78054,2.59772 0,1.07323 -0.2602,1.93914 -0.78054,2.59771 -0.5163,0.65857 -1.18907,0.98786 -2.01841,0.98786 -0.5,0 -0.93095,-0.0976 -1.29275,-0.2927 -0.35776,-0.1992 -0.6545,-0.50206 -0.89031,-0.90859 m 3.81731,-2.38428 c 0,-0.82525 -0.17075,-1.47163 -0.51221,-1.93914 -0.33742,-0.47157 -0.80289,-0.70735 -1.39642,-0.70736 -0.59353,1e-5 -1.06107,0.23579 -1.40253,0.70736 -0.33742,0.46751 -0.50615,1.11389 -0.50615,1.93914 0,0.82525 0.16873,1.47366 0.50615,1.94523 0.34146,0.46751 0.809,0.70126 1.40253,0.70126 0.59353,0 1.059,-0.23375 1.39642,-0.70126 0.34146,-0.47157 0.51221,-1.11998 0.51221,-1.94523"
+ id="path4039"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 828.11028,161.46028 c -0.90657,10e-6 -1.53467,0.10367 -1.88425,0.311 -0.34964,0.20733 -0.52443,0.56101 -0.52443,1.06103 0,0.3984 0.13007,0.7155 0.39027,0.95128 0.26423,0.23172 0.62199,0.34758 1.07323,0.34758 0.62199,0 1.11997,-0.21952 1.49399,-0.65857 0.37805,-0.44312 0.56708,-1.03055 0.56712,-1.7623 l 0,-0.25002 -1.11593,0 m 2.23793,-0.46344 0,3.89657 -1.122,0 0,-1.03665 c -0.25615,0.41467 -0.57525,0.72159 -0.95739,0.92079 -0.38214,0.19513 -0.84963,0.2927 -1.40253,0.2927 -0.69922,0 -1.25615,-0.19513 -1.67084,-0.5854 -0.41056,-0.39433 -0.61589,-0.92079 -0.61589,-1.57936 0,-0.76833 0.25615,-1.34763 0.76837,-1.73791 0.5163,-0.39026 1.28462,-0.58539 2.305,-0.5854 l 1.57328,0 0,-0.10976 c -4e-5,-0.51628 -0.17075,-0.91468 -0.51226,-1.19519 -0.33742,-0.28457 -0.81304,-0.42685 -1.4269,-0.42685 -0.39027,0 -0.77039,0.0468 -1.14032,0.14025 -0.36992,0.0935 -0.72562,0.23376 -1.06712,0.42075 l 0,-1.03664 c 0.4106,-0.15854 0.809,-0.27643 1.19518,-0.35368 0.38622,-0.0813 0.76226,-0.12195 1.12814,-0.12196 0.98784,1e-5 1.72567,0.25612 2.21355,0.76834 0.48779,0.51223 0.73173,1.2887 0.73173,2.3294"
+ id="path4041"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 833.77521,156.12461 0,1.93913 2.31111,0 0,0.87201 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.1545,0.15855 0.46547,0.23782 0.93301,0.23782 l 1.15248,0 0,0.93908 -1.15248,0 c -0.86593,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.3293,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82324,0 0,-0.87201 0.82324,0 0,-1.93913 1.1281,0"
+ id="path4043"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 843.24528,160.77122 0,4.12219 -1.122,0 0,-4.0856 c 0,-0.64638 -0.12603,-1.13014 -0.37805,-1.45131 -0.25207,-0.32115 -0.63012,-0.48173 -1.13425,-0.48173 -0.6057,0 -1.08338,0.19311 -1.43297,0.5793 -0.34963,0.38621 -0.52443,0.91266 -0.52443,1.57936 l 0,3.85998 -1.12814,0 0,-9.48836 1.12814,0 0,3.71973 c 0.26828,-0.41059 0.58334,-0.71751 0.94518,-0.92078 0.36584,-0.20326 0.7866,-0.30489 1.26226,-0.3049 0.78458,1e-5 1.3781,0.24393 1.78058,0.73175 0.40248,0.48378 0.60368,1.19723 0.60368,2.14037"
+ id="path4045"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 849.84932,158.26498 0,1.06103 c -0.31708,-0.1626 -0.64637,-0.28456 -0.98783,-0.36587 -0.34151,-0.0813 -0.69518,-0.12195 -1.06107,-0.12196 -0.55693,1e-5 -0.97566,0.0854 -1.25615,0.25612 -0.27645,0.17074 -0.41465,0.42685 -0.41465,0.76833 0,0.26018 0.0996,0.46548 0.29881,0.61589 0.19917,0.14635 0.59959,0.28661 1.20129,0.42076 l 0.38416,0.0854 c 0.79678,0.17074 1.36184,0.41263 1.69522,0.72565 0.33742,0.30896 0.50611,0.74191 0.50611,1.29886 0,0.63418 -0.25207,1.13624 -0.75615,1.50618 -0.5,0.36994 -1.18908,0.55491 -2.06718,0.55491 -0.36588,0 -0.74802,-0.0366 -1.14642,-0.10976 -0.3943,-0.0691 -0.81102,-0.17481 -1.25004,-0.31709 l 0,-1.15861 c 0.41464,0.21546 0.82318,0.37808 1.22566,0.48784 0.40248,0.1057 0.80088,0.15854 1.19518,0.15854 0.52852,0 0.93504,-0.0894 1.21961,-0.26831 0.28457,-0.18293 0.42681,-0.43904 0.42686,-0.76833 -5e-5,-0.3049 -0.10367,-0.53865 -0.31102,-0.70127 -0.20326,-0.1626 -0.65248,-0.31911 -1.34761,-0.46953 l -0.39027,-0.0915 c -0.69518,-0.14635 -1.19725,-0.36994 -1.5062,-0.67077 -0.30895,-0.30489 -0.46345,-0.72159 -0.46345,-1.25008 0,-0.6423 0.22764,-1.13827 0.68296,-1.48789 0.45533,-0.34961 1.1017,-0.52441 1.93917,-0.52442 0.41465,1e-5 0.80491,0.0305 1.1708,0.0915 0.36584,0.061 0.70326,0.15246 1.01221,0.27441"
+ id="path4047"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 860.88657,161.48468 c 0,-0.82525 -0.17075,-1.47163 -0.51221,-1.93914 -0.33742,-0.47157 -0.8029,-0.70735 -1.39642,-0.70736 -0.59353,1e-5 -1.06107,0.23579 -1.40253,0.70736 -0.33742,0.46751 -0.50615,1.11389 -0.50615,1.93914 0,0.82525 0.16873,1.47366 0.50615,1.94523 0.34146,0.46751 0.809,0.70126 1.40253,0.70126 0.59352,0 1.059,-0.23375 1.39642,-0.70126 0.34146,-0.47157 0.51221,-1.11998 0.51221,-1.94523 m -3.81731,-2.38429 c 0.23581,-0.40652 0.53255,-0.70735 0.89031,-0.90249 0.3618,-0.19919 0.79275,-0.29879 1.29275,-0.2988 0.82934,1e-5 1.50211,0.32929 2.01841,0.98786 0.52034,0.65858 0.78053,1.52449 0.78053,2.59772 0,1.07323 -0.26019,1.93914 -0.78053,2.59771 -0.5163,0.65857 -1.18907,0.98786 -2.01841,0.98786 -0.5,0 -0.93095,-0.0976 -1.29275,-0.2927 -0.35776,-0.1992 -0.6545,-0.50206 -0.89031,-0.90859 l 0,1.02445 -1.1281,0 0,-9.48836 1.1281,0 0,3.69534"
+ id="path4049"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 866.75278,165.52759 c -0.31712,0.81306 -0.62608,1.34358 -0.9269,1.59156 -0.30083,0.24798 -0.70331,0.37197 -1.2074,0.37197 l -0.89637,0 0,-0.93908 0.65858,0 c 0.30896,0 0.54881,-0.0732 0.71952,-0.21952 0.17075,-0.14635 0.35978,-0.4919 0.56712,-1.03665 l 0.20124,-0.51222 -2.76235,-6.71991 1.18908,0 2.13429,5.34178 2.13426,-5.34178 1.18907,0 -3.00014,7.46385"
+ id="path4051"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 880.95481,160.77122 0,4.12219 -1.12204,0 0,-4.0856 c 0,-0.64638 -0.12603,-1.13014 -0.37805,-1.45131 -0.25207,-0.32115 -0.63012,-0.48173 -1.13421,-0.48173 -0.60574,0 -1.08342,0.19311 -1.43301,0.5793 -0.34963,0.38621 -0.52443,0.91266 -0.52443,1.57936 l 0,3.85998 -1.1281,0 0,-6.82967 1.1281,0 0,1.06104 c 0.26832,-0.41059 0.58338,-0.71751 0.94518,-0.92078 0.36589,-0.20326 0.78664,-0.30489 1.26226,-0.3049 0.78458,1e-5 1.37815,0.24393 1.78058,0.73175 0.40248,0.48378 0.60372,1.19723 0.60372,2.14037"
+ id="path4053"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 885.85142,158.85038 c -0.60165,0 -1.07727,0.23579 -1.42691,0.70735 -0.34963,0.46752 -0.52442,1.10983 -0.52442,1.92695 0,0.81712 0.17277,1.46146 0.51832,1.93303 0.34963,0.46751 0.82727,0.70127 1.43301,0.70127 0.59761,0 1.07121,-0.23579 1.4208,-0.70736 0.34963,-0.47157 0.52443,-1.11389 0.52443,-1.92694 0,-0.80899 -0.1748,-1.44927 -0.52443,-1.92085 -0.34959,-0.47563 -0.82319,-0.71345 -1.4208,-0.71345 m 0,-0.95128 c 0.97567,1e-5 1.74197,0.3171 2.2989,0.95128 0.55698,0.63419 0.83545,1.51229 0.83545,2.6343 0,1.11795 -0.27847,1.99605 -0.83545,2.6343 -0.55693,0.63418 -1.32323,0.95127 -2.2989,0.95127 -0.97971,0 -1.74807,-0.31709 -2.30501,-0.95127 -0.55289,-0.63825 -0.82929,-1.51635 -0.82929,-2.6343 0,-1.12201 0.2764,-2.00011 0.82929,-2.6343 0.55694,-0.63418 1.3253,-0.95127 2.30501,-0.95128"
+ id="path4055"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 895.33366,159.10039 0,-3.69534 1.12204,0 0,9.48836 -1.12204,0 0,-1.02445 c -0.23577,0.40653 -0.53457,0.70939 -0.89637,0.90859 -0.35776,0.19513 -0.78866,0.2927 -1.29275,0.2927 -0.82525,0 -1.49807,-0.32929 -2.01841,-0.98786 -0.5163,-0.65857 -0.77443,-1.52448 -0.77443,-2.59771 0,-1.07323 0.25813,-1.93914 0.77443,-2.59772 0.52034,-0.65857 1.19316,-0.98785 2.01841,-0.98786 0.50409,1e-5 0.93499,0.0996 1.29275,0.2988 0.3618,0.19514 0.6606,0.49597 0.89637,0.90249 m -3.82337,2.38429 c 0,0.82525 0.16868,1.47366 0.5061,1.94523 0.34151,0.46751 0.809,0.70126 1.40253,0.70126 0.59353,0 1.06106,-0.23375 1.40253,-0.70126 0.3415,-0.47157 0.51221,-1.11998 0.51221,-1.94523 0,-0.82525 -0.17071,-1.47163 -0.51221,-1.93914 -0.34147,-0.47157 -0.809,-0.70735 -1.40253,-0.70736 -0.59353,1e-5 -1.06102,0.23579 -1.40253,0.70736 -0.33742,0.46751 -0.5061,1.11389 -0.5061,1.93914"
+ id="path4057"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 904.6086,161.19808 0,0.54881 -5.15882,0 c 0.0488,0.7724 0.28048,1.36187 0.69518,1.76839 0.41868,0.40247 1.00004,0.6037 1.74398,0.6037 0.4309,0 0.84762,-0.0529 1.25005,-0.15855 0.40657,-0.10569 0.809,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40243,0.17074 -0.81506,0.30083 -1.23788,0.39027 -0.42277,0.0894 -0.85165,0.13415 -1.28664,0.13415 -1.08948,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.6342,-0.63419 -0.95128,-1.49196 -0.95128,-2.57332 0,-1.11795 0.30082,-2.00418 0.90248,-2.6587 0.60574,-0.65857 1.4208,-0.98785 2.44527,-0.98786 0.91873,1e-5 1.6444,0.29677 2.17695,0.8903 0.5366,0.58947 0.80492,1.39236 0.80492,2.40868 m -1.122,-0.32929 c -0.008,-0.61386 -0.1809,-1.10372 -0.51832,-1.4696 -0.33338,-0.36587 -0.77649,-0.54881 -1.32934,-0.54881 -0.62608,0 -1.12814,0.17684 -1.5062,0.53051 -0.37401,0.35369 -0.58948,0.85168 -0.64637,1.49399 l 4.00023,-0.006"
+ id="path4059"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 910.8041,158.26498 0,1.06103 c -0.31712,-0.1626 -0.64637,-0.28456 -0.98788,-0.36587 -0.34146,-0.0813 -0.69518,-0.12195 -1.06102,-0.12196 -0.55693,1e-5 -0.97566,0.0854 -1.2562,0.25612 -0.2764,0.17074 -0.41464,0.42685 -0.41464,0.76833 0,0.26018 0.0996,0.46548 0.2988,0.61589 0.19918,0.14635 0.59964,0.28661 1.20129,0.42076 l 0.38416,0.0854 c 0.79679,0.17074 1.36189,0.41263 1.69523,0.72565 0.33742,0.30896 0.5061,0.74191 0.50615,1.29886 -5e-5,0.63418 -0.25207,1.13624 -0.75615,1.50618 -0.50005,0.36994 -1.18912,0.55491 -2.06722,0.55491 -0.36584,0 -0.74798,-0.0366 -1.14638,-0.10976 -0.39435,-0.0691 -0.81102,-0.17481 -1.25009,-0.31709 l 0,-1.15861 c 0.41465,0.21546 0.82323,0.37808 1.22567,0.48784 0.40248,0.1057 0.80087,0.15854 1.19522,0.15854 0.52847,0 0.93499,-0.0894 1.21956,-0.26831 0.28458,-0.18293 0.42686,-0.43904 0.42686,-0.76833 0,-0.3049 -0.10367,-0.53865 -0.31097,-0.70127 -0.20331,-0.1626 -0.65248,-0.31911 -1.34766,-0.46953 l -0.39027,-0.0915 c -0.69518,-0.14635 -1.19724,-0.36994 -1.5062,-0.67077 -0.30895,-0.30489 -0.4634,-0.72159 -0.4634,-1.25008 0,-0.6423 0.22764,-1.13827 0.68296,-1.48789 0.45528,-0.34961 1.10166,-0.52441 1.93912,-0.52442 0.41465,1e-5 0.80492,0.0305 1.1708,0.0915 0.36589,0.061 0.70331,0.15246 1.01226,0.27441"
+ id="path4061"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 913.37132,155.78922 1.28664,0 0,0.92689 -1.00004,1.94523 -0.78664,0 0.50004,-1.94523 0,-0.92689"
+ id="path4063"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 922.02427,156.12461 0,1.93913 2.31111,0 0,0.87201 -2.31111,0 0,3.70753 c 0,0.55695 0.0752,0.91469 0.22562,1.07323 0.15445,0.15855 0.46547,0.23782 0.93297,0.23782 l 1.15252,0 0,0.93908 -1.15252,0 c -0.86589,0 -1.4635,-0.16058 -1.7928,-0.48173 -0.32929,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70753 -0.82318,0 0,-0.87201 0.82318,0 0,-1.93913 1.12815,0"
+ id="path4065"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 928.46367,158.85038 c -0.60166,0 -1.07732,0.23579 -1.42691,0.70735 -0.34963,0.46752 -0.52443,1.10983 -0.52443,1.92695 0,0.81712 0.17278,1.46146 0.51832,1.93303 0.34964,0.46751 0.82728,0.70127 1.43302,0.70127 0.59761,0 1.07121,-0.23579 1.4208,-0.70736 0.34963,-0.47157 0.52442,-1.11389 0.52442,-1.92694 0,-0.80899 -0.17479,-1.44927 -0.52442,-1.92085 -0.34959,-0.47563 -0.82319,-0.71345 -1.4208,-0.71345 m 0,-0.95128 c 0.97566,1e-5 1.74196,0.3171 2.2989,0.95128 0.55693,0.63419 0.83544,1.51229 0.83544,2.6343 0,1.11795 -0.27851,1.99605 -0.83544,2.6343 -0.55694,0.63418 -1.32324,0.95127 -2.2989,0.95127 -0.97976,0 -1.74808,-0.31709 -2.30501,-0.95127 -0.55289,-0.63825 -0.82934,-1.51635 -0.82934,-2.6343 0,-1.12201 0.27645,-2.00011 0.82934,-2.6343 0.55693,-0.63418 1.32525,-0.95127 2.30501,-0.95128"
+ id="path4067"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 936.09825,158.85038 c -0.60166,0 -1.07728,0.23579 -1.42691,0.70735 -0.34963,0.46752 -0.52443,1.10983 -0.52443,1.92695 0,0.81712 0.17278,1.46146 0.51832,1.93303 0.34964,0.46751 0.82728,0.70127 1.43302,0.70127 0.59761,0 1.07121,-0.23579 1.4208,-0.70736 0.34963,-0.47157 0.52442,-1.11389 0.52442,-1.92694 0,-0.80899 -0.17479,-1.44927 -0.52442,-1.92085 -0.34959,-0.47563 -0.82319,-0.71345 -1.4208,-0.71345 m 0,-0.95128 c 0.97566,1e-5 1.74196,0.3171 2.2989,0.95128 0.55698,0.63419 0.83544,1.51229 0.83544,2.6343 0,1.11795 -0.27846,1.99605 -0.83544,2.6343 -0.55694,0.63418 -1.32324,0.95127 -2.2989,0.95127 -0.97971,0 -1.74808,-0.31709 -2.30501,-0.95127 -0.55289,-0.63825 -0.82929,-1.51635 -0.82929,-2.6343 0,-1.12201 0.2764,-2.00011 0.82929,-2.6343 0.55693,-0.63418 1.3253,-0.95127 2.30501,-0.95128"
+ id="path4069"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 941.08636,155.40505 1.12199,0 0,9.48836 -1.12199,0 0,-9.48836"
+ id="path4071"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 944.70849,163.34454 1.28669,0 0,1.54887 -1.28669,0 0,-1.54887"
+ id="path4073"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 595.615,175.22328 0,1.29886 c -0.41465,-0.3862 -0.85776,-0.67483 -1.32934,-0.86591 -0.46749,-0.19106 -0.96552,-0.28659 -1.49399,-0.2866 -1.04072,1e-5 -1.83751,0.31913 -2.39036,0.95737 -0.55289,0.63419 -0.82934,1.55294 -0.82934,2.75626 0,1.19926 0.27645,2.11801 0.82934,2.75626 0.55285,0.63418 1.34964,0.95128 2.39036,0.95127 0.52847,1e-5 1.0265,-0.0955 1.49399,-0.2866 0.47158,-0.19107 0.91469,-0.4797 1.32934,-0.8659 l 0,1.28666 c -0.4309,0.2927 -0.88825,0.51223 -1.37204,0.65858 -0.47971,0.14635 -0.98783,0.21952 -1.52447,0.21952 -1.3781,0 -2.46355,-0.42076 -3.25629,-1.26227 -0.79271,-0.84558 -1.18908,-1.99808 -1.18908,-3.45752 0,-1.46349 0.39637,-2.616 1.18908,-3.45751 0.79274,-0.84557 1.87819,-1.26836 3.25629,-1.26837 0.54476,1e-5 1.05698,0.0732 1.53668,0.21952 0.48375,0.1423 0.93706,0.35776 1.35983,0.64638"
+ id="path4075"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 597.48098,174.13785 1.12199,0 0,9.48836 -1.12199,0 0,-9.48836"
+ id="path4077"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 606.78641,179.93087 0,0.54881 -5.15887,0 c 0.0488,0.77241 0.28053,1.36187 0.69518,1.7684 0.41873,0.40246 1.00005,0.6037 1.74399,0.6037 0.43094,0 0.84761,-0.0529 1.25009,-0.15855 0.40652,-0.1057 0.809,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.8151,0.30083 -1.23788,0.39026 -0.42282,0.0894 -0.8517,0.13416 -1.28664,0.13416 -1.08953,0 -1.9534,-0.31709 -2.59164,-0.95127 -0.63416,-0.63419 -0.95129,-1.49196 -0.95129,-2.57333 0,-1.11794 0.30083,-2.00417 0.90253,-2.65869 0.60569,-0.65857 1.4208,-0.98785 2.44527,-0.98786 0.91873,1e-5 1.64435,0.29677 2.17695,0.89029 0.5366,0.58948 0.80492,1.39237 0.80492,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10371 -0.51832,-1.46959 -0.33334,-0.36587 -0.77645,-0.54881 -1.32934,-0.54881 -0.62604,0 -1.1281,0.17684 -1.5062,0.53052 -0.37397,0.35368 -0.58944,0.85167 -0.64638,1.49398 l 4.00024,-0.006"
+ id="path4079"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 611.73182,180.19308 c -0.90657,1e-5 -1.53467,0.10367 -1.88425,0.311 -0.34964,0.20733 -0.52443,0.56101 -0.52443,1.06103 0,0.3984 0.13007,0.71549 0.39027,0.95128 0.26423,0.23172 0.62199,0.34758 1.07323,0.34758 0.62199,0 1.11997,-0.21952 1.49399,-0.65858 0.37805,-0.44311 0.56708,-1.03054 0.56708,-1.76229 l 0,-0.25002 -1.11589,0 m 2.23793,-0.46344 0,3.89657 -1.12204,0 0,-1.03665 c -0.25611,0.41466 -0.57521,0.72159 -0.95735,0.92079 -0.38214,0.19513 -0.84963,0.2927 -1.40253,0.2927 -0.69922,0 -1.25615,-0.19514 -1.67084,-0.5854 -0.41056,-0.39433 -0.61589,-0.92078 -0.61589,-1.57936 0,-0.76833 0.25611,-1.34764 0.76837,-1.73791 0.51625,-0.39026 1.28462,-0.58539 2.305,-0.5854 l 1.57324,0 0,-0.10976 c 0,-0.51629 -0.17071,-0.91468 -0.51222,-1.19519 -0.33742,-0.28456 -0.81304,-0.42685 -1.4269,-0.42685 -0.39027,0 -0.77039,0.0468 -1.14032,0.14025 -0.36992,0.0935 -0.72566,0.23375 -1.06712,0.42075 l 0,-1.03664 c 0.4106,-0.15854 0.809,-0.27644 1.19518,-0.35368 0.38622,-0.0813 0.76226,-0.12195 1.1281,-0.12196 0.98788,1e-5 1.72571,0.25612 2.21354,0.76834 0.48784,0.51223 0.73178,1.28869 0.73178,2.3294"
+ id="path4081"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 621.9641,179.50402 0,4.12219 -1.12199,0 0,-4.0856 c -5e-5,-0.64638 -0.12603,-1.13015 -0.3781,-1.45131 -0.25202,-0.32115 -0.63012,-0.48173 -1.13421,-0.48173 -0.60573,0 -1.08338,0.1931 -1.43301,0.5793 -0.34959,0.38621 -0.52442,0.91266 -0.52442,1.57936 l 0,3.85998 -1.1281,0 0,-6.82966 1.1281,0 0,1.06103 c 0.26831,-0.41058 0.58337,-0.71751 0.94517,-0.92079 0.36589,-0.20325 0.78664,-0.30488 1.26226,-0.30489 0.78462,1e-5 1.37815,0.24392 1.78063,0.73175 0.40243,0.48377 0.60367,1.19723 0.60367,2.14037"
+ id="path4083"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 628.23886,174.52202 1.83549,0 2.32328,6.19548 2.33554,-6.19548 1.83545,0 0,9.10419 -1.20129,0 0,-7.99437 -2.34771,6.24427 -1.23788,0 -2.3477,-6.24427 0,7.99437 -1.19518,0 0,-9.10419"
+ id="path4085"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 642.07505,180.19308 c -0.90657,1e-5 -1.53467,0.10367 -1.88425,0.311 -0.34964,0.20733 -0.52443,0.56101 -0.52443,1.06103 0,0.3984 0.13007,0.71549 0.39027,0.95128 0.26423,0.23172 0.62199,0.34758 1.07323,0.34758 0.62199,0 1.11997,-0.21952 1.49399,-0.65858 0.37805,-0.44311 0.56708,-1.03054 0.56708,-1.76229 l 0,-0.25002 -1.11589,0 m 2.23792,-0.46344 0,3.89657 -1.12203,0 0,-1.03665 c -0.25611,0.41466 -0.57521,0.72159 -0.95735,0.92079 -0.38214,0.19513 -0.84963,0.2927 -1.40253,0.2927 -0.69922,0 -1.25615,-0.19514 -1.67084,-0.5854 -0.41056,-0.39433 -0.61589,-0.92078 -0.61589,-1.57936 0,-0.76833 0.25611,-1.34764 0.76837,-1.73791 0.51625,-0.39026 1.28462,-0.58539 2.305,-0.5854 l 1.57324,0 0,-0.10976 c 0,-0.51629 -0.17071,-0.91468 -0.51222,-1.19519 -0.33742,-0.28456 -0.81304,-0.42685 -1.4269,-0.42685 -0.39027,0 -0.77039,0.0468 -1.14032,0.14025 -0.36992,0.0935 -0.72566,0.23375 -1.06712,0.42075 l 0,-1.03664 c 0.4106,-0.15854 0.809,-0.27644 1.19518,-0.35368 0.38622,-0.0813 0.76226,-0.12195 1.1281,-0.12196 0.98788,1e-5 1.72571,0.25612 2.21354,0.76834 0.48784,0.51223 0.73177,1.28869 0.73177,2.3294"
+ id="path4087"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 647.74002,174.85741 0,1.93914 2.31111,0 0,0.87199 -2.31111,0 0,3.70754 c 0,0.55694 0.0752,0.91468 0.22562,1.07323 0.15445,0.15855 0.46547,0.23782 0.93297,0.23782 l 1.15252,0 0,0.93908 -1.15252,0 c -0.86589,0 -1.4635,-0.16058 -1.7928,-0.48173 -0.32929,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70754 -0.82318,0 0,-0.87199 0.82318,0 0,-1.93914 1.12815,0"
+ id="path4089"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 657.37469,179.93087 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69518,1.7684 0.41869,0.40246 1.00005,0.6037 1.74399,0.6037 0.4309,0 0.84761,-0.0529 1.25009,-0.15855 0.40652,-0.1057 0.80896,-0.26424 1.20735,-0.47564 l 0,1.06104 c -0.40243,0.17074 -0.81506,0.30083 -1.23783,0.39026 -0.42282,0.0894 -0.8517,0.13416 -1.28669,0.13416 -1.08949,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.63421,-0.63419 -0.95129,-1.49196 -0.95129,-2.57333 0,-1.11794 0.30083,-2.00417 0.90248,-2.65869 0.60574,-0.65857 1.42085,-0.98785 2.44528,-0.98786 0.91873,1e-5 1.6444,0.29677 2.17695,0.89029 0.53659,0.58948 0.80491,1.39237 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61385 -0.1809,-1.10371 -0.51832,-1.46959 -0.33338,-0.36587 -0.77649,-0.54881 -1.32934,-0.54881 -0.62608,0 -1.12815,0.17684 -1.5062,0.53052 -0.37401,0.35368 -0.58949,0.85167 -0.64637,1.49398 l 4.00023,-0.006"
+ id="path4091"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 663.17383,177.84538 c -0.12604,-0.0732 -0.26424,-0.12601 -0.41465,-0.15854 -0.14637,-0.0366 -0.30895,-0.0549 -0.48783,-0.0549 -0.63421,0 -1.12204,0.20733 -1.4635,0.62198 -0.33742,0.41061 -0.50616,1.0021 -0.50616,1.7745 l 0,3.59777 -1.1281,0 0,-6.82966 1.1281,0 0,1.06103 c 0.23582,-0.41465 0.54275,-0.72158 0.9208,-0.92079 0.37806,-0.20325 0.83747,-0.30488 1.37815,-0.30489 0.0772,1e-5 0.16258,0.006 0.25611,0.0183 0.0935,0.008 0.19715,0.0224 0.31097,0.0427 l 0.006,1.15251"
+ id="path4093"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 664.3629,176.79655 1.12204,0 0,6.82966 -1.12204,0 0,-6.82966 m 0,-2.6587 1.12204,0 0,1.42082 -1.12204,0 0,-1.42082"
+ id="path4095"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 670.93035,180.19308 c -0.90652,1e-5 -1.53462,0.10367 -1.88425,0.311 -0.34959,0.20733 -0.52443,0.56101 -0.52438,1.06103 -5e-5,0.3984 0.13007,0.71549 0.39027,0.95128 0.26423,0.23172 0.62194,0.34758 1.07323,0.34758 0.62195,0 1.11997,-0.21952 1.49398,-0.65858 0.37806,-0.44311 0.56709,-1.03054 0.56709,-1.76229 l 0,-0.25002 -1.11594,0 m 2.23797,-0.46344 0,3.89657 -1.12203,0 0,-1.03665 c -0.25611,0.41466 -0.57526,0.72159 -0.95735,0.92079 -0.38214,0.19513 -0.84968,0.2927 -1.40253,0.2927 -0.69926,0 -1.2562,-0.19514 -1.67084,-0.5854 -0.41061,-0.39433 -0.61589,-0.92078 -0.61589,-1.57936 0,-0.76833 0.25611,-1.34764 0.76832,-1.73791 0.5163,-0.39026 1.28462,-0.58539 2.30505,-0.5854 l 1.57324,0 0,-0.10976 c 0,-0.51629 -0.17076,-0.91468 -0.51222,-1.19519 -0.33742,-0.28456 -0.81308,-0.42685 -1.4269,-0.42685 -0.39027,0 -0.77039,0.0468 -1.14032,0.14025 -0.36997,0.0935 -0.72566,0.23375 -1.06712,0.42075 l 0,-1.03664 c 0.41056,-0.15854 0.80895,-0.27644 1.19518,-0.35368 0.38618,-0.0813 0.76221,-0.12195 1.1281,-0.12196 0.98788,1e-5 1.72571,0.25612 2.21354,0.76834 0.48784,0.51223 0.73173,1.28869 0.73177,2.3294"
+ id="path4097"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 675.4855,174.13785 1.12204,0 0,9.48836 -1.12204,0 0,-9.48836"
+ id="path4099"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 682.97375,174.52202 5.75643,0 0,1.03665 -4.52466,0 0,2.69527 4.33564,0 0,1.03665 -4.33564,0 0,3.29897 4.63444,0 0,1.03665 -5.86621,0 0,-9.10419"
+ id="path4101"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 695.32202,177.83319 0,-3.69534 1.12204,0 0,9.48836 -1.12204,0 0,-1.02445 c -0.23577,0.40653 -0.53458,0.70939 -0.89638,0.90859 -0.35776,0.19513 -0.78866,0.2927 -1.29274,0.2927 -0.82526,0 -1.49808,-0.32929 -2.01842,-0.98786 -0.5163,-0.65858 -0.77442,-1.52448 -0.77442,-2.59771 0,-1.07323 0.25812,-1.93914 0.77442,-2.59772 0.52034,-0.65857 1.19316,-0.98785 2.01842,-0.98786 0.50408,1e-5 0.93498,0.0996 1.29274,0.2988 0.3618,0.19514 0.66061,0.49597 0.89638,0.90249 m -3.82338,2.38429 c 0,0.82525 0.16869,1.47366 0.50611,1.94523 0.34151,0.46751 0.809,0.70126 1.40253,0.70126 0.59352,0 1.06106,-0.23375 1.40252,-0.70126 0.34151,-0.47157 0.51222,-1.11998 0.51222,-1.94523 0,-0.82525 -0.17071,-1.47163 -0.51222,-1.93914 -0.34146,-0.47157 -0.809,-0.70735 -1.40252,-0.70736 -0.59353,1e-5 -1.06102,0.23579 -1.40253,0.70736 -0.33742,0.46751 -0.50611,1.11389 -0.50611,1.93914"
+ id="path4103"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 703.24934,180.1321 c 0,-0.81305 -0.16873,-1.44317 -0.50615,-1.89035 -0.33334,-0.44717 -0.80289,-0.67076 -1.40859,-0.67077 -0.6017,1e-5 -1.07121,0.2236 -1.40863,0.67077 -0.33338,0.44718 -0.50005,1.0773 -0.50005,1.89035 0,0.80899 0.16667,1.43708 0.50005,1.88426 0.33742,0.44718 0.80693,0.67077 1.40863,0.67077 0.6057,0 1.07525,-0.22359 1.40859,-0.67077 0.33742,-0.44718 0.50615,-1.07527 0.50615,-1.88426 m 1.12199,2.6465 c 0,1.16267 -0.25812,2.02654 -0.77442,2.59161 -0.5163,0.56914 -1.30698,0.85371 -2.37209,0.85371 -0.39435,0 -0.7663,-0.0305 -1.11593,-0.0915 -0.34959,-0.0569 -0.68907,-0.14635 -1.01832,-0.26831 l 0,-1.09152 c 0.32925,0.17887 0.6545,0.31099 0.97566,0.39636 0.32113,0.0854 0.6484,0.12805 0.98173,0.12806 0.73582,-1e-5 1.28669,-0.1931 1.65257,-0.5793 0.36584,-0.38214 0.54881,-0.96144 0.54881,-1.73791 l 0,-0.55491 c -0.23173,0.40246 -0.52851,0.70329 -0.89031,0.90249 -0.3618,0.1992 -0.79477,0.2988 -1.29886,0.2988 -0.83746,0 -1.51226,-0.31913 -2.02451,-0.95737 -0.51222,-0.63825 -0.76832,-1.48383 -0.76832,-2.53674 0,-1.05696 0.2561,-1.90458 0.76832,-2.54283 0.51225,-0.63824 1.18705,-0.95736 2.02451,-0.95737 0.50409,1e-5 0.93706,0.0996 1.29886,0.2988 0.3618,0.1992 0.65858,0.50003 0.89031,0.90249 l 0,-1.03664 1.12199,0 0,5.98205"
+ id="path4105"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 712.52428,179.93087 0,0.54881 -5.15887,0 c 0.0488,0.77241 0.28049,1.36187 0.69518,1.7684 0.41874,0.40246 1.00005,0.6037 1.74399,0.6037 0.4309,0 0.84761,-0.0529 1.25009,-0.15855 0.40652,-0.1057 0.80896,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39026 -0.42282,0.0894 -0.8517,0.13416 -1.28669,0.13416 -1.08949,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.63421,-0.63419 -0.95129,-1.49196 -0.95129,-2.57333 0,-1.11794 0.30083,-2.00417 0.90248,-2.65869 0.60574,-0.65857 1.42085,-0.98785 2.44528,-0.98786 0.91878,1e-5 1.6444,0.29677 2.17695,0.89029 0.53664,0.58948 0.80491,1.39237 0.80496,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10371 -0.51832,-1.46959 -0.33338,-0.36587 -0.77649,-0.54881 -1.32934,-0.54881 -0.62608,0 -1.12815,0.17684 -1.5062,0.53052 -0.37401,0.35368 -0.58944,0.85167 -0.64637,1.49398 l 4.00023,-0.006"
+ id="path4107"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 718.71974,176.99778 0,1.06103 c -0.31708,-0.1626 -0.64637,-0.28456 -0.98788,-0.36587 -0.34146,-0.0813 -0.69513,-0.12195 -1.06102,-0.12196 -0.55693,1e-5 -0.97567,0.0854 -1.25615,0.25611 -0.27645,0.17075 -0.4147,0.42686 -0.4147,0.76834 0,0.26018 0.0996,0.46548 0.29881,0.61589 0.19922,0.14635 0.59963,0.28661 1.20129,0.42076 l 0.38416,0.0854 c 0.79683,0.17075 1.36189,0.41263 1.69522,0.72566 0.33742,0.30896 0.50616,0.74191 0.50616,1.29885 0,0.63419 -0.25207,1.13625 -0.75616,1.50619 -0.50004,0.36994 -1.18907,0.55491 -2.06717,0.55491 -0.36589,0 -0.74803,-0.0366 -1.14642,-0.10976 -0.39435,-0.0691 -0.81102,-0.17481 -1.25009,-0.3171 l 0,-1.1586 c 0.41469,0.21546 0.82323,0.37807 1.22571,0.48784 0.40243,0.10569 0.80083,0.15854 1.19518,0.15854 0.52847,0 0.93499,-0.0894 1.21956,-0.26831 0.28457,-0.18293 0.42686,-0.43905 0.42686,-0.76833 0,-0.3049 -0.10367,-0.53865 -0.31097,-0.70127 -0.20326,-0.16261 -0.65248,-0.31912 -1.34766,-0.46953 l -0.39027,-0.0915 c -0.69513,-0.14635 -1.1972,-0.36994 -1.50615,-0.67078 -0.309,-0.30489 -0.46346,-0.72158 -0.46346,-1.25007 0,-0.64231 0.22764,-1.13827 0.68297,-1.48789 0.45528,-0.3496 1.1017,-0.52441 1.93912,-0.52442 0.41465,1e-5 0.80491,0.0305 1.1708,0.0915 0.36589,0.061 0.70331,0.15245 1.01226,0.27441"
+ id="path4109"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 721.16501,182.07734 1.28664,0 0,1.54887 -1.28664,0 0,-1.54887 m 0,-4.90882 1.28664,0 0,1.54887 -1.28664,0 0,-1.54887"
+ id="path4111"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 732.16566,175.73551 -1.67084,4.53075 3.34775,0 -1.67691,-4.53075 m -0.69518,-1.21349 1.39642,0 3.46975,9.10419 -1.28058,0 -0.82934,-2.3355 -4.10386,0 -0.82934,2.3355 -1.29885,0 3.4758,-9.10419"
+ id="path4113"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 741.8979,177.83319 0,-3.69534 1.12204,0 0,9.48836 -1.12204,0 0,-1.02445 c -0.23576,0.40653 -0.53457,0.70939 -0.89637,0.90859 -0.35776,0.19513 -0.78866,0.2927 -1.29275,0.2927 -0.82525,0 -1.49807,-0.32929 -2.01841,-0.98786 -0.5163,-0.65858 -0.77443,-1.52448 -0.77443,-2.59771 0,-1.07323 0.25813,-1.93914 0.77443,-2.59772 0.52034,-0.65857 1.19316,-0.98785 2.01841,-0.98786 0.50409,1e-5 0.93499,0.0996 1.29275,0.2988 0.3618,0.19514 0.66061,0.49597 0.89637,0.90249 m -3.82337,2.38429 c 0,0.82525 0.16869,1.47366 0.50611,1.94523 0.3415,0.46751 0.809,0.70126 1.40252,0.70126 0.59353,0 1.06107,-0.23375 1.40253,-0.70126 0.34151,-0.47157 0.51221,-1.11998 0.51221,-1.94523 0,-0.82525 -0.1707,-1.47163 -0.51221,-1.93914 -0.34146,-0.47157 -0.809,-0.70735 -1.40253,-0.70736 -0.59352,1e-5 -1.06102,0.23579 -1.40252,0.70736 -0.33742,0.46751 -0.50611,1.11389 -0.50611,1.93914"
+ id="path4115"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 749.8374,177.83319 0,-3.69534 1.12204,0 0,9.48836 -1.12204,0 0,-1.02445 c -0.23577,0.40653 -0.53458,0.70939 -0.89638,0.90859 -0.35776,0.19513 -0.78866,0.2927 -1.29274,0.2927 -0.82526,0 -1.49808,-0.32929 -2.01842,-0.98786 -0.5163,-0.65858 -0.77447,-1.52448 -0.77447,-2.59771 0,-1.07323 0.25817,-1.93914 0.77447,-2.59772 0.52034,-0.65857 1.19316,-0.98785 2.01842,-0.98786 0.50408,1e-5 0.93498,0.0996 1.29274,0.2988 0.3618,0.19514 0.66061,0.49597 0.89638,0.90249 m -3.82338,2.38429 c 0,0.82525 0.16869,1.47366 0.50611,1.94523 0.34151,0.46751 0.809,0.70126 1.40253,0.70126 0.59352,0 1.06102,-0.23375 1.40252,-0.70126 0.34146,-0.47157 0.51222,-1.11998 0.51222,-1.94523 0,-0.82525 -0.17076,-1.47163 -0.51222,-1.93914 -0.3415,-0.47157 -0.809,-0.70735 -1.40252,-0.70736 -0.59353,1e-5 -1.06102,0.23579 -1.40253,0.70736 -0.33742,0.46751 -0.50611,1.11389 -0.50611,1.93914"
+ id="path4117"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 760.35021,180.19308 c -0.90656,1e-5 -1.53462,0.10367 -1.88425,0.311 -0.34963,0.20733 -0.52443,0.56101 -0.52443,1.06103 0,0.3984 0.13012,0.71549 0.39027,0.95128 0.26423,0.23172 0.62199,0.34758 1.07323,0.34758 0.622,0 1.11998,-0.21952 1.49399,-0.65858 0.3781,-0.44311 0.56713,-1.03054 0.56713,-1.76229 l 0,-0.25002 -1.11594,0 m 2.23793,-0.46344 0,3.89657 -1.12199,0 0,-1.03665 c -0.25611,0.41466 -0.57526,0.72159 -0.9574,0.92079 -0.38214,0.19513 -0.84963,0.2927 -1.40252,0.2927 -0.69922,0 -1.25616,-0.19514 -1.6708,-0.5854 -0.41061,-0.39433 -0.61589,-0.92078 -0.61589,-1.57936 0,-0.76833 0.25611,-1.34764 0.76832,-1.73791 0.5163,-0.39026 1.28462,-0.58539 2.30501,-0.5854 l 1.57328,0 0,-0.10976 c 0,-0.51629 -0.17076,-0.91468 -0.51222,-1.19519 -0.33742,-0.28456 -0.81308,-0.42685 -1.42695,-0.42685 -0.39027,0 -0.77034,0.0468 -1.14027,0.14025 -0.36997,0.0935 -0.72566,0.23375 -1.06717,0.42075 l 0,-1.03664 c 0.41061,-0.15854 0.809,-0.27644 1.19523,-0.35368 0.38618,-0.0813 0.76221,-0.12195 1.1281,-0.12196 0.98783,1e-5 1.72571,0.25612 2.21354,0.76834 0.48784,0.51223 0.73173,1.28869 0.73173,2.3294"
+ id="path4119"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 773.79614,177.05875 0,1.04884 c -0.31713,-0.17479 -0.63623,-0.30489 -0.95739,-0.39026 -0.31708,-0.0894 -0.63825,-0.13415 -0.96346,-0.13415 -0.72768,0 -1.29279,0.23172 -1.69522,0.69516 -0.40248,0.45938 -0.60372,1.10576 -0.60372,1.93914 0,0.83338 0.20124,1.48179 0.60372,1.94523 0.40243,0.45938 0.96754,0.68907 1.69522,0.68907 0.32521,0 0.64638,-0.0427 0.96346,-0.12806 0.32116,-0.0894 0.64026,-0.22156 0.95739,-0.39637 l 0,1.03665 c -0.31304,0.14635 -0.63829,0.25611 -0.97567,0.32929 -0.33338,0.0732 -0.68907,0.10976 -1.06717,0.10976 -1.02851,0 -1.84564,-0.32319 -2.45133,-0.96957 -0.60574,-0.64638 -0.90859,-1.51838 -0.90859,-2.616 0,-1.11389 0.30487,-1.98996 0.91469,-2.62821 0.61382,-0.63824 1.45331,-0.95736 2.51842,-0.95737 0.34554,1e-5 0.68296,0.0366 1.01226,0.10976 0.32929,0.0691 0.64839,0.17482 0.95739,0.31709"
+ id="path4121"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 775.6438,180.93093 0,-4.13438 1.12199,0 0,4.09169 c 0,0.64639 0.12604,1.13218 0.3781,1.45741 0.25202,0.32115 0.63012,0.48173 1.13421,0.48173 0.60569,0 1.08338,-0.1931 1.43301,-0.5793 0.35368,-0.3862 0.53049,-0.91265 0.53049,-1.57936 l 0,-3.87217 1.12204,0 0,6.82966 -1.12204,0 0,-1.04884 c -0.27236,0.41466 -0.58944,0.72362 -0.95124,0.92688 -0.35776,0.1992 -0.77447,0.2988 -1.25009,0.2988 -0.78458,0 -1.38017,-0.24392 -1.78669,-0.73175 -0.40652,-0.48784 -0.60978,-1.20129 -0.60978,-2.14037"
+ id="path4123"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 784.79675,174.85741 0,1.93914 2.31111,0 0,0.87199 -2.31111,0 0,3.70754 c 0,0.55694 0.0752,0.91468 0.22562,1.07323 0.15449,0.15855 0.46547,0.23782 0.93301,0.23782 l 1.15248,0 0,0.93908 -1.15248,0 c -0.86593,0 -1.4635,-0.16058 -1.7928,-0.48173 -0.32929,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70754 -0.82323,0 0,-0.87199 0.82323,0 0,-1.93914 1.12811,0"
+ id="path4125"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 789.6995,174.85741 0,1.93914 2.31112,0 0,0.87199 -2.31112,0 0,3.70754 c 0,0.55694 0.0752,0.91468 0.22562,1.07323 0.15446,0.15855 0.46548,0.23782 0.93297,0.23782 l 1.15253,0 0,0.93908 -1.15253,0 c -0.86589,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.3293,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70754 -0.82319,0 0,-0.87199 0.82319,0 0,-1.93914 1.12814,0"
+ id="path4127"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 793.49239,176.79655 1.12199,0 0,6.82966 -1.12199,0 0,-6.82966 m 0,-2.6587 1.12199,0 0,1.42082 -1.12199,0 0,-1.42082"
+ id="path4129"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 802.63317,179.50402 0,4.12219 -1.12204,0 0,-4.0856 c 0,-0.64638 -0.12599,-1.13015 -0.37805,-1.45131 -0.25207,-0.32115 -0.63012,-0.48173 -1.13421,-0.48173 -0.60574,0 -1.08343,0.1931 -1.43301,0.5793 -0.34964,0.38621 -0.52443,0.91266 -0.52443,1.57936 l 0,3.85998 -1.1281,0 0,-6.82966 1.1281,0 0,1.06103 c 0.26832,-0.41058 0.58338,-0.71751 0.94518,-0.92079 0.36589,-0.20325 0.78664,-0.30488 1.26226,-0.30489 0.78462,1e-5 1.37815,0.24392 1.78058,0.73175 0.40248,0.48377 0.60372,1.19723 0.60372,2.14037"
+ id="path4131"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 809.37748,180.1321 c -4e-5,-0.81305 -0.16873,-1.44317 -0.50615,-1.89035 -0.33333,-0.44717 -0.80289,-0.67076 -1.40863,-0.67077 -0.60166,1e-5 -1.07117,0.2236 -1.40859,0.67077 -0.33338,0.44718 -0.50005,1.0773 -0.50005,1.89035 0,0.80899 0.16667,1.43708 0.50005,1.88426 0.33742,0.44718 0.80693,0.67077 1.40859,0.67077 0.60574,0 1.0753,-0.22359 1.40863,-0.67077 0.33742,-0.44718 0.50611,-1.07527 0.50615,-1.88426 m 1.122,2.6465 c 0,1.16267 -0.25813,2.02654 -0.77443,2.59161 -0.5163,0.56914 -1.30698,0.85371 -2.37209,0.85371 -0.39435,0 -0.7663,-0.0305 -1.11593,-0.0915 -0.34963,-0.0569 -0.68907,-0.14635 -1.01837,-0.26831 l 0,-1.09152 c 0.3293,0.17887 0.65455,0.31099 0.97567,0.39636 0.32117,0.0854 0.64844,0.12805 0.98177,0.12806 0.73582,-1e-5 1.28669,-0.1931 1.65253,-0.5793 0.36589,-0.38214 0.54881,-0.96144 0.54885,-1.73791 l 0,-0.55491 c -0.23173,0.40246 -0.52851,0.70329 -0.89031,0.90249 -0.3618,0.1992 -0.79477,0.2988 -1.29885,0.2988 -0.83747,0 -1.51231,-0.31913 -2.02452,-0.95737 -0.51222,-0.63825 -0.76832,-1.48383 -0.76832,-2.53674 0,-1.05696 0.2561,-1.90458 0.76832,-2.54283 0.51221,-0.63824 1.18705,-0.95736 2.02452,-0.95737 0.50408,1e-5 0.93705,0.0996 1.29885,0.2988 0.3618,0.1992 0.65858,0.50003 0.89031,0.90249 l 0,-1.03664 1.122,0 0,5.98205"
+ id="path4133"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 816.78644,174.13785 1.12199,0 0,9.48836 -1.12199,0 0,-9.48836"
+ id="path4135"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 820.25003,176.79655 1.12204,0 0,6.82966 -1.12204,0 0,-6.82966 m 0,-2.6587 1.12204,0 0,1.42082 -1.12204,0 0,-1.42082"
+ id="path4137"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 829.39081,179.50402 0,4.12219 -1.12199,0 0,-4.0856 c 0,-0.64638 -0.12603,-1.13015 -0.3781,-1.45131 -0.25202,-0.32115 -0.63012,-0.48173 -1.13421,-0.48173 -0.60569,0 -1.08338,0.1931 -1.43301,0.5793 -0.34959,0.38621 -0.52443,0.91266 -0.52443,1.57936 l 0,3.85998 -1.1281,0 0,-6.82966 1.1281,0 0,1.06103 c 0.26832,-0.41058 0.58338,-0.71751 0.94518,-0.92079 0.36589,-0.20325 0.78664,-0.30488 1.26231,-0.30489 0.78457,1e-5 1.3781,0.24392 1.78058,0.73175 0.40243,0.48377 0.60367,1.19723 0.60367,2.14037"
+ id="path4139"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 837.48274,179.93087 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69513,1.7684 0.41874,0.40246 1.0001,0.6037 1.74404,0.6037 0.4309,0 0.84761,-0.0529 1.25004,-0.15855 0.40652,-0.1057 0.809,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81506,0.30083 -1.23788,0.39026 -0.42278,0.0894 -0.85166,0.13416 -1.28664,0.13416 -1.08949,0 -1.95336,-0.31709 -2.5916,-0.95127 -0.63421,-0.63419 -0.95129,-1.49196 -0.95129,-2.57333 0,-1.11794 0.30083,-2.00417 0.90248,-2.65869 0.60574,-0.65857 1.4208,-0.98785 2.44527,-0.98786 0.91874,1e-5 1.6444,0.29677 2.17696,0.89029 0.53659,0.58948 0.80491,1.39237 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61385 -0.18095,-1.10371 -0.51832,-1.46959 -0.33338,-0.36587 -0.7765,-0.54881 -1.32939,-0.54881 -0.62603,0 -1.1281,0.17684 -1.50615,0.53052 -0.37402,0.35368 -0.58949,0.85167 -0.64638,1.49398 l 4.00024,-0.006"
+ id="path4141"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 844.41002,174.85741 0,1.93914 2.31111,0 0,0.87199 -2.31111,0 0,3.70754 c 0,0.55694 0.0752,0.91468 0.22562,1.07323 0.15445,0.15855 0.46547,0.23782 0.93296,0.23782 l 1.15253,0 0,0.93908 -1.15253,0 c -0.86588,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.32929,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70754 -0.82319,0 0,-0.87199 0.82319,0 0,-1.93914 1.12815,0"
+ id="path4143"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 850.84937,177.58318 c -0.60165,0 -1.07727,0.23579 -1.42691,0.70735 -0.34958,0.46751 -0.52442,1.10983 -0.52442,1.92695 0,0.81712 0.17277,1.46146 0.51832,1.93303 0.34963,0.46751 0.82732,0.70127 1.43301,0.70127 0.59761,0 1.07121,-0.23579 1.42085,-0.70737 0.34958,-0.47157 0.52438,-1.11388 0.52442,-1.92693 -4e-5,-0.80899 -0.17484,-1.44927 -0.52442,-1.92085 -0.34964,-0.47563 -0.82324,-0.71345 -1.42085,-0.71345 m 0,-0.95128 c 0.97567,1e-5 1.74197,0.3171 2.29895,0.95128 0.55693,0.63418 0.8354,1.51228 0.8354,2.6343 0,1.11795 -0.27847,1.99605 -0.8354,2.6343 -0.55698,0.63418 -1.32328,0.95127 -2.29895,0.95127 -0.97971,0 -1.74807,-0.31709 -2.30501,-0.95127 -0.55284,-0.63825 -0.82929,-1.51635 -0.82929,-2.6343 0,-1.12202 0.27645,-2.00012 0.82929,-2.6343 0.55694,-0.63418 1.3253,-0.95127 2.30501,-0.95128"
+ id="path4145"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 860.92312,174.85741 0,1.93914 2.31111,0 0,0.87199 -2.31111,0 0,3.70754 c 0,0.55694 0.0752,0.91468 0.22562,1.07323 0.1545,0.15855 0.46547,0.23782 0.93301,0.23782 l 1.15248,0 0,0.93908 -1.15248,0 c -0.86593,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.3293,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70754 -0.82324,0 0,-0.87199 0.82324,0 0,-1.93914 1.1281,0"
+ id="path4147"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 870.39323,179.50402 0,4.12219 -1.12204,0 0,-4.0856 c 0,-0.64638 -0.12603,-1.13015 -0.37805,-1.45131 -0.25207,-0.32115 -0.63012,-0.48173 -1.13421,-0.48173 -0.60574,0 -1.08342,0.1931 -1.43301,0.5793 -0.34963,0.38621 -0.52443,0.91266 -0.52443,1.57936 l 0,3.85998 -1.12814,0 0,-9.48836 1.12814,0 0,3.71973 c 0.26828,-0.41058 0.58334,-0.71751 0.94518,-0.92079 0.36585,-0.20325 0.7866,-0.30488 1.26226,-0.30489 0.78458,1e-5 1.3781,0.24392 1.78058,0.73175 0.40248,0.48377 0.60368,1.19723 0.60372,2.14037"
+ id="path4149"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 878.48516,179.93087 0,0.54881 -5.15887,0 c 0.0488,0.77241 0.28054,1.36187 0.69518,1.7684 0.41874,0.40246 1.00005,0.6037 1.74399,0.6037 0.43095,0 0.84761,-0.0529 1.25009,-0.15855 0.40652,-0.1057 0.809,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39026 -0.42282,0.0894 -0.8517,0.13416 -1.28669,0.13416 -1.08949,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.63416,-0.63419 -0.95129,-1.49196 -0.95129,-2.57333 0,-1.11794 0.30083,-2.00417 0.90253,-2.65869 0.60569,-0.65857 1.4208,-0.98785 2.44523,-0.98786 0.91878,1e-5 1.6444,0.29677 2.177,0.89029 0.53659,0.58948 0.80491,1.39237 0.80491,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10371 -0.51832,-1.46959 -0.33333,-0.36587 -0.77645,-0.54881 -1.32934,-0.54881 -0.62603,0 -1.1281,0.17684 -1.5062,0.53052 -0.37397,0.35368 -0.58944,0.85167 -0.64637,1.49398 l 4.00023,-0.006"
+ id="path4151"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 883.65009,176.79655 1.12199,0 1.40253,5.32957 1.39642,-5.32957 1.32328,0 1.40248,5.32957 1.39646,-5.32957 1.122,0 -1.78669,6.82966 -1.32323,0 -1.46961,-5.59789 -1.47571,5.59789 -1.32324,0 -1.78668,-6.82966"
+ id="path4153"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 900.19982,179.50402 0,4.12219 -1.12199,0 0,-4.0856 c 0,-0.64638 -0.12603,-1.13015 -0.3781,-1.45131 -0.25202,-0.32115 -0.63012,-0.48173 -1.13421,-0.48173 -0.60574,0 -1.08338,0.1931 -1.43301,0.5793 -0.34959,0.38621 -0.52443,0.91266 -0.52443,1.57936 l 0,3.85998 -1.1281,0 0,-9.48836 1.1281,0 0,3.71973 c 0.26832,-0.41058 0.58338,-0.71751 0.94518,-0.92079 0.36589,-0.20325 0.78664,-0.30488 1.26231,-0.30489 0.78457,1e-5 1.3781,0.24392 1.78058,0.73175 0.40243,0.48377 0.60367,1.19723 0.60367,2.14037"
+ id="path4155"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 902.44996,176.79655 1.12204,0 0,6.82966 -1.12204,0 0,-6.82966 m 0,-2.6587 1.12204,0 0,1.42082 -1.12204,0 0,-1.42082"
+ id="path4157"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 907.02338,174.85741 0,1.93914 2.31112,0 0,0.87199 -2.31112,0 0,3.70754 c 0,0.55694 0.0752,0.91468 0.22562,1.07323 0.1545,0.15855 0.46548,0.23782 0.93297,0.23782 l 1.15253,0 0,0.93908 -1.15253,0 c -0.86589,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.32925,-0.32523 -0.4939,-0.91469 -0.4939,-1.7684 l 0,-3.70754 -0.82323,0 0,-0.87199 0.82323,0 0,-1.93914 1.1281,0"
+ id="path4159"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 916.6581,179.93087 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69514,1.7684 0.41873,0.40246 1.00004,0.6037 1.74403,0.6037 0.4309,0 0.84757,-0.0529 1.25005,-0.15855 0.40652,-0.1057 0.809,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39026 -0.42277,0.0894 -0.85165,0.13416 -1.28664,0.13416 -1.08953,0 -1.9534,-0.31709 -2.59165,-0.95127 -0.63416,-0.63419 -0.95124,-1.49196 -0.95124,-2.57333 0,-1.11794 0.30083,-2.00417 0.90248,-2.65869 0.60574,-0.65857 1.4208,-0.98785 2.44528,-0.98786 0.91873,1e-5 1.6444,0.29677 2.17695,0.89029 0.53659,0.58948 0.80491,1.39237 0.80491,2.40868 m -1.12199,-0.32929 c -0.008,-0.61385 -0.18095,-1.10371 -0.51837,-1.46959 -0.33333,-0.36587 -0.77644,-0.54881 -1.32934,-0.54881 -0.62603,0 -1.1281,0.17684 -1.50615,0.53052 -0.37401,0.35368 -0.58949,0.85167 -0.64637,1.49398 l 4.00023,-0.006"
+ id="path4161"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 923.56095,182.60176 0,3.62216 -1.12814,0 0,-9.42737 1.12814,0 0,1.03664 c 0.23577,-0.40652 0.53256,-0.70735 0.89027,-0.90249 0.3618,-0.1992 0.79275,-0.29879 1.29279,-0.2988 0.8293,1e-5 1.50212,0.32929 2.01837,0.98786 0.52039,0.65858 0.78053,1.52449 0.78053,2.59772 0,1.07323 -0.26014,1.93913 -0.78053,2.59771 -0.51625,0.65857 -1.18907,0.98786 -2.01837,0.98786 -0.50004,0 -0.93099,-0.0976 -1.29279,-0.2927 -0.35771,-0.1992 -0.6545,-0.50206 -0.89027,-0.90859 m 3.81727,-2.38428 c 0,-0.82525 -0.17075,-1.47163 -0.51221,-1.93914 -0.33742,-0.47157 -0.8029,-0.70735 -1.39642,-0.70736 -0.59353,1e-5 -1.06102,0.23579 -1.40253,0.70736 -0.33742,0.46751 -0.50611,1.11389 -0.50611,1.93914 0,0.82525 0.16869,1.47366 0.50611,1.94523 0.34151,0.46751 0.809,0.70126 1.40253,0.70126 0.59352,0 1.059,-0.23375 1.39642,-0.70126 0.34146,-0.47157 0.51221,-1.11998 0.51221,-1.94523"
+ id="path4163"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 936.24462,179.93087 0,0.54881 -5.15887,0 c 0.0488,0.77241 0.28054,1.36187 0.69518,1.7684 0.41874,0.40246 1.00005,0.6037 1.74399,0.6037 0.43095,0 0.84761,-0.0529 1.25009,-0.15855 0.40652,-0.1057 0.809,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39026 -0.42282,0.0894 -0.8517,0.13416 -1.28669,0.13416 -1.08949,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.63416,-0.63419 -0.95129,-1.49196 -0.95129,-2.57333 0,-1.11794 0.30083,-2.00417 0.90253,-2.65869 0.60569,-0.65857 1.4208,-0.98785 2.44523,-0.98786 0.91878,1e-5 1.6444,0.29677 2.17695,0.89029 0.53664,0.58948 0.80496,1.39237 0.80496,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10371 -0.51832,-1.46959 -0.33333,-0.36587 -0.77645,-0.54881 -1.32934,-0.54881 -0.62608,0 -1.1281,0.17684 -1.5062,0.53052 -0.37401,0.35368 -0.58944,0.85167 -0.64637,1.49398 l 4.00023,-0.006"
+ id="path4165"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 942.04371,177.84538 c -0.12604,-0.0732 -0.26424,-0.12601 -0.41465,-0.15854 -0.14633,-0.0366 -0.30895,-0.0549 -0.48783,-0.0549 -0.63416,0 -1.122,0.20733 -1.4635,0.62198 -0.33742,0.41061 -0.50611,1.0021 -0.50611,1.7745 l 0,3.59777 -1.12815,0 0,-6.82966 1.12815,0 0,1.06103 c 0.23577,-0.41465 0.5427,-0.72158 0.92075,-0.92079 0.3781,-0.20325 0.83747,-0.30488 1.37815,-0.30489 0.0772,1e-5 0.16263,0.006 0.25611,0.0183 0.0935,0.008 0.19715,0.0224 0.31102,0.0427 l 0.006,1.15251"
+ id="path4167"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 943.23283,176.79655 1.12199,0 0,6.82966 -1.12199,0 0,-6.82966 m 0,-2.6587 1.12199,0 0,1.42082 -1.12199,0 0,-1.42082"
+ id="path4169"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 952.01382,178.10759 c 0.28049,-0.50408 0.61589,-0.87605 1.00616,-1.11591 0.39026,-0.23985 0.84963,-0.35977 1.3781,-0.35978 0.71143,1e-5 1.26024,0.25002 1.64646,0.75005 0.38618,0.49596 0.5793,1.20332 0.5793,2.12207 l 0,4.12219 -1.1281,0 0,-4.0856 c -5e-5,-0.65451 -0.11589,-1.14031 -0.34762,-1.45741 -0.23172,-0.31708 -0.5854,-0.47563 -1.06102,-0.47563 -0.58135,0 -1.04072,0.1931 -1.37814,0.5793 -0.33742,0.38621 -0.50611,0.91266 -0.50611,1.57936 l 0,3.85998 -1.1281,0 0,-4.0856 c -4e-5,-0.65858 -0.11588,-1.14438 -0.34761,-1.45741 -0.23173,-0.31708 -0.58944,-0.47563 -1.07323,-0.47563 -0.57319,0 -1.02852,0.19513 -1.36594,0.5854 -0.33742,0.3862 -0.5061,0.91062 -0.5061,1.57326 l 0,3.85998 -1.12815,0 0,-6.82966 1.12815,0 0,1.06103 c 0.2561,-0.41872 0.56304,-0.72768 0.92075,-0.92688 0.35776,-0.1992 0.7826,-0.29879 1.27447,-0.2988 0.49596,1e-5 0.91672,0.12603 1.26226,0.37807 0.34963,0.25205 0.60776,0.61793 0.77447,1.09762"
+ id="path4171"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 964.7097,179.93087 0,0.54881 -5.15886,0 c 0.0488,0.77241 0.28048,1.36187 0.69518,1.7684 0.41873,0.40246 1.00004,0.6037 1.74398,0.6037 0.4309,0 0.84762,-0.0529 1.2501,-0.15855 0.40652,-0.1057 0.80895,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39026 -0.42282,0.0894 -0.8517,0.13416 -1.28669,0.13416 -1.08948,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.6342,-0.63419 -0.95128,-1.49196 -0.95128,-2.57333 0,-1.11794 0.30082,-2.00417 0.90248,-2.65869 0.60574,-0.65857 1.42084,-0.98785 2.44527,-0.98786 0.91878,1e-5 1.6444,0.29677 2.17695,0.89029 0.53664,0.58948 0.80492,1.39237 0.80496,2.40868 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10371 -0.51832,-1.46959 -0.33338,-0.36587 -0.77649,-0.54881 -1.32934,-0.54881 -0.62608,0 -1.12814,0.17684 -1.5062,0.53052 -0.37401,0.35368 -0.58944,0.85167 -0.64637,1.49398 l 4.00023,-0.006"
+ id="path4173"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 967.66108,174.85741 0,1.93914 2.31112,0 0,0.87199 -2.31112,0 0,3.70754 c 0,0.55694 0.0752,0.91468 0.22562,1.07323 0.15446,0.15855 0.46548,0.23782 0.93297,0.23782 l 1.15253,0 0,0.93908 -1.15253,0 c -0.86589,0 -1.4635,-0.16058 -1.79279,-0.48173 -0.3293,-0.32523 -0.49394,-0.91469 -0.49394,-1.7684 l 0,-3.70754 -0.82319,0 0,-0.87199 0.82319,0 0,-1.93914 1.12814,0"
+ id="path4175"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 977.29576,179.93087 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28048,1.36187 0.69518,1.7684 0.41868,0.40246 1.00004,0.6037 1.74398,0.6037 0.4309,0 0.84762,-0.0529 1.25005,-0.15855 0.40657,-0.1057 0.809,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40243,0.17074 -0.81506,0.30083 -1.23788,0.39026 -0.42277,0.0894 -0.85165,0.13416 -1.28664,0.13416 -1.08948,0 -1.95335,-0.31709 -2.5916,-0.95127 -0.6342,-0.63419 -0.95128,-1.49196 -0.95128,-2.57333 0,-1.11794 0.30082,-2.00417 0.90248,-2.65869 0.60574,-0.65857 1.4208,-0.98785 2.44527,-0.98786 0.91873,1e-5 1.6444,0.29677 2.17695,0.89029 0.5366,0.58948 0.80492,1.39237 0.80492,2.40868 m -1.122,-0.32929 c -0.008,-0.61385 -0.1809,-1.10371 -0.51832,-1.46959 -0.33338,-0.36587 -0.77649,-0.54881 -1.32934,-0.54881 -0.62608,0 -1.12814,0.17684 -1.5062,0.53052 -0.37401,0.35368 -0.58948,0.85167 -0.64637,1.49398 l 4.00023,-0.006"
+ id="path4177"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 983.09489,177.84538 c -0.12604,-0.0732 -0.26424,-0.12601 -0.41465,-0.15854 -0.14637,-0.0366 -0.309,-0.0549 -0.48783,-0.0549 -0.63421,0 -1.12204,0.20733 -1.4635,0.62198 -0.33742,0.41061 -0.50615,1.0021 -0.50615,1.7745 l 0,3.59777 -1.12811,0 0,-6.82966 1.12811,0 0,1.06103 c 0.23581,-0.41465 0.54274,-0.72158 0.92079,-0.92079 0.37806,-0.20325 0.83743,-0.30488 1.37815,-0.30489 0.0772,1e-5 0.16258,0.006 0.25611,0.0183 0.0935,0.008 0.19715,0.0224 0.31097,0.0427 l 0.006,1.15251"
+ id="path4179"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 983.30834,182.07734 1.28664,0 0,1.54887 -1.28664,0 0,-1.54887"
+ id="path4181"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 590.02932,194.26707 0,3.42093 1.54885,0 c 0.57324,1e-5 1.01635,-0.14837 1.32939,-0.44514 0.31299,-0.29676 0.46951,-0.71955 0.46951,-1.26837 0,-0.54474 -0.15652,-0.9655 -0.46951,-1.26227 -0.31304,-0.29676 -0.75615,-0.44514 -1.32939,-0.44515 l -1.54885,0 m -1.23177,-1.01225 2.78062,0 c 1.02039,1e-5 1.79078,0.23173 2.31112,0.69516 0.52442,0.45939 0.78664,1.13422 0.78664,2.02451 0,0.89843 -0.26222,1.57733 -0.78664,2.03671 -0.52034,0.45937 -1.29073,0.68906 -2.31112,0.68906 l -1.54885,0 0,3.65875 -1.23177,0 0,-9.10419"
+ id="path4183"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 600.03599,196.57818 c -0.12604,-0.0732 -0.26424,-0.12601 -0.41465,-0.15854 -0.14633,-0.0366 -0.30895,-0.0549 -0.48783,-0.0549 -0.63416,0 -1.122,0.20733 -1.4635,0.62199 -0.33742,0.41059 -0.50611,1.00209 -0.50611,1.77449 l 0,3.59777 -1.12815,0 0,-6.82967 1.12815,0 0,1.06104 c 0.23577,-0.41465 0.5427,-0.72158 0.92075,-0.92078 0.3781,-0.20326 0.83747,-0.30489 1.37815,-0.3049 0.0772,1e-5 0.16263,0.006 0.25611,0.0183 0.0935,0.008 0.19715,0.0224 0.31102,0.0427 l 0.006,1.1525"
+ id="path4185"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 601.23727,195.52934 1.12204,0 0,6.82967 -1.12204,0 0,-6.82967 m 0,-2.65869 1.12204,0 0,1.42081 -1.12204,0 0,-1.42081"
+ id="path4187"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 609.61584,195.79155 0,1.04885 c -0.31713,-0.17481 -0.63623,-0.30489 -0.95739,-0.39027 -0.31708,-0.0894 -0.63825,-0.13415 -0.96346,-0.13416 -0.72768,1e-5 -1.29274,0.23173 -1.69522,0.69517 -0.40248,0.45938 -0.60368,1.10575 -0.60368,1.93913 0,0.83339 0.2012,1.4818 0.60368,1.94524 0.40248,0.45938 0.96754,0.68906 1.69522,0.68906 0.32521,0 0.64638,-0.0427 0.96346,-0.12805 0.32116,-0.0894 0.64026,-0.22156 0.95739,-0.39637 l 0,1.03665 c -0.31304,0.14635 -0.63825,0.25611 -0.97567,0.32928 -0.33338,0.0732 -0.68907,0.10977 -1.06712,0.10977 -1.02852,0 -1.84564,-0.32319 -2.45138,-0.96957 -0.60574,-0.64638 -0.90859,-1.51838 -0.90859,-2.61601 0,-1.11388 0.30491,-1.98994 0.91469,-2.6282 0.61387,-0.63824 1.45331,-0.95736 2.51842,-0.95737 0.34554,1e-5 0.68296,0.0366 1.01226,0.10976 0.32929,0.0691 0.64844,0.17481 0.95739,0.31709"
+ id="path4189"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 611.57934,195.52934 1.12204,0 0,6.82967 -1.12204,0 0,-6.82967 m 0,-2.65869 1.12204,0 0,1.42081 -1.12204,0 0,-1.42081"
+ id="path4191"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 620.72012,198.23682 0,4.12219 -1.122,0 0,-4.08561 c 0,-0.64637 -0.12603,-1.13014 -0.37805,-1.4513 -0.25207,-0.32115 -0.63016,-0.48173 -1.13425,-0.48174 -0.6057,1e-5 -1.08338,0.19311 -1.43301,0.57931 -0.34959,0.3862 -0.52439,0.91265 -0.52439,1.57936 l 0,3.85998 -1.12814,0 0,-6.82967 1.12814,0 0,1.06104 c 0.26828,-0.41059 0.58334,-0.71751 0.94518,-0.92078 0.36585,-0.20326 0.7866,-0.30489 1.26226,-0.3049 0.78458,1e-5 1.3781,0.24392 1.78058,0.73175 0.40244,0.48377 0.60368,1.19723 0.60368,2.14037"
+ id="path4193"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 627.46443,198.8649 c 0,-0.81305 -0.16873,-1.44317 -0.50611,-1.89035 -0.33338,-0.44718 -0.80289,-0.67077 -1.40863,-0.67077 -0.60165,0 -1.07121,0.22359 -1.40863,0.67077 -0.33334,0.44718 -0.5,1.0773 -0.5,1.89035 0,0.809 0.16666,1.43708 0.5,1.88426 0.33742,0.44718 0.80698,0.67077 1.40863,0.67077 0.60574,0 1.07525,-0.22359 1.40863,-0.67077 0.33738,-0.44718 0.50611,-1.07526 0.50611,-1.88426 m 1.12204,2.6465 c -5e-5,1.16266 -0.25817,2.02654 -0.77447,2.59161 -0.5163,0.56914 -1.30698,0.85371 -2.37209,0.85371 -0.39431,0 -0.7663,-0.0305 -1.11589,-0.0915 -0.34963,-0.0569 -0.68907,-0.14635 -1.01836,-0.26831 l 0,-1.09152 c 0.32929,0.17887 0.6545,0.31099 0.97566,0.39636 0.32117,0.0854 0.6484,0.12806 0.98178,0.12806 0.73581,0 1.28664,-0.19311 1.65252,-0.57931 0.36589,-0.38213 0.54881,-0.96143 0.54881,-1.7379 l 0,-0.55491 c -0.23173,0.40246 -0.52851,0.70329 -0.89031,0.90249 -0.3618,0.1992 -0.79477,0.2988 -1.29886,0.2988 -0.83742,0 -1.51226,-0.31912 -2.02447,-0.95738 -0.51226,-0.63824 -0.76837,-1.48382 -0.76837,-2.53673 0,-1.05696 0.25611,-1.90457 0.76837,-2.54283 0.51221,-0.63824 1.18705,-0.95736 2.02447,-0.95737 0.50409,1e-5 0.93706,0.0996 1.29886,0.29879 0.3618,0.19921 0.65858,0.50004 0.89031,0.9025 l 0,-1.03665 1.12204,0 0,5.98206"
+ id="path4195"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 631.18418,200.81014 1.28664,0 0,1.54887 -1.28664,0 0,-1.54887 m 0,-4.90883 1.28664,0 0,1.54888 -1.28664,0 0,-1.54888"
+ id="path4197"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 642.18478,194.4683 -1.6708,4.53076 3.34775,0 -1.67695,-4.53076 m -0.69513,-1.21348 1.39642,0 3.4697,9.10419 -1.28054,0 -0.82934,-2.3355 -4.1039,0 -0.82929,2.3355 -1.29886,0 3.47581,-9.10419"
+ id="path4199"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 655.96,195.73057 0,1.06104 c -0.31713,-0.16261 -0.64637,-0.28456 -0.98788,-0.36587 -0.34146,-0.0813 -0.69518,-0.12196 -1.06102,-0.12196 -0.55698,0 -0.97567,0.0854 -1.2562,0.25611 -0.2764,0.17075 -0.41465,0.42686 -0.41465,0.76834 0,0.26018 0.0996,0.46548 0.29881,0.61589 0.19917,0.14635 0.59963,0.2866 1.20129,0.42075 l 0.38416,0.0854 c 0.79678,0.17074 1.36189,0.41262 1.69522,0.72564 0.33742,0.30897 0.50611,0.74192 0.50616,1.29886 -5e-5,0.63418 -0.25207,1.13625 -0.75616,1.50619 -0.50004,0.36994 -1.18912,0.55491 -2.06722,0.55491 -0.36584,0 -0.74798,-0.0366 -1.14637,-0.10977 -0.39435,-0.0691 -0.81107,-0.1748 -1.25009,-0.31708 l 0,-1.15861 c 0.41464,0.21546 0.82323,0.37807 1.22566,0.48783 0.40248,0.1057 0.80088,0.15855 1.19523,0.15855 0.52847,0 0.93499,-0.0894 1.21956,-0.26831 0.28457,-0.18294 0.42686,-0.43905 0.42686,-0.76834 0,-0.30489 -0.10367,-0.53864 -0.31097,-0.70126 -0.20331,-0.16261 -0.65253,-0.31912 -1.34766,-0.46954 l -0.39027,-0.0915 c -0.69518,-0.14634 -1.19725,-0.36993 -1.5062,-0.67077 -0.30895,-0.30489 -0.46345,-0.72158 -0.46341,-1.25007 -4e-5,-0.64231 0.22764,-1.13827 0.68297,-1.48789 0.45528,-0.34961 1.10165,-0.52441 1.93912,-0.52442 0.41465,1e-5 0.80491,0.0305 1.1708,0.0915 0.36589,0.061 0.70326,0.15245 1.01226,0.2744"
+ id="path4201"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 658.11868,195.52934 1.12199,0 0,6.82967 -1.12199,0 0,-6.82967 m 0,-2.65869 1.12199,0 0,1.42081 -1.12199,0 0,-1.42081"
+ id="path4203"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 666.89963,196.8404 c 0.28054,-0.5041 0.61589,-0.87607 1.0062,-1.11592 0.39022,-0.23985 0.84964,-0.35977 1.3781,-0.35978 0.71144,1e-5 1.26024,0.25002 1.64647,0.75004 0.38618,0.49597 0.57925,1.20333 0.57929,2.12208 l 0,4.12219 -1.12814,0 0,-4.08561 c 0,-0.6545 -0.11584,-1.1403 -0.34757,-1.4574 -0.23173,-0.31708 -0.5854,-0.47563 -1.06102,-0.47564 -0.58136,1e-5 -1.04073,0.19311 -1.37815,0.57931 -0.33742,0.3862 -0.5061,0.91265 -0.5061,1.57936 l 0,3.85998 -1.12815,0 0,-4.08561 c 0,-0.65857 -0.11584,-1.14437 -0.34757,-1.4574 -0.23172,-0.31708 -0.58948,-0.47563 -1.07323,-0.47564 -0.57319,1e-5 -1.02851,0.19515 -1.36593,0.5854 -0.33742,0.38621 -0.50611,0.91063 -0.50611,1.57327 l 0,3.85998 -1.12815,0 0,-6.82967 1.12815,0 0,1.06104 c 0.25611,-0.41872 0.56304,-0.72768 0.92075,-0.92689 0.35776,-0.19919 0.78256,-0.29878 1.27448,-0.29879 0.49596,1e-5 0.91671,0.12603 1.26226,0.37807 0.34963,0.25205 0.60776,0.61793 0.77442,1.09763"
+ id="path4205"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 674.83912,201.33456 0,3.62216 -1.1281,0 0,-9.42738 1.1281,0 0,1.03665 c 0.23582,-0.40652 0.53256,-0.70735 0.89032,-0.9025 0.3618,-0.19919 0.7927,-0.29878 1.29274,-0.29879 0.82934,1e-5 1.50212,0.32929 2.01842,0.98786 0.52034,0.65858 0.78053,1.52448 0.78053,2.59771 0,1.07324 -0.26019,1.93914 -0.78053,2.59771 -0.5163,0.65858 -1.18908,0.98787 -2.01842,0.98787 -0.50004,0 -0.93094,-0.0976 -1.29274,-0.2927 -0.35776,-0.1992 -0.6545,-0.50207 -0.89032,-0.90859 m 3.81732,-2.38429 c 0,-0.82525 -0.17076,-1.47162 -0.51222,-1.93913 -0.33742,-0.47157 -0.80289,-0.70736 -1.39642,-0.70736 -0.59357,0 -1.06106,0.23579 -1.40252,0.70736 -0.33742,0.46751 -0.50616,1.11388 -0.50616,1.93913 0,0.82526 0.16874,1.47367 0.50616,1.94524 0.34146,0.46751 0.80895,0.70126 1.40252,0.70126 0.59353,0 1.059,-0.23375 1.39642,-0.70126 0.34146,-0.47157 0.51222,-1.11998 0.51222,-1.94524"
+ id="path4207"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 681.681,192.87065 1.122,0 0,9.48836 -1.122,0 0,-9.48836"
+ id="path4209"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 690.98643,198.66367 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69513,1.7684 0.41874,0.40246 1.00005,0.60369 1.74404,0.60369 0.4309,0 0.84756,-0.0528 1.25004,-0.15854 0.40652,-0.1057 0.809,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39027 -0.42278,0.0894 -0.8517,0.13415 -1.28664,0.13415 -1.08954,0 -1.9534,-0.31709 -2.59165,-0.95128 -0.63416,-0.63418 -0.95124,-1.49195 -0.95124,-2.57332 0,-1.11795 0.30083,-2.00417 0.90248,-2.65869 0.60569,-0.65857 1.4208,-0.98785 2.44527,-0.98786 0.91874,1e-5 1.6444,0.29677 2.17696,0.8903 0.53659,0.58946 0.80491,1.39236 0.80491,2.40867 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10371 -0.51832,-1.46959 -0.33333,-0.36587 -0.77645,-0.54881 -1.32934,-0.54882 -0.62603,1e-5 -1.1281,0.17685 -1.50615,0.53052 -0.37402,0.35369 -0.58949,0.85168 -0.64642,1.49399 l 4.00023,-0.006"
+ id="path4211"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 701.29801,196.56599 0,-3.69534 1.12199,0 0,9.48836 -1.12199,0 0,-1.02445 c -0.23581,0.40652 -0.53462,0.70939 -0.89642,0.90859 -0.35772,0.19513 -0.78866,0.2927 -1.29275,0.2927 -0.82525,0 -1.49807,-0.32929 -2.01841,-0.98787 -0.5163,-0.65857 -0.77443,-1.52447 -0.77443,-2.59771 0,-1.07323 0.25813,-1.93913 0.77443,-2.59771 0.52034,-0.65857 1.19316,-0.98785 2.01841,-0.98786 0.50409,1e-5 0.93503,0.0996 1.29275,0.29879 0.3618,0.19515 0.66061,0.49598 0.89642,0.9025 m -3.82342,2.38428 c 0,0.82526 0.16873,1.47367 0.50615,1.94524 0.34146,0.46751 0.80896,0.70126 1.40253,0.70126 0.59352,0 1.06102,-0.23375 1.40248,-0.70126 0.3415,-0.47157 0.51226,-1.11998 0.51226,-1.94524 0,-0.82525 -0.17076,-1.47162 -0.51226,-1.93913 -0.34146,-0.47157 -0.80896,-0.70736 -1.40248,-0.70736 -0.59357,0 -1.06107,0.23579 -1.40253,0.70736 -0.33742,0.46751 -0.50615,1.11388 -0.50615,1.93913"
+ id="path4213"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 710.57295,198.66367 0,0.54881 -5.15887,0 c 0.0488,0.77241 0.28049,1.36187 0.69518,1.7684 0.41873,0.40246 1.00005,0.60369 1.74399,0.60369 0.4309,0 0.84761,-0.0528 1.25009,-0.15854 0.40652,-0.1057 0.80895,-0.26424 1.20739,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.8151,0.30083 -1.23788,0.39027 -0.42282,0.0894 -0.8517,0.13415 -1.28668,0.13415 -1.08949,0 -1.95336,-0.31709 -2.5916,-0.95128 -0.63421,-0.63418 -0.95129,-1.49195 -0.95129,-2.57332 0,-1.11795 0.30083,-2.00417 0.90248,-2.65869 0.60574,-0.65857 1.42085,-0.98785 2.44527,-0.98786 0.91878,1e-5 1.6444,0.29677 2.17696,0.8903 0.53664,0.58946 0.80491,1.39236 0.80496,2.40867 m -1.12204,-0.32929 c -0.008,-0.61385 -0.1809,-1.10371 -0.51832,-1.46959 -0.33338,-0.36587 -0.7765,-0.54881 -1.32934,-0.54882 -0.62608,1e-5 -1.12815,0.17685 -1.5062,0.53052 -0.37402,0.35369 -0.58944,0.85168 -0.64638,1.49399 l 4.00024,-0.006"
+ id="path4215"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 716.76841,195.73057 0,1.06104 c -0.31708,-0.16261 -0.64638,-0.28456 -0.98788,-0.36587 -0.34146,-0.0813 -0.69514,-0.12196 -1.06102,-0.12196 -0.55694,0 -0.97567,0.0854 -1.25616,0.25611 -0.27644,0.17075 -0.41469,0.42686 -0.41469,0.76834 0,0.26018 0.0996,0.46548 0.29881,0.61589 0.19922,0.14635 0.59963,0.2866 1.20128,0.42075 l 0.38416,0.0854 c 0.79684,0.17074 1.3619,0.41262 1.69523,0.72564 0.33742,0.30897 0.50615,0.74192 0.50615,1.29886 0,0.63418 -0.25206,1.13625 -0.75615,1.50619 -0.50005,0.36994 -1.18907,0.55491 -2.06717,0.55491 -0.36589,0 -0.74803,-0.0366 -1.14642,-0.10977 -0.39436,-0.0691 -0.81102,-0.1748 -1.2501,-0.31708 l 0,-1.15861 c 0.4147,0.21546 0.82324,0.37807 1.22572,0.48783 0.40243,0.1057 0.80082,0.15855 1.19518,0.15855 0.52846,0 0.93498,-0.0894 1.21956,-0.26831 0.28457,-0.18294 0.42686,-0.43905 0.42686,-0.76834 0,-0.30489 -0.10368,-0.53864 -0.31098,-0.70126 -0.20326,-0.16261 -0.65248,-0.31912 -1.34766,-0.46954 l -0.39026,-0.0915 c -0.69514,-0.14634 -1.1972,-0.36993 -1.50616,-0.67077 -0.309,-0.30489 -0.46345,-0.72158 -0.46345,-1.25007 0,-0.64231 0.22764,-1.13827 0.68297,-1.48789 0.45528,-0.34961 1.1017,-0.52441 1.93912,-0.52442 0.41464,1e-5 0.80491,0.0305 1.1708,0.0915 0.36588,0.061 0.7033,0.15245 1.01226,0.2744"
+ id="path4217"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 718.92709,195.52934 1.12199,0 0,6.82967 -1.12199,0 0,-6.82967 m 0,-2.65869 1.12199,0 0,1.42081 -1.12199,0 0,-1.42081"
+ id="path4219"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 726.88485,198.8649 c 0,-0.81305 -0.16873,-1.44317 -0.50615,-1.89035 -0.33333,-0.44718 -0.80289,-0.67077 -1.40859,-0.67077 -0.60165,0 -1.07121,0.22359 -1.40863,0.67077 -0.33333,0.44718 -0.50005,1.0773 -0.50005,1.89035 0,0.809 0.16672,1.43708 0.50005,1.88426 0.33742,0.44718 0.80698,0.67077 1.40863,0.67077 0.6057,0 1.07526,-0.22359 1.40859,-0.67077 0.33742,-0.44718 0.50615,-1.07526 0.50615,-1.88426 m 1.122,2.6465 c 0,1.16266 -0.25813,2.02654 -0.77443,2.59161 -0.5163,0.56914 -1.30698,0.85371 -2.37209,0.85371 -0.3943,0 -0.7663,-0.0305 -1.11593,-0.0915 -0.34959,-0.0569 -0.68903,-0.14635 -1.01832,-0.26831 l 0,-1.09152 c 0.32929,0.17887 0.6545,0.31099 0.97567,0.39636 0.32116,0.0854 0.64839,0.12806 0.98177,0.12806 0.73581,0 1.28664,-0.19311 1.65253,-0.57931 0.36584,-0.38213 0.5488,-0.96143 0.5488,-1.7379 l 0,-0.55491 c -0.23172,0.40246 -0.52851,0.70329 -0.89031,0.90249 -0.3618,0.1992 -0.79477,0.2988 -1.29885,0.2988 -0.83742,0 -1.51226,-0.31912 -2.02452,-0.95738 -0.51222,-0.63824 -0.76832,-1.48382 -0.76832,-2.53673 0,-1.05696 0.2561,-1.90457 0.76832,-2.54283 0.51226,-0.63824 1.1871,-0.95736 2.02452,-0.95737 0.50408,1e-5 0.93705,0.0996 1.29885,0.29879 0.3618,0.19921 0.65859,0.50004 0.89031,0.9025 l 0,-1.03665 1.122,0 0,5.98206"
+ id="path4221"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 735.99514,198.23682 0,4.12219 -1.12204,0 0,-4.08561 c 0,-0.64637 -0.12603,-1.13014 -0.37805,-1.4513 -0.25207,-0.32115 -0.63012,-0.48173 -1.13421,-0.48174 -0.60574,1e-5 -1.08342,0.19311 -1.43301,0.57931 -0.34963,0.3862 -0.52443,0.91265 -0.52443,1.57936 l 0,3.85998 -1.1281,0 0,-6.82967 1.1281,0 0,1.06104 c 0.26832,-0.41059 0.58338,-0.71751 0.94518,-0.92078 0.36589,-0.20326 0.78664,-0.30489 1.26226,-0.3049 0.78462,1e-5 1.37815,0.24392 1.78058,0.73175 0.40248,0.48377 0.60372,1.19723 0.60372,2.14037"
+ id="path4223"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 742.36746,196.68794 7.81755,0 0,1.02445 -7.81755,0 0,-1.02445 m 0,2.48795 7.81755,0 0,1.03665 -7.81755,0 0,-1.03665"
+ id="path4225"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 756.66096,192.87065 1.12203,0 0,9.48836 -1.12203,0 0,-9.48836"
+ id="path4227"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 762.77111,196.31597 c -0.6017,1e-5 -1.07732,0.23579 -1.42696,0.70736 -0.34958,0.46751 -0.52438,1.10983 -0.52438,1.92694 0,0.81713 0.17278,1.46147 0.51832,1.93304 0.34959,0.46751 0.82728,0.70126 1.43302,0.70126 0.59756,0 1.07116,-0.23578 1.4208,-0.70736 0.34958,-0.47157 0.52442,-1.11388 0.52442,-1.92694 0,-0.80898 -0.17484,-1.44926 -0.52442,-1.92084 -0.34964,-0.47563 -0.82324,-0.71345 -1.4208,-0.71346 m 0,-0.95127 c 0.97566,1e-5 1.74196,0.3171 2.2989,0.95127 0.55693,0.63419 0.8354,1.51229 0.8354,2.6343 0,1.11796 -0.27847,1.99606 -0.8354,2.6343 -0.55694,0.63419 -1.32324,0.95128 -2.2989,0.95128 -0.97976,0 -1.74808,-0.31709 -2.30506,-0.95128 -0.55284,-0.63824 -0.82929,-1.51634 -0.82929,-2.6343 0,-1.12201 0.27645,-2.00011 0.82929,-2.6343 0.55698,-0.63417 1.3253,-0.95126 2.30506,-0.95127"
+ id="path4229"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 767.10669,195.52934 1.12204,0 1.40253,5.32958 1.39642,-5.32958 1.32323,0 1.40253,5.32958 1.39642,-5.32958 1.12204,0 -1.78669,6.82967 -1.32328,0 -1.4696,-5.59789 -1.47567,5.59789 -1.32323,0 -1.78674,-6.82967"
+ id="path4231"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 783.04055,201.33456 0,3.62216 -1.1281,0 0,-9.42738 1.1281,0 0,1.03665 c 0.23581,-0.40652 0.53255,-0.70735 0.89031,-0.9025 0.3618,-0.19919 0.79274,-0.29878 1.29274,-0.29879 0.82934,1e-5 1.50212,0.32929 2.01842,0.98786 0.52034,0.65858 0.78053,1.52448 0.78053,2.59771 0,1.07324 -0.26019,1.93914 -0.78053,2.59771 -0.5163,0.65858 -1.18908,0.98787 -2.01842,0.98787 -0.5,0 -0.93094,-0.0976 -1.29274,-0.2927 -0.35776,-0.1992 -0.6545,-0.50207 -0.89031,-0.90859 m 3.81731,-2.38429 c 0,-0.82525 -0.17076,-1.47162 -0.51222,-1.93913 -0.33742,-0.47157 -0.80289,-0.70736 -1.39642,-0.70736 -0.59352,0 -1.06106,0.23579 -1.40252,0.70736 -0.33742,0.46751 -0.50615,1.11388 -0.50615,1.93913 0,0.82526 0.16873,1.47367 0.50615,1.94524 0.34146,0.46751 0.809,0.70126 1.40252,0.70126 0.59353,0 1.059,-0.23375 1.39642,-0.70126 0.34146,-0.47157 0.51222,-1.11998 0.51222,-1.94524"
+ id="path4233"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 793.83996,196.57818 c -0.12604,-0.0732 -0.26424,-0.12601 -0.41465,-0.15854 -0.14637,-0.0366 -0.30895,-0.0549 -0.48783,-0.0549 -0.63421,0 -1.12204,0.20733 -1.4635,0.62199 -0.33742,0.41059 -0.50611,1.00209 -0.50611,1.77449 l 0,3.59777 -1.12815,0 0,-6.82967 1.12815,0 0,1.06104 c 0.23577,-0.41465 0.5427,-0.72158 0.92075,-0.92078 0.3781,-0.20326 0.83747,-0.30489 1.37815,-0.3049 0.0772,1e-5 0.16258,0.006 0.25611,0.0183 0.0935,0.008 0.19715,0.0224 0.31097,0.0427 l 0.006,1.1525"
+ id="path4235"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 795.02908,195.52934 1.12199,0 0,6.82967 -1.12199,0 0,-6.82967 m 0,-2.65869 1.12199,0 0,1.42081 -1.12199,0 0,-1.42081"
+ id="path4237"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 803.4076,195.79155 0,1.04885 c -0.31708,-0.17481 -0.63623,-0.30489 -0.95735,-0.39027 -0.31713,-0.0894 -0.63825,-0.13415 -0.9635,-0.13416 -0.72769,1e-5 -1.29275,0.23173 -1.69523,0.69517 -0.40243,0.45938 -0.60367,1.10575 -0.60367,1.93913 0,0.83339 0.20124,1.4818 0.60367,1.94524 0.40248,0.45938 0.96754,0.68906 1.69523,0.68906 0.32525,0 0.64637,-0.0427 0.9635,-0.12805 0.32112,-0.0894 0.64027,-0.22156 0.95735,-0.39637 l 0,1.03665 c -0.31304,0.14635 -0.63825,0.25611 -0.97567,0.32928 -0.33333,0.0732 -0.68907,0.10977 -1.06713,0.10977 -1.02851,0 -1.84564,-0.32319 -2.45138,-0.96957 -0.60569,-0.64638 -0.90858,-1.51838 -0.90858,-2.61601 0,-1.11388 0.30491,-1.98994 0.91469,-2.6282 0.61387,-0.63824 1.45335,-0.95736 2.51846,-0.95737 0.34555,1e-5 0.68297,0.0366 1.01226,0.10976 0.32925,0.0691 0.64839,0.17481 0.95735,0.31709"
+ id="path4239"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 811.21293,198.66367 0,0.54881 -5.15882,0 c 0.0488,0.77241 0.28049,1.36187 0.69513,1.7684 0.41874,0.40246 1.0001,0.60369 1.74404,0.60369 0.4309,0 0.84761,-0.0528 1.25004,-0.15854 0.40652,-0.1057 0.809,-0.26424 1.2074,-0.47564 l 0,1.06104 c -0.40248,0.17074 -0.81511,0.30083 -1.23788,0.39027 -0.42278,0.0894 -0.85166,0.13415 -1.28664,0.13415 -1.08949,0 -1.9534,-0.31709 -2.59165,-0.95128 -0.63416,-0.63418 -0.95124,-1.49195 -0.95124,-2.57332 0,-1.11795 0.30083,-2.00417 0.90248,-2.65869 0.60574,-0.65857 1.4208,-0.98785 2.44527,-0.98786 0.91874,1e-5 1.6444,0.29677 2.17695,0.8903 0.5366,0.58946 0.80492,1.39236 0.80492,2.40867 m -1.122,-0.32929 c -0.008,-0.61385 -0.18094,-1.10371 -0.51832,-1.46959 -0.33337,-0.36587 -0.77649,-0.54881 -1.32938,-0.54882 -0.62603,1e-5 -1.1281,0.17685 -1.50615,0.53052 -0.37402,0.35369 -0.58949,0.85168 -0.64638,1.49399 l 4.00023,-0.006"
+ id="path4241"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /><path
+ d="m 813.21307,200.81014 1.28664,0 0,1.54887 -1.28664,0 0,-1.54887"
+ id="path4243"
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:150%;font-family:Sans;-inkscape-font-specification:Sans;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#f6921e;fill-opacity:1" /></g></g><g
+ inkscape:groupmode="layer"
+ id="layer1"
+ inkscape:label="DELETE bird before uploading"
+ style="display:inline" /><g
+ inkscape:groupmode="layer"
+ id="layer9"
+ inkscape:label="Your Design"><g
+ id="g21"
+ inkscape:label="0"
+ transform="matrix(0.8,0,0,0.8,-113.89464,-481.88053)"
+ style="stroke:#0000ff;stroke-opacity:1;stroke-width:0.03543307;stroke-miterlimit:4;stroke-dasharray:none"><path
+ inkscape:connector-curvature="0"
+ id="path23"
+ d="m 240.31326,720.37047 a 5.2558782,5.2558782 0 1 0 -10.51175,0 5.2558782,5.2558782 0 1 0 10.51175,0 z"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path25"
+ d="m 240.31326,853.86055 a 5.2558782,5.2558782 0 1 0 -10.51175,0 5.2558782,5.2558782 0 1 0 10.51175,0 z"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path27"
+ d="m 507.29378,853.86055 a 5.25588,5.25588 0 1 0 -10.51176,0 5.25588,5.25588 0 1 0 10.51176,0 z"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path29"
+ d="m 516.30882,655.63475 a 5.2558782,5.2558782 0 1 0 -10.51175,0 5.2558782,5.2558782 0 1 0 10.51175,0 z"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path31"
+ d="m 568.78387,625.5946 0.55008,0.0196"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path33"
+ d="m 569.33395,625.61422 0.54307,0.062"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path35"
+ d="m 569.87702,625.67624 0.54307,0.11107"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path37"
+ d="m 570.42009,625.78731 0.53256,0.1447"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path39"
+ d="m 570.95265,625.93201 0.51504,0.1941"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path41"
+ d="m 571.46769,626.12611 0.49753,0.2309"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path43"
+ d="m 571.96522,626.35701 0.4765,0.26593"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path45"
+ d="m 572.44172,626.62294 0.45898,0.30902"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path47"
+ d="m 572.9007,626.93196 0.43446,0.34231"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path49"
+ d="m 573.33516,627.27427 0.40642,0.37209"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path51"
+ d="m 573.74158,627.64636 0.37139,0.40538"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path53"
+ d="m 574.11297,628.05174 0.34337,0.43025"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path55"
+ d="m 574.45634,628.48199 0.30482,0.45828"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path57"
+ d="m 574.76116,628.94027 0.26978,0.47861"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path59"
+ d="m 575.03094,629.41888 0.22774,0.50173"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path61"
+ d="m 575.25868,629.92061 0.1927,0.51153"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path63"
+ d="m 575.45138,630.43214 0.14365,0.53151"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path65"
+ d="m 575.59503,630.96365 0.11212,0.54027"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path67"
+ d="m 575.70715,631.50392 0.0631,0.54623"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path69"
+ d="m 575.77022,632.05015 0.0175,0.55007"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path71"
+ d="m 575.78774,632.60022 0,288.00768"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path73"
+ d="m 575.78774,920.6079 -0.0175,0.54559"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path75"
+ d="m 575.77022,921.15349 -0.0631,0.55043"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path77"
+ d="m 575.70715,921.70392 -0.11212,0.53593"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path79"
+ d="m 575.59503,922.23985 -0.14365,0.53592"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path81"
+ d="m 575.45138,922.77577 -0.1927,0.51182"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path83"
+ d="m 575.25868,923.28759 -0.22774,0.49731"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path85"
+ d="m 575.03094,923.7849 -0.26978,0.48281"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path87"
+ d="m 574.76116,924.26771 -0.30482,0.45868"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path89"
+ d="m 574.45634,924.72639 -0.34337,0.42971"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path91"
+ d="m 574.11297,925.1561 -0.37139,0.40557"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path93"
+ d="m 573.74158,925.56167 -0.40642,0.37177"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path95"
+ d="m 573.33516,925.93344 -0.43446,0.3428"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path97"
+ d="m 572.9007,926.27624 -0.45898,0.30418"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path99"
+ d="m 572.44172,926.58042 -0.4765,0.27038"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path101"
+ d="m 571.96522,926.8508 -0.49753,0.22693"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path103"
+ d="m 571.46769,927.07773 -0.51504,0.19312"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path105"
+ d="m 570.95265,927.27085 -0.53256,0.14968"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path107"
+ d="m 570.42009,927.42053 -0.54307,0.10622"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path109"
+ d="m 569.87702,927.52675 -0.54307,0.0628"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path111"
+ d="m 569.33395,927.58952 -0.54658,0.0241"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path113"
+ d="m 568.78737,927.61366 -393.47009,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path115"
+ d="m 175.31728,927.61366 -0.55043,-0.0241"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path117"
+ d="m 174.76685,927.58952 -0.54556,-0.0628"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path119"
+ d="m 174.22129,927.52675 -0.54076,-0.10622"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path121"
+ d="m 173.68053,927.42053 -0.53112,-0.14968"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path123"
+ d="m 173.14941,927.27085 -0.51179,-0.19312"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path125"
+ d="m 172.63762,927.07773 -0.50214,-0.22693"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path127"
+ d="m 172.13548,926.8508 -0.47798,-0.27038"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path129"
+ d="m 171.6575,926.58042 -0.45869,-0.30418"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path131"
+ d="m 171.19881,926.27624 -0.42971,-0.3428"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path133"
+ d="m 170.7691,925.93344 -0.40557,-0.37177"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path135"
+ d="m 170.36353,925.56167 -0.37177,-0.40557"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path137"
+ d="m 169.99176,925.1561 -0.3428,-0.42971"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path139"
+ d="m 169.64896,924.72639 -0.30901,-0.45868"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path141"
+ d="M 169.33995,924.26771 169.0744,923.7849"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path143"
+ d="m 169.0744,923.7849 -0.23175,-0.49731"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path145"
+ d="m 168.84265,923.28759 -0.19314,-0.51182"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path147"
+ d="m 168.64951,922.77577 -0.14484,-0.53592"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path149"
+ d="m 168.50467,922.23985 -0.11105,-0.53593"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path151"
+ d="m 168.39362,921.70392 -0.0628,-0.55043"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path153"
+ d="m 168.33085,921.15349 -0.0241,-0.54559"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path155"
+ d="m 168.30671,920.6079 0.005,-288.00768"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path157"
+ d="m 168.31154,632.60022 0.0193,-0.55007"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path159"
+ d="m 168.33085,632.05015 0.0628,-0.54623"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path161"
+ d="m 168.39362,631.50392 0.11105,-0.54027"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path163"
+ d="m 168.50467,630.96365 0.14484,-0.53151"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path165"
+ d="m 168.64951,630.43214 0.19314,-0.51153"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path167"
+ d="m 168.84265,629.92061 0.23175,-0.50173"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path169"
+ d="m 169.0744,629.41888 0.26555,-0.47861"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path171"
+ d="m 169.33995,628.94027 0.30901,-0.45828"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path173"
+ d="m 169.64896,628.48199 0.3428,-0.43025"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path175"
+ d="m 169.99176,628.05174 0.37177,-0.40538"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path177"
+ d="m 170.36353,627.64636 0.40557,-0.37209"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path179"
+ d="m 170.7691,627.27427 0.42971,-0.34231"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path181"
+ d="m 171.19881,626.93196 0.45869,-0.30902"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path183"
+ d="m 171.6575,626.62294 0.47798,-0.26593"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path185"
+ d="m 172.13548,626.35701 0.50214,-0.2309"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path187"
+ d="m 172.63762,626.12611 0.51179,-0.1941"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path189"
+ d="m 173.14941,625.93201 0.53112,-0.1447"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path191"
+ d="m 173.68053,625.78731 0.54076,-0.11107"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path193"
+ d="m 174.22129,625.67624 0.54556,-0.062"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path195"
+ d="m 174.76685,625.61422 0.55043,-0.0245"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path197"
+ d="m 175.31728,625.5897 393.46659,0.005"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path199"
+ d="m 177.15682,862.70795 0,2.09555"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path201"
+ d="m 177.15682,864.8035 -2.80036,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path203"
+ d="m 174.35646,864.8035 0,44.85398"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path205"
+ d="m 174.35646,909.65748 2.80036,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path207"
+ d="m 177.15682,909.65748 0,2.10036"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path209"
+ d="m 177.15682,911.75784 49.05486,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path211"
+ d="m 226.21168,911.75784 0,-2.10036"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path213"
+ d="m 226.21168,909.65748 2.80015,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path215"
+ d="m 229.01183,909.65748 0,-44.85398"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path217"
+ d="m 229.01183,864.8035 -2.80015,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path219"
+ d="m 226.21168,864.8035 0,-2.09555"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path221"
+ d="m 226.21168,862.70795 -49.05486,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path223"
+ d="m 243.90214,862.70795 0,2.09555"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path225"
+ d="m 243.90214,864.8035 -2.8005,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path227"
+ d="m 241.10164,864.8035 0,44.85398"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path229"
+ d="m 241.10164,909.65748 2.8005,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path231"
+ d="m 243.90214,909.65748 0,2.10036"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path233"
+ d="m 243.90214,911.75784 49.05406,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path235"
+ d="m 292.9562,911.75784 0,-2.10036"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path237"
+ d="m 292.9562,909.65748 2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path239"
+ d="m 295.75704,909.65748 0,-44.85398"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path241"
+ d="m 295.75704,864.8035 -2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path243"
+ d="m 292.9562,864.8035 0,-2.09555"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path245"
+ d="m 292.9562,862.70795 -49.05406,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path247"
+ d="m 310.64736,862.70795 0,2.09555"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path249"
+ d="m 310.64736,864.8035 -2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path251"
+ d="m 307.84651,864.8035 0,44.85398"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path253"
+ d="m 307.84651,909.65748 2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path255"
+ d="m 310.64736,909.65748 0,2.10036"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path257"
+ d="m 310.64736,911.75784 49.05405,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path259"
+ d="m 359.70141,911.75784 0,-2.10036"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path261"
+ d="m 359.70141,909.65748 2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path263"
+ d="m 362.50226,909.65748 0,-44.85398"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path265"
+ d="m 362.50226,864.8035 -2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path267"
+ d="m 359.70141,864.8035 0,-2.09555"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path269"
+ d="m 359.70141,862.70795 -49.05405,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path271"
+ d="m 377.39257,862.70795 0,2.09555"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path273"
+ d="m 377.39257,864.8035 -2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path275"
+ d="m 374.59173,864.8035 0,44.85398"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path277"
+ d="m 374.59173,909.65748 2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path279"
+ d="m 377.39257,909.65748 0,2.10036"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path281"
+ d="m 377.39257,911.75784 49.05406,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path283"
+ d="m 426.44663,911.75784 0,-2.10036"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path285"
+ d="m 426.44663,909.65748 2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path287"
+ d="m 429.24747,909.65748 0,-44.85398"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path289"
+ d="m 429.24747,864.8035 -2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path291"
+ d="m 426.44663,864.8035 0,-2.09555"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path293"
+ d="m 426.44663,862.70795 -49.05406,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path295"
+ d="m 444.13779,862.70795 0,2.09555"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path297"
+ d="m 444.13779,864.8035 -2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path299"
+ d="m 441.33694,864.8035 0,44.85398"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path301"
+ d="m 441.33694,909.65748 2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path303"
+ d="m 444.13779,909.65748 0,2.10036"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path305"
+ d="m 444.13779,911.75784 49.05405,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path307"
+ d="m 493.19184,911.75784 0,-2.10036"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path309"
+ d="m 493.19184,909.65748 2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path311"
+ d="m 495.99269,909.65748 0,-44.85398"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path313"
+ d="m 495.99269,864.8035 -2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path315"
+ d="m 493.19184,864.8035 0,-2.09555"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path317"
+ d="m 493.19184,862.70795 -49.05405,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path319"
+ d="m 510.88301,862.70795 0,2.09555"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path321"
+ d="m 510.88301,864.8035 -2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path323"
+ d="m 508.08216,864.8035 0,44.85398"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path325"
+ d="m 508.08216,909.65748 2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path327"
+ d="m 510.88301,909.65748 0,2.10036"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path329"
+ d="m 510.88301,911.75784 49.05055,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path331"
+ d="m 559.93356,911.75784 0,-2.10036"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path333"
+ d="m 559.93356,909.65748 2.80295,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path335"
+ d="m 562.73651,909.65748 0,-44.85398"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path337"
+ d="m 562.73651,864.8035 -2.80295,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path339"
+ d="m 559.93356,864.8035 0,-2.09555"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path341"
+ d="m 559.93356,862.70795 -49.05055,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path343"
+ d="m 177.15682,795.96308 0,2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path345"
+ d="m 177.15682,798.06284 -2.80036,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path347"
+ d="m 174.35646,798.06284 0,44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path349"
+ d="m 174.35646,842.91212 2.80036,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path351"
+ d="m 177.15682,842.91212 0,2.10046"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path353"
+ d="m 177.15682,845.01258 49.05486,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path355"
+ d="m 226.21168,845.01258 0,-2.10046"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path357"
+ d="m 226.21168,842.91212 2.80015,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path359"
+ d="m 229.01183,842.91212 0,-44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path361"
+ d="m 229.01183,798.06284 -2.80015,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path363"
+ d="m 226.21168,798.06284 0,-2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path365"
+ d="m 226.21168,795.96308 -49.05486,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path367"
+ d="m 243.90214,795.96308 0,2.57589"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path369"
+ d="m 243.90214,798.53897 -2.8005,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path371"
+ d="m 241.10164,798.53897 0,44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path373"
+ d="m 241.10164,843.38825 2.8005,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path375"
+ d="m 243.90214,843.38825 0,1.62969"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path377"
+ d="m 243.90214,845.01794 49.05406,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path379"
+ d="m 292.9562,845.01794 0,-2.10045"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path381"
+ d="m 292.9562,842.91749 2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path383"
+ d="m 295.75704,842.91749 0,-44.85465"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path385"
+ d="m 295.75704,798.06284 -2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path387"
+ d="m 292.9562,798.06284 0,-2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path389"
+ d="m 292.9562,795.96308 -49.05406,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path391"
+ d="m 310.64736,795.96308 0,2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path393"
+ d="m 310.64736,798.06284 -2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path395"
+ d="m 307.84651,798.06284 0,44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path397"
+ d="m 307.84651,842.91212 2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path399"
+ d="m 310.64736,842.91212 0,2.10046"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path401"
+ d="m 310.64736,845.01258 49.05405,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path403"
+ d="m 359.70141,845.01258 0,-2.10046"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path405"
+ d="m 359.70141,842.91212 2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path407"
+ d="m 362.50226,842.91212 0,-44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path409"
+ d="m 362.50226,798.06284 -2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path411"
+ d="m 359.70141,798.06284 0,-2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path413"
+ d="m 359.70141,795.96308 -49.05405,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path415"
+ d="m 377.39257,795.96308 0,2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path417"
+ d="m 377.39257,798.06284 -2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path419"
+ d="m 374.59173,798.06284 0,44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path421"
+ d="m 374.59173,842.91212 2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path423"
+ d="m 377.39257,842.91212 0,2.10046"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path425"
+ d="m 377.39257,845.01258 49.05406,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path427"
+ d="m 426.44663,845.01258 0,-2.10046"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path429"
+ d="m 426.44663,842.91212 2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path431"
+ d="m 429.24747,842.91212 0,-44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path433"
+ d="m 429.24747,798.06284 -2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path435"
+ d="m 426.44663,798.06284 0,-2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path437"
+ d="m 426.44663,795.96308 -49.05406,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path439"
+ d="m 444.13779,795.96308 0,2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path441"
+ d="m 444.13779,798.06284 -2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path443"
+ d="m 441.33694,798.06284 0,44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path445"
+ d="m 441.33694,842.91212 2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path447"
+ d="m 444.13779,842.91212 0,2.10046"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path449"
+ d="m 444.13779,845.01258 49.05405,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path451"
+ d="m 493.19184,845.01258 0,-2.10046"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path453"
+ d="m 493.19184,842.91212 2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path455"
+ d="m 495.99269,842.91212 0,-44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path457"
+ d="m 495.99269,798.06284 -2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path459"
+ d="m 493.19184,798.06284 0,-2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path461"
+ d="m 493.19184,795.96308 -49.05405,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path463"
+ d="m 510.88301,795.96308 0,2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path465"
+ d="m 510.88301,798.06284 -2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path467"
+ d="m 508.08216,798.06284 0,44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path469"
+ d="m 508.08216,842.91212 2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path471"
+ d="m 510.88301,842.91212 0,2.10046"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path473"
+ d="m 510.88301,845.01258 49.05055,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path475"
+ d="m 559.93356,845.01258 0,-2.10046"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path477"
+ d="m 559.93356,842.91212 2.80295,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path479"
+ d="m 562.73651,842.91212 0,-44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path481"
+ d="m 562.73651,798.06284 -2.80295,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path483"
+ d="m 559.93356,798.06284 0,-2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path485"
+ d="m 559.93356,795.96308 -49.05055,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path487"
+ d="m 177.15682,729.21787 0,2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path489"
+ d="m 177.15682,731.31763 -2.80036,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path491"
+ d="m 174.35646,731.31763 0,44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path493"
+ d="m 174.35646,776.16691 2.80036,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path495"
+ d="m 177.15682,776.16691 0,2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path497"
+ d="m 177.15682,778.26667 49.05486,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path499"
+ d="m 226.21168,778.26667 0,-2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path501"
+ d="m 226.21168,776.16691 2.80015,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path503"
+ d="m 229.01183,776.16691 0,-44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path505"
+ d="m 229.01183,731.31763 -2.80015,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path507"
+ d="m 226.21168,731.31763 0,-2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path509"
+ d="m 226.21168,729.21787 -49.05486,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path511"
+ d="m 243.90214,729.21787 0,2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path513"
+ d="m 243.90214,731.31763 -2.8005,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path515"
+ d="m 241.10164,731.31763 0,44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path517"
+ d="m 241.10164,776.16691 2.8005,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path519"
+ d="m 243.90214,776.16691 0,2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path521"
+ d="m 243.90214,778.26667 49.05406,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path523"
+ d="m 292.9562,778.26667 0,-2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path525"
+ d="m 292.9562,776.16691 2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path527"
+ d="m 295.75704,776.16691 0,-44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path529"
+ d="m 295.75704,731.31763 -2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path531"
+ d="m 292.9562,731.31763 0,-2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path533"
+ d="m 292.9562,729.21787 -49.05406,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path535"
+ d="m 310.64736,729.21787 0,2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path537"
+ d="m 310.64736,731.31763 -2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path539"
+ d="m 307.84651,731.31763 0,44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path541"
+ d="m 307.84651,776.16691 2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path543"
+ d="m 310.64736,776.16691 0,2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path545"
+ d="m 310.64736,778.26667 49.05405,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path547"
+ d="m 359.70141,778.26667 0,-2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path549"
+ d="m 359.70141,776.16691 2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path551"
+ d="m 362.50226,776.16691 0,-44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path553"
+ d="m 362.50226,731.31763 -2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path555"
+ d="m 359.70141,731.31763 0,-2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path557"
+ d="m 359.70141,729.21787 -49.05405,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path559"
+ d="m 377.39257,729.21787 0,2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path561"
+ d="m 377.39257,731.31763 -2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path563"
+ d="m 374.59173,731.31763 0,44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path565"
+ d="m 374.59173,776.16691 2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path567"
+ d="m 377.39257,776.16691 0,2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path569"
+ d="m 377.39257,778.26667 49.05406,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path571"
+ d="m 426.44663,778.26667 0,-2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path573"
+ d="m 426.44663,776.16691 2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path575"
+ d="m 429.24747,776.16691 0,-44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path577"
+ d="m 429.24747,731.31763 -2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path579"
+ d="m 426.44663,731.31763 0,-2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path581"
+ d="m 426.44663,729.21787 -49.05406,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path583"
+ d="m 444.13779,729.21787 0,2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path585"
+ d="m 444.13779,731.31763 -2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path587"
+ d="m 441.33694,731.31763 0,44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path589"
+ d="m 441.33694,776.16691 2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path591"
+ d="m 444.13779,776.16691 0,2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path593"
+ d="m 444.13779,778.26667 49.05405,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path595"
+ d="m 493.19184,778.26667 0,-2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path597"
+ d="m 493.19184,776.16691 2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path599"
+ d="m 495.99269,776.16691 0,-44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path601"
+ d="m 495.99269,731.31763 -2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path603"
+ d="m 493.19184,731.31763 0,-2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path605"
+ d="m 493.19184,729.21787 -49.05405,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path607"
+ d="m 510.88301,729.21787 0,2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path609"
+ d="m 510.88301,731.31763 -2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path611"
+ d="m 508.08216,731.31763 0,44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path613"
+ d="m 508.08216,776.16691 2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path615"
+ d="m 510.88301,776.16691 0,2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path617"
+ d="m 510.88301,778.26667 49.05055,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path619"
+ d="m 559.93356,778.26667 0,-2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path621"
+ d="m 559.93356,776.16691 2.80295,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path623"
+ d="m 562.73651,776.16691 0,-44.84928"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path625"
+ d="m 562.73651,731.31763 -2.80295,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path627"
+ d="m 559.93356,731.31763 0,-2.09976"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path629"
+ d="m 559.93356,729.21787 -49.05055,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path631"
+ d="m 177.15682,662.46659 0,2.10582"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path633"
+ d="m 177.15682,664.57241 -2.80036,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path635"
+ d="m 174.35646,664.57241 0,44.84438"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path637"
+ d="m 174.35646,709.41679 2.80036,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path639"
+ d="m 177.15682,709.41679 0,2.10466"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path641"
+ d="m 177.15682,711.52145 49.05486,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path643"
+ d="m 226.21168,711.52145 0,-2.10466"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path645"
+ d="m 226.21168,709.41679 2.80015,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path647"
+ d="m 229.01183,709.41679 0,-44.84519"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path649"
+ d="m 229.01183,664.5716 -2.80015,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path651"
+ d="m 226.21168,664.5716 0,-2.10501"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path653"
+ d="m 226.21168,662.46659 -49.05486,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path655"
+ d="m 243.90214,662.46659 0,2.58538"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path657"
+ d="m 243.90214,665.05197 -2.8005,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path659"
+ d="m 241.10164,665.05197 0,44.84437"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path661"
+ d="m 241.10164,709.89634 2.8005,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path663"
+ d="m 243.90214,709.89634 0,1.62511"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path665"
+ d="m 243.90214,711.52145 49.05406,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path667"
+ d="m 292.9562,711.52145 0,-2.10466"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path669"
+ d="m 292.9562,709.41679 2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path671"
+ d="m 295.75704,709.41679 0,-44.84519"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path673"
+ d="m 295.75704,664.5716 -2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path675"
+ d="m 292.9562,664.5716 0,-2.10501"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path677"
+ d="m 292.9562,662.46659 -49.05406,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path679"
+ d="m 310.64736,662.46739 0,2.10502"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path681"
+ d="m 310.64736,664.57241 -2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path683"
+ d="m 307.84651,664.57241 0,44.84438"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path685"
+ d="m 307.84651,709.41679 2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path687"
+ d="m 310.64736,709.41679 0,2.10466"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path689"
+ d="m 310.64736,711.52145 49.05405,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path691"
+ d="m 359.70141,711.52145 0,-2.10466"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path693"
+ d="m 359.70141,709.41679 2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path695"
+ d="m 362.50226,709.41679 0,-44.84438"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path697"
+ d="m 362.50226,664.57241 -2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path699"
+ d="m 359.70141,664.57241 0,-2.10502"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path701"
+ d="m 359.70141,662.46739 -49.05405,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path703"
+ d="m 377.39257,662.46739 0,2.10502"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path705"
+ d="m 377.39257,664.57241 -2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path707"
+ d="m 374.59173,664.57241 0,44.84438"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path709"
+ d="m 374.59173,709.41679 2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path711"
+ d="m 377.39257,709.41679 0,2.10466"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path713"
+ d="m 377.39257,711.52145 49.05406,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path715"
+ d="m 426.44663,711.52145 0,-2.10466"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path717"
+ d="m 426.44663,709.41679 2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path719"
+ d="m 429.24747,709.41679 0,-44.84438"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path721"
+ d="m 429.24747,664.57241 -2.80084,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path723"
+ d="m 426.44663,664.57241 0,-2.10502"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path725"
+ d="m 426.44663,662.46739 -49.05406,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path727"
+ d="m 444.13779,662.46739 0,2.10502"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path729"
+ d="m 444.13779,664.57241 -2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path731"
+ d="m 441.33694,664.57241 0,44.84438"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path733"
+ d="m 441.33694,709.41679 2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path735"
+ d="m 444.13779,709.41679 0,2.10466"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path737"
+ d="m 444.13779,711.52145 49.05405,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path739"
+ d="m 493.19184,711.52145 0,-2.10466"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path741"
+ d="m 493.19184,709.41679 2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path743"
+ d="m 495.99269,709.41679 0,-44.84438"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path745"
+ d="m 495.99269,664.57241 -2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path747"
+ d="m 493.19184,664.57241 0,-2.10502"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path749"
+ d="m 493.19184,662.46739 -49.05405,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path751"
+ d="m 510.88206,662.46739 0,2.10502"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path753"
+ d="m 510.88206,664.57241 -2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path755"
+ d="m 508.08121,664.57241 0,44.84438"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path757"
+ d="m 508.08121,709.41679 2.80085,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path759"
+ d="m 510.88206,709.41679 0,2.10466"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path761"
+ d="m 510.88206,711.52145 49.05055,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path763"
+ d="m 559.93261,711.52145 0,-2.10466"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path765"
+ d="m 559.93261,709.41679 2.80295,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path767"
+ d="m 562.73556,709.41679 0,-44.84438"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path769"
+ d="m 562.73556,664.57241 -2.80295,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path771"
+ d="m 559.93261,664.57241 0,-2.10502"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path773"
+ d="m 559.93261,662.46739 -49.05055,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path27-0"
+ d="m 441.39305,853.88036 a 5.25588,5.25588 0 1 0 -10.51176,0 5.25588,5.25588 0 0 0 10.51176,0 z"
+ style="display:inline;fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g><g
+ id="g21-5"
+ inkscape:label="0"
+ transform="matrix(0.8,0,0,0.8,-113.89463,-231.54592)"
+ style="stroke:#0000ff;stroke-opacity:1;stroke-width:0.35433071;stroke-miterlimit:4;stroke-dasharray:none"><path
+ inkscape:connector-curvature="0"
+ id="path23-4"
+ d="m 240.31326,720.37047 a 5.2558782,5.2558782 0 1 0 -10.51175,0 5.2558782,5.2558782 0 1 0 10.51175,0 z"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path25-4"
+ d="m 240.31326,853.86055 a 5.2558782,5.2558782 0 1 0 -10.51175,0 5.2558782,5.2558782 0 1 0 10.51175,0 z"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path27-4"
+ d="m 507.29378,853.86055 a 5.25588,5.25588 0 1 0 -10.51176,0 5.25588,5.25588 0 1 0 10.51176,0 z"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path29-1"
+ d="m 516.30882,655.63475 a 5.2558782,5.2558782 0 1 0 -10.51175,0 5.2558782,5.2558782 0 1 0 10.51175,0 z"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path31-6"
+ d="m 568.78387,625.5946 0.55008,0.0196"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path33-2"
+ d="m 569.33395,625.61422 0.54307,0.062"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path35-0"
+ d="m 569.87702,625.67624 0.54307,0.11107"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path37-1"
+ d="m 570.42009,625.78731 0.53256,0.1447"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path39-6"
+ d="m 570.95265,625.93201 0.51504,0.1941"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path41-9"
+ d="m 571.46769,626.12611 0.49753,0.2309"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path43-3"
+ d="m 571.96522,626.35701 0.4765,0.26593"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path45-8"
+ d="m 572.44172,626.62294 0.45898,0.30902"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path47-2"
+ d="m 572.9007,626.93196 0.43446,0.34231"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path49-0"
+ d="m 573.33516,627.27427 0.40642,0.37209"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path51-9"
+ d="m 573.74158,627.64636 0.37139,0.40538"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path53-1"
+ d="m 574.11297,628.05174 0.34337,0.43025"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path55-7"
+ d="m 574.45634,628.48199 0.30482,0.45828"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path57-9"
+ d="m 574.76116,628.94027 0.26978,0.47861"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path59-0"
+ d="m 575.03094,629.41888 0.22774,0.50173"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path61-7"
+ d="m 575.25868,629.92061 0.1927,0.51153"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path63-1"
+ d="m 575.45138,630.43214 0.14365,0.53151"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path65-6"
+ d="m 575.59503,630.96365 0.11212,0.54027"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path67-0"
+ d="m 575.70715,631.50392 0.0631,0.54623"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path69-9"
+ d="m 575.77022,632.05015 0.0175,0.55007"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path71-2"
+ d="m 575.78774,632.60022 0,288.00768"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path73-7"
+ d="m 575.78774,920.6079 -0.0175,0.54559"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path75-4"
+ d="m 575.77022,921.15349 -0.0631,0.55043"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path77-6"
+ d="m 575.70715,921.70392 -0.11212,0.53593"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path79-8"
+ d="m 575.59503,922.23985 -0.14365,0.53592"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path81-0"
+ d="m 575.45138,922.77577 -0.1927,0.51182"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path83-9"
+ d="m 575.25868,923.28759 -0.22774,0.49731"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path85-7"
+ d="m 575.03094,923.7849 -0.26978,0.48281"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path87-0"
+ d="m 574.76116,924.26771 -0.30482,0.45868"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path89-8"
+ d="m 574.45634,924.72639 -0.34337,0.42971"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path91-1"
+ d="m 574.11297,925.1561 -0.37139,0.40557"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path93-3"
+ d="m 573.74158,925.56167 -0.40642,0.37177"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path95-0"
+ d="m 573.33516,925.93344 -0.43446,0.3428"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path97-2"
+ d="m 572.9007,926.27624 -0.45898,0.30418"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path99-9"
+ d="m 572.44172,926.58042 -0.4765,0.27038"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path101-0"
+ d="m 571.96522,926.8508 -0.49753,0.22693"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path103-6"
+ d="m 571.46769,927.07773 -0.51504,0.19312"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path105-0"
+ d="m 570.95265,927.27085 -0.53256,0.14968"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path107-6"
+ d="m 570.42009,927.42053 -0.54307,0.10622"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path109-4"
+ d="m 569.87702,927.52675 -0.54307,0.0628"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path111-4"
+ d="m 569.33395,927.58952 -0.54658,0.0241"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path113-0"
+ d="m 568.78737,927.61366 -393.47009,0"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path115-3"
+ d="m 175.31728,927.61366 -0.55043,-0.0241"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path117-5"
+ d="m 174.76685,927.58952 -0.54556,-0.0628"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path119-9"
+ d="m 174.22129,927.52675 -0.54076,-0.10622"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path121-7"
+ d="m 173.68053,927.42053 -0.53112,-0.14968"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path123-5"
+ d="m 173.14941,927.27085 -0.51179,-0.19312"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path125-6"
+ d="m 172.63762,927.07773 -0.50214,-0.22693"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path127-2"
+ d="m 172.13548,926.8508 -0.47798,-0.27038"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path129-0"
+ d="m 171.6575,926.58042 -0.45869,-0.30418"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path131-4"
+ d="m 171.19881,926.27624 -0.42971,-0.3428"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path133-8"
+ d="m 170.7691,925.93344 -0.40557,-0.37177"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path135-3"
+ d="m 170.36353,925.56167 -0.37177,-0.40557"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path137-2"
+ d="m 169.99176,925.1561 -0.3428,-0.42971"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path139-1"
+ d="m 169.64896,924.72639 -0.30901,-0.45868"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path141-6"
+ d="M 169.33995,924.26771 169.0744,923.7849"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path143-7"
+ d="m 169.0744,923.7849 -0.23175,-0.49731"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path145-9"
+ d="m 168.84265,923.28759 -0.19314,-0.51182"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path147-5"
+ d="m 168.64951,922.77577 -0.14484,-0.53592"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path149-8"
+ d="m 168.50467,922.23985 -0.11105,-0.53593"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path151-7"
+ d="m 168.39362,921.70392 -0.0628,-0.55043"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path153-0"
+ d="m 168.33085,921.15349 -0.0241,-0.54559"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path155-2"
+ d="m 168.30671,920.6079 0.005,-288.00768"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path157-8"
+ d="m 168.31154,632.60022 0.0193,-0.55007"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path159-7"
+ d="m 168.33085,632.05015 0.0628,-0.54623"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path161-9"
+ d="m 168.39362,631.50392 0.11105,-0.54027"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path163-8"
+ d="m 168.50467,630.96365 0.14484,-0.53151"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path165-3"
+ d="m 168.64951,630.43214 0.19314,-0.51153"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path167-0"
+ d="m 168.84265,629.92061 0.23175,-0.50173"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path169-2"
+ d="m 169.0744,629.41888 0.26555,-0.47861"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path171-4"
+ d="m 169.33995,628.94027 0.30901,-0.45828"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path173-2"
+ d="m 169.64896,628.48199 0.3428,-0.43025"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path175-2"
+ d="m 169.99176,628.05174 0.37177,-0.40538"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path177-8"
+ d="m 170.36353,627.64636 0.40557,-0.37209"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path179-1"
+ d="m 170.7691,627.27427 0.42971,-0.34231"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path181-5"
+ d="m 171.19881,626.93196 0.45869,-0.30902"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path183-8"
+ d="m 171.6575,626.62294 0.47798,-0.26593"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path185-5"
+ d="m 172.13548,626.35701 0.50214,-0.2309"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path187-6"
+ d="m 172.63762,626.12611 0.51179,-0.1941"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path189-8"
+ d="m 173.14941,625.93201 0.53112,-0.1447"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path191-8"
+ d="m 173.68053,625.78731 0.54076,-0.11107"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path193-7"
+ d="m 174.22129,625.67624 0.54556,-0.062"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path195-9"
+ d="m 174.76685,625.61422 0.55043,-0.0245"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path197-7"
+ d="m 175.31728,625.5897 393.46659,0.005"
+ style="fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" /><path
+ inkscape:connector-curvature="0"
+ id="path27-4-7"
+ d="m 439.74973,853.92004 a 5.25588,5.25588 0 1 0 -10.51176,0 5.25588,5.25588 0 0 0 10.51176,0 z"
+ style="display:inline;fill:none;stroke:#0000ff;stroke-width:0.03543307;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g></g></svg> \ No newline at end of file
diff --git a/keyboards/lets_split/keymaps/default/keymap.c b/keyboards/lets_split/keymaps/default/keymap.c
index 0d2d94b67..6f1f71f5f 100644
--- a/keyboards/lets_split/keymaps/default/keymap.c
+++ b/keyboards/lets_split/keymaps/default/keymap.c
@@ -42,10 +42,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------'
*/
[_QWERTY] = KEYMAP( \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
- KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
- ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ KC_LCTL, ADJUST, KC_LALT, KC_LGUI, LOWER, KC_SPC, MT(MOD_LSFT, KC_SPC), RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
),
/* Colemak
@@ -83,41 +83,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
),
-
-/* Lower
- * ,-----------------------------------------------------------------------------------.
- * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | Next | Vol- | Vol+ | Play |
- * `-----------------------------------------------------------------------------------'
- */
-[_LOWER] = KEYMAP( \
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+[3] = KEYMAP( \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+ _______, _______, _______, _______, _______, KC_BSPC, MT(MOD_LSFT, KC_BSPC), _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
),
-
-/* Raise
- * ,-----------------------------------------------------------------------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | Next | Vol- | Vol+ | Play |
- * `-----------------------------------------------------------------------------------'
- */
-[_RAISE] = KEYMAP( \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+[4] = KEYMAP( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+ _______, _______, _______, _______, _______, KC_ENT, MT(MOD_LSFT, KC_ENT), _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
),
/* Adjust (Lower + Raise)
@@ -134,11 +110,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_ADJUST] = KEYMAP( \
_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
)
-
-
};
#ifdef AUDIO_ENABLE
diff --git a/keyboards/ergodox_ez/keymaps/townk_osx/config.h b/keyboards/lets_split/keymaps/i2c/config.h
index 58ba690af..72e5ae66b 100644
--- a/keyboards/ergodox_ez/keymaps/townk_osx/config.h
+++ b/keyboards/lets_split/keymaps/i2c/config.h
@@ -1,6 +1,5 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -23,25 +22,34 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x1307
+#define PRODUCT_ID 0x3060
#define DEVICE_VER 0x0001
-#define MANUFACTURER ErgoDox EZ
-#define PRODUCT ErgoDox EZ
-#define DESCRIPTION t.m.k. keyboard firmware for Ergodox
+#define MANUFACTURER Wootpatoot
+#define PRODUCT Lets Split
+#define DESCRIPTION A split keyboard for the cheap makers
/* key matrix size */
-#define MATRIX_ROWS 14
+// Rows are doubled-up
+#define MATRIX_ROWS 8
#define MATRIX_COLS 6
-#define MOUSEKEY_DELAY 100
-#define MOUSEKEY_INTERVAL 20
-#define MOUSEKEY_MAX_SPEED 3
-#define MOUSEKEY_TIME_TO_MAX 10
+// wiring of each half
+#define MATRIX_ROW_PINS { B5, B4, E6, D7 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 }
-#define TAPPING_TOGGLE 1
+#define CATERINA_BOOTLOADER
-#define COLS (int []){ F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
-#define ROWS (int []){ D0, D5, B5, B6 }
+#define USE_I2C
+
+// Use serial if not using I2C
+#ifndef USE_I2C
+# define USE_SERIAL
+#endif
+
+// #define EE_HANDS
+
+#define I2C_MASTER_LEFT
+// #define I2C_MASTER_RIGHT
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
@@ -50,12 +58,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define MATRIX_HAS_GHOST
/* number of backlight levels */
-#define BACKLIGHT_LEVELS 3
+// #define BACKLIGHT_LEVELS 3
/* Set 0 if debouncing isn't needed */
-#define DEBOUNCE 2
-#define TAPPING_TERM 200
-#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
+#define DEBOUNCING_DELAY 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
@@ -64,10 +70,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* key combination for command */
#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \
- keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D4
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 8 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
/*
* Feature disable options
* These options are also useful to firmware size reduction.
@@ -85,8 +98,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-//#define DEBUG_MATRIX_SCAN_RATE
-#define ONESHOT_TAP_TOGGLE 2
-#define ONESHOT_TIMEOUT 3000
#endif
diff --git a/keyboards/lets_split/keymaps/i2c/keymap.c b/keyboards/lets_split/keymaps/i2c/keymap.c
new file mode 100644
index 000000000..0d2d94b67
--- /dev/null
+++ b/keyboards/lets_split/keymaps/i2c/keymap.c
@@ -0,0 +1,214 @@
+#include "lets_split.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+ ADJUST,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = KEYMAP( \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = KEYMAP( \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = KEYMAP( \
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = KEYMAP( \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = KEYMAP( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = KEYMAP( \
+ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_DVORAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+} \ No newline at end of file
diff --git a/keyboards/lets_split/keymaps/serial/config.h b/keyboards/lets_split/keymaps/serial/config.h
new file mode 100644
index 000000000..b0ad522fc
--- /dev/null
+++ b/keyboards/lets_split/keymaps/serial/config.h
@@ -0,0 +1,102 @@
+/*
+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 0x3060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Wootpatoot
+#define PRODUCT Lets Split
+#define DESCRIPTION A split keyboard for the cheap makers
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 6
+
+// wiring of each half
+#define MATRIX_ROW_PINS { B5, B4, E6, D7 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 }
+
+#define CATERINA_BOOTLOADER
+
+// #define USE_I2C
+
+// Use serial if not using I2C
+#ifndef USE_I2C
+# define USE_SERIAL
+#endif
+
+// #define EE_HANDS
+
+#define I2C_MASTER_LEFT
+// #define I2C_MASTER_RIGHT
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D4
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 8 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/lets_split/keymaps/serial/keymap.c b/keyboards/lets_split/keymaps/serial/keymap.c
new file mode 100644
index 000000000..0d2d94b67
--- /dev/null
+++ b/keyboards/lets_split/keymaps/serial/keymap.c
@@ -0,0 +1,214 @@
+#include "lets_split.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+ ADJUST,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = KEYMAP( \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = KEYMAP( \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = KEYMAP( \
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = KEYMAP( \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = KEYMAP( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = KEYMAP( \
+ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_DVORAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+} \ No newline at end of file
diff --git a/keyboards/lets_split/lets_split.c b/keyboards/lets_split/lets_split.c
index 574c116a7..117b727a8 100644
--- a/keyboards/lets_split/lets_split.c
+++ b/keyboards/lets_split/lets_split.c
@@ -1,30 +1 @@
-#include "lets_split.h"
-
-#ifdef AUDIO_ENABLE
- float tone_startup[][2] = SONG(STARTUP_SOUND);
- float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
-#endif
-
-void matrix_init_kb(void) {
-
- #ifdef AUDIO_ENABLE
- _delay_ms(20); // gets rid of tick
- PLAY_NOTE_ARRAY(tone_startup, false, 0);
- #endif
-
- // // green led on
- // DDRD |= (1<<5);
- // PORTD &= ~(1<<5);
-
- // // orange led on
- // DDRB |= (1<<0);
- // PORTB &= ~(1<<0);
-
- matrix_init_user();
-};
-
-void shutdown_user(void) {
- PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
- _delay_ms(150);
- stop_all_notes();
-}
+#include "lets_split.h" \ No newline at end of file
diff --git a/keyboards/lets_split/lets_split.h b/keyboards/lets_split/lets_split.h
index fe7ae0767..2cdfb061f 100644
--- a/keyboards/lets_split/lets_split.h
+++ b/keyboards/lets_split/lets_split.h
@@ -1,25 +1,13 @@
#ifndef LETS_SPLIT_H
#define LETS_SPLIT_H
-#include "quantum.h"
-
-void promicro_bootloader_jmp(bool program);
+#ifdef SUBPROJECT_rev1
+ #include "rev1.h"
+#endif
+#ifdef SUBPROJECT_rev2
+ #include "rev2.h"
+#endif
-#define KEYMAP( \
- k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \
- k10, k11, k12, k13, k14, k15, k50, k51, k52, k53, k54, k55, \
- k20, k21, k22, k23, k24, k25, k60, k61, k62, k63, k64, k65, \
- k30, k31, k32, k33, k34, k35, k70, k71, k72, k73, k74, k75 \
- ) \
- { \
- { k00, k01, k02, k03, k04, k05 }, \
- { k10, k11, k12, k13, k14, k15 }, \
- { k20, k21, k22, k23, k24, k25 }, \
- { k30, k31, k32, k33, k34, k35 }, \
- { k40, k41, k42, k43, k44, k45 }, \
- { k50, k51, k52, k53, k54, k55 }, \
- { k60, k61, k62, k63, k64, k65 }, \
- { k70, k71, k72, k73, k74, k75 } \
- }
+#include "quantum.h"
#endif \ No newline at end of file
diff --git a/keyboards/lets_split/matrix.c b/keyboards/lets_split/matrix.c
index 1d768c59b..138969004 100644
--- a/keyboards/lets_split/matrix.c
+++ b/keyboards/lets_split/matrix.c
@@ -28,14 +28,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "debug.h"
#include "util.h"
#include "matrix.h"
-#include "i2c.h"
-#include "serial.h"
#include "split_util.h"
#include "pro_micro.h"
#include "config.h"
+#ifdef USE_I2C
+# include "i2c.h"
+#else // USE_SERIAL
+# include "serial.h"
+#endif
+
#ifndef DEBOUNCE
-# define DEBOUNCE 5
+# define DEBOUNCE 5
#endif
#define ERROR_DISCONNECT_COUNT 5
@@ -145,6 +149,8 @@ uint8_t _matrix_scan(void)
return 1;
}
+#ifdef USE_I2C
+
// Get rows from other half over i2c
int i2c_transaction(void) {
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
@@ -176,7 +182,8 @@ i2c_error: // the cable is disconnceted, or something else went wrong
return 0;
}
-#ifndef USE_I2C
+#else // USE_SERIAL
+
int serial_transaction(void) {
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
@@ -199,7 +206,7 @@ uint8_t matrix_scan(void)
#ifdef USE_I2C
if( i2c_transaction() ) {
-#else
+#else // USE_SERIAL
if( serial_transaction() ) {
#endif
// turn on the indicator led when halves are disconnected
@@ -235,7 +242,7 @@ void matrix_slave_scan(void) {
/* i2c_slave_buffer[i] = matrix[offset+i]; */
i2c_slave_buffer[i] = matrix[offset+i];
}
-#else
+#else // USE_SERIAL
for (int i = 0; i < ROWS_PER_HAND; ++i) {
serial_slave_buffer[i] = matrix[offset+i];
}
@@ -290,7 +297,7 @@ static void init_cols(void)
static matrix_row_t read_cols(void)
{
matrix_row_t result = 0;
- for(int x = 0; x < MATRIX_COLS; x++) {
+ for(int x = 0; x < MATRIX_COLS; x++) {
result |= (_SFR_IO8(col_pins[x] >> 4) & _BV(col_pins[x] & 0xF)) ? 0 : (1 << x);
}
return result;
@@ -298,7 +305,7 @@ static matrix_row_t read_cols(void)
static void unselect_rows(void)
{
- for(int x = 0; x < ROWS_PER_HAND; x++) {
+ for(int x = 0; x < ROWS_PER_HAND; x++) {
_SFR_IO8((row_pins[x] >> 4) + 1) &= ~_BV(row_pins[x] & 0xF);
_SFR_IO8((row_pins[x] >> 4) + 2) |= _BV(row_pins[x] & 0xF);
}
diff --git a/keyboards/lets_split/pro_micro.h b/keyboards/lets_split/pro_micro.h
index 09e219b7b..f9e7ed75d 100644
--- a/keyboards/lets_split/pro_micro.h
+++ b/keyboards/lets_split/pro_micro.h
@@ -111,18 +111,18 @@ static const uint8_t SCK = 15;
// Mapping of analog pins as digital I/O
// A6-A11 share with digital pins
-static const uint8_t A0 = 18;
-static const uint8_t A1 = 19;
-static const uint8_t A2 = 20;
-static const uint8_t A3 = 21;
-static const uint8_t A4 = 22;
-static const uint8_t A5 = 23;
-static const uint8_t A6 = 24; // D4
-static const uint8_t A7 = 25; // D6
-static const uint8_t A8 = 26; // D8
-static const uint8_t A9 = 27; // D9
-static const uint8_t A10 = 28; // D10
-static const uint8_t A11 = 29; // D12
+static const uint8_t ADC0 = 18;
+static const uint8_t ADC1 = 19;
+static const uint8_t ADC2 = 20;
+static const uint8_t ADC3 = 21;
+static const uint8_t ADC4 = 22;
+static const uint8_t ADC5 = 23;
+static const uint8_t ADC6 = 24; // D4
+static const uint8_t ADC7 = 25; // D6
+static const uint8_t ADC8 = 26; // D8
+static const uint8_t ADC9 = 27; // D9
+static const uint8_t ADC10 = 28; // D10
+static const uint8_t ADC11 = 29; // D12
#define digitalPinToPCICR(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0))
#define digitalPinToPCICRbit(p) 0
@@ -220,26 +220,26 @@ const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
PC, // D5 - PC6
PD, // D6 - PD7
PE, // D7 - PE6
-
+
PB, // D8 - PB4
PB, // D9 - PB5
PB, // D10 - PB6
PB, // D11 - PB7
PD, // D12 - PD6
PC, // D13 - PC7
-
+
PB, // D14 - MISO - PB3
PB, // D15 - SCK - PB1
PB, // D16 - MOSI - PB2
PB, // D17 - SS - PB0
-
+
PF, // D18 - A0 - PF7
PF, // D19 - A1 - PF6
PF, // D20 - A2 - PF5
PF, // D21 - A3 - PF4
PF, // D22 - A4 - PF1
PF, // D23 - A5 - PF0
-
+
PD, // D24 - PD5
PD, // D25 / D6 - A7 - PD7
PB, // D26 / D8 - A8 - PB4
@@ -257,26 +257,26 @@ const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
_BV(6), // D5 - PC6
_BV(7), // D6 - PD7
_BV(6), // D7 - PE6
-
+
_BV(4), // D8 - PB4
_BV(5), // D9 - PB5
_BV(6), // D10 - PB6
_BV(7), // D11 - PB7
_BV(6), // D12 - PD6
_BV(7), // D13 - PC7
-
+
_BV(3), // D14 - MISO - PB3
_BV(1), // D15 - SCK - PB1
_BV(2), // D16 - MOSI - PB2
_BV(0), // D17 - SS - PB0
-
+
_BV(7), // D18 - A0 - PF7
_BV(6), // D19 - A1 - PF6
_BV(5), // D20 - A2 - PF5
_BV(4), // D21 - A3 - PF4
_BV(1), // D22 - A4 - PF1
_BV(0), // D23 - A5 - PF0
-
+
_BV(5), // D24 - PD5
_BV(7), // D25 / D6 - A7 - PD7
_BV(4), // D26 / D8 - A8 - PB4
@@ -286,24 +286,24 @@ const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
};
const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
- NOT_ON_TIMER,
+ NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
TIMER0B, /* 3 */
NOT_ON_TIMER,
TIMER3A, /* 5 */
TIMER4D, /* 6 */
- NOT_ON_TIMER,
-
- NOT_ON_TIMER,
+ NOT_ON_TIMER,
+
+ NOT_ON_TIMER,
TIMER1A, /* 9 */
TIMER1B, /* 10 */
TIMER0A, /* 11 */
-
- NOT_ON_TIMER,
+
+ NOT_ON_TIMER,
TIMER4A, /* 13 */
-
- NOT_ON_TIMER,
+
+ NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
@@ -324,11 +324,11 @@ const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
const uint8_t PROGMEM analog_pin_to_channel_PGM[] = {
7, // A0 PF7 ADC7
- 6, // A1 PF6 ADC6
- 5, // A2 PF5 ADC5
+ 6, // A1 PF6 ADC6
+ 5, // A2 PF5 ADC5
4, // A3 PF4 ADC4
- 1, // A4 PF1 ADC1
- 0, // A5 PF0 ADC0
+ 1, // A4 PF1 ADC1
+ 0, // A5 PF0 ADC0
8, // A6 D4 PD4 ADC8
10, // A7 D6 PD7 ADC10
11, // A8 D8 PB4 ADC11
diff --git a/keyboards/lets_split/readme.md b/keyboards/lets_split/readme.md
index 73fdb0f78..6e296737a 100644
--- a/keyboards/lets_split/readme.md
+++ b/keyboards/lets_split/readme.md
@@ -100,3 +100,16 @@ half to a computer by USB the keyboard will use QWERTY and Colemak when the
right half is connected.
+Notes on Using Pro Micro 3.3V
+-----------------------------
+
+Do update the `F_CPU` parameter in `rules.mk` to `8000000` which reflects
+the frequency on the 3.3V board.
+
+Also, if the slave board is producing weird characters in certain columns,
+update the following line in `matrix.c` to the following:
+
+```
+// _delay_us(30); // without this wait read unstable value.
+_delay_us(300); // without this wait read unstable value.
+```
diff --git a/keyboards/lets_split/rev1/Makefile b/keyboards/lets_split/rev1/Makefile
new file mode 100644
index 000000000..4e2a6f00f
--- /dev/null
+++ b/keyboards/lets_split/rev1/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/lets_split/rev1/config.h b/keyboards/lets_split/rev1/config.h
new file mode 100644
index 000000000..825e5ec24
--- /dev/null
+++ b/keyboards/lets_split/rev1/config.h
@@ -0,0 +1,94 @@
+/*
+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 0x3060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Wootpatoot
+#define PRODUCT Lets Split
+#define PRODUCT Lets Split v1
+#define DESCRIPTION A split keyboard for the cheap makers
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 6
+
+// wiring of each half
+#define MATRIX_ROW_PINS { B5, B4, E6, D7 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3 }
+
+#define CATERINA_BOOTLOADER
+
+// #define USE_I2C
+// Use serial if not using I2C
+#ifndef USE_I2C
+# define USE_SERIAL
+#endif
+
+// #define EE_HANDS
+
+#define I2C_MASTER_LEFT
+// #define I2C_MASTER_RIGHT
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/lets_split/rev1/rev1.c b/keyboards/lets_split/rev1/rev1.c
new file mode 100644
index 000000000..c505d3a6e
--- /dev/null
+++ b/keyboards/lets_split/rev1/rev1.c
@@ -0,0 +1,32 @@
+#include "lets_split.h"
+
+#ifdef AUDIO_ENABLE
+ float tone_startup[][2] = SONG(STARTUP_SOUND);
+ float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void matrix_init_kb(void) {
+
+ #ifdef AUDIO_ENABLE
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+ #endif
+
+ // // green led on
+ // DDRD |= (1<<5);
+ // PORTD &= ~(1<<5);
+
+ // // orange led on
+ // DDRB |= (1<<0);
+ // PORTB &= ~(1<<0);
+
+ matrix_init_user();
+};
+
+void shutdown_user(void) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+ _delay_ms(150);
+ stop_all_notes();
+ #endif
+}
diff --git a/keyboards/lets_split/rev1/rev1.h b/keyboards/lets_split/rev1/rev1.h
new file mode 100644
index 000000000..4667c9fb0
--- /dev/null
+++ b/keyboards/lets_split/rev1/rev1.h
@@ -0,0 +1,28 @@
+#ifndef REV1_H
+#define REV1_H
+
+#include "../lets_split.h"
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+//void promicro_bootloader_jmp(bool program);
+
+#define KEYMAP( \
+ k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \
+ k10, k11, k12, k13, k14, k15, k50, k51, k52, k53, k54, k55, \
+ k20, k21, k22, k23, k24, k25, k60, k61, k62, k63, k64, k65, \
+ k30, k31, k32, k33, k34, k35, k70, k71, k72, k73, k74, k75 \
+ ) \
+ { \
+ { k00, k01, k02, k03, k04, k05 }, \
+ { k10, k11, k12, k13, k14, k15 }, \
+ { k20, k21, k22, k23, k24, k25 }, \
+ { k30, k31, k32, k33, k34, k35 }, \
+ { k40, k41, k42, k43, k44, k45 }, \
+ { k50, k51, k52, k53, k54, k55 }, \
+ { k60, k61, k62, k63, k64, k65 }, \
+ { k70, k71, k72, k73, k74, k75 } \
+ }
+
+#endif \ No newline at end of file
diff --git a/keyboards/lets_split/rev1/rules.mk b/keyboards/lets_split/rev1/rules.mk
new file mode 100644
index 000000000..a0825b4ef
--- /dev/null
+++ b/keyboards/lets_split/rev1/rules.mk
@@ -0,0 +1,5 @@
+BACKLIGHT_ENABLE = no
+
+ifndef QUANTUM_DIR
+ include ../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/lets_split/rev2/Makefile b/keyboards/lets_split/rev2/Makefile
new file mode 100644
index 000000000..4e2a6f00f
--- /dev/null
+++ b/keyboards/lets_split/rev2/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/lets_split/rev2/config.h b/keyboards/lets_split/rev2/config.h
new file mode 100644
index 000000000..e9689d773
--- /dev/null
+++ b/keyboards/lets_split/rev2/config.h
@@ -0,0 +1,102 @@
+/*
+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 0x3060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Wootpatoot
+#define PRODUCT Lets Split v2
+#define DESCRIPTION A split keyboard for the cheap makers
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 6
+
+// wiring of each half
+#define MATRIX_ROW_PINS { D7, E6, B4, B5 }
+#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6 }
+
+#define CATERINA_BOOTLOADER
+
+// #define USE_I2C
+
+// Use serial if not using I2C
+#ifndef USE_I2C
+# define USE_SERIAL
+#endif
+
+// #define EE_HANDS
+
+#define I2C_MASTER_LEFT
+// #define I2C_MASTER_RIGHT
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+#define RGBLIGHT_TIMER
+#define RGBLED_NUM 12 // Number of LEDs
+#define ws2812_PORTREG PORTD
+#define ws2812_DDRREG DDRD
+
+/*
+ * 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 \ No newline at end of file
diff --git a/keyboards/lets_split/rev2/rev2.c b/keyboards/lets_split/rev2/rev2.c
new file mode 100644
index 000000000..c505d3a6e
--- /dev/null
+++ b/keyboards/lets_split/rev2/rev2.c
@@ -0,0 +1,32 @@
+#include "lets_split.h"
+
+#ifdef AUDIO_ENABLE
+ float tone_startup[][2] = SONG(STARTUP_SOUND);
+ float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void matrix_init_kb(void) {
+
+ #ifdef AUDIO_ENABLE
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+ #endif
+
+ // // green led on
+ // DDRD |= (1<<5);
+ // PORTD &= ~(1<<5);
+
+ // // orange led on
+ // DDRB |= (1<<0);
+ // PORTB &= ~(1<<0);
+
+ matrix_init_user();
+};
+
+void shutdown_user(void) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+ _delay_ms(150);
+ stop_all_notes();
+ #endif
+}
diff --git a/keyboards/lets_split/rev2/rev2.h b/keyboards/lets_split/rev2/rev2.h
new file mode 100644
index 000000000..990976de2
--- /dev/null
+++ b/keyboards/lets_split/rev2/rev2.h
@@ -0,0 +1,28 @@
+#ifndef REV2_H
+#define REV2_H
+
+#include "../lets_split.h"
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+//void promicro_bootloader_jmp(bool program);
+
+#define KEYMAP( \
+ k00, k01, k02, k03, k04, k05, k45, k44, k43, k42, k41, k40, \
+ k10, k11, k12, k13, k14, k15, k55, k54, k53, k52, k51, k50, \
+ k20, k21, k22, k23, k24, k25, k65, k64, k63, k62, k61, k60, \
+ k30, k31, k32, k33, k34, k35, k75, k74, k73, k72, k71, k70 \
+ ) \
+ { \
+ { k00, k01, k02, k03, k04, k05 }, \
+ { k10, k11, k12, k13, k14, k15 }, \
+ { k20, k21, k22, k23, k24, k25 }, \
+ { k30, k31, k32, k33, k34, k35 }, \
+ { k40, k41, k42, k43, k44, k45 }, \
+ { k50, k51, k52, k53, k54, k55 }, \
+ { k60, k61, k62, k63, k64, k65 }, \
+ { k70, k71, k72, k73, k74, k75 } \
+ }
+
+#endif \ No newline at end of file
diff --git a/keyboards/lets_split/rev2/rules.mk b/keyboards/lets_split/rev2/rules.mk
new file mode 100644
index 000000000..80a942d06
--- /dev/null
+++ b/keyboards/lets_split/rev2/rules.mk
@@ -0,0 +1,5 @@
+BACKLIGHT_ENABLE = no
+
+ifndef QUANTUM_DIR
+ include ../../../Makefile
+endif
diff --git a/keyboards/lets_split/rules.mk b/keyboards/lets_split/rules.mk
new file mode 100644
index 000000000..1aee5313c
--- /dev/null
+++ b/keyboards/lets_split/rules.mk
@@ -0,0 +1,75 @@
+SRC += matrix.c \
+ i2c.c \
+ split_util.c \
+ serial.c
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= 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.
+SUBPROJECT_rev1 ?= yes
+USE_I2C ?= yes
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
+
+CUSTOM_MATRIX = yes
diff --git a/keyboards/lets_split/serial.c b/keyboards/lets_split/serial.c
index f439c2f20..6faed09ce 100644
--- a/keyboards/lets_split/serial.c
+++ b/keyboards/lets_split/serial.c
@@ -10,9 +10,10 @@
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdbool.h>
-
#include "serial.h"
+#ifdef USE_SERIAL
+
// Serial pulse period in microseconds. Its probably a bad idea to lower this
// value.
#define SERIAL_DELAY 24
@@ -223,3 +224,5 @@ int serial_update_buffers(void) {
sei();
return 0;
}
+
+#endif
diff --git a/keyboards/lets_split/split_util.c b/keyboards/lets_split/split_util.c
index 65003a71a..461921798 100644
--- a/keyboards/lets_split/split_util.c
+++ b/keyboards/lets_split/split_util.c
@@ -6,11 +6,15 @@
#include <avr/eeprom.h>
#include "split_util.h"
#include "matrix.h"
-#include "i2c.h"
-#include "serial.h"
#include "keyboard.h"
#include "config.h"
+#ifdef USE_I2C
+# include "i2c.h"
+#else
+# include "serial.h"
+#endif
+
volatile bool isLeftHand = true;
static void setup_handedness(void) {
diff --git a/keyboards/maxipad/Makefile b/keyboards/maxipad/Makefile
new file mode 100644
index 000000000..4e2a6f00f
--- /dev/null
+++ b/keyboards/maxipad/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/maxipad/config.h b/keyboards/maxipad/config.h
new file mode 100644
index 000000000..d7a5ef564
--- /dev/null
+++ b/keyboards/maxipad/config.h
@@ -0,0 +1,95 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER wootpatoot
+#define PRODUCT maxipad
+#define DESCRIPTION A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 6
+
+/*
+ * 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)
+ *
+*/
+//Pro micro pinout
+ #define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 }
+ #define MATRIX_COL_PINS { F4, C6, D7, F5, B4, B5 }
+ #define UNUSED_PINS
+//Teensy 2 pinout
+ //#define MATRIX_ROW_PINS { B6, F7, B2, B3, B1 }
+ //#define MATRIX_COL_PINS { F6, C6, D7, F5, B4, B5 }
+ //#define UNUSED_PINS
+
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/maxipad/keymaps/default/keymap.c b/keyboards/maxipad/keymaps/default/keymap.c
new file mode 100644
index 000000000..227cef7d8
--- /dev/null
+++ b/keyboards/maxipad/keymaps/default/keymap.c
@@ -0,0 +1,26 @@
+#include "maxipad.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = KEYMAP( /* Base */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, \
+ MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, \
+ KC_LCTL, KC_LALT, MO(1), KC_ENT,KC_GRV,KC_SPC \
+),
+[1] = KEYMAP(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, \
+ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC \
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // MACRODOWN only works in this function
+{
+ return MACRO_NONE;
+}; \ No newline at end of file
diff --git a/keyboards/maxipad/maxipad.c b/keyboards/maxipad/maxipad.c
new file mode 100644
index 000000000..a193b112b
--- /dev/null
+++ b/keyboards/maxipad/maxipad.c
@@ -0,0 +1 @@
+#include "maxipad.h" \ No newline at end of file
diff --git a/keyboards/maxipad/maxipad.h b/keyboards/maxipad/maxipad.h
new file mode 100644
index 000000000..4d8c6428d
--- /dev/null
+++ b/keyboards/maxipad/maxipad.h
@@ -0,0 +1,25 @@
+#ifndef MAXIPAD_H
+#define MAXIPAD_H
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+// The following is an example using the Planck MIT layout
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define KEYMAP( \
+ k00, k01, k02, k03, k04, k05, \
+ k10, k11, k12, k13, k14, k15, \
+ k20, k21, k22, k23, k24, k25, \
+ k30, k31, k32, k33, k34, k35, \
+ k40, k41, k42, k43, k44, k45 \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05 }, \
+ { k10, k11, k12, k13, k14, k15 }, \
+ { k20, k21, k22, k23, k24, k25 }, \
+ { k30, k31, k32, k33, k34, k35 }, \
+ { k40, k41, k42, k43, k44, k45 } \
+}
+
+#endif
diff --git a/keyboards/retro_refit/readme.md b/keyboards/maxipad/readme.md
index b01a1a9ca..861ea2b07 100644
--- a/keyboards/retro_refit/readme.md
+++ b/keyboards/maxipad/readme.md
@@ -1,24 +1,29 @@
-retro_refit keyboard firmware
-======================
+Maxipad keyboard firmware
## Quantum MK Firmware
For the full Quantum feature list, see [the parent readme.md](/readme.md).
-## Building
+If you are using a pro micro then make sure to enable USE_PRO_MICRO in the makefile
+Change the config.h pinout to match your mcu!!
-Download or clone the whole firmware and navigate to the keyboards/retro_refit 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.
+Download or clone the whole firmware and navigate to the keyboards/maxipad 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` and see keymap document (you can find in top readme.md) and existent keymap files.
-To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
```
-$ make KEYMAP=[default|jack|<name>]
+$ make [default|jack|<name>]
```
-Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder. \ No newline at end of file
+
+Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/maxipad/rules.mk b/keyboards/maxipad/rules.mk
new file mode 100644
index 000000000..a5c739152
--- /dev/null
+++ b/keyboards/maxipad/rules.mk
@@ -0,0 +1,76 @@
+
+
+# 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
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
+# NKRO_ENABLE ?= yes # USB 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 ?= YES # MIDI controls
+# UNICODE_ENABLE ?= YES # Unicode
+# BLUETOOTH_ENABLE ?= yes # Enable Bluetooth with the Adafruit EZ-Key HID
+USE_PRO_MICRO ?= yes
+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 ?= no # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
+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
diff --git a/keyboards/pegasushoof/Makefile b/keyboards/pegasushoof/Makefile
new file mode 100644
index 000000000..57b2ef62e
--- /dev/null
+++ b/keyboards/pegasushoof/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../Makefile
+endif
diff --git a/keyboards/pegasushoof/README.md b/keyboards/pegasushoof/README.md
new file mode 100644
index 000000000..074222c71
--- /dev/null
+++ b/keyboards/pegasushoof/README.md
@@ -0,0 +1,24 @@
+pegasushoof 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/pegasushoof` 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 all keymaps, simply run `make`, the `.hex` files will end up in the top directory.
+
+### Specific 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 `<name>/keymap.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 enter the keymap directory and type `make`:
+```
+$ cd keymaps/default
+$ make
+```
diff --git a/keyboards/pegasushoof/config.h b/keyboards/pegasushoof/config.h
new file mode 100644
index 000000000..0dbec26e4
--- /dev/null
+++ b/keyboards/pegasushoof/config.h
@@ -0,0 +1,46 @@
+/*
+Copyright 2016 Daniel Svensson <dsvensson@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 0x6050
+#define DEVICE_VER 0x0104
+#define MANUFACTURER Filco
+#define PRODUCT Majestouch TKL \\w The Pegasus Hoof
+#define DESCRIPTION QMK firmware for Majestouch TKL
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 18
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#endif
diff --git a/keyboards/pegasushoof/keymaps/blowrak/Makefile b/keyboards/pegasushoof/keymaps/blowrak/Makefile
new file mode 100644
index 000000000..fec0d2d97
--- /dev/null
+++ b/keyboards/pegasushoof/keymaps/blowrak/Makefile
@@ -0,0 +1,22 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE ?= 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
+CUSTOM_MATRIX ?= yes # Custom matrix file for the Pegasus Hoof due to the 2x74HC42
+NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= 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.
+
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/pegasushoof/keymaps/blowrak/keymap.c b/keyboards/pegasushoof/keymaps/blowrak/keymap.c
new file mode 100644
index 000000000..6faf4db6f
--- /dev/null
+++ b/keyboards/pegasushoof/keymaps/blowrak/keymap.c
@@ -0,0 +1,112 @@
+/*
+Copyright 2016 Daniel Svensson <dsvensson@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 "pegasushoof.h"
+
+#define _______ KC_TRNS
+
+/* Swedish keys */
+#define SE_HALF KC_GRV
+#define SE_PLUS KC_MINS
+#define SE_ACUT KC_EQL
+#define SE_AO KC_LBRC
+#define SE_CIRC KC_RBRC
+#define SE_QUOT KC_BSLS
+#define SE_OE KC_SCLN
+#define SE_AE KC_QUOT
+#define SE_MINS KC_SLSH
+#define SE_LTGT KC_NUBS
+#define SE_LCBR RALT(KC_7)
+#define SE_LBRC RALT(KC_8)
+#define SE_RBRC RALT(KC_9)
+#define SE_RCBR RALT(KC_0)
+#define SE_PIPE RALT(SE_LTGT)
+#define SE_BSLS RALT(SE_PLUS)
+
+#define KM_BLOWRAK 0
+#define KM_QWERTY 1
+#define KM_MEDIA 2
+#define KM_HAXHAX 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Layer 0: Blowrak ISO layer, a Swedish take on Dvorak */
+ [KM_BLOWRAK] = KEYMAP( \
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
+ SE_HALF, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, SE_PLUS,SE_ACUT,KC_BSPC, KC_INS, KC_HOME,KC_PGUP, \
+ KC_TAB, SE_AO, SE_AE, SE_OE, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_COMM,SE_CIRC,SE_QUOT, KC_DEL, KC_END, KC_PGDN, \
+ KC_LCTRL,KC_A, KC_O, KC_E, KC_U, KC_I, KC_H, KC_D, KC_T, KC_N, KC_S, SE_MINS, KC_ENT, \
+ KC_LSFT, SE_LTGT,KC_DOT, KC_Q, KC_J, KC_K, KC_B, KC_X, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_UP, \
+ KC_FN0, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_FN1, KC_LEFT,KC_DOWN,KC_RGHT),
+ /* Layer 1: Standard ISO layer */
+ [KM_QWERTY] = KEYMAP( \
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
+ SE_HALF, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, SE_PLUS,SE_ACUT,KC_BSPC, KC_INS, KC_HOME,KC_PGUP, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, SE_AO, SE_CIRC,SE_QUOT, KC_DEL, KC_END, KC_PGDN, \
+ KC_LCTRL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SE_OE, SE_AE, KC_ENT, \
+ KC_LSFT, SE_LTGT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, SE_MINS, KC_RSFT, KC_UP, \
+ KC_FN0, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_FN1, KC_LEFT,KC_DOWN,KC_RGHT),
+ /* Layer 2: Media layer */
+ [KM_MEDIA] = KEYMAP( \
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_WAKE,KC_PWR, KC_SLEP, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,KC_VOLU, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_MUTE,_______,KC_VOLD, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_MPLY, \
+ _______,_______,_______, _______, _______,_______,RESET ,_______, KC_MPRV,KC_MSTP,KC_MNXT),
+ /* Layer 3: Programming layer */
+ [KM_HAXHAX] = KEYMAP( \
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
+ _______,SE_LCBR,SE_PIPE,SE_RCBR,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
+ _______,SE_LBRC,SE_BSLS,SE_RBRC,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______, \
+ _______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_MOMENTARY(KM_MEDIA),
+ [1] = ACTION_LAYER_TOGGLE(KM_QWERTY)
+};
+
+void matrix_scan_user(void)
+{
+ uint8_t layer = biton32(layer_state);
+ switch (layer) {
+ case KM_BLOWRAK:
+ ph_caps_led_on();
+ ph_sclk_led_off();
+ break;
+ case KM_QWERTY:
+ ph_sclk_led_on();
+ ph_caps_led_off();
+ break;
+ }
+}
+
+/* Mixes in KM_HAXHAX via RALT modifier without shadowing the RALT key combinations. */
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint8_t modifiers = get_mods();
+ if (modifiers & MOD_BIT(KC_RALT) && record->event.pressed) {
+ uint16_t kc = keymap_key_to_keycode(KM_HAXHAX, record->event.key);
+ if (kc != KC_TRNS) {
+ register_code(kc);
+ unregister_code(kc);
+ return false;
+ }
+ }
+ return true;
+}
diff --git a/keyboards/pegasushoof/keymaps/default/Makefile b/keyboards/pegasushoof/keymaps/default/Makefile
new file mode 100644
index 000000000..fec0d2d97
--- /dev/null
+++ b/keyboards/pegasushoof/keymaps/default/Makefile
@@ -0,0 +1,22 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE ?= 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
+CUSTOM_MATRIX ?= yes # Custom matrix file for the Pegasus Hoof due to the 2x74HC42
+NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= 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.
+
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/pegasushoof/keymaps/default/keymap.c b/keyboards/pegasushoof/keymaps/default/keymap.c
new file mode 100644
index 000000000..aa006b23a
--- /dev/null
+++ b/keyboards/pegasushoof/keymaps/default/keymap.c
@@ -0,0 +1,60 @@
+/*
+Copyright 2016 Daniel Svensson <dsvensson@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 "pegasushoof.h"
+
+#define _______ KC_TRNS
+
+#define KM_QWERTY 0
+#define KM_MEDIA 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Layer 0: Standard ISO layer */
+ [KM_QWERTY] = KEYMAP( \
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_INS, KC_HOME,KC_PGUP, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
+ KC_CLCK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_FN0, KC_LEFT,KC_DOWN,KC_RGHT),
+ /* Layer 1: Function layer */
+ [KM_MEDIA] = KEYMAP( \
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_WAKE,KC_PWR, KC_SLEP, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,KC_VOLU, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,KC_VOLD, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_MPLY, \
+ _______,_______,_______, _______, _______,_______,RESET ,_______, KC_MPRV,KC_MSTP,KC_MNXT)
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_MOMENTARY(KM_MEDIA)
+};
+
+void led_set_user(uint8_t usb_led) {
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ ph_caps_led_on();
+ } else {
+ ph_caps_led_off();
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+ ph_sclk_led_on();
+ } else {
+ ph_sclk_led_off();
+ }
+}
diff --git a/keyboards/pegasushoof/matrix.c b/keyboards/pegasushoof/matrix.c
new file mode 100644
index 000000000..d2a74b8d7
--- /dev/null
+++ b/keyboards/pegasushoof/matrix.c
@@ -0,0 +1,204 @@
+/*
+Copyright 2014 Ralf Schmitt <ralf@bunkertor.net>
+Copyright 2016 Daniel Svensson <dsvensson@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 "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+
+static uint8_t debouncing = DEBOUNCING_DELAY;
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+static matrix_row_t read_cols(void);
+static void select_row(uint8_t col);
+
+inline uint8_t matrix_rows(void)
+{
+ return MATRIX_ROWS;
+}
+
+inline uint8_t matrix_cols(void)
+{
+ return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+ /* Column output pins */
+ DDRD |= 0b01111011;
+ /* Row input pins */
+ DDRC &= ~0b10000000;
+ DDRB &= ~0b01111111;
+ PORTC |= 0b10000000;
+ PORTB |= 0b01111111;
+
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ matrix_debouncing[i] = 0;
+ }
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void)
+{
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ select_row(col);
+ wait_us(30);
+ matrix_row_t rows = read_cols();
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
+ bool curr_bit = rows & (1<<row);
+ if (prev_bit != curr_bit) {
+ matrix_debouncing[row] ^= (matrix_row_t) 1 << col;
+ debouncing = DEBOUNCING_DELAY;
+ }
+ }
+ }
+
+ if (debouncing) {
+ if (--debouncing) {
+ wait_ms(1);
+ } else {
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = matrix_debouncing[i];
+ }
+ }
+ }
+
+ matrix_scan_quantum();
+
+ return 1;
+}
+
+bool matrix_is_modified(void)
+{
+ if (debouncing)
+ return false;
+ return true;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return matrix[row] & 1 << col;
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print("\nr/c 0123456789ABCDEF\n");
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row); print(": ");
+ pbin_reverse16(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 += bitpop16(matrix[i]);
+ }
+ return count;
+}
+
+static matrix_row_t read_cols(void)
+{
+ return
+ (PINB & (1 << 5) ? 0 : 1 << 0) |
+ (PINC & (1 << 7) ? 0 : 1 << 1) |
+ (PINB & (1 << 4) ? 0 : 1 << 2) |
+ (PINB & (1 << 6) ? 0 : 1 << 3) |
+ (PINB & (1 << 1) ? 0 : 1 << 4) |
+ (PINB & (1 << 0) ? 0 : 1 << 5) |
+ (PINB & (1 << 3) ? 0 : 1 << 6) |
+ (PINB & (1 << 2) ? 0 : 1 << 7);
+}
+
+static void select_row(uint8_t col)
+{
+ switch (col) {
+ case 0:
+ PORTD = (PORTD & ~0b01111011) | 0b00110011;
+ break;
+ case 1:
+ PORTD = (PORTD & ~0b01111011) | 0b01110000;
+ break;
+ case 2:
+ PORTD = (PORTD & ~0b01111011) | 0b00010011;
+ break;
+ case 3:
+ PORTD = (PORTD & ~0b01111011) | 0b01101000;
+ break;
+ case 4:
+ PORTD = (PORTD & ~0b01111011) | 0b00001011;
+ break;
+ case 5:
+ PORTD = (PORTD & ~0b01111011) | 0b00111011;
+ break;
+ case 6:
+ PORTD = (PORTD & ~0b01111011) | 0b01111000;
+ break;
+ case 7:
+ PORTD = (PORTD & ~0b01111011) | 0b01100001;
+ break;
+ case 8:
+ PORTD = (PORTD & ~0b01111011) | 0b01101001;
+ break;
+ case 9:
+ PORTD = (PORTD & ~0b01111011) | 0b01110001;
+ break;
+ case 10:
+ PORTD = (PORTD & ~0b01111011) | 0b01101010;
+ break;
+ case 11:
+ PORTD = (PORTD & ~0b01111011) | 0b01100010;
+ break;
+ case 12:
+ PORTD = (PORTD & ~0b01111011) | 0b01111001;
+ break;
+ case 13:
+ PORTD = (PORTD & ~0b01111011) | 0b01100000;
+ break;
+ case 14:
+ PORTD = (PORTD & ~0b01111011) | 0b01000011;
+ break;
+ case 15:
+ PORTD = (PORTD & ~0b01111011) | 0b00011011;
+ break;
+ case 16:
+ PORTD = (PORTD & ~0b01111011) | 0b00100011;
+ break;
+ case 17:
+ PORTD = (PORTD & ~0b01111011) | 0b00101011;
+ break;
+ }
+}
diff --git a/keyboards/pegasushoof/pegasushoof.c b/keyboards/pegasushoof/pegasushoof.c
new file mode 100644
index 000000000..6bb249aef
--- /dev/null
+++ b/keyboards/pegasushoof/pegasushoof.c
@@ -0,0 +1,51 @@
+/*
+Copyright 2016 Daniel Svensson <dsvensson@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 "pegasushoof.h"
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+};
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+__attribute__ ((weak))
+bool process_action_user(keyrecord_t *record) {
+ return true;
+}
+
+__attribute__ ((weak))
+void led_set_user(uint8_t usb_led) {
+}
+
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+bool process_action_kb(keyrecord_t *record) {
+ return process_action_user(record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ led_set_user(usb_led);
+}
diff --git a/keyboards/pegasushoof/pegasushoof.h b/keyboards/pegasushoof/pegasushoof.h
new file mode 100644
index 000000000..d031e3ed2
--- /dev/null
+++ b/keyboards/pegasushoof/pegasushoof.h
@@ -0,0 +1,51 @@
+/*
+Copyright 2016 Daniel Svensson <dsvensson@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 PEGASUSHOOF_H
+#define PEGASUSHOOF_H
+
+#include "matrix.h"
+#include "quantum.h"
+
+#define ___ KC_NO
+
+#define KEYMAP( \
+ KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
+ KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2, KR4, KC4, KE4, \
+ KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3, KQ4, KC5, KE5, \
+ KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO1, \
+ KB2, KH6, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KB3, KC6, \
+ KP4, KD2, KN6, KQ6, KN0, KA3, KM0, KP1, KC0, KQ0, KR0 \
+ ) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
+ /* 0 */ { ___ , ___ , KC0 , ___ , ___ , KF0 , ___ , ___ , ___ , KJ0 , KK0 , ___ , KM0 , KN0 , KO0 , ___ , KQ0 , KR0 }, \
+ /* 1 */ { ___ , ___ , ___ , ___ , ___ , ___ , KG1 , KH1 , KI1 , KJ1 , KK1 , KL1 , KM1 , ___ , KO1 , KP1 , ___ , ___ }, \
+ /* 2 */ { ___ , KB2 , ___ , KD2 , ___ , KF2 , KG2 , KH2 , KI2 , KJ2 , KK2 , KL2 , KM2 , ___ , KO2 , ___ , ___ , ___ }, \
+ /* 3 */ { KA3 , KB3 , ___ , ___ , ___ , KF3 , KG3 , KH3 , KI3 , KJ3 , KK3 , KL3 , KM3 , ___ , KO3 , ___ , ___ , ___ }, \
+ /* 4 */ { ___ , ___ , KC4 , ___ , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , KM4 , ___ , KO4 , KP4 , KQ4 , KR4 }, \
+ /* 5 */ { ___ , ___ , KC5 , ___ , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , KK5 , KL5 , KM5 , KN5 , KO5 , KP5 , ___ , ___ }, \
+ /* 6 */ { ___ , ___ , KC6 , ___ , ___ , KF6 , KG6 , KH6 , KI6 , KJ6 , KK6 , KL6 , ___ , KN6 , KO6 , ___ , KQ6 , ___ }, \
+ /* 7 */ { ___ , ___ , ___ , ___ , ___ , KF7 , KG7 , KH7 , KI7 , KJ7 , KK7 , KL7 , KM7 , KN7 , ___ , KP7 , ___ , ___ }, \
+ }
+
+inline void ph_caps_led_on(void) { DDRC |= (1<<6); PORTC &= ~(1<<6); }
+inline void ph_caps_led_off(void) { DDRC &= ~(1<<6); PORTC &= ~(1<<6); }
+
+inline void ph_sclk_led_on(void) { DDRC |= (1<<5); PORTC &= ~(1<<5); }
+inline void ph_sclk_led_off(void) { DDRC &= ~(1<<5); PORTC &= ~(1<<5); }
+
+
+#endif
diff --git a/keyboards/pegasushoof/rules.mk b/keyboards/pegasushoof/rules.mk
new file mode 100644
index 000000000..b3eeebfdb
--- /dev/null
+++ b/keyboards/pegasushoof/rules.mk
@@ -0,0 +1,67 @@
+# 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)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change 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
+NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= 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.
+
+
+CUSTOM_MATRIX ?= yes
+SRC = matrix.c
diff --git a/keyboards/phantom/Makefile b/keyboards/phantom/Makefile
index 3a71fd0ee..4e2a6f00f 100644
--- a/keyboards/phantom/Makefile
+++ b/keyboards/phantom/Makefile
@@ -1,74 +1,3 @@
-
-
-SRC = led.c
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-# comment out to disable the options.
-#
-BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes # Console for debug(+400)
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
-NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-RGBLIGHT_ENABLE ?=yes # Enable keyboard underlight functionality (+4870)
-BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality (+1150)
-MIDI_ENABLE ?= no # MIDI controls
-AUDIO_ENABLE ?= no
-UNICODE_ENABLE ?= no # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../Makefile
-endif
+endif \ No newline at end of file
diff --git a/keyboards/phantom/config.h b/keyboards/phantom/config.h
index 983a1d73f..71a33498b 100644
--- a/keyboards/phantom/config.h
+++ b/keyboards/phantom/config.h
@@ -63,7 +63,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Underlight configuration
*/
#define RGB_DI_PIN E2
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 20 // Number of LEDs
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
diff --git a/keyboards/phantom/keymaps/xyverz/keymap.c b/keyboards/phantom/keymaps/xyverz/keymap.c
new file mode 100644
index 000000000..4a1522638
--- /dev/null
+++ b/keyboards/phantom/keymaps/xyverz/keymap.c
@@ -0,0 +1,104 @@
+#include "phantom.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+
+// Used for SHIFT_ESC
+#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QW 0
+#define _DV 1
+#define _CM 2
+#define _FL 3
+
+// Macro name shortcuts
+#define QWERTY M(_QW)
+#define DVORAK M(_DV)
+#define COLEMAK M(_CM)
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QW] = { /* Layer 0: Qwerty */
+ {KC_ESC, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS},
+ {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, XXXXXXX, KC_BSPC, KC_INS, KC_HOME, KC_PGUP},
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN},
+ {KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX},
+ {KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, XXXXXXX, KC_RSFT, XXXXXXX, KC_UP, XXXXXXX},
+ {KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, KC_RGUI, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT}
+ },
+
+[_DV] = { /* Layer 1: Dvorak */
+ {KC_ESC, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS},
+ {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, XXXXXXX, KC_BSPC, KC_INS, KC_HOME, KC_PGUP},
+ {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL, KC_END, KC_PGDN},
+ {KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, XXXXXXX, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX},
+ {KC_LSFT, XXXXXXX, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, XXXXXXX, KC_RSFT, XXXXXXX, KC_UP, XXXXXXX},
+ {KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, KC_RGUI, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT}
+ },
+
+[_CM] = { /* Layer 2: Colemak */
+ {KC_ESC, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS},
+ {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, XXXXXXX, KC_BSPC, KC_INS, KC_HOME, KC_PGUP},
+ {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN},
+ {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, XXXXXXX, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX},
+ {KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, XXXXXXX, KC_RSFT, XXXXXXX, KC_UP, XXXXXXX},
+ {KC_LCTL, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, XXXXXXX, KC_RGUI, KC_RALT, KC_RCTL, MO(_FL), KC_LEFT, KC_DOWN, KC_RGHT}
+ },
+
+[_FL] = { /* Layer 3: Functions */
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, RESET, KC_MPRV, KC_MPLY, KC_MNXT},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX},
+ {_______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX, _______, XXXXXXX},
+ {QWERTY, DVORAK, COLEMAK, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, _______, _______},
+ },
+
+
+};
+
+enum function_id {
+ SHIFT_ESC,
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case _DV:
+ if (record->event.pressed) {
+ persistant_default_layer_set(1UL<<_DV);
+ }
+ break;
+ case _QW:
+ if (record->event.pressed) {
+ persistant_default_layer_set(1UL<<_QW);
+ }
+ break;
+ case _CM:
+ if (record->event.pressed) {
+ persistant_default_layer_set(1UL<<_CM);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboards/phantom/readme.md b/keyboards/phantom/readme.md
new file mode 100644
index 000000000..190f738fa
--- /dev/null
+++ b/keyboards/phantom/readme.md
@@ -0,0 +1,4 @@
+Phantom keyboard firmware
+======================
+
+TODO: to be updated.
diff --git a/keyboards/phantom/rules.mk b/keyboards/phantom/rules.mk
new file mode 100644
index 000000000..c6b8ca6c3
--- /dev/null
+++ b/keyboards/phantom/rules.mk
@@ -0,0 +1,69 @@
+
+
+SRC = led.c
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+RGBLIGHT_ENABLE ?=yes # Enable keyboard underlight functionality (+4870)
+BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality (+1150)
+MIDI_ENABLE ?= no # MIDI controls
+AUDIO_ENABLE ?= no
+UNICODE_ENABLE ?= no # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/planck/Makefile b/keyboards/planck/Makefile
index 23944f92e..7d49c5ef9 100644
--- a/keyboards/planck/Makefile
+++ b/keyboards/planck/Makefile
@@ -1,74 +1,5 @@
-
SUBPROJECT_DEFAULT = rev4
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= no # Console for debug(+400)
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
-NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
-MIDI_ENABLE ?= no # MIDI controls
-AUDIO_ENABLE ?= no # Audio output on port C6
-UNICODE_ENABLE ?= no # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../Makefile
endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/bone2planck/Makefile b/keyboards/planck/keymaps/bone2planck/Makefile
index 581e08cd0..cf2c31f0f 100644
--- a/keyboards/planck/keymaps/bone2planck/Makefile
+++ b/keyboards/planck/keymaps/bone2planck/Makefile
@@ -1,4 +1,6 @@
-
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
# Build Options
# change to "no" to disable the options, or define them in the Makefile in
diff --git a/keyboards/planck/keymaps/bone2planck/config.h b/keyboards/planck/keymaps/bone2planck/config.h
new file mode 100644
index 000000000..60aff6db0
--- /dev/null
+++ b/keyboards/planck/keymaps/bone2planck/config.h
@@ -0,0 +1,7 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+#endif
+
+#include "../../config.h"
+
+#define PREVENT_STUCK_MODIFIERS \ No newline at end of file
diff --git a/keyboards/planck/keymaps/bone2planck/keymap.c b/keyboards/planck/keymaps/bone2planck/keymap.c
index f40b08685..69d164b8c 100644
--- a/keyboards/planck/keymaps/bone2planck/keymap.c
+++ b/keyboards/planck/keymaps/bone2planck/keymap.c
@@ -1,91 +1,142 @@
-
-#include "planck.h"
+#include "planck.h"
#ifdef BACKLIGHT_ENABLE
#include "backlight.h"
#endif
#include "keymap_german.h"
+// for intellisense, has to be commented for building
+/*
+#include "..\..\..\..\quantum\keymap_extras\keymap_german.h"
+#include "..\..\..\..\quantum\keymap_common.h"
+#include "..\..\..\..\tmk_core\common\keycode.h"
+*/
+
+#define _______ KC_TRNS
+
/* This Layout tries to emulate the Bone2 Variant of Neo2, and is intended to be used with a German QWERTZ Softwarelayout.
- It has Umlauts and "ß" as it is optimized for a mix of German & English.
- My favourite features are the placement of the special characters often used for programming right on the home row
- and the number & navigation block combo, so you never have to move your hands from their home position.
-
- Bone2 wiki page: http://wiki.neo-layout.org/wiki/Bone
+It has "üäöß" as it is optimized for a mix of German & English.
+My favourite features are the placement of the special characters often used for programming right on the home row
+and the number & navigation block combo, so you never have to move your hands from their home position.
+
+Bone2 wiki page: http://wiki.neo-layout.org/wiki/Bone
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Bone2
- * ,-----------------------------------------------------------------------------------.
- * | Q | J | D | U | A | X | P | H | L | M | W | ẞ |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | M1 | C | T | I | E | O | B | N | R | S | G | M1 |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Shift| F | V | Ü | Ä | Ö | Y | Z | , | . | K |Shift |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter |
- * `-----------------------------------------------------------------------------------'
- */
- [0] = {
- { DE_Q, DE_J, DE_D, DE_U, DE_A, DE_X, DE_P, DE_H, DE_L, DE_M, DE_W, DE_SS },
- { MO(1), DE_C, DE_T, DE_I, DE_E, DE_O, DE_B, DE_N, DE_R, DE_S, DE_G, MO(1) },
- { DE_S, DE_F, DE_V, DE_UE, DE_AE, DE_OE, DE_Y, DE_Z, DE_COMM, DE_DOT, DE_K, DE_S },
- { KC_LCTL, KC_LGUI, KC_LALT, MO(3), MO(2), KC_SPC, KC_SPC, MO(2), MO(3), KC_ESC, KC_TAB, KC_ENT }
- },
-
- /* M1 Special Characters
- * ,-----------------------------------------------------------------------------------.
- * | ° | @ | _ | [ | ] | ^ | ! | < | > | = | & | |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | M1 | \ | / | { | } | * | ? | ( | ) | - | : | M1 |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | # | $ | | | ~ | € | + | % | " | ' | ; | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter |
- * `-----------------------------------------------------------------------------------'
- */
- [1] = {
- { DE_RING, DE_AT, DE_UNDS, DE_LBRC, DE_RBRC, DE_CIRC, DE_EXLM, DE_LESS, DE_MORE, DE_EQL, DE_AMPR, KC_NO },
- { KC_TRNS, DE_BSLS, DE_SLSH, DE_LCBR, DE_RCBR, DE_ASTR, DE_QST, DE_LPRN, DE_RPRN, DE_MINS, DE_COLN, KC_TRNS },
- { KC_NO , DE_HASH, DE_DLR, DE_PIPE, DE_TILD, DE_EURO, DE_PLUS, DE_PERC, DE_DQOT, DE_QUOT, DE_SCLN, KC_NO },
- { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS }
- },
-
- /* Navigation & Number Blocks
- * ,-----------------------------------------------------------------------------------.
- * | | PgUp | Bksp | Up | DEL | PgDn | | 7 | 8 | 9 | | |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | Home | Lft | Down | Right| End | . | 4 | 5 | 6 | , | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Shift| | Tab | Ins | Enter| | 0 | 1 | 2 | 3 | ; |Shift |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Esc | Tab |Enter |
- * `-----------------------------------------------------------------------------------'
- */
- [2] = {
- { KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_NO },
- { KC_NO, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_NO },
- { DE_S, KC_NO, KC_TAB, KC_INS, KC_ENT, KC_NO, KC_0, DE_1, DE_2, DE_3, DE_SCLN, DE_S },
- { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS }
- },
-
- /* Function & Media Keys
- * ,-----------------------------------------------------------------------------------.
- * | | | Print|Scroll|Pause | | | F7 | F8 | F9 | F12 | |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | Mute | Vol- | Vol+ | | ³ | F4 | F5 | F6 | F11 | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Shift| | Prev | Play | Next | | ² | F1 | F2 | F3 | F10 |Shift |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Ctrl | GUI | Alt | M3 | | Space | | M3 | Esc | Tab |Enter |
- * `-----------------------------------------------------------------------------------'
- */
- [3] = {
- { KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F12, KC_NO },
- { KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, DE_SQ3, KC_F4, KC_F5, KC_F6, KC_F11, KC_NO },
- { KC_TRNS, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, DE_SQ2, KC_F1, KC_F2, KC_F3, KC_F10, KC_TRNS},
- { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
- }
+/* Bone2
+* ,-----------------------------------------------------------------------------------.
+* | Q | J | D | U | A | X | P | H | L | M | W | ẞ |
+* |------+------+------+------+------+-------------+------+------+------+------+------|
+* |M1/Tab| C | T | I | E | O | B | N | R | S | G |M1/Ent| //hold for M1, tap for Tab/Enter
+* |------+------+------+------+------+------|------+------+------+------+------+------|
+* | Shift| F | V | Ü | Ä | Ö | Y | Z | , | . | K |Shift |
+* |------+------+------+------+------+------+------+------+------+------+------+------|
+* | Ctrl | GUI | Alt | M4 | M2 | Space | M2 | M4 | Alt | Esc | Ctrl |
+* `-----------------------------------------------------------------------------------'
+*/
+[0] = {
+ { DE_Q, DE_J, DE_D, DE_U, DE_A, DE_X, DE_P, DE_H, DE_L, DE_M, DE_W, DE_SS },
+ { LT(1,KC_TAB), DE_C, DE_T, DE_I, DE_E, DE_O, DE_B, DE_N, DE_R, DE_S, DE_G, LT(1,KC_ENT) },
+ { KC_LSFT, DE_F, DE_V, DE_UE, DE_AE, DE_OE, DE_Y, DE_Z, DE_COMM, DE_DOT, DE_K, KC_LSFT },
+ { KC_LCTL, KC_RGUI, KC_LALT, MO(4), MO(2), KC_SPC, KC_SPC, MO(2), MO(4), KC_RALT, KC_ESC, KC_RCTL }
+},
+
+/* M1 Special Characters
+very ergonomic placement for coding
+* ,-----------------------------------------------------------------------------------.
+* | ° | @ | _ | [ | ] | ^ | ! | < | > | = | & | ´ |
+* |------+------+------+------+------+-------------+------+------+------+------+------|
+* |M1/Tab| \ | / | { | } | * | ? | ( | ) | - | : |M1/Ent| //hold for M1, tap for Tab/Enter
+* |------+------+------+------+------+------|------+------+------+------+------+------|
+* | Shift| # | $ | | | ~ | € | + | % | " | ' | ; |Shift |
+* |------+------+------+------+------+------+------+------+------+------+------+------|
+* | Ctrl | GUI | Alt | M4 | M2 | Space | M2 | M4 | Alt | Esc | Ctrl |
+* `-----------------------------------------------------------------------------------'
+*/
+[1] = {
+ { DE_RING, DE_AT, DE_UNDS, DE_LBRC, DE_RBRC, DE_CIRC, DE_EXLM, DE_LESS, DE_MORE, DE_EQL, DE_AMPR, DE_ACUT },
+ { _______, DE_BSLS, DE_SLSH, DE_LCBR, DE_RCBR, DE_ASTR, DE_QST, DE_LPRN, DE_RPRN, DE_MINS, DE_COLN, _______ },
+ { _______, DE_HASH, DE_DLR, DE_PIPE, DE_TILD, DE_EURO, DE_PLUS, DE_PERC, DE_DQOT, DE_QUOT, DE_SCLN, _______ },
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
+},
+
+/* Navigation & Number Blocks
+very easy to get used to & intuituve placement
+* ,-----------------------------------------------------------------------------------.
+* | | PgUp | Bksp | Up | DEL | PgDn | | 7 | 8 | 9 | | Ins |
+* |------+------+------+------+------+-------------+------+------+------+------+------|
+* | Tab | Home | Lft | Down | Right| End | . | 4 | 5 | 6 | , | Enter|
+* |------+------+------+------+------+------|------+------+------+------+------+------|
+* | Shift| | Tab | | Enter| | 0 | 1 | 2 | 3 | ; |Shift |
+* |------+------+------+------+------+------+------+------+------+------+------+------|
+* | Ctrl | GUI | Alt | M3 | M2 | Space | M2 | M3 | Alt | Esc | Ctrl |
+* `-----------------------------------------------------------------------------------'
+*/
+[2] = {
+ { KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_INS },
+ { KC_TAB, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_ENT },
+ { _______, KC_NO, KC_TAB, KC_NO, KC_ENT, KC_NO, DE_0, DE_1, DE_2, DE_3, DE_SCLN, _______ },
+ { _______, _______, _______, MO(3), _______, _______, _______, _______, MO(3), _______, _______, _______ }
+},
+
+/* Flipped Navigation & Number Blocks for one handed use
+accessed by sliding from M2 to M3 with thumb
+* ,-----------------------------------------------------------------------------------.
+* | Ins | | 7 | 8 | 9 | | PgUp | Bksp | Up | DEL | PgDn | |
+* |------+------+------+------+------+-------------+------+------+------+------+------|
+* | Tab | . | 4 | 5 | 6 | , | Home | Left | Down | Right| End | Enter|
+* |------+------+------+------+------+------|------+------+------+------+------+------|
+* | Shift| 0 | 1 | 2 | 3 | ; | | Tab | Ins | Enter| |Shift |
+* |------+------+------+------+------+------+------+------+------+------+------+------|
+* | Ctrl | GUI | Alt | M3 | | Space | | M3 | Alt | Esc | Ctrl |
+* `-----------------------------------------------------------------------------------'
+*/
+
+[3] = {
+ { KC_INS, KC_NO, DE_7, DE_8, DE_9, KC_NO, KC_PGUP, KC_BSPC, KC_UP, KC_DEL, KC_PGDN, KC_NO },
+ { _______, DE_DOT, DE_4, DE_5, DE_6, DE_COMM, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, _______ },
+ { _______, DE_0, DE_1, DE_2, DE_3, DE_SCLN, KC_NO, KC_TAB, KC_INS, KC_ENT, KC_NO, _______ },
+ { _______, _______, _______, _______, KC_NO, _______, _______, KC_NO, _______, _______, _______, _______ }
+},
+
+
+/* Function & Media Keys
+slide from m4 to m5 to access flipped version
+* ,-----------------------------------------------------------------------------------.
+* | | | Print|Scroll|Pause | | | F7 | F8 | F9 | F12 | |
+* |------+------+------+------+------+-------------+------+------+------+------+------|
+* | | | Mute | Vol- | Vol+ | | ³ | F4 | F5 | F6 | F11 | |
+* |------+------+------+------+------+------|------+------+------+------+------+------|
+* | Shift| | Prev | Play | Next | | ² | F1 | F2 | F3 | F10 |Shift |
+* |------+------+------+------+------+------+------+------+------+------+------+------|
+* | Ctrl | GUI | Alt | M4 | M5 | Space | M5 | M4 | Alt | Esc | Ctrl |
+* `-----------------------------------------------------------------------------------'
+*/
+[4] = {
+ { KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F12, KC_NO },
+ { KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, DE_SQ3, KC_F4, KC_F5, KC_F6, KC_F11, KC_NO },
+ { _______, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, DE_SQ2, KC_F1, KC_F2, KC_F3, KC_F10, _______ },
+ { _______, _______, _______, _______, MO(5), _______, _______, MO(5), _______, _______, _______, _______ }
+},
+
+
+/* flipped Function & Media Keys
+* ,-----------------------------------------------------------------------------------.
+* | | | F7 | F8 | F9 | F12 | | Print|Scroll| Pause| | |
+* |------+------+------+------+------+-------------+------+------+------+------+------|
+* | | ³ | F4 | F5 | F6 | F11 | | Mute | Vol- | Vol+ | | |
+* |------+------+------+------+------+------|------+------+------+------+------+------|
+* | Shift| ² | F1 | F2 | F3 | F10 | | Prev | Play | Next | |Shift |
+* |------+------+------+------+------+------+------+------+------+------+------+------|
+* | Ctrl | GUI | Alt | | M5 | Space | M5 | | Alt | Esc | Ctrl |
+* `-----------------------------------------------------------------------------------'
+*/
+[5] = {
+ { KC_NO, KC_NO, KC_F7, KC_F8, KC_F9, KC_F12, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_NO, KC_NO },
+ { KC_NO, DE_SQ3, KC_F4, KC_F5, KC_F6, KC_F11, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO },
+ { _______, DE_SQ2, KC_F1, KC_F2, KC_F3, KC_F10, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, _______ },
+ { _______, _______, _______, KC_NO, _______, _______, _______, _______, KC_NO, _______, _______, _______ }
+}
};
const uint16_t PROGMEM fn_actions[] = {
diff --git a/keyboards/planck/keymaps/bone2planck/readme.md b/keyboards/planck/keymaps/bone2planck/readme.md
new file mode 100644
index 000000000..3c425efdd
--- /dev/null
+++ b/keyboards/planck/keymaps/bone2planck/readme.md
@@ -0,0 +1,8 @@
+check keymap.c to the layers
+
+This Layout tries to emulate the Bone2 Variant of Neo2, and is intended to be used with a German QWERTZ Softwarelayout.
+It has "üäöß" as it is optimized for a mix of German & English.
+My favourite features are the placement of the special characters often used for programming right on the home row
+and the number & navigation block combo, so you never have to move your hands from their home position.
+
+Bone2 wiki page: http://wiki.neo-layout.org/wiki/Bone \ No newline at end of file
diff --git a/keyboards/planck/keymaps/brandon/Makefile b/keyboards/planck/keymaps/brandon/Makefile
index 581e08cd0..cf2c31f0f 100644
--- a/keyboards/planck/keymaps/brandon/Makefile
+++ b/keyboards/planck/keymaps/brandon/Makefile
@@ -1,4 +1,6 @@
-
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
# Build Options
# change to "no" to disable the options, or define them in the Makefile in
diff --git a/keyboards/planck/keymaps/callum/Makefile b/keyboards/planck/keymaps/callum/Makefile
new file mode 100644
index 000000000..1d76966a6
--- /dev/null
+++ b/keyboards/planck/keymaps/callum/Makefile
@@ -0,0 +1,25 @@
+
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c
new file mode 100644
index 000000000..4d0151710
--- /dev/null
+++ b/keyboards/planck/keymaps/callum/keymap.c
@@ -0,0 +1,182 @@
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _BASE 0
+#define _MOVE 1
+#define _SYMB 2
+#define _MOUSE 3
+#define _FUNC 4
+
+enum planck_keycodes {
+ MOVE = SAFE_RANGE,
+ SYMB,
+ FUNC,
+ BELOW,
+ ABOVE
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* BASE
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Bksp | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Func |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_BASE] = {
+ {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS},
+ {KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT},
+ {FUNC, KC_LCTL, KC_LALT, KC_LGUI, SYMB, KC_ENT, KC_SPC, MOVE, KC_RGUI, KC_RALT, KC_RCTL, FUNC }
+},
+
+/* MOVE
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | | Cmd-L| Up | Cmd-R| | | Cmd-L| Up | Cmd-R| | Esc |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Del | Caps | Left | Down | Right| | | Left | Down | Right| Caps | Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | Pg Up| Pg Dn| Above| | Pg Dn| Pg Up| | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | Below| | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_MOVE] = {
+ {KC_ESC, XXXXXXX, LGUI(KC_LEFT), KC_UP, LGUI(KC_RGHT), XXXXXXX, XXXXXXX, LGUI(KC_LEFT), KC_UP, LGUI(KC_RGHT), XXXXXXX, KC_ESC },
+ {KC_DEL, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_CAPS, KC_DEL },
+ {_______, XXXXXXX, XXXXXXX, KC_PGUP, KC_PGDN, ABOVE, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______},
+ {_______, _______, _______, _______, _______, BELOW, _______, _______, _______, _______, _______, _______}
+},
+
+/* SYMB
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | – |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | £ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | ~ | ` | + | = | | | \ | [ | ] | { | } | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_SYMB] = {
+ {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, LALT(KC_MINS)},
+ {KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, LALT(KC_3)},
+ {_______, KC_TILD, KC_GRV, KC_PLUS, KC_EQL, KC_PIPE, KC_BSLS, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* MOUSE
+ * ,-----------------------------------------------------------------------------------.
+ * | | | ACC-2| ACC-1| ACC-0| | | SW-L | M-U | SW-R | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | MB-3 | MB-2 | MB-1 | | | M-L | M-D | M-R | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | SW-D | SW-U | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_MOUSE] = {
+ {XXXXXXX, XXXXXXX, KC_ACL2, KC_ACL1, KC_ACL0, XXXXXXX, XXXXXXX, KC_WH_L, KC_MS_U, KC_WH_R, XXXXXXX, XXXXXXX},
+ {XXXXXXX, XXXXXXX, KC_BTN3, KC_BTN2, KC_BTN1, XXXXXXX, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, XXXXXXX},
+ {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_D, KC_WH_U, XXXXXXX, XXXXXXX, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* FUNC
+ * ,-----------------------------------------------------------------------------------.
+ * | Reset| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Vol+ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | Vol- |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | F21 | F22 | F23 | F24 | | | Power| | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | Prev | Mute | Play | Next | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FUNC] = {
+ {RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_VOLU},
+ {XXXXXXX, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_VOLD},
+ {_______, KC_F21, KC_F22, KC_F23, KC_F24, XXXXXXX, XXXXXXX, KC_POWER, XXXXXXX, XXXXXXX, XXXXXXX, _______},
+ {_______, _______, _______, _______, KC_MPRV, KC_MUTE, KC_MPLY, KC_MNXT, _______, _______, _______, _______}
+}
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case MOVE:
+ if (record->event.pressed) {
+ layer_on(_MOVE);
+ update_tri_layer(_MOVE, _SYMB, _MOUSE);
+ } else {
+ layer_off(_MOVE);
+ update_tri_layer(_MOVE, _SYMB, _MOUSE);
+ }
+ return false;
+ break;
+ case SYMB:
+ if (record->event.pressed) {
+ layer_on(_SYMB);
+ update_tri_layer(_MOVE, _SYMB, _MOUSE);
+ } else {
+ layer_off(_SYMB);
+ update_tri_layer(_MOVE, _SYMB, _MOUSE);
+ }
+ return false;
+ break;
+ case FUNC:
+ if (record->event.pressed) {
+ layer_on(_FUNC);
+ } else {
+ layer_off(_FUNC);
+ }
+ return false;
+ break;
+ case BELOW:
+ if (record->event.pressed) {
+ register_code(KC_LGUI);
+ register_code(KC_RGHT);
+ unregister_code(KC_RGHT);
+ unregister_code(KC_LGUI);
+ register_code(KC_ENT);
+ unregister_code(KC_ENT);
+ }
+ return false;
+ break;
+ case ABOVE:
+ if (record->event.pressed) {
+ register_code(KC_LGUI);
+ register_code(KC_LEFT);
+ unregister_code(KC_LEFT);
+ unregister_code(KC_LGUI);
+ register_code(KC_ENT);
+ unregister_code(KC_ENT);
+ register_code(KC_UP);
+ unregister_code(KC_UP);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md
new file mode 100644
index 000000000..0baeba46d
--- /dev/null
+++ b/keyboards/planck/keymaps/callum/readme.md
@@ -0,0 +1,71 @@
+# callum’s planck layout
+
+This is a layout for the grid planck, built with a few ideals in mind:
+
+- Minimal response times should be maintained. Keys that react differently depending on whether they are tapped or held, keys that react differently if they are double tapped, etc. should be avoided – they inevitably send their keycode later than a normal key – interrupting the immediate feedback from the screen. Therefore we restrict ourselves to chording as our only means of getting more than one symbol out of a single physical key.
+- The hands should never need to leave the home position. The usual culprit for this is the arrow cluster, so the arrow cluster should be as close to home as possible.
+- There should be two of every modifier (one on each side), otherwise certain long key combinations become hard to make.
+
+We have five layers. A `BASE` layer, in colemak; a `MOVE` layer, with an arrow cluster and other movement keys; a `SYMB` layer, with numbers and symbols; a `FUNC` layer, with function keys and media keys; and a `MOUSE` layer, with mouse emulation.
+
+```
+/* BASE
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Bksp | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / | Shift|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Func | Ctrl | Alt | Cmd | Symb | Enter| Space| Move | Cmd | Alt | Ctrl | Func |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+/* MOVE
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | | Cmd-L| Up | Cmd-R| | | Cmd-L| Up | Cmd-R| | Esc |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Del | Caps | Left | Down | Right| | | Left | Down | Right| Caps | Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | Pg Up| Pg Dn| Above| | Pg Dn| Pg Up| | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | Below| | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+/* SYMB
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | – |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | £ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | ~ | ` | + | = | | | \ | [ | ] | { | } | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+/* MOUSE
+ * ,-----------------------------------------------------------------------------------.
+ * | | | ACC-2| ACC-1| ACC-0| | | SW-L | M-U | SW-R | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | MB-3 | MB-2 | MB-1 | | | M-L | M-D | M-R | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | SW-D | SW-U | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+/* FUNC
+ * ,-----------------------------------------------------------------------------------.
+ * | Reset| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Vol+ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | Vol- |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | F21 | F22 | F23 | F24 | | | Lock | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | Prev | Mute | Play | Next | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+```
diff --git a/keyboards/planck/keymaps/cbbrowne/Makefile b/keyboards/planck/keymaps/cbbrowne/Makefile
index 581e08cd0..b1c70ace7 100644
--- a/keyboards/planck/keymaps/cbbrowne/Makefile
+++ b/keyboards/planck/keymaps/cbbrowne/Makefile
@@ -5,8 +5,8 @@
# the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+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
@@ -16,10 +16,11 @@ AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+API_SYSEX_ENABLE = yes # Enable SYSEX API (+5390)
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
-endif \ No newline at end of file
+endif
diff --git a/keyboards/planck/keymaps/cbbrowne/config.h b/keyboards/planck/keymaps/cbbrowne/config.h
index 2d3df59bd..bd15fd5a2 100644
--- a/keyboards/planck/keymaps/cbbrowne/config.h
+++ b/keyboards/planck/keymaps/cbbrowne/config.h
@@ -1,15 +1,24 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
+#define NO_DEBUG
+#define NO_PRINT
+
#include "../../config.h"
+#define LEADER_TIMEOUT 300
+#define BACKLIGHT_BREATHING
+
/* cbbrowne user configuration */
#define randadd 53
#define randmul 181
#define randmod 167
-#endif
+/* Filler to make layering a bit clearer *
+ * borrowed from basic keymap */
+#define _______ KC_TRNS
+#endif
diff --git a/keyboards/planck/keymaps/cbbrowne/keymap.c b/keyboards/planck/keymaps/cbbrowne/keymap.c
index 14a5be170..2be4dab4b 100644
--- a/keyboards/planck/keymaps/cbbrowne/keymap.c
+++ b/keyboards/planck/keymaps/cbbrowne/keymap.c
@@ -1,9 +1,10 @@
#include "planck.h"
#ifdef BACKLIGHT_ENABLE
- #include "backlight.h"
+#include "backlight.h"
#endif
#include "config.h"
#include "quantum.h"
+#include "version.h"
/* Each layer is given a name to aid in readability, which is then
used in the keymap matrix below. The underscores do not denote
@@ -61,13 +62,15 @@
- How about Alt-F1 thru Alt-F8?
- What's the keystroke to get from X to console these days?
- A layer for doing console switching would not be a bad idea
+ - I haven't got page-up/page-down, let's have that...
*/
enum layers {
- _QW = 0, /* Qwerty mapping */
- _LW, /* Lower layer, where top line has symbols !@#$%^&*() */
- _RS, /* Raised layer, where top line has digits 1234567890 */
- _KP, /* Key pad */
+ _QWERTY = 0, /* Qwerty mapping */
+ _LOWER, /* Lower layer, where top line has symbols !@#$%^&*() */
+ _RAISE, /* Raised layer, where top line has digits 1234567890 */
+ _KEYPAD, /* Key pad */
+ _ADJUST, /* Special Adjust layer coming via tri-placement */
};
enum macro_id {
@@ -75,38 +78,64 @@ enum macro_id {
M_USERNAME,
M_RANDDIGIT,
M_RANDLETTER,
- M_VERSION
+ M_VERSION,
+ MACRO_UPPER,
+ MACRO_LOWER,
};
+#define M_LOWER M(MACRO_LOWER)
+#define M_UPPER M(MACRO_UPPER)
+#define ROT_LED M(M_LED) /* Rotate LED */
+#define QWERTY DF(_QWERTY) /* Switch to QWERTY layout */
+#define KEYPAD DF(_KEYPAD) /* Switch to keypad */
+#define USERNAME M(M_USERNAME) /* shortcut for username */
+#define RANDDIG M(M_RANDDIGIT)
+#define RANDALP M(M_RANDLETTER)
+#define CTLENTER MT(MOD_RCTL, KC_ENT)
+#define SHIFTQUOTE MT(MOD_RSFT, KC_QUOT)
+#define ALTRIGHT MT(MOD_LALT, KC_RGHT)
+#define MVERSION M(M_VERSION)
+#define ALTSLASH LALT(KC_SLSH)
+
+
/* Note that Planck has dimensions 4 rows x 12 columns */
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[_QW] = { /* Qwerty */
+[_QWERTY] = { /* Qwerty */
{KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
- {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT},
- {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT },
- {KC_TAB, M(M_LED), KC_LALT, KC_LGUI, MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, CTLENTER},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SHIFTQUOTE },
+ {KC_TAB, KC_LALT, ROT_LED, KC_LGUI, M_LOWER, KC_SPC, KC_SPC, M_UPPER, KC_LEFT, KC_DOWN, KC_UP, ALTRIGHT}
+ /* Note that KC_SPC is recorded TWICE, so that either matrix position can activate it */
},
-[_RS] = { /* RAISE */
+[_RAISE] = { /* RAISE */
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
- {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
- {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_KP), DF(_KP), RESET, KC_TRNS},
- {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+ {_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QWERTY, KEYPAD, KEYPAD, ALTSLASH,_______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN, KC_VOLD, KC_VOLU, KC_PGUP}
},
-[_LW] = { /* LOWER */
+[_LOWER] = { /* LOWER */
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
- {KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
- {KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_KP), DF(_KP), RESET, KC_TRNS},
- {KC_TRNS, DF(_KP), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+ {_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, QWERTY, KEYPAD, KEYPAD, ALTSLASH, _______},
+ {_______, KEYPAD, _______, _______, _______, _______, _______, _______, KC_PGDN, KC_VOLD, KC_VOLU, KC_PGUP}
+ },
+[_KEYPAD] = { /* Key Pad */
+ {KC_ESC, USERNAME, MVERSION, KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC},
+ {KC_LCTL, RANDDIG, KC_F5, KC_F6, KC_F7, KC_F8, KC_PGDN, KC_KP_MINUS, KC_4, KC_5, KC_6, KC_PIPE},
+ {KC_LSFT, RANDALP, KC_F1, KC_F2, KC_F3, KC_F4, KC_DEL, KC_KP_PLUS, KC_1, KC_2, KC_3, KC_ENTER},
+ {KC_TAB, KC_LALT, ROT_LED, KC_LGUI, M_LOWER, KC_SPC, KC_SPC, QWERTY, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT}
},
-[_KP] = { /* Key Pad */
- {KC_ESC, M(M_USERNAME), M(M_VERSION), KC_F10, KC_F11, KC_F12, KC_PGUP, KC_KP_ENTER, KC_7, KC_8, KC_9, KC_BSPC},
- {KC_LCTL, M(M_RANDDIGIT), KC_F5, KC_F6, KC_F7, KC_F8, KC_PGDN, KC_KP_MINUS, KC_4, KC_5, KC_6, KC_PIPE},
- {KC_LSFT, M(M_RANDLETTER), KC_F1, KC_F2, KC_F3, KC_F4, KC_DEL, KC_KP_PLUS, KC_1, KC_2, KC_3, KC_ENTER},
- {BL_STEP, M(M_LED), KC_LALT, KC_LGUI, KC_NO, KC_SPC, KC_SPC, DF(_QW), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT}
-}
+
+[_ADJUST] = { /* Adjustments - gonna shift the wild tools in here */
+ {ROT_LED,USERNAME,MVERSION, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ {_______, RANDDIG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ {_______, RANDALP, _______, _______, _______, RESET, RESET, _______, _______, _______, _______, _______ },
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
+}
};
+/* What is fn_actions actually used for??? */
const uint16_t PROGMEM fn_actions[] = {
};
@@ -168,6 +197,39 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
unregister_code (KC_A + rval);
}
break;
+ case MACRO_UPPER:
+ if (record->event.pressed)
+ {
+ layer_on(_RAISE);
+#ifdef BACKLIGHT_ENABLE
+ breathing_speed_set(2);
+ breathing_pulse();
+#endif
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ else
+ {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ break;
+ case MACRO_LOWER:
+ if (record->event.pressed)
+ {
+ layer_on(_LOWER);
+#ifdef BACKLIGHT_ENABLE
+ breathing_speed_set(2);
+ breathing_pulse();
+#endif
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ else
+ {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ break;
+
}
return MACRO_NONE;
};
diff --git a/keyboards/planck/keymaps/cbbrowne/readme.md b/keyboards/planck/keymaps/cbbrowne/readme.md
index c676dd2c1..184142e0c 100644
--- a/keyboards/planck/keymaps/cbbrowne/readme.md
+++ b/keyboards/planck/keymaps/cbbrowne/readme.md
@@ -7,16 +7,10 @@ Christopher Browne
This was originally based on the default keyboard map, but I have been
doing sundry experimentation:
-1. Experiments
+1. Useful Experiments
----------------------------------------
- * To figure things out about the toolset
- * I'm an Emacs guy, so will be needing a fair bit of tuning
* It made sense to mess around some with keyboard maps.
- - I tried added Workman alongside Dvorak and Colemak
- - Boy, oh boy, these don't help!!!
- - I have done 30 years of learning of Emacs key mappings, and
- these alternative keyboards massively mess me up
- I added a keypad, originally based on keymaps/numpad.c, but
mighty substantially revised, as that one seems to be rotated 90
degrees from usual conventions for number pads
@@ -30,6 +24,26 @@ doing sundry experimentation:
- Key [2][2] aka "a" uses a random number generator to select a digit 0-9 at random
- Key [3][2] aka "z" uses a random number generator to select a letter a-z at random
- Key [1][3] aka "e" spits out the keymap version number
+ * Trying out sgoodwin's "hold Enter down to get Shift"
+ - Liking this Quite Well Enough...
+ - Applied this to both Shift and Quote
+ - It seems likely that Alt should get a right-hand-side, akin to this...
+ - Alt needs to move, and get a RHS
+ - Hence ALTRIGHT, and shifted ROT_LED over
+ - Emacs likes this!!! :-)
+ - I'm suspicious that I'll want to shift ROT_LED another location over,
+ so some modifier can replace the OS/KC_LGUI key
+ * I have added an alternate ADJUST layer that is activated via update_tri_layer()
+ - e.g. - LOWER+RAISE simultaneously
+ - This seems entirely more useful for handling my "special keys"
+ like the random numbers, user name, and such, than the keypad layer
+ * The _ADJUST layer provides a good place to have RESET
+ - But this isn't strictly enough; I want RESET somewhat accessible from
+ main layer lest an error hide that layer
+ - I never use the OS/KC_LGUI key (that's Command on MacOS, Windows
+ Key on Windows), so that's a good place to have it as a chord of
+ some sort
+
2. Some code structure ideas
---------------------------------------------------
@@ -48,8 +62,8 @@ doing sundry experimentation:
only need to fit 4 symbols onto each line, rather than 12.
I used enums to manage layer IDs and macro IDs so that I don't need
- to care (beyond "start at 0", and arguably that's not needed) about
- their values.
+ to care (beyond "start at 0", and arguably even that's not needed)
+ about their values.
3. Things I did not like about the default mapping
---------------------------------------------------------
@@ -62,3 +76,38 @@ doing sundry experimentation:
and shift ESC off the first column so KC_LCTL and KC_LALT can
be on the first column.
* I needed to swap ' and ENTER
+
+4. Unuseful experiments
+---------------------------------------------------------
+
+I have tried some things out that didn't turn out particularly well.
+I'll note some of these for posterity, hopefully helpful in not doing
+unwise things again...
+
+ * I tried added Workman alongside Dvorak and Colemak
+ - Boy, oh boy, these don't help!!!
+ - I have done 30 years of learning of Emacs key mappings, and
+ these alternative keyboards massively mess me up
+
+ * Space Cadet Shift; switching L_SHIFT to KC_LSP0, so that when I
+ just hit SHIFT, I get a left parens. In principle, this is great
+ for Lisping.
+ - Unfortunately, there are times when mouse interfaces use SHIFT
+ to allow selecting multiple items, and this really interferes
+ with that
+
+5. TODO
+---------------------------------------------------------
+
+ * I use tmux quite a lot; the mollat keymap seems to have some
+ interesting helpers. It might be interesting to add a "tmux
+ layer," or to have a few keys in a layer oriented towards that
+ * The mollat tmux layer also suggests some thoughts about Emacs
+ helpers.
+ * I do not presently have anything that handles X11 screen
+ switching, as with Control-Alt-various
+ * I ought to probably look into KC_LEAD, to have some key combos
+ that do not need to be concurrent
+ * The jeebak keymap seems to have some neat ideas:
+ - Number layer which is aggressive about having numbers in several places
+ - Touch layer seems interesting
diff --git a/keyboards/planck/keymaps/circuit/Makefile b/keyboards/planck/keymaps/circuit/Makefile
new file mode 100644
index 000000000..1ed0ff956
--- /dev/null
+++ b/keyboards/planck/keymaps/circuit/Makefile
@@ -0,0 +1,25 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the makefile.mk in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = 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.
+TAP_DANCE_ENABLE = yes # Enables the double-tap functionality of keys
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/circuit/Readme.md b/keyboards/planck/keymaps/circuit/Readme.md
new file mode 100644
index 000000000..cbdf5de4e
--- /dev/null
+++ b/keyboards/planck/keymaps/circuit/Readme.md
@@ -0,0 +1,44 @@
+##Design goals:
+1. Arrow keys always available.
+2. As close to a to my US layout 107-key QWERTY keyboard as I could manage, (i.e. as few arbitrary decisions as possible).
+3. Togglable DVORAK keyboard.
+4. most frequently used things in the easiest to reach places.
+5. Ability to game on it, just for fun.
+
+My layout differs from most in the placement the ARROW keys, `ESC`, VOL keys, use of double-tap `CAPS`, and the GAME LOCK function.
+
+I put the layer buttons in the usual spots. I originally wanted only function/symbols layer, but that proved detrimental. I use some timed press actions to save some space, but this has been accounted for, (see GAME LOCK below). I'm not fully satisfied with the current product (see NOTES below), so it may change in the future.
+
+##Effective layers:
+* Default later is obviously your letters and modifiers.
+* Lower layer [NUMBER] is your numbers and punctuation.
+* Upper layer [ACTION] is your symbols and actions.
+* Function layer is the infrequently used function keys, layout toggle, game lock, and reset.
+
+There is also a toggle for the DVORAK/QWERTY layers, but in normal typing this is not of concern.
+
+###Special keys:
+* `RSHFT` and `ENTER` are combined. Tap once for `ENTER` and hold for `RSHFT`. `ENTER` will be registered on release if released within 200 ms, else `RSHFT` is registered starting at 201 ms until release.
+* If for some reason, this interferes with the normal usage of the `ENTER` key in any way, (some problem that may never happen), I have added a regular non-modified `ENTER` key on the same key in the [ACTION] layer.
+* `LSHFT` and `CAPS` are also combined. The key works like a normal `LSHFT` unless double-tapped, in which case it counts as `CAPS`. This functionality unfortunately delays all key presses by at most 200 ms, but I have added ways to disable this both temporarily or permanently, described below.
+* A failsafe `CAPS` key is on the same key in the [ACTION] layer.
+* There are `UNDO`, `CUT`, `COPY`, and `PASTE` keys. This was intended to be a universal way to use these commands since in macOS cut is `⌘ + C` but in Windows it is `⌃ + C`. Unfortunately these special keys only work in Windows. ¯\\\_(ツ)\_/¯
+
+##Game lock:
+**TL;DR** the game lock toggle disables the double-tap `CAPS`, and disables `GUI` keys (WINDOWS key).
+
+I wished for this keyboard to be fully usable in the most demanding of games. The most demanding game I know of is ARMA 3 which has a binding to practically every individual key of a 107-key keyboard. This means I need to have pretty much every key possible somewhere. I also wanted the keyboard to be responsive in games for every critical keypress. This means having a way to disable features that introduce an inherent delay to registering keys, such as double-tap.
+
+I do not expect to see this used by the pros, but I enjoyed making it. As for use in ARMA 3, I got a little ways into the APEX campaign, but I found a few flaws. For Example, I cannot enable my HUD GPS since that requires `RCTRL`+`M` but `RCTRL` is not bound. The obvious fix is to rebind the action to a new key, but I still take this as a shortcoming of my layout.
+
+###If you wish to disable double-tap
+####Disable it temporarily
+Turn on the game lock. While on, it registers as normal `LSHFT` and has no delay. Whether in game mode or not, `CAPS` is on the same key in the [ACTION] layer.
+
+####Disable it permanently
+Open the `Makefile` and set `TAP_DANCE_ENABLE = no`. I wrote the layout to compensate for this change, and no further changes to the code should be necessary. Whether or not it's disabled, `CAPS` is on the same key in the [ACTION] layer.
+
+##Notes:
+* `ALT` and `GUI` are reversed compared to the normal US layout. I will also be using my Planck on my mac, and that's the standard in the Apple ecosystem. I may add a special compiler flag in the future to swap the two.
+* The DVORAK `Z` key is to the right of the `S` key instead of under it as part of a compromise I made to keep the ARROW keys available on the default layer. I prioritize the ARROW keys, so the DVORAK layout is the one to suffer.
+* I also support the little tones that the default Planck layout features, identical to them too, (minus those for layouts I don't support). To enable it, open the `Makefile` and set `AUDIO_ENABLE = yes`.
diff --git a/keyboards/planck/keymaps/circuit/config.h b/keyboards/planck/keymaps/circuit/config.h
new file mode 100644
index 000000000..22244f4a7
--- /dev/null
+++ b/keyboards/planck/keymaps/circuit/config.h
@@ -0,0 +1,91 @@
+/*
+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"
+
+/* Tap-dance interval definition */
+#define TAPPING_TERM 200
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define MANUFACTURER Ortholinear Keyboards
+#define PRODUCT The Planck Keyboard
+#define DESCRIPTION A compact ortholinear keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/* Planck PCB default pin-out */
+#define MATRIX_ROW_PINS { D0, D5, B5, B6 }
+#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
+#define UNUSED_PINS
+
+#define BACKLIGHT_PIN B7
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * 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
+
+#ifdef SUBPROJECT_rev3
+ #include "rev3/config.h"
+#endif
+#ifdef SUBPROJECT_rev4
+ #include "rev4/config.h"
+#endif
+
+#endif
diff --git a/keyboards/planck/keymaps/circuit/keyboard-layout.png b/keyboards/planck/keymaps/circuit/keyboard-layout.png
new file mode 100644
index 000000000..e9296a6d9
--- /dev/null
+++ b/keyboards/planck/keymaps/circuit/keyboard-layout.png
Binary files differ
diff --git a/keyboards/planck/keymaps/circuit/keymap.c b/keyboards/planck/keymaps/circuit/keymap.c
new file mode 100644
index 000000000..63e01f389
--- /dev/null
+++ b/keyboards/planck/keymaps/circuit/keymap.c
@@ -0,0 +1,258 @@
+// Layout picture at http://www.keyboard-layout-editor.com/#/gists/125febfad6960add078e6f14256539b6
+
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+#include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _DVORAK 1
+#define _LOCKED 2
+#define _NUMBER 3
+#define _ACTION 4
+#define _FUNCTN 5
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ DVORAK,
+ NUMBER,
+ ACTION
+};
+
+// Key code names
+#define SFT_ENT FUNC(0) // Tap for enter, hold for right shift
+#define LOCK FUNC(1)
+#define KC_PSTE KC_PASTE
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+#ifdef TAP_DANCE_ENABLE
+#define SFT_CAP TD(0) // Left shift, double tap for caps
+#endif
+#ifndef TAP_DANCE_ENABLE
+#define SFT_CAP KC_LSFT // Regular left shift
+#endif
+
+// Tap Dance Definitions
+#ifdef TAP_DANCE_ENABLE
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [0] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS)
+};
+#endif
+
+// Function definitions
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),
+ [1] = ACTION_LAYER_TOGGLE(_LOCKED)
+};
+
+// Layout definitions
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* QWERTY
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P | BKSP |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |*Shift| Z | X | C | V | B | N | M | , | . | Up |SftEnt|
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Ctrl | Alt | Cmd | Vol- | ACTN | Space | NUMS | Vol+ | Left | Down | Left |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+ {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {SFT_CAP, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, SFT_ENT},
+ {KC_LCTL, KC_LALT, KC_LGUI, KC_VOLD, ACTION, KC_SPC, KC_SPC, NUMBER, KC_VOLU, KC_LEFT, KC_DOWN, KC_RGHT}
+},
+
+/* DVORAK
+ * ,-----------------------------------------------------------------------------------.
+ * | | ' | , | . | P | Y | F | G | C | R | L | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | A | O | E | U | I | D | H | T | N | S | Z |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | ; | Q | J | K | X | B | M | W | V | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = {
+ {_______, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, _______},
+ {_______, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_Z },
+ {_______, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* LOCK
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| | | | | | | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | NULL | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOCKED] = {
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______, _______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* NUMBERS
+ * ,-----------------------------------------------------------------------------------.
+ * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | ~ | NULL | NULL | NULL | | | _ | + | { | } | ? | / |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | ` | NULL | NULL | NULL | \ | - | = | [ | ] | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | NULL | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_NUMBER] = {
+ {_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______},
+ {_______, KC_TILD, XXXXXXX, XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_QUES, KC_SLSH},
+ {_______, KC_GRV, XXXXXXX, XXXXXXX, XXXXXXX, KC_BSLS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______, _______},
+ {_______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______}
+},
+
+/* ACTIONS
+ * ,-----------------------------------------------------------------------------------.
+ * | | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | CAPS | Undo | Cut | Copy | Paste| NULL | NULL | NULL | NULL | NULL | PgUp | Enter|
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | Mute | | NULL | | NULL | Home | PgDn | End |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ACTION] = {
+ {_______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL },
+ {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+ {KC_CAPS, KC_UNDO, KC_CUT, KC_COPY, KC_PSTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGUP, KC_ENT },
+ {_______, _______, _______, KC_MUTE, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_HOME, KC_PGDN, KC_END }
+},
+
+/* FUNCTIONS
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | F21 | F22 | F23 | F24 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | NULL | NULL | NULL | NULL | NULL |QWERTY|DVORAK| NULL | NULL | NULL | NULL | NULL |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Reset| NULL | Lock | NULL | | NULL | | NULL | NULL | NULL | NULL |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FUNCTN] = {
+ {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 },
+ {KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24 },
+ {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QWERTY, DVORAK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+ {RESET, XXXXXXX, LOCK, XXXXXXX, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
+}
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ if (IS_LAYER_ON(_DVORAK)) {
+#ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+#endif
+ layer_off(_DVORAK);
+ }
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ if (!IS_LAYER_ON(_DVORAK)) {
+#ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+#endif
+ layer_on(_DVORAK);
+ }
+ }
+ return false;
+ break;
+ case NUMBER:
+ if (record->event.pressed) {
+ layer_on(_NUMBER);
+ update_tri_layer(_NUMBER, _ACTION, _FUNCTN);
+ } else {
+ layer_off(_NUMBER);
+ update_tri_layer(_NUMBER, _ACTION, _FUNCTN);
+ }
+ return false;
+ break;
+ case ACTION:
+ if (record->event.pressed) {
+ layer_on(_ACTION);
+ update_tri_layer(_NUMBER, _ACTION, _FUNCTN);
+ } else {
+ layer_off(_ACTION);
+ update_tri_layer(_NUMBER, _ACTION, _FUNCTN);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+#ifdef AUDIO_ENABLE
+ startup_user();
+#endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+ PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
diff --git a/keyboards/planck/keymaps/dbroqua/keymap.c b/keyboards/planck/keymaps/dbroqua/keymap.c
new file mode 100644
index 000000000..33929cb3a
--- /dev/null
+++ b/keyboards/planck/keymaps/dbroqua/keymap.c
@@ -0,0 +1,234 @@
+// 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 "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+#define _MULTIMEDIA 3
+#define _ADJUST 4
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ BACKLIT
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Func macro definitions.
+#define SFT_TAB FUNC(0) // Tap for Enter, hold for Shift
+
+// Enable these functions using FUNC(n) macro.
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_TAP_KEY(_MULTIMEDIA, KC_TAB)
+ };
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | AltGr| Alt | Lower| Space | Raise| Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+ {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {SFT_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
+ {KC_LCTL, KC_LGUI, KC_RALT, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT}
+},
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | | | | ( | ) |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| | | | | | | | | | { | } |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | [ | ] |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Home | PgDwn| PgUp | End |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LPRN, KC_RPRN},
+ {BACKLIT, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LCBR, KC_RCBR},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END}
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | - | = |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | ` |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | \ | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+ {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GRV},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BSLS, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* _MULTIMEDIA
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Psc | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | Mute | Vol+ | Vol- | | | |Insert|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Prev | Play | Next | Del |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_MULTIMEDIA] = {
+ {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12},
+ {_______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, KC_VOLD, _______, _______, _______, KC_INS},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_DEL}
+},
+
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty| | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+ {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
+ {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______},
+ {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+}
+
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+ PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/dbroqua/layout.png b/keyboards/planck/keymaps/dbroqua/layout.png
new file mode 100644
index 000000000..37b74cdc5
--- /dev/null
+++ b/keyboards/planck/keymaps/dbroqua/layout.png
Binary files differ
diff --git a/keyboards/planck/keymaps/dbroqua/readme.md b/keyboards/planck/keymaps/dbroqua/readme.md
new file mode 100644
index 000000000..777c76abd
--- /dev/null
+++ b/keyboards/planck/keymaps/dbroqua/readme.md
@@ -0,0 +1,14 @@
+# Dbroqua Layout
+
+![Layout](layout.png "Dbroqua Keymap")
+
+* Online keyboard layout editor: http://www.keyboard-layout-editor.com/#/gists/e77306f9d14cc93fa26123b93b106474
+* Online keyboard layout editor (lower layer): http://www.keyboard-layout-editor.com/#/gists/786e03f6fbd274cb4f4e77a3d67f85fa
+* Online keyboard layout editor (raise layer): http://www.keyboard-layout-editor.com/#/gists/2e22c71f6910103c20d595d1caa713d6
+* Online keyboard layout editor (multimedia layer): http://www.keyboard-layout-editor.com/#/gists/132ebf8053508a7a81dfa8e0756edb40
+
+# Programming Instructions:
+Enter into programming mode and run the following command.
+```
+$ sudo KEYMAP=dbroqua make dfu
+``` \ No newline at end of file
diff --git a/keyboards/planck/keymaps/default/Makefile b/keyboards/planck/keymaps/default/Makefile
index 581e08cd0..17487ebbf 100644
--- a/keyboards/planck/keymaps/default/Makefile
+++ b/keyboards/planck/keymaps/default/Makefile
@@ -5,21 +5,21 @@
# the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
+COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = yes # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
-endif \ No newline at end of file
+endif
diff --git a/keyboards/planck/keymaps/default/keymap.c b/keyboards/planck/keymaps/default/keymap.c
index 5f71ae7d1..ddbe4d7b2 100644
--- a/keyboards/planck/keymaps/default/keymap.c
+++ b/keyboards/planck/keymaps/default/keymap.c
@@ -107,7 +107,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LOWER] = {
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
{KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
- {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
@@ -125,7 +125,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_RAISE] = {
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
- {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
diff --git a/keyboards/planck/keymaps/experimental/Makefile b/keyboards/planck/keymaps/experimental/Makefile
index 877c4aed0..3a8250a9b 100644
--- a/keyboards/planck/keymaps/experimental/Makefile
+++ b/keyboards/planck/keymaps/experimental/Makefile
@@ -16,6 +16,7 @@ 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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+ONEHAND_ENABLE = yes # Enable one-hand typing
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/planck/keymaps/experimental/config.h b/keyboards/planck/keymaps/experimental/config.h
index 52acd1905..cc093bee4 100644
--- a/keyboards/planck/keymaps/experimental/config.h
+++ b/keyboards/planck/keymaps/experimental/config.h
@@ -9,7 +9,7 @@
/* ws2812 RGB LED */
#define RGB_DI_PIN B1
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 8 // Number of LEDs
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
diff --git a/keyboards/planck/keymaps/experimental/keymap.c b/keyboards/planck/keymaps/experimental/keymap.c
index d9303fcae..569dbcc8a 100644
--- a/keyboards/planck/keymaps/experimental/keymap.c
+++ b/keyboards/planck/keymaps/experimental/keymap.c
@@ -8,6 +8,7 @@
#endif
#include "eeconfig.h"
+#include "version.h"
extern keymap_config_t keymap_config;
@@ -69,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
{KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
- {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_FN0, KC_FN0, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
/* Colemak
@@ -87,7 +88,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
{KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
- {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_FN0, KC_FN0, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
/* Dvorak
@@ -105,7 +106,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
{KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
{KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
{KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
- {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+ {KC_LEAD, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_FN0, KC_FN0, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
/* Lower
@@ -185,7 +186,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
const uint16_t PROGMEM fn_actions[] = {
-
+ ACTION_SWAP_HANDS_TAP_KEY(KC_SPC),
};
#ifdef AUDIO_ENABLE
diff --git a/keyboards/planck/keymaps/impossible/Makefile b/keyboards/planck/keymaps/impossible/Makefile
new file mode 100644
index 000000000..cf2c31f0f
--- /dev/null
+++ b/keyboards/planck/keymaps/impossible/Makefile
@@ -0,0 +1,27 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = yes # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/impossible/keymap.c b/keyboards/planck/keymaps/impossible/keymap.c
new file mode 100644
index 000000000..503976fa2
--- /dev/null
+++ b/keyboards/planck/keymaps/impossible/keymap.c
@@ -0,0 +1,242 @@
+// 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 "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+#define _WORKMAN 0
+#define _FN 1
+#define _QWERTY 2
+#define _QW_FN 3
+#define _PLOVER 4
+#define _ADJ 5
+
+enum planck_keycodes {
+ WORKMAN = SAFE_RANGE,
+ QWERTY,
+ PLOVER
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Workman Alpha-numeric
+ * ,-----------------------------------------------------------------------------------------------.
+ * | Q | D | R | W | B | F | U | P | J | 7 | 8 | 9 |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * | A | S | H | T | G | N | E | O | I | 4 | 5 | 6 |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * | Z | X | M | C | V | L | Y | K | Up | 1 | 2 | 3 |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * |Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 |Adj/Ent|
+ * `-----------------------------------------------------------------------------------------------'
+ */
+
+[_WORKMAN] = {
+ {KC_Q, KC_D, KC_R, KC_W, KC_B, KC_F, KC_U, KC_P, KC_J, KC_KP_7, KC_KP_8, KC_KP_9},
+ {KC_A, KC_S, KC_H, KC_T, KC_G, KC_N, KC_E, KC_O, KC_I, KC_KP_4, KC_KP_5, KC_KP_6},
+ {KC_Z, KC_X, KC_M, KC_C, KC_V, KC_L, KC_Y, KC_K, KC_UP, KC_KP_1, KC_KP_2, KC_KP_3},
+ {ALT_T(KC_TAB), GUI_T(KC_ESC), KC_COMM, CTL_T(KC_BSPC), LT(_FN, KC_ENT), SFT_T(KC_SPC), KC_DOT, KC_LEFT, KC_DOWN, KC_RGHT, KC_KP_0, LT(_ADJ, KC_ENT)}
+},
+
+/* FN-key held (Workman)
+ * ,-----------------------------------------------------------------------------------------------.
+ * | ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * | Tab | [ | ] | - | Del | ' | ( | ) | F11 | F4 | F5 | F6 |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * | Menu | | | = | \ | / | | | PgUp | F1 | F2 | F3 |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * |Alt/Tab| Gui | ~ |CTL/Bsp| Fn/Ent|SFT/Spc| ; | Home | PgDn | End | F10 |Adj/Ent|
+ * `-----------------------------------------------------------------------------------------------'
+ */
+
+[_FN] = {
+ {KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_F12, KC_F7, KC_F8, KC_F9},
+ {KC_TAB, KC_LBRACKET, KC_RBRACKET, KC_MINUS, KC_DELETE, KC_QUOT, KC_LPRN, KC_RPRN, KC_F11, KC_F4, KC_F5, KC_F6},
+ {KC_MENU, _______, _______, KC_EQUAL, KC_BSLS, KC_SLSH, XXXXXXX, XXXXXXX, KC_PGUP, KC_F1, KC_F2, KC_F3},
+ {_______, KC_LGUI, KC_GRAVE, _______, _______, _______, KC_SCOLON, KC_HOME, KC_PGDN, KC_END, KC_F10, _______}
+},
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------------------.
+ * |Gui/Esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------|
+ * | Ctrl | Q | W | E | R | T | Y | U | I | O | P | / |
+ * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------|
+ * | Shift | A | S | D | F | G | H | J | K | L | ; | " |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * |Alt/Tab| Z | X | C | V | Fn/SPC| B | N | M | , | . |Adj/Ent|
+ * `-----------------------------------------------------------------------------------------------'
+ */
+
+[_QWERTY] = {
+ {GUI_T(KC_ESC), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_LCTL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENT},
+ {KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {ALT_T(KC_TAB), KC_Z, KC_X, KC_C, KC_V, LT(_QW_FN, KC_SPC), KC_B, KC_N, KC_M, KC_COMM, KC_DOT, LT(_ADJ, KC_ENT)},
+},
+
+/* FN-key held (Qwerty)
+ * ,-----------------------------------------------------------------------------------------------.
+ * | Gui | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * | Ctrl | ~ | [ | PgUp | ] | | | - | Up | = | | F12 |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * | Shift | Tab | Home | PgDn | End | Del | | Left | Down | Right | | |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * |Alt/Tab| | | | | Fn/Spc| | | | | Menu |Adj/Ent|
+ * `-----------------------------------------------------------------------------------------------'
+ */
+
+[_QW_FN] = {
+ {KC_LGUI, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11},
+ {_______, KC_GRAVE, KC_LBRC, KC_PGUP, KC_RBRC, XXXXXXX, XXXXXXX, KC_MINS, KC_UP, KC_EQUAL, XXXXXXX, KC_F12},
+ {_______, KC_TAB, KC_HOME, KC_PGDN, KC_END, KC_DELETE, XXXXXXX, KC_LEFT, KC_DOWN, KC_RIGHT, XXXXXXX, XXXXXXX},
+ {_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______, _______, _______, KC_MENU, _______}
+},
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------------------.
+ * | S | T | P | H | * | F | P | L | T | D | | |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * | S | K | W | R | * | R | B | G | S | Z | | |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * | # | # | # | # | | # | # | # | # | # | | |
+ * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------|
+ * | | | A | O | | E | U | | | | |Adj/Ent|
+ * `-----------------------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = {
+ {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_U, KC_I, KC_O, KC_P, KC_LBRC, XXXXXXX, XXXXXXX},
+ {KC_A, KC_S, KC_D, KC_F, KC_G, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, XXXXXXX},
+ {KC_1, KC_1, KC_1, KC_1, XXXXXXX, KC_1, KC_1, KC_1, KC_1, KC_1, XXXXXXX, XXXXXXX},
+ {XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LT(_ADJ, KC_ENT)}
+},
+
+/* Adjust
+ * ,-----------------------------------------------------------------------------------------------.
+ * | | | | | | | | | Insert| PrtSc | Pause | RESET |
+ * |-------+-------+-------+-------+-------+---------------+-------+-------+-------+-------+-------|
+ * | | | | | | | | CapLk |Voice +| Audio |MIDIoff| |
+ * |-------+-------+-------+-------+-------+-------|-------+-------+-------+-------+-------+-------|
+ * | | | | | | | | ScrLk |Voice -| Music |MIDI on| |
+ * |-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------|
+ * | | | | | | | | Numlk |Workman| Qwerty| Plover|Adj/Ent|
+ * `-----------------------------------------------------------------------------------------------'
+ */
+
+[_ADJ] = {
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_PSCR, KC_PAUSE, RESET},
+ {_______, _______, _______, _______, _______, _______, _______, KC_CLCK, MUV_IN, AU_TOG, MI_OFF, _______},
+ {_______, _______, _______, _______, _______, _______, _______, KC_SLCK, MUV_DE, MU_TOG, MI_ON, _______},
+ {_______, _______, _______, _______, _______, _______, _______, KC_NLCK, WORKMAN, QWERTY, PLOVER, _______}
+}
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+
+float tone_workman[][2] = SONG(QWERTY_SOUND);
+float tone_qwerty[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+#endif
+
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case WORKMAN:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_workman, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_WORKMAN);
+ }
+ return false;
+ break;
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case PLOVER:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_plover, false, 0);
+ #endif
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ persistant_default_layer_set(1UL<<_PLOVER);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+ PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
diff --git a/keyboards/planck/keymaps/impossible/readme.md b/keyboards/planck/keymaps/impossible/readme.md
new file mode 100644
index 000000000..02c719197
--- /dev/null
+++ b/keyboards/planck/keymaps/impossible/readme.md
@@ -0,0 +1,73 @@
+# The Impossible Layout
+
+The Impossible Layout is named such because it manages to fit in both a numpad and an inverted-T arrow cluster into the same layer as the alpha keys.
+
+## Main layout
+
+The Impossible Layout places the middle column of the alphas onto where the punctuation keys were, moving he most used punctuation to be accessed by the thumbs. Because removing the middle columns fits with the Workman layout's philosopy, Workman is used as the basis for the layout. This means the layout should be very easy to learn for Workman users, and reasonable for Colemak users. Other space gains are made by combining keys that are only ever chorded with other non symbol keys (with function-layer alternatives where needed).
+
+### Alpha-numeric layer
+
+| | | | | | | | | | | | |
+|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
+| Q | D | R | W | B | F | U | P | J | 7 | 8 | 9 |
+| A | S | H | T | G | N | E | O | I | 4 | 5 | 6 |
+| Z | X | M | C | V | L | Y | K | Up | 1 | 2 | 3 |
+|Alt/Tab|Gui/Esc| , |CTL/Bsp| Fn/Ent|SFT/SPC| . | Left | Down | Right | 0 |Adj/Ent|
+
+### Function layer
+
+| | | | | | | | | | | | |
+|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
+| ! | @ | # | $ | % | ^ | & | * | F12 | F7 | F8 | F9 |
+| Tab | [ | ] | - | Del | ' | ( | ) | F11 | F4 | F5 | F6 |
+| Menu | | | = | \ | / | | | PgUp | F1 | F2 | F3 |
+|Alt/Tab| Gui | ~ |CTL/Bsp| Fn/Ent|SFT/Spc| ; | Home | PgDn | End | F10 |Adj/Ent|
+
+## Qwerty
+
+The Qwerty layer, mostly intended for gaming use, makes use of the doubled chorded/non-symbolic keys to obtain use of the entire alpha-numeric typing area.
+
+### Qwerty layer
+
+| | | | | | | | | | | | |
+|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
+|Gui/Esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+| Ctrl | Q | W | E | R | T | Y | U | I | O | P | / |
+| Shift | A | S | D | F | G | H | J | K | L | ; | " |
+|Alt/Tab| Z | X | C | V | Fn/SPC| B | N | M | , | . |Adj/Ent|
+
+### Qwerty Fn Layer
+
+| | | | | | | | | | | | |
+|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
+| Gui | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 |
+| Ctrl | ~ | [ | PgUp | ] | | | - | Up | = | | F12 |
+| Shift | Tab | Home | PgDn | End | Del | | Left | Down | Right | | |
+|Alt/Tab| | | | | Fn/Spc| | | | | Menu |Adj/Ent|
+
+## Stenography
+
+The Steno/Plover layer moves the number row below the regular keys, providing a much more comfortable placement for the thumb keys. Using this layout will require a slightly different dictionary to account for different keys being adjacent to the number row.
+
+### Steno Layer
+
+| | | | | | | | | | | | |
+|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
+| S | T | P | H | * | F | P | L | T | D | | |
+| S | K | W | R | * | R | B | G | S | Z | | |
+| # | # | # | # | | # | # | # | # | # | | |
+| | | A | O | | E | U | | | | |Adj/Ent|
+
+## Adjustments and Options
+
+In order to switch between layouts and change other keyboard settings, an adjustment layer is accessible from the same position over any layout.
+
+### Adjustment Layer
+
+| | | | | | | | | | | | |
+|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
+| | | | | | | | | Insert| PrtSc | Pause | RESET |
+| | | | | | | | CapLk |Voice +| Audio |MIDIoff| |
+| | | | | | | | ScrLk |Voice -| Music |MIDI on| |
+| | | | | | | | Numlk |Workman| Qwerty| Plover|Adj/Ent|
diff --git a/keyboards/planck/keymaps/jeebak/Makefile b/keyboards/planck/keymaps/jeebak/Makefile
new file mode 100644
index 000000000..cf2c31f0f
--- /dev/null
+++ b/keyboards/planck/keymaps/jeebak/Makefile
@@ -0,0 +1,27 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = yes # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/jeebak/keymap.c b/keyboards/planck/keymaps/jeebak/keymap.c
new file mode 100644
index 000000000..cb7ccb588
--- /dev/null
+++ b/keyboards/planck/keymaps/jeebak/keymap.c
@@ -0,0 +1,459 @@
+// 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 "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _PLOVER 5
+#define _TOUCHCURSOR 6
+#define _MOUSECURSOR 7
+#define _ADJUST 16
+
+// Keycodes
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ PLOVER,
+ LOWER,
+ RAISE,
+ BACKLIT,
+ EXT_PLV
+};
+
+enum macro_keycodes {
+ KC_ALT_TAB,
+ KC_CMD_TAB,
+ KC_CTL_TAB,
+ KC_CMD_SLSH,
+ KC_AG_FIND,
+ KC_AG_AGAIN,
+ KC_AG_UNDO,
+ KC_AG_CUT,
+ KC_AG_COPY,
+ KC_AG_PASTE,
+ KC_AG_DESK_L,
+ KC_AG_DESK_R,
+ KC_AG_TAB_C,
+ KC_AG_TAB_N,
+ KC_AG_TAB_R,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Custom macros
+#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
+#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
+#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper
+#define GUI_SEM GUI_T(KC_SCLN) // Tap for Semicolon, hold for GUI
+#define ALT_QUO ALT_T(KC_QUOT) // Tap for Quote, hold for Alt
+// Requires KC_TRNS/_______ for the trigger key in the destination layer
+#define LT_TC LT(_TOUCHCURSOR, KC_SPC) // L-ayer T-ap T-ouch C-ursor
+#define LT_MC(kc) LT(_MOUSECURSOR, kc) // L-ayer T-ap M-ouse C-ursor
+#define ALT_TAB M(KC_ALT_TAB) // Macro for Alt-Tab
+#define CMD_TAB M(KC_CMD_TAB) // Macro for Cmd-Tab
+#define CTL_TAB M(KC_CTL_TAB) // Macro for Ctl-Tab
+#define CMD_SLSH M(KC_CMD_SLSH) // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility)
+#define AG_FIND M(KC_AG_FIND) // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings
+#define AG_AGAIN M(KC_AG_AGAIN)
+#define AG_UNDO M(KC_AG_UNDO)
+#define AG_CUT M(KC_AG_CUT)
+#define AG_COPY M(KC_AG_COPY)
+#define AG_PASTE M(KC_AG_PASTE)
+#define AG_D_L M(KC_AG_DESK_L) // For Virtual Desktop Switching: Left, and
+#define AG_D_R M(KC_AG_DESK_R) // Right
+#define AG_T_C M(KC_AG_TAB_C) // For Chrome, etc. Tab Close,
+#define AG_T_N M(KC_AG_TAB_N) // Tab New, and
+#define AG_T_R M(KC_AG_TAB_R) // Tab Reopen Closed
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------------.
+ * | Hyper/Tab| Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |----------+------+------+------+------+-------------+------+------+------+------+--------|
+ * | Ctrl/Esc | A | S | MC/D | F | G | H | J | K | L |GUI/; | Alt/" |
+ * |----------+------+------+------+------+------|------+------+------+------+------+--------|
+ * | Shift | Z | X | C | V | B | N | M | , | . | / |Sft/Ent |
+ * |----------+------+------+------+------+------+------+------+------+------+------+--------|
+ * | PrntScrn | RGUI | Alt | GUI |Lower | TC/Space |Raise | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+ {HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {CTL_ESC, KC_A, KC_S, LT_MC(KC_D),KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, GUI_SEM, ALT_QUO},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT},
+ {KC_PSCR, KC_RGUI, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------------.
+ * | Hyper/Tab| Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |----------+------+------+------+------+-------------+------+------+------+------+--------|
+ * | Ctrl/Esc | A | R | MC/S | T | D | H | N | E | I | O | " |
+ * |----------+------+------+------+------+------|------+------+------+------+------+--------|
+ * | Shift | Z | X | C | V | B | K | M | , | . | / |Sft/Ent |
+ * |----------+------+------+------+------+------+------+------+------+------+------+--------|
+ * | PrntScrn | RGUI | Alt | GUI |Lower | TC/Space |Raise | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = {
+ {HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
+ {CTL_ESC, KC_A, KC_R, LT_MC(KC_S),KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT},
+ {KC_PSCR, KC_RGUI, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------------.
+ * | Hyper/Tab| " | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |----------+------+------+------+------+-------------+------+------+------+------+--------|
+ * | Ctrl/Esc | A | O | MC/E | U | I | D | H | T | N | S | / |
+ * |----------+------+------+------+------+------|------+------+------+------+------+--------|
+ * | Shift | ; | Q | J | K | X | B | M | W | V | Z |Sft/Ent |
+ * |----------+------+------+------+------+------+------+------+------+------+------+--------|
+ * | PrntScrn | RGUI | Alt | GUI |Lower | TC/Space |Raise | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------------'
+ */
+[_DVORAK] = {
+ {HPR_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
+ {CTL_ESC, KC_A, KC_O, LT_MC(KC_E),KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
+ {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT},
+ {KC_PSCR, KC_RGUI, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | [ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | ] | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Brite | | | | | | | Prev | Stop | Slct | Mute |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
+ {KC_LBRC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+ {KC_RBRC, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {BACKLIT, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MSTP, KC_MSEL, KC_MUTE}
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | $ | 4 | 5 | 6 | . | + | . | 4 | 5 | 6 | * | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | = | 7 | 8 | 9 | 0 | - | . | 1 | 2 | 3 | / | \ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Brite | | | | | | | Prev | Stop | Slct | Mute |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+ {KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_DLR, KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ASTR, KC_PIPE},
+ {KC_EQL, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_DOT, KC_1, KC_2, KC_3, KC_SLSH, KC_BSLS},
+ {BACKLIT, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MSTP, KC_MSEL, KC_MUTE}
+},
+
+/* TouchCursor layer (http://martin-stone.github.io/touchcursor/) plus personal customizations
+ * ,-----------------------------------------------------------------------------------.
+ * |AltTab|CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | Alt |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L|Desk_R|
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | Undo | Cut | Copy |Paste | ` | PgDn | Del |Tab_N |Tab_R |iTerm2| |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ *
+ * The KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND, and KC_AGAIN keycodes don't
+ * seem to work on Mac. Presumably they'll work under Windows.
+ */
+
+[_TOUCHCURSOR] = {
+ {ALT_TAB, CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______},
+ {_______, KC_LALT, KC_SPC, AG_T_C, AG_FIND,AG_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, AG_D_L, AG_D_R },
+ {_______, AG_UNDO, AG_CUT, AG_COPY, AG_PASTE,KC_GRV, KC_PGDN, KC_DEL, AG_T_N, AG_T_R, CMD_SLSH,_______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* Mouse Layer
+ * ,-----------------------------------------------------------------------------------.
+ * | | |ACCL0 | | | | |WHL_L | Up |WHL_R | BTN2 | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | |ACCL2 | BTN2 | | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 | BTN5 |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | BTN3 | |WHL_Dn| BTN1 | | | BTN3 | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_MOUSECURSOR] = {
+ {_______, _______, KC_ACL0, _______, _______, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______},
+ {_______, KC_ACL2, KC_BTN2, _______, KC_BTN1, KC_ACL1, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4, KC_BTN5},
+ {_______, _______, _______, _______, KC_BTN3, _______, KC_WH_D, KC_BTN1, _______, _______, KC_BTN3, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * | # | # | # | # | # | # | # | # | # | # | # | # |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | S | T | P | H | * | * | F | P | L | T | D |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |TogOut| S | K | W | R | * | * | R | B | G | S | Z |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit | | | A | O | | E | U | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = {
+ {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
+ {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC},
+ {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | |Reset |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
+ {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______},
+ {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET}
+}
+
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+ #endif
+ default_layer_set(1UL<<_DVORAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ case PLOVER:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_NOTE_ARRAY(tone_plover, false, 0);
+ #endif
+ layer_off(_RAISE);
+ layer_off(_LOWER);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ break;
+ case EXT_PLV:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
+ #endif
+ layer_off(_PLOVER);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+/*
+ * Macro definition
+ */
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+
+ bool use_cmd = true; // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc.
+ // Compare to MAGIC_SWAP_ALT_GUI and MAGIC_UNSWAP_ALT_GUI configs, set in:
+ // quantum/quantum.c
+ if(keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1) {
+ use_cmd = false; // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc.
+ }
+
+ switch (id) {
+ case KC_ALT_TAB:
+ if(use_cmd) { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); }
+ else { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); }
+ case KC_CMD_TAB:
+ if(use_cmd) { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); }
+ else { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); }
+
+ case KC_CTL_TAB:
+ return (record->event.pressed ? MACRO( D(LCTRL), D(TAB), END ) : MACRO( U(TAB), END ));
+ case KC_CMD_SLSH:
+ return (record->event.pressed ? MACRO( D(LGUI), D(SLSH),END ) : MACRO( U(SLSH),END ));
+
+ case KC_AG_FIND:
+ return use_cmd ? MACRODOWN( D(LGUI), T(F), END ) : MACRODOWN( D(LCTRL), T(F), END );
+ case KC_AG_AGAIN:
+ return use_cmd ? MACRODOWN( D(LGUI), T(G), END ) : MACRODOWN( D(LCTRL), T(G), END );
+ case KC_AG_UNDO:
+ return use_cmd ? MACRODOWN( D(LGUI), T(Z), END ) : MACRODOWN( D(LCTRL), T(Z), END );
+ case KC_AG_CUT:
+ return use_cmd ? MACRODOWN( D(LGUI), T(X), END ) : MACRODOWN( D(LCTRL), T(X), END );
+ case KC_AG_COPY:
+ return use_cmd ? MACRODOWN( D(LGUI), T(C), END ) : MACRODOWN( D(LCTRL), T(C), END );
+ case KC_AG_PASTE:
+ return use_cmd ? MACRODOWN( D(LGUI), T(V), END ) : MACRODOWN( D(LCTRL), T(V), END );
+
+ case KC_AG_DESK_L:
+ return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(SCLN), END ) : MACRODOWN( D(LALT), D(LCTRL), T(SCLN), END );
+ case KC_AG_DESK_R:
+ return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(QUOT), END ) : MACRODOWN( D(LALT), D(LCTRL), T(QUOT), END );
+
+ case KC_AG_TAB_C:
+ return use_cmd ? MACRODOWN( D(LGUI), T(W), END ) : MACRODOWN( D(LCTRL), T(W), END );
+ case KC_AG_TAB_N:
+ return use_cmd ? MACRODOWN( D(LGUI), T(T), END ) : MACRODOWN( D(LCTRL), T(T), END );
+ case KC_AG_TAB_R:
+ return use_cmd ? MACRODOWN( D(LGUI), D(LSHIFT), T(T), END ) : MACRODOWN( D(LCTRL), D(LSHIFT), T(T), END );
+ }
+
+ return MACRO_NONE;
+}
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+ PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
diff --git a/keyboards/planck/keymaps/jeebak/readme.md b/keyboards/planck/keymaps/jeebak/readme.md
new file mode 100644
index 000000000..e1dd1dca5
--- /dev/null
+++ b/keyboards/planck/keymaps/jeebak/readme.md
@@ -0,0 +1,127 @@
+jeebak's layout
+=======================
+This WIP keymap attempts to minimize fingers straying away from the home row.
+To aid in this endeavor, when additional modifyer keys to switch layers are
+needed, they will be mapped to home row keys. The `keymap.c` file will contain
+the exact changes. The diagrams in this README shows the highlights of the
+changes from the default mappings.
+
+I also decided to change all calls to `persistant_default_layer_set()` to
+`default_layer_set()` since this is my personal perference.
+
+## Macros
+```
+#define ALT_TAB M(KC_ALT_TAB)
+```
+
+## Base Layers (Qwerty/Colemak/Dvorak)
+These base layers are mostly the same as the default mappings. The interesting
+changes are shown below.
+
+- The `Ctrl/Esc`, will emit an `Escape` when tapped, and act as a `Control` key when held,
+- `GUI/;` as `;` and `GUI`,
+- `Alt/"` as `"` and `Alt`,
+- `Sft/Ent` as `Enter` and `Shift`, and
+- `Hyper/Tab` as `Tab` and `Hyper`
+
+A `TODO` item is to see if it can also act as a `CapsLock` when double-tapped.
+The arrow keys, which have been moved to the
+[TouchCursor](http://martin-stone.github.io/touchcursor/) layer, have been
+replaced with the Media keys as shown. The `MC/kc` key activates the
+`MouseCursor` layer when held, and emits the corresponding `kc` for its layer,
+when tapped.
+```
+ ,-----------------------------------------------------------------------------------------.
+ | Hyper/Tab| | | | | | | | | | | |
+ |----------+------+------+------+------+-------------+------+------+------+------+--------|
+ | Ctrl/Esc | | |MC/kc | | | | | | |GUI/; | Alt/" |
+ |----------+------+------+------+------+------|------+------+------+------+------+--------|
+ | | | | | | | | | | | |Sft/Ent |
+ |----------+------+------+------+------+------+------+------+------+------+------+--------|
+ | PrntScrn | RGUI | Alt | GUI |Lower | TC/Space |Raise | Next | Vol- | Vol+ | Play |
+ `-----------------------------------------------------------------------------------------'
+```
+
+## Lower Layer (Symbols and Function Keys)
+The symbols and functions keys are essentially the same as the default mapping.
+The most notable changes are that the symbol keys from the `RAISE` layer have
+been moved here. The remaining Media keys replace those that are now on the
+base layers. The `BACKLIT` key has also been moved here.
+```
+ ,-----------------------------------------------------------------------------------.
+ | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ |------+------+------+------+------+-------------+------+------+------+------+------|
+ | [ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ |------+------+------+------+------+------|------+------+------+------+------+------|
+ | ] | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | \ |
+ |------+------+------+------+------+------+------+------+------+------+------+------|
+ |Brite | | | | | | | Prev | Stop | Slct | Mute |
+ `-----------------------------------------------------------------------------------'
+```
+
+## Raise Layer (Numbers and Arithmetic Operators)
+All of the numbers and arithmetic operators are available on this layer. Some
+keys are duplicated for the convenience of their positions. The `0` and `$`
+keys at the far left are for quick access to beginning and end of line in vim.
+```
+ ,-----------------------------------------------------------------------------------.
+ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ |------+------+------+------+------+-------------+------+------+------+------+------|
+ | $ | 4 | 5 | 6 | . | + | . | 4 | 5 | 6 | * | | |
+ |------+------+------+------+------+------|------+------+------+------+------+------|
+ | = | 7 | 8 | 9 | 0 | - | . | 1 | 2 | 3 | / | \ |
+ |------+------+------+------+------+------+------+------+------+------+------+------|
+ |Brite | | | | | | | Prev | Stop | Slct | Mute |
+ `-----------------------------------------------------------------------------------'
+```
+
+## TouchCursor layer plus personal customizations
+[TouchCursor](http://martin-stone.github.io/touchcursor/) uses the `Space` key
+as the modifier, with the `IJKL` home row keys representing the inverted-T of
+the arrow keys. All of the default TouchCursor keymappings for the right hand
+are represented below. My personalizations include all of the keys shown for
+the left hand. Having the `Alt` and `Shift` keys (as well as the `Control` key
+from the base layers) readily accessible from the home row allows quick word
+jumps and highlighting when used in conjunction with the arrow keys. The
+`Alt-Tab` macro is not only useful under Windows, but also under Mac when used
+with alternative switchers like [HyperSwitch](https://bahoom.com/hyperswitch).
+The `Cmd-Tab` and `Ctrl-Tab` sequences are duplicated for easy access while in
+this layer. The `KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND,` and `KC_AGAIN`
+keycodes do not seem to work. There are macros in place that'll "automatically"
+choose the correct version (`Cmd-Tab` vs. `Alt-Tab`, `Cmd-C` vs. `Ctrl-C`,
+etc.) depending on which layout you've currently selected (`AG_NORM` or
+`AG_SWAP`) in the `_ADJUST` layer. The `Desk_L` and `Desk_R` macros are what I
+use to switch between Virtual Desktops Left/Right. The `Tab_C`, `Tab_N` and
+`Tab_R` are for "Close Tab," "New Tab" and "Reopen Closed Tab" for apps such as
+Google Chrome.
+```
+ ,-----------------------------------------------------------------------------------.
+ |AltTab|CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | |
+ |------+------+------+------+------+-------------+------+------+------+------+------|
+ | | Alt |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L|Desk_R|
+ |------+------+------+------+------+------|------+------+------+------+------+------|
+ | | Undo | Cut | Copy |Paste | ` | PgDn | Del |Tab_N |Tab_R |iTerm2| |
+ |------+------+------+------+------+------+------+------+------+------+------+------|
+ | | | | | | | | | | | |
+ `-----------------------------------------------------------------------------------'
+```
+
+## Mouse Layer
+The Mouse layer, closely mimics the layout/behaviour of the TouchCursor layer.
+The `D` key (on QWERTY) is used to activate this layer. All 16 keycodes for the
+mouse from the `doc/keycode.txt` file are represented, and logically located,
+IMHO. The left and right click buttons are duplicated; on the right hand side,
+for a quick click here and there, and again on the left hand side for when the
+buttons need to be held for dragging things or highlighting text, thus allowing
+the right hand to be free to use the up/down/left/right actions.
+```
+ ,-----------------------------------------------------------------------------------.
+ | | |ACCL0 | | | | |WHL_L | Up |WHL_R | BTN2 | |
+ |------+------+------+------+------+-------------+------+------+------+------+------|
+ | |ACCL2 | BTN2 | | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 | BTN5 |
+ |------+------+------+------+------+------|------+------+------+------+------+------|
+ | | | | | BTN3 | |WHL_Dn| BTN1 | | | BTN3 | |
+ |------+------+------+------+------+------+------+------+------+------+------+------|
+ | | | | | | | | | | | |
+ `-----------------------------------------------------------------------------------'
+```
diff --git a/keyboards/planck/keymaps/jhenahan/Makefile b/keyboards/planck/keymaps/jhenahan/Makefile
new file mode 100644
index 000000000..83da2a7f8
--- /dev/null
+++ b/keyboards/planck/keymaps/jhenahan/Makefile
@@ -0,0 +1,27 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = yes # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/jhenahan/config.h b/keyboards/planck/keymaps/jhenahan/config.h
new file mode 100644
index 000000000..cd3adc41c
--- /dev/null
+++ b/keyboards/planck/keymaps/jhenahan/config.h
@@ -0,0 +1,9 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+#define FORCE_NKRO
+#define WORKMAN_SOUND COLEMAK_SOUND
+
+#endif
diff --git a/keyboards/planck/keymaps/jhenahan/keymap.c b/keyboards/planck/keymaps/jhenahan/keymap.c
new file mode 100644
index 000000000..2bda4b695
--- /dev/null
+++ b/keyboards/planck/keymaps/jhenahan/keymap.c
@@ -0,0 +1,314 @@
+// 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 "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _WORKMAN 0
+#define _DEAD 1
+#define _QWERTY 2
+#define _LOWER 3
+#define _RAISE 4
+#define _PLOVER 5
+#define _ADJUST 16
+
+enum planck_keycodes {
+ WORKMAN = SAFE_RANGE,
+ DEAD,
+ QWERTY,
+ LOWER,
+ RAISE,
+ PLOVER,
+ EXT_PLV,
+ TOG_PLV
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+/* Workman
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | D | R | W | B | J | F | U | P | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | H | T | G | Y | N | E | O | I | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | M | C | V | K | L | Dead | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | RAlt | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_WORKMAN] = {
+ {KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSPC},
+ {MT(MOD_LCTL,KC_ESC), KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, DEAD, KC_DOT, KC_SLSH, KC_ENT},
+ {KC_LCTL, KC_RALT, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+/* Workman Dead Layer
+ * ,-----------------------------------------------------------------------------------.
+ * | | % | & | ? | + | @ | $ | _ | [ | ] | ! | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | / | ( | = | 0 | { | } | 1 | * | ) | - | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | 6 | 7 | 8 | 9 | | | \ | 2 | 3 | 4 | 5 | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | < | ~ | ` | , | # | ^ | > | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DEAD] = {
+ {XXXXXXX, KC_PERC, KC_AMPR, KC_QUES, KC_PLUS, KC_AT, KC_DLR, KC_UNDS, KC_LBRC, KC_RBRC, KC_EXLM, XXXXXXX},
+ {XXXXXXX, KC_SLSH, KC_LPRN, KC_EQL, KC_0, KC_LCBR, KC_RCBR, KC_1, KC_ASTR, KC_RPRN, KC_MINS, XXXXXXX},
+ {XXXXXXX, KC_6, KC_7, KC_8, KC_9, KC_PIPE, KC_BSLS, KC_2, KC_3, KC_4, KC_5, XXXXXXX},
+ {XXXXXXX, XXXXXXX, KC_LT, KC_TILD, KC_GRV, KC_COMM, KC_COMM, KC_HASH, KC_CIRC, KC_GT, XXXXXXX, XXXXXXX}
+},
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | RAlt | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
+ {KC_LCTL, KC_RALT, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | Vol+ |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Prev | Next | Vol- | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
+ {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS), _______, KC_VOLU, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, KC_MPLY}
+},
+
+/* Raise - KWM Interaction
+ * ,-----------------------------------------------------------------------------------.
+ * |Restrt| |TgSplt|Flotng|Parent|FlScrn|InsMrk| InsW | InsS | InsN | InsE | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | Mark |Rotate|Prefix| Term | BSP |SwpMrk|SwapW |SwapS |SwapN |SwapE | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |MarkW |MarkS |MarkN |MarkE |Monocl|Float |FocusW|FocusS|FocusN|FocusE| |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+ {LCAG(KC_Q), XXXXXXX, LCAG(KC_S), LCAG(KC_W), LCAG(KC_D), LCAG(KC_F), LCTL(S(KC_X)), LCTL(S(KC_H)), LCTL(S(KC_J)), LCTL(S(KC_K)), LCTL(S(KC_L)), XXXXXXX},
+ {XXXXXXX, LCAG(KC_M), LGUI(LCTL(KC_R)), LCAG(KC_DOT), LCAG(KC_T), LGUI(LCTL(KC_A)), LCTL(LALT(KC_M)), LCTL(LALT(KC_H)), LCTL(LALT(KC_J)), LCTL(LALT(KC_K)), LCTL(LALT(KC_L)), XXXXXXX},
+ {_______, LCAG(KC_H), LCAG(KC_J), LCAG(KC_K), LCAG(KC_L), LGUI(LCTL(KC_S)), LGUI(LCTL(KC_D)), LGUI(LALT(KC_H)), LGUI(LALT(KC_J)), LGUI(LALT(KC_K)), LGUI(LALT(KC_L)), _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * | # | # | # | # | # | # | # | # | # | # | # | # |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | S | T | P | H | * | * | F | P | L | T | D |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |TogOut| S | K | W | R | * | * | R | B | G | S | Z |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit | | | A | O | | E | U | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = {
+ {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
+ {XXXXXXX, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSPC},
+ {TOG_PLV, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT},
+ {EXT_PLV, XXXXXXX, XXXXXXX, KC_M, KC_C, XXXXXXX, XXXXXXX, KC_L, KC_COMM, XXXXXXX, XXXXXXX, XXXXXXX}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Workmn|Plover| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+ {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
+ {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, WORKMAN, PLOVER, _______, _______},
+ {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+}
+
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_workman[][2] = SONG(WORKMAN_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case WORKMAN:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_workman, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_WORKMAN);
+ }
+ return false;
+ break;
+ case DEAD:
+ if (record->event.pressed) {
+ layer_on(_DEAD);
+ set_oneshot_layer(_DEAD, ONESHOT_START);
+ clear_oneshot_layer_state(ONESHOT_PRESSED);
+ }
+ return false;
+ break;
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case PLOVER:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_NOTE_ARRAY(tone_plover, false, 0);
+ #endif
+ layer_off(_RAISE);
+ layer_off(_LOWER);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ break;
+ case EXT_PLV:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
+ #endif
+ layer_off(_PLOVER);
+ }
+ return false;
+ break;
+ case TOG_PLV:
+ if (record->event.pressed) {
+ register_code(KC_R);
+ register_code(KC_W);
+ register_code(KC_T);
+ register_code(KC_C);
+ register_code(KC_P);
+ register_code(KC_O);
+ clear_keyboard();
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+ PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
diff --git a/keyboards/planck/keymaps/jhenahan/readme.md b/keyboards/planck/keymaps/jhenahan/readme.md
new file mode 100644
index 000000000..a80506fc9
--- /dev/null
+++ b/keyboards/planck/keymaps/jhenahan/readme.md
@@ -0,0 +1,41 @@
+# jhenahan's layout
+
+## Layout
+
+The base layer is based on the
+[Workman Dead](https://github.com/ojbucao/Workman/tree/master/mac) layout. The
+primary interaction layer is a slightly modified Workman layout with a 'dead'
+key on the third row under the middle finger. The dead key activates a layer of
+special characters.
+
+## [Layers](http://www.keyboard-layout-editor.com/#/gists/2b875f7d5d76fe4408c0a5b3bd76ddae)
+### Function Layer
+
+This is very slightly modified from the default, mainly just to rearrange the media keys.
+
+### [KWM](https://github.com/koekeishiya/kwm) Interaction Layer
+
+`kwm` is a tiling window manager for OS X. The keys defined in my keymap
+correspond to the settings I use in
+[my `kwmrc` file](https://github.com/jhenahan/dotfiles/blob/master/kwm/kwmrc).
+
+### QWERTY
+
+Just in case.
+
+### [Plover](http://www.openstenoproject.org/plover/)
+
+This layout functions exactly as a Workman layout unless you're running the Plover
+application. Includes a key for toggling Plover while it's running.
+
+Add this in the appropriate section of your `plover.cfg` to allow this altered layout:
+
+``` ini
+[System: English Stenotype]
+keymap[keyboard] = [["#", ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "="]], ["S-", ["q", "a"]], ["T-", ["d"]], ["K-", ["s"]], ["P-", ["r"]], ["W-", ["h"]], ["H-", ["w"]], ["R-", ["t"]], ["A-", ["m"]], ["O-", ["c"]], ["*", ["y", "g", "j", "b"]], ["-E", ["l"]], ["-U", [","]], ["-F", ["f"]], ["-R", ["n"]], ["-P", ["u"]], ["-B", ["e"]], ["-L", ["p"]], ["-G", ["o"]], ["-T", [";"]], ["-S", ["i"]], ["-D", ["BackSpace"]], ["-Z", ["'"]], ["no-op", ["\\", "]", "x", ".", "/"]], ["arpeggiate", ["space"]]]
+```
+
+### Adjust Layer
+
+This layer is only slightly modified from the default to remove Dvorak and
+Colemak and replace them with Workman.
diff --git a/keyboards/planck/keymaps/joe/Makefile b/keyboards/planck/keymaps/joe/Makefile
index 581e08cd0..b2ca41944 100644
--- a/keyboards/planck/keymaps/joe/Makefile
+++ b/keyboards/planck/keymaps/joe/Makefile
@@ -1,3 +1,6 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
# Build Options
@@ -22,4 +25,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
-endif \ No newline at end of file
+endif
diff --git a/keyboards/planck/keymaps/leo/Makefile b/keyboards/planck/keymaps/leo/Makefile
index 581e08cd0..b2ca41944 100644
--- a/keyboards/planck/keymaps/leo/Makefile
+++ b/keyboards/planck/keymaps/leo/Makefile
@@ -1,3 +1,6 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
# Build Options
@@ -22,4 +25,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
-endif \ No newline at end of file
+endif
diff --git a/keyboards/planck/keymaps/lucas/Makefile b/keyboards/planck/keymaps/lucas/Makefile
index 581e08cd0..b2ca41944 100644
--- a/keyboards/planck/keymaps/lucas/Makefile
+++ b/keyboards/planck/keymaps/lucas/Makefile
@@ -1,3 +1,6 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
# Build Options
@@ -22,4 +25,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
-endif \ No newline at end of file
+endif
diff --git a/keyboards/planck/keymaps/mollat/Makefile b/keyboards/planck/keymaps/mollat/Makefile
index 581e08cd0..b2ca41944 100644
--- a/keyboards/planck/keymaps/mollat/Makefile
+++ b/keyboards/planck/keymaps/mollat/Makefile
@@ -1,3 +1,6 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
# Build Options
@@ -22,4 +25,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
-endif \ No newline at end of file
+endif
diff --git a/keyboards/planck/keymaps/nico/Makefile b/keyboards/planck/keymaps/nico/Makefile
index 581e08cd0..b2ca41944 100644
--- a/keyboards/planck/keymaps/nico/Makefile
+++ b/keyboards/planck/keymaps/nico/Makefile
@@ -1,3 +1,6 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
# Build Options
@@ -22,4 +25,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
-endif \ No newline at end of file
+endif
diff --git a/keyboards/planck/keymaps/premek/Makefile b/keyboards/planck/keymaps/premek/Makefile
new file mode 100644
index 000000000..b2ca41944
--- /dev/null
+++ b/keyboards/planck/keymaps/premek/Makefile
@@ -0,0 +1,28 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
+
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = yes # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/premek/keymap.c b/keyboards/planck/keymaps/premek/keymap.c
new file mode 100644
index 000000000..9b212ab25
--- /dev/null
+++ b/keyboards/planck/keymaps/premek/keymap.c
@@ -0,0 +1,231 @@
+// 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 "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _PLOVER 5
+#define _ADJUST 16
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ PLOVER,
+ LOWER,
+ RAISE,
+ BACKLIT,
+ EXT_PLV
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QWERTY] = {
+ {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_DEL, KC_Y, KC_U, KC_I, KC_O, KC_P },
+ {KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_TAB, KC_H, KC_J, KC_K, KC_L, KC_SCLN},
+ {KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BSPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH},
+ {KC_LGUI, _______, _______, KC_LALT, LOWER, KC_SPC, KC_ENT, KC_SPC, RAISE, KC_RALT, _______, KC_RGUI}
+},
+[_COLEMAK] = {
+ {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
+ {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
+ {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+[_DVORAK] = {
+ {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
+ {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
+ {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
+ {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+[_LOWER] = {
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, KC_6, KC_7, KC_8, KC_9, KC_0},
+ {_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, KC_F6, KC_HOME, KC_PGDN, KC_PGUP, KC_END },
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, KC_F12, KC_PLUS, KC_PIPE, KC_LCBR, KC_RCBR},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+[_RAISE] = {
+ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN},
+ {_______, _______, _______, KC_QUOT, KC_MINS, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT},
+ {_______, KC_TILD, KC_GRV, KC_PLUS, KC_EQL, KC_PIPE, _______, KC_BSLS, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+[_PLOVER] = {
+ {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
+ {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC},
+ {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX}
+},
+[_ADJUST] = {
+ {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
+ {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______},
+ {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+}
+
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_DVORAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ case PLOVER:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_NOTE_ARRAY(tone_plover, false, 0);
+ #endif
+ layer_off(_RAISE);
+ layer_off(_LOWER);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ break;
+ case EXT_PLV:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
+ #endif
+ layer_off(_PLOVER);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+ PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
diff --git a/keyboards/planck/keymaps/premek/readme.md b/keyboards/planck/keymaps/premek/readme.md
new file mode 100644
index 000000000..16debdd63
--- /dev/null
+++ b/keyboards/planck/keymaps/premek/readme.md
@@ -0,0 +1,4 @@
+# Split Layout
+Inspired by TECK
+
+[Layout](http://www.keyboard-layout-editor.com/##@_switchMount=cherry&switchBrand=gateron&switchType=KS-3-Tea&pcb:true%3B&@_c=%23e6e6e6&t=%23757575&a:7&fa@:5%3B%3B&=Esc&_a:4&fa@:5&:0&:0&:0&:0&:0&:0&:0&:0&:5%3B%3B&=%0A%0A!%0A1%0A%0A%0A%0A%0A%0AQ&=%0A%0A%2F@%0A2%0A%0A%0A%0A%0A%0AW&=%0A%0A%23%0A3%0A%0A%0A%0A%0A%0AE&=%0A%0A$%0A4%0A%0A%0A%0A%0A%0AR&=%0A%0A%25%0A5%0A%0A%0A%0A%0A%0AT&_c=%23e3b02d&a:7%3B&=Del&_c=%23e6e6e6&a:4%3B&=%0A%0A%5E%0A6%0A%0A%0A%0A%0A%0AY&=%0A%0A%2F&%0A7%0A%0A%0A%0A%0A%0AU&=%0A%0A*%0A8%0A%0A%0A%0A%0A%0AI&=%0A%0A(%0A9%0A%0A%0A%0A%0A%0AO&=%0A%0A)%0A0%0A%0A%0A%0A%0A%0AP%3B&@_a:7%3B&=Shift&_a:4%3B&=%0A%0A%0AF1%0A%0A%0A%0A%0A%0AA&=%0A%0A%0AF2%0A%0A%0A%0A%0A%0AS&=%0A%0A'%0AF3%0A%0A%0A%0A%0A%0AD&_c=%23e3b02d&n:true%3B&=%0A%0A-%0AF4%0A%0A%0A%0A%0A%0AF&_c=%23e6e6e6%3B&=%0A%0A%0AF5%0A%0A%0A%0A%0A%0AG&_c=%23e3b02d&a:7%3B&=Tab&_c=%23e6e6e6&a:4%3B&=%0A%0A%0AF6%0A%0A%0A%0A%0A%0AH&_c=%23e3b02d&n:true%3B&=%0A%0A%2F&larr%2F%3B%0AHom%0A%0A%0A%0A%0A%0AJ&_c=%23e6e6e6%3B&=%0A%0A%2F&darr%2F%3B%0APgD%0A%0A%0A%0A%0A%0AK&=%0A%0A%2F&uarr%2F%3B%0APgU%0A%0A%0A%0A%0A%0AL&=%0A%0A%2F&rarr%2F%3B%0AEnd%0A%0A%0A%0A%0A%0A%2F%3B%3B&@_a:7%3B&=Ctrl&_a:4%3B&=%0A%0A~%0AF7%0A%0A%0A%0A%0A%0AZ&=%0A%0A%60%0AF8%0A%0A%0A%0A%0A%0AX&=%0A%0A+%0AF9%0A%0A%0A%0A%0A%0AC&=%0A%0A%2F=%0AF10%0A%0A%0A%0A%0A%0AV&=%0A%0A%7C%0AF11%0A%0A%0A%0A%0A%0AB&_c=%23e3b02d&a:7%3B&=BSp&_c=%23e6e6e6&a:4%3B&=%0A%0A%5C%0AF12%0A%0A%0A%0A%0A%0AN&=%0A%0A%5B%0A%0A%0A%0A%0A%0A%0AM&=%0A%0A%5D%0A%0A%0A%0A%0A%0A%0A,&=%0A%0A%7B%0A%0A%0A%0A%0A%0A%0A.&=%0A%0A%7D%0A%0A%0A%0A%0A%0A%0A%2F%2F%3B&@_a:7%3B&=&=&=&=Alt&_c=%23e3b02d%3B&=%2F&dArr%2F%3B&_c=%23e6e6e6%3B&=spc&_c=%23e3b02d%3B&=%2F&crarr%2F%3B&_c=%23e6e6e6%3B&=spc&_c=%23e3b02d%3B&=%2F&uArr%2F%3B&_c=%23e6e6e6%3B&=Alt&=&=)
diff --git a/keyboards/planck/keymaps/priyadi/Makefile b/keyboards/planck/keymaps/priyadi/Makefile
new file mode 100644
index 000000000..d9d4f3d1d
--- /dev/null
+++ b/keyboards/planck/keymaps/priyadi/Makefile
@@ -0,0 +1,25 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = yes # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+UNICODEMAP_ENABLE = yes # Unicode map
+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.
+API_SYSEX_ENABLE = no
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/priyadi/keymap.c b/keyboards/planck/keymaps/priyadi/keymap.c
new file mode 100644
index 000000000..6e7f4e735
--- /dev/null
+++ b/keyboards/planck/keymaps/priyadi/keymap.c
@@ -0,0 +1,447 @@
+// 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 "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+ #include "musical_notes.h"
+#endif
+#include "eeconfig.h"
+#include "process_unicode.h"
+#include "quantum.h"
+
+extern keymap_config_t keymap_config;
+
+enum layers {
+ _QWERTY,
+ _COLEMAK,
+ _WORKMAN,
+ _PUNC,
+ _NUM,
+ _FUNC,
+ _EMOJI,
+ _GUI,
+};
+
+enum planck_keycodes {
+ // layouts
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ WORKMAN,
+
+ // layer switchers
+ PUNC,
+ NUM,
+ FUNC,
+ EMOJI,
+ GUI,
+
+ // os switchers
+ LINUX,
+ WIN,
+ OSX,
+};
+
+// Fillers to make layering clearer
+
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// unicode map
+
+enum unicode_name {
+ GRIN, // grinning face 😊
+ TJOY, // tears of joy 😂
+ SMILE, // grining face with smiling eyes ðŸ˜
+ HEART, // heart â¤
+ EYERT, // smiling face with heart shaped eyes ðŸ˜
+ CRY, // crying face 😭
+ SMEYE, // smiling face with smiling eyes 😊
+ UNAMU, // unamused 😒
+ KISS, // kiss 😘
+ HART2, // two hearts 💕
+ WEARY, // weary 😩
+ OKHND, // ok hand sign 👌
+ PENSV, // pensive 😔
+ SMIRK, // smirk ðŸ˜
+ RECYC, // recycle â™»
+ WINK, // wink 😉
+ THMUP, // thumb up ðŸ‘
+ THMDN, // thumb down 👎
+ PRAY, // pray ðŸ™
+ PHEW, // relieved 😌
+ MUSIC, // musical notes
+ FLUSH, // flushed 😳
+ CELEB, // celebration 🙌
+ CRY2, // crying face 😢
+ COOL, // smile with sunglasses 😎
+ NOEVS, // see no evil
+ NOEVH, // hear no evil
+ NOEVK, // speak no evil
+ POO, // pile of poo
+ EYES, // eyes
+ VIC, // victory hand
+ BHART, // broken heart
+ SLEEP, // sleeping face
+ SMIL2, // smiling face with open mouth & sweat
+ HUNRD, // 100
+ CONFU, // confused
+ TONGU, // face with tongue & winking eye
+ DISAP, // disappointed
+ YUMMY, // face savoring delicious food
+ CLAP, // hand clapping
+ FEAR, // face screaming in fear
+ HORNS, // smiling face with horns
+ HALO, // smiling face with halo
+ BYE, // waving hand
+ SUN, // sun
+ MOON, // moon
+ SKULL, // skull
+};
+
+const uint32_t PROGMEM unicode_map[] = {
+ [GRIN] = 0x1F600,
+ [TJOY] = 0x1F602,
+ [SMILE] = 0x1F601,
+ [HEART] = 0x2764,
+ [EYERT] = 0x1f60d,
+ [CRY] = 0x1f62d,
+ [SMEYE] = 0x1F60A,
+ [UNAMU] = 0x1F612,
+ [KISS] = 0x1F618,
+ [HART2] = 0x1F495,
+ [WEARY] = 0x1F629,
+ [OKHND] = 0x1F44C,
+ [PENSV] = 0x1F614,
+ [SMIRK] = 0x1F60F,
+ [RECYC] = 0x267B,
+ [WINK] = 0x1F609,
+ [THMUP] = 0x1F44D,
+ [THMDN] = 0x1F44E,
+ [PRAY] = 0x1F64F,
+ [PHEW] = 0x1F60C,
+ [MUSIC] = 0x1F3B6,
+ [FLUSH] = 0x1F633,
+ [CELEB] = 0x1F64C,
+ [CRY2] = 0x1F622,
+ [COOL] = 0x1F60E,
+ [NOEVS] = 0x1F648,
+ [NOEVH] = 0x1F649,
+ [NOEVK] = 0x1F64A,
+ [POO] = 0x1F4A9,
+ [EYES] = 0x1F440,
+ [VIC] = 0x270C,
+ [BHART] = 0x1F494,
+ [SLEEP] = 0x1F634,
+ [SMIL2] = 0x1F605,
+ [HUNRD] = 0x1F4AF,
+ [CONFU] = 0x1F615,
+ [TONGU] = 0x1F61C,
+ [DISAP] = 0x1F61E,
+ [YUMMY] = 0x1F60B,
+ [CLAP] = 0x1F44F,
+ [FEAR] = 0x1F631,
+ [HORNS] = 0x1F608,
+ [HALO] = 0x1F607,
+ [BYE] = 0x1F44B,
+ [SUN] = 0x2600,
+ [MOON] = 0x1F314,
+ [SKULL] = 0x1F480,
+};
+
+
+// hybrid shift - =
+// #undef KC_LSFT
+// #define KC_LSFT MT(MOD_LSFT, KC_MINS)
+// #undef KC_RSFT
+// #define KC_RSFT MT(MOD_LSFT, KC_EQL)
+
+
+// hybrid right-gui & scroll lock (mapped to Compose in OS)
+#undef KC_RCTL
+#define KC_RCTL MT(MOD_LCTL, KC_SLCK)
+
+// keymaps
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT },
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT},
+ {KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL}
+},
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = {
+ {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
+ {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT },
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT},
+ {KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL}
+},
+
+/* Workman
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | D | R | W | B | J | F | U | P | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | H | T | G | Y | N | E | O | I |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | M | C | V | K | K | , | . | / |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt | Punc | Num | Space | Func |Emoji |AltGr | GUI | Ctrl |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_WORKMAN] = {
+ {KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_BSPC},
+ {KC_ESC, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_ENT },
+ {KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT},
+ {KC_LCTL, KC_LGUI, KC_LALT, PUNC, NUM, KC_SPC, KC_SPC, FUNC, EMOJI, KC_RALT, KC_RGUI, KC_RCTL}
+},
+
+/* Punc
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | ` |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | \ | - | = | < | > | ( | ) | ' | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | _ | + | { | } | [ | ] | " | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_PUNC] = {
+ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_GRV },
+ {XXXXXXX, XXXXXXX, KC_BSLS, KC_MINS, KC_EQL, KC_LABK, KC_RABK, KC_LPRN, KC_RPRN, KC_QUOT, XXXXXXX, XXXXXXX},
+ {XXXXXXX, XXXXXXX, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_DQUO, XXXXXXX, XXXXXXX},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* Num
+ * ,-----------------------------------------------------------------------------------.
+ * | ^ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | @ | A | B | C | ( | ) | 4 | 5 | 6 | : |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | & | # | D | E | F | [ | ] | 1 | 2 | 3 | / | * |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | x | | | 0 | , | . | + | - |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_NUM] = {
+ {KC_CIRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ { KC_ESC, KC_AT, S(KC_A), S(KC_B), S(KC_C), KC_LPRN, KC_RPRN, KC_4, KC_5, KC_6, KC_COLN, KC_ENT},
+ {KC_AMPR, KC_HASH, S(KC_D), S(KC_E), S(KC_F), KC_LBRC, KC_RBRC, KC_1, KC_2, KC_3, KC_SLSH, KC_ASTR},
+ {_______, _______, _______, KC_X, _______, KC_SPC, KC_SPC, KC_0, KC_COMM, KC_DOT, KC_PLUS, KC_MINS}
+},
+
+/* Func
+ * ,-----------------------------------------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | | | PgUp | Up | PgDn | PgUp | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | F5 | F6 | F7 | F8 |PrtSc | | Left | Down | Right| PgDn | Ins |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F9 | F10 | F11 | F12 | | | | Home | End | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FUNC] = {
+ {XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL},
+ {XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8,KC_PSCREEN,XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_INS},
+ {_______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* Emoji
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_EMOJI] = {
+ {X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW)},
+ {X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS)},
+ {X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH)},
+ { X(POO), X(EYES),X(HUNRD), _______,X(SKULL),X(HORNS), X(HALO), X(FEAR), _______,X(YUMMY),X(DISAP),X(NOEVK)}
+},
+
+/* GUI
+ * ,-----------------------------------------------------------------------------------.
+ * | | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |Linux | | Vol- | Mute | Vol+ | | | D- | | D+ | |Qwerty|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Win | | Prev | Play | Next | | | | | | |Colmak|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | OSX | | | | | BL- | BL+ | | | | |Workmn|
+ * `-----------------------------------------------------------------------------------'
+ */
+[_GUI] = {
+ {_______, LGUI(KC_1),LGUI(KC_2),LGUI(KC_3),LGUI(KC_4),LGUI(KC_5),LGUI(KC_6),LGUI(KC_7),LGUI(KC_8),LGUI(KC_9),LGUI(KC_0), _______},
+ { LINUX, _______, KC_VOLD, KC_MUTE, KC_VOLU,_______,_______,KC_WWW_BACK,_______,KC_WWW_FORWARD,_______, QWERTY},
+ { WIN, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______, _______, _______, COLEMAK},
+ { OSX, _______, _______, _______, _______, BL_DEC, BL_INC, _______, _______, _______, _______, WORKMAN}
+},
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_workman[][2] = SONG(DVORAK_SOUND);
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+float tone_linux[][2] = SONG(CAPS_LOCK_ON_SOUND);
+float tone_windows[][2] = SONG(SCROLL_LOCK_ON_SOUND);
+float tone_osx[][2] = SONG(NUM_LOCK_ON_SOUND);
+float tone_click[][2] = SONG(MUSICAL_NOTE(_F3, 2));
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ // faux clicky
+ if (record->event.pressed) PLAY_NOTE_ARRAY(tone_click, false, 0);
+
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case WORKMAN:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_workman, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_WORKMAN);
+ }
+ return false;
+ break;
+ case PUNC:
+ if (record->event.pressed) {
+ layer_on(_PUNC);
+ update_tri_layer(_PUNC, _EMOJI, _GUI);
+ } else {
+ layer_off(_PUNC);
+ update_tri_layer(_PUNC, _EMOJI, _GUI);
+ }
+ return false;
+ break;
+ case EMOJI:
+ if (record->event.pressed) {
+ layer_on(_EMOJI);
+ update_tri_layer(_PUNC, _EMOJI, _GUI);
+ } else {
+ layer_off(_EMOJI);
+ update_tri_layer(_PUNC, _EMOJI, _GUI);
+ }
+ return false;
+ break;
+ case NUM:
+ if (record->event.pressed) {
+ layer_on(_NUM);
+ } else {
+ layer_off(_NUM);
+ }
+ return false;
+ break;
+ case FUNC:
+ if (record->event.pressed) {
+ layer_on(_FUNC);
+ } else {
+ layer_off(_FUNC);
+ }
+ return false;
+ break;
+ case LINUX:
+ set_unicode_input_mode(UC_LNX);
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_linux, false, 0);
+ #endif
+ return false;
+ break;
+ case WIN:
+ set_unicode_input_mode(UC_WINC);
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_windows, false, 0);
+ #endif
+ return false;
+ break;
+ case OSX:
+ set_unicode_input_mode(UC_OSX);
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_osx, false, 0);
+ #endif
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+ set_unicode_input_mode(UC_LNX);
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+ PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+#endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/priyadi/readme.md b/keyboards/planck/keymaps/priyadi/readme.md
new file mode 100644
index 000000000..99bdd9d9b
--- /dev/null
+++ b/keyboards/planck/keymaps/priyadi/readme.md
@@ -0,0 +1,11 @@
+# Priyadi's Planck Layout
+
+Features:
+
+- Supports QWERTY, Colemak and Workman layouts.
+- Cursor and nav cluster on home row.
+- Hybrid number row and numpad, located on home row.
+- Number layer supports hexadecimal input.
+- Left and right side modifiers.
+- Emoji layer. An entire layer filled with common emojis.
+- Faux-clickey (poor man's replacement for Cherry blue switches) \ No newline at end of file
diff --git a/keyboards/planck/keymaps/pvc/Makefile b/keyboards/planck/keymaps/pvc/Makefile
index 0b2f060de..c92ca1bff 100644
--- a/keyboards/planck/keymaps/pvc/Makefile
+++ b/keyboards/planck/keymaps/pvc/Makefile
@@ -1,12 +1,15 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
+# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
+CONSOLE_ENABLE = yes # 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
@@ -21,4 +24,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
-endif \ No newline at end of file
+endif
diff --git a/keyboards/planck/keymaps/pvc/config.h b/keyboards/planck/keymaps/pvc/config.h
index c857a3e89..1004c8b99 100644
--- a/keyboards/planck/keymaps/pvc/config.h
+++ b/keyboards/planck/keymaps/pvc/config.h
@@ -59,13 +59,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* ws2812 RGB LED */
-#define RGB_DI_PIN D1
-#define RGBLIGHT_TIMER
-#define RGBLED_NUM 28 // Number of LEDs
-#define RGBLIGHT_HUE_STEP 10
-#define RGBLIGHT_SAT_STEP 17
-#define RGBLIGHT_VAL_STEP 17
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_BREATHING
/*
* Feature disable options
@@ -73,10 +68,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/* disable debug print */
-//#define NO_DEBUG
+#ifndef NO_DEBUG
+# define NO_DEBUG
+#endif
/* disable print */
-//#define NO_PRINT
+// #ifndef NO_PRINT
+// # define NO_PRINT
+// #endif
+
+/* Only print user print statements */
+#define USER_PRINT
+
/* disable action features */
//#define NO_ACTION_LAYER
diff --git a/keyboards/planck/keymaps/pvc/keymap.c b/keyboards/planck/keymaps/pvc/keymap.c
index 2fc5f0da1..6ad95832d 100644
--- a/keyboards/planck/keymaps/pvc/keymap.c
+++ b/keyboards/planck/keymaps/pvc/keymap.c
@@ -2,48 +2,59 @@
#include "action_layer.h"
#include "eeconfig.h"
#include "led.h"
+#include "mousekey.h"
#ifdef AUDIO_ENABLE
#include "audio.h"
#include "song_list.h"
#endif
-#define LAYER_QWERTY 0
-#define LAYER_COLEMAK 1
-#define LAYER_DVORAK 2
-#define LAYER_UPPER 3
-#define LAYER_LOWER 4
-#define LAYER_FUNCTION 5
-#define LAYER_MOUSE 6
-#define LAYER_ADJUST 7
-
-#define MACRO_QWERTY 0
-#define MACRO_COLEMAK 1
-#define MACRO_DVORAK 2
-#define MACRO_UPPER 3
-#define MACRO_LOWER 4
-#define MACRO_FUNCTION 5
-#define MACRO_MOUSE 6
-#define MACRO_TIMBRE_1 7
-#define MACRO_TIMBRE_2 8
-#define MACRO_TIMBRE_3 9
-#define MACRO_TIMBRE_4 10
-#define MACRO_TEMPO_U 11
-#define MACRO_TEMPO_D 12
-#define MACRO_TONE_DEFAULT 13
-#define MACRO_MUSIC_TOGGLE 14
-#define MACRO_AUDIO_TOGGLE 16
-#define MACRO_INC_VOICE 18
-#define MACRO_DEC_VOICE 19
-#define MACRO_BACKLIGHT 20
-#define MACRO_BREATH_TOGGLE 21
-#define MACRO_BREATH_SPEED_INC 23
-#define MACRO_BREATH_SPEED_DEC 24
-#define MACRO_BREATH_DEFAULT 25
+enum keyboard_layers {
+ LAYER_QWERTY = 0,
+ LAYER_UPPER,
+ LAYER_LOWER,
+ LAYER_FUNCTION,
+ LAYER_MOUSE,
+ LAYER_ADJUST,
+};
+enum keyboard_macros {
+ MACRO_QWERTY = 0,
+ MACRO_UPPER,
+ MACRO_LOWER,
+ MACRO_FUNCTION,
+ MACRO_MOUSE,
+ MACRO_TIMBRE_1,
+ MACRO_TIMBRE_2,
+ MACRO_TIMBRE_3,
+ MACRO_TIMBRE_4,
+ MACRO_TEMPO_U,
+ MACRO_TEMPO_D,
+ MACRO_TONE_DEFAULT,
+ MACRO_MUSIC_TOGGLE,
+ MACRO_AUDIO_TOGGLE,
+ MACRO_INC_VOICE,
+ MACRO_DEC_VOICE,
+ MACRO_BACKLIGHT,
+ MACRO_BREATH_TOGGLE,
+ MACRO_BREATH_SPEED_INC,
+ MACRO_BREATH_SPEED_DEC,
+ MACRO_BREATH_DEFAULT,
+ MACRO_MOUSE_MOVE_UL,
+ MACRO_MOUSE_MOVE_UR,
+ MACRO_MOUSE_MOVE_DL,
+ MACRO_MOUSE_MOVE_DR,
+ MACRO_HELP_1,
+ MACRO_HELP_2,
+ MACRO_HELP_3,
+ MACRO_HELP_4,
+ MACRO_HELP_5,
+ MACRO_HELP_6,
+ MACRO_HELP_7,
+ MACRO_HELP_8,
+ MACRO_HELP_9,
+};
#define M_QWRTY M(MACRO_QWERTY)
-#define M_COLMK M(MACRO_COLEMAK)
-#define M_DVORK M(MACRO_DVORAK)
#define M_UPPER M(MACRO_UPPER)
#define M_LOWER M(MACRO_LOWER)
#define M_FUNCT M(MACRO_FUNCTION)
@@ -60,6 +71,19 @@
#define M_BSPDU M(MACRO_BREATH_SPEED_INC)
#define M_BSPDD M(MACRO_BREATH_SPEED_DEC)
#define M_BDFLT M(MACRO_BREATH_DEFAULT)
+#define M_MS_UL M(MACRO_MOUSE_MOVE_UL)
+#define M_MS_UR M(MACRO_MOUSE_MOVE_UR)
+#define M_MS_DL M(MACRO_MOUSE_MOVE_DL)
+#define M_MS_DR M(MACRO_MOUSE_MOVE_DR)
+#define M_HELP1 M(MACRO_HELP_1)
+#define M_HELP2 M(MACRO_HELP_2)
+#define M_HELP3 M(MACRO_HELP_3)
+#define M_HELP4 M(MACRO_HELP_4)
+#define M_HELP5 M(MACRO_HELP_5)
+#define M_HELP6 M(MACRO_HELP_6)
+#define M_HELP7 M(MACRO_HELP_7)
+#define M_HELP8 M(MACRO_HELP_8)
+#define M_HELP9 M(MACRO_HELP_9)
#define VC_UP M(MACRO_INC_VOICE)
@@ -77,6 +101,7 @@
#define SC_ACLS LALT(KC_F4)
#define SC_CCLS LCTL(KC_F4)
+#define TG_NKRO MAGIC_TOGGLE_NKRO
#define OS_SHFT KC_FN0
#define _______ KC_TRNS
@@ -86,146 +111,108 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* QWERTY
- * .-----------------------------------------------------------------------------------------------------------.
- * | TAB | Q | W | E | R | T | Y | U | I | O | P | BACKSP |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | ESC | A | S | D | F | G | H | J | K | L | ; | ' |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | LSHIFT | Z | X | C | V | B | N | M | , | . | UP | ENTER |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | LCTRL | LWIN | FN | LALT | UPPER | SPACE | SPACE | LOWER | SHIFT | LEFT | DOWN | RIGHT |
- * '-----------------------------------------------------------------------------------------------------------'
- */
-
- [LAYER_QWERTY] = { // QWERTY
- { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC },
- { KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT },
- { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_ENT },
- { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_LEFT, KC_DOWN, KC_RGHT },
- },
-
-/* COLEMAK
- * .-----------------------------------------------------------------------------------------------------------.
- * | TAB | Q | W | F | P | G | J | L | U | Y | ; | ESC |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | BACKSP | A | R | S | T | D | H | N | E | I | O | ' |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | LSHIFT | Z | X | C | V | B | K | M | , | . | UP | ENTER |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | LCTRL | LWIN | FN | LALT | UPPER | SPACE | SPACE | LOWER | SHIFT | LEFT | DOWN | RIGHT |
- * '-----------------------------------------------------------------------------------------------------------'
- */
-
- [LAYER_COLEMAK] = { // COLEMAK
- { KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_ESC },
- { KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT },
- { KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_UP, KC_ENT },
- { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, OS_SHFT, KC_LEFT, KC_DOWN, KC_RGHT },
- },
-
-/* DVORAK
- * .-----------------------------------------------------------------------------------------------------------.
- * | TAB | ' | , | . | P | Y | F | G | C | R | L | BACKSP |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | ESC | A | O | E | U | I | D | H | T | N | S | / |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | LSHIFT | ; | Q | J | K | X | B | M | W | V | Z | ENTER |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | LCTRL | LWIN | FN | LALT | UPPER | SPACE | SPACE | LOWER | UP | DOWN | LEFT | RIGHT |
- * '-----------------------------------------------------------------------------------------------------------'
- */
-
- [LAYER_DVORAK] = { // DVORAK
- { KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC },
- { KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH },
- { KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
- { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC, KC_SPC, M_LOWER, KC_UP, KC_DOWN, KC_LEFT, KC_RGHT },
- },
-
-/* UPPER
- * .-----------------------------------------------------------------------------------------------------------.
- * | PRINT | F1 | F2 | F3 | F4 | NUM LK | / | 7 | 8 | 9 | - | DEL |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | CAP LK | F5 | F6 | F7 | F8 | SCR LK | * | 4 | 5 | 6 | + | INS |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | | F9 | F10 | F11 | F12 | PAUSE | | 1 | 2 | 3 | ENTER | HOME |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
- * | | | | | | 0 | 0 | | RALT | . | ENTER | END |
- * '-----------------------------------------------------------------------------------------------------------'
- */
-
- [LAYER_UPPER] = { // UPPER
- { KC_PSCR, KC_F1, KC_F2, KC_F3, KC_F4, KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, KC_DEL },
- { KC_CAPS, KC_F5, KC_F6, KC_F7, KC_F8, KC_SLCK, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_INS },
- { _______, KC_F9, KC_F10, KC_F11, KC_F12, KC_PAUS, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, KC_HOME },
- { _______, _______, _______, _______, _______, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, KC_END },
- },
-
-/* LOWER
- * .-----------------------------------------------------------------------------------------------------------.
- * | | $ | { | [ | ( | % | # | ) | ] | } | @ | PG UP |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | | ^ | * | + | - | ; | : | _ | ' | " | ` | PG DN |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | | | | & | ! | ~ | / | \ | = | < | > | ? | HOME |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
- * | | | | | | | | | | | | END |
- * '-----------------------------------------------------------------------------------------------------------'
- */
-
- [LAYER_LOWER] = { // LOWER
- { _______, KC_DLR, KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT, KC_PGUP },
- { _______, KC_CIRC, KC_ASTR, KC_PPLS, KC_PMNS, KC_SCLN, KC_COLN, KC_UNDS, KC_QUOT, KC_DQT, KC_GRV, KC_PGDN },
- { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SLSH, KC_BSLS, KC_EQL, KC_LT, KC_GT, KC_QUES, KC_HOME },
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END },
- },
-
-
-/* FUNCTION
- * .-----------------------------------------------------------------------------------------------------------.
- * | NUM LK | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | PAUSE |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | CAP LK | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | PRINT |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | SCR LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MUTE |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | LCTRL | LWIN | FN | LALT | UPPER | PLAY | PLAY | LOWER | VOL UP | VOL DN | NEXT | PREV |
- * '-----------------------------------------------------------------------------------------------------------'
- */
- [LAYER_FUNCTION] = { // FUNCTION
- { KC_NLCK, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PAUS },
- { KC_CAPS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_PSCR },
- { KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE },
- { _______, _______, _______, _______, _______, KC_MPLY, KC_MPLY, _______, KC_VOLU, KC_VOLD, KC_MPRV, KC_MNXT },
- },
-
-#ifdef MOUSEKEY_ENABLE
-
- [LAYER_MOUSE] = { // MOUSE
- { KC_ESC, KC_ACL0, KC_ACL1, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC },
- { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
- { _______, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_WH_U, KC_WH_D },
- { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, KC_MS_U, KC_MS_D, KC_MS_L, KC_MS_R },
- },
-
-#endif
-
- [LAYER_ADJUST] = { // ADJUST
- { _______, TIMBR_1, TIMBR_2, TIMBR_3, TIMBR_4, TMPO_UP, TMPO_DN, TMPO_DF, _______, _______, MU_TOG, AU_TOG },
- { _______, M_QWRTY, M_COLMK, M_DVORK, _______, _______, _______, _______, _______, _______, _______, _______ },
- { _______, _______, _______, _______, M_BACKL, RESET, _______, M_MOUSE, _______, _______, MUV_IN, _______ },
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, MUV_DE, _______ },
- },
-
-/*
- [LAYER_EMPTY] = {
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, },
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, },
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, },
- { _______, _______, _______, _______, _______, ________________, _______, _______, _______, _______, _______, },
- },
+/* LAYER = LAYER_QWERTY
+ .-----------------------------------------------------------------------------------------------------------.
+ | TAB | Q | W | E | R | T | Y | U | I | O | P | BACKSP |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ESC | A | S | D | F | G | H | J | K | L | ; | ' |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | LSHIFT | Z | X | C | V | B | N | M | , | . | UP | ENTER |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | LCTRL | LWIN | FN | LALT | UPPER | SPACE | SPACE | LOWER | OSHIFT | LEFT | DOWN | RIGHT |
+ '-----------------------------------------------------------------------------------------------------------'
*/
+[LAYER_QWERTY] = {
+ { KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSPC },
+ { KC_ESC , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT },
+ { KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_UP , KC_ENT },
+ { KC_LCTL, KC_LGUI, M_FUNCT, KC_LALT, M_UPPER, KC_SPC , KC_SPC , M_LOWER, OS_SHFT, KC_LEFT, KC_DOWN, KC_RGHT }
+},
+/* LAYER = LAYER_UPPER
+ .-----------------------------------------------------------------------------------------------------------.
+ | PRINT | F1 | F2 | F3 | F4 | NUM LK | KP / | KP 7 | KP 8 | KP 9 | KP - | DEL |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | PAUSE | F5 | F6 | F7 | F8 | SCR LK | KP * | KP 4 | KP 5 | KP 6 | KP + | INS |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ______ | F9 | F10 | F11 | F12 | PAUSE | KP 0 | KP 1 | KP 2 | KP 3 | KP ENT | HOME |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ______ | ______ | ______ | ______ | UPPER | KP 0 | KP 0 | ______ | RALT | KP . | KP ENT | END |
+ '-----------------------------------------------------------------------------------------------------------'
+*/
+[LAYER_UPPER] = {
+ { KC_PSCR, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, KC_DEL },
+ { KC_PAUS, KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_SLCK, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_INS },
+ { _______, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PAUS, KC_KP_0, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, KC_HOME },
+ { _______, _______, _______, _______, M_UPPER, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, KC_END }
+},
+/* LAYER = LAYER_LOWER
+ .-----------------------------------------------------------------------------------------------------------.
+ | ______ | $ | { | [ | ( | % | # | ) | ] | } | @ | PG UP |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ______ | ^ | * | + | - | / | \ | _ | ' | " | ` | PG DN |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ______ | | | & | ! | ~ | ; | : | = | < | > | ? | HOME |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | LOWER | ______ | ______ | ______ | END |
+ '-----------------------------------------------------------------------------------------------------------'
+*/
+[LAYER_LOWER] = {
+ { _______, KC_DLR , KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT , KC_PGUP },
+ { _______, KC_CIRC, KC_ASTR, KC_PLUS, KC_MINS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT , KC_GRV , KC_PGDN },
+ { _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL , KC_LT , KC_GT , KC_QUES, KC_HOME },
+ { _______, _______, _______, _______, _______, _______, _______, M_LOWER, _______, _______, _______, KC_END }
+},
+/* LAYER = LAYER_FUNCTION
+ .-----------------------------------------------------------------------------------------------------------.
+ | XXXXXX | F13 | F14 | F15 | F16 | NUM LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | XXXXXX | F17 | F18 | F19 | F20 | SCR LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ______ | F21 | F22 | F23 | F24 | CAP LK | XXXXXX | XXXXXX | XXXXXX | XXXXXX | VOL UP | MUTE |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ______ | ______ | FN | ______ | ______ | PLAY | PLAY | ______ | ______ | PREV | VOL DN | NEXT |
+ '-----------------------------------------------------------------------------------------------------------'
+*/
+[LAYER_FUNCTION] = {
+ { XXXXXXX, KC_F13 , KC_F14 , KC_F15 , KC_F16 , KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+ { XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+ { _______, KC_F21 , KC_F22 , KC_F23 , KC_F24 , KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, KC_MUTE },
+ { _______, _______, M_FUNCT, _______, _______, KC_MPLY, KC_MPLY, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT }
+},
+/* LAYER = LAYER_MOUSE
+ .-----------------------------------------------------------------------------------------------------------.
+ | ESC | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS UL | MS U | MS UR | MS WHL | MS WHR |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | XXXXXX | MS BT5 | MS BT4 | MS BT3 | MS BT2 | XXXXXX | XXXXXX | MS L | XXXXXX | MS R | XXXXXX | MS WHU |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ______ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | MS DL | MS D | MS DR | MS U | MS WHD |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | ______ | ______ | ______ | ______ | ______ | MS BT1 | MS BT1 | ______ | ______ | MS L | MS D | MS R |
+ '-----------------------------------------------------------------------------------------------------------'
+*/
+[LAYER_MOUSE] = {
+ { KC_ESC , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_UL, KC_MS_U, M_MS_UR, KC_WH_L, KC_WH_R },
+ { XXXXXXX, KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, XXXXXXX, XXXXXXX, KC_MS_L, XXXXXXX, KC_MS_R, XXXXXXX, KC_WH_U },
+ { _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_MS_DL, KC_MS_D, M_MS_DR, KC_MS_U, KC_WH_D },
+ { _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R }
+},
+/* LAYER = LAYER_ADJUST
+ .-----------------------------------------------------------------------------------------------------------.
+ | XXXXXX | HELP 1 | HELP 2 | HELP 3 | HELP 4 | HELP 5 | HELP 6 | HELP 7 | HELP 8 | HELP 9 | MUSIC | AUDIO |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | XXXXXX | BRTOG | BRSPD+ | BRSPD- | BRDFLT | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | XXXXXX | QWERTY | XXXXXX | XXXXXX | BACKLT | RESET | XXXXXX | MOUSE | XXXXXX | XXXXXX | VOICE+ | XXXXXX |
+ |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | UPPER | XXXXXX | XXXXXX | LOWER | XXXXXX | TEMPO- | VOICE- | TEMPO+ |
+ '-----------------------------------------------------------------------------------------------------------'
+*/
+[LAYER_ADJUST] = {
+ { XXXXXXX, M_HELP1, M_HELP2, M_HELP3, M_HELP4, M_HELP5, M_HELP6, M_HELP7, M_HELP8, M_HELP9, MU_TOG , AU_TOG },
+ { XXXXXXX, M_BRTOG, M_BSPDU, M_BSPDD, M_BDFLT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
+ { XXXXXXX, M_QWRTY, XXXXXXX, XXXXXXX, M_BACKL, RESET , XXXXXXX, M_MOUSE, XXXXXXX, XXXXXXX, MUV_IN , XXXXXXX },
+ { XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, TMPO_DN, MUV_DE , TMPO_UP }
+},
};
@@ -234,10 +221,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
float tone_my_startup[][2] = SONG(ODE_TO_JOY);
float tone_my_goodbye[][2] = SONG(ROCK_A_BYE_BABY);
-float tone_qwerty[][2] = SONG(QWERTY_SOUND);
-float tone_dvorak[][2] = SONG(DVORAK_SOUND);
-float tone_colemak[][2] = SONG(COLEMAK_SOUND);
-
float tone_audio_on[][2] = SONG(CLOSE_ENCOUNTERS_5_NOTE);
float tone_music_on[][2] = SONG(DOE_A_DEER);
float tone_caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND);
@@ -257,7 +240,7 @@ void persistant_default_layer_set(uint16_t default_layer)
}
const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_MODS_ONESHOT(MOD_LSFT),
+ [0] = ACTION_MODS_ONESHOT(MOD_RSFT),
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
@@ -267,46 +250,101 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
switch(id)
{
- case MACRO_QWERTY:
+ case MACRO_HELP_1:
if (record->event.pressed)
{
- persistant_default_layer_set(1UL<<LAYER_QWERTY);
- #ifdef AUDIO_ENABLE
- PLAY_NOTE_ARRAY(tone_qwerty, false, STACCATO);
- #endif /* AUDIO_ENABLE */
+ uprintf("1");
}
break;
- case MACRO_COLEMAK:
+ case MACRO_HELP_2:
if (record->event.pressed)
{
- persistant_default_layer_set(1UL<<LAYER_COLEMAK);
- #ifdef AUDIO_ENABLE
- PLAY_NOTE_ARRAY(tone_colemak, false, STACCATO);
- #endif /* AUDIO_ENABLE */
+ uprintf("2");
}
break;
- case MACRO_DVORAK:
+ case MACRO_HELP_3:
if (record->event.pressed)
{
- persistant_default_layer_set(1UL<<LAYER_DVORAK);
- #ifdef AUDIO_ENABLE
- PLAY_NOTE_ARRAY(tone_dvorak, false, STACCATO);
- #endif /* AUDIO_ENABLE */
+ uprintf("3");
}
break;
- case MACRO_LOWER:
+ case MACRO_HELP_4:
if (record->event.pressed)
{
- layer_on(LAYER_LOWER);
- update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
+ uprintf("4");
}
- else
+ break;
+
+ case MACRO_HELP_5:
+ if (record->event.pressed)
{
- layer_off(LAYER_LOWER);
- update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
+ uprintf("5");
+ }
+ break;
+
+ case MACRO_HELP_6:
+ if (record->event.pressed)
+ {
+ uprintf("6");
+ }
+ break;
+
+ case MACRO_HELP_7:
+ if (record->event.pressed)
+ {
+ uprintf("7");
+ }
+ break;
+
+ case MACRO_HELP_8:
+ if (record->event.pressed)
+ {
+ uprintf("8");
+ }
+ break;
+
+ case MACRO_HELP_9:
+ if (record->event.pressed)
+ {
+ uprintf("9");
+ }
+ break;
+
+ case MACRO_BREATH_TOGGLE:
+ if (record->event.pressed)
+ {
+ breathing_toggle();
+ }
+ break;
+
+ case MACRO_BREATH_SPEED_INC:
+ if (record->event.pressed)
+ {
+ breathing_speed_inc(1);
+ }
+ break;
+
+ case MACRO_BREATH_SPEED_DEC:
+ if (record->event.pressed)
+ {
+ breathing_speed_dec(1);
+ }
+ break;
+
+ case MACRO_BREATH_DEFAULT:
+ if (record->event.pressed)
+ {
+ breathing_defaults();
+ }
+ break;
+
+ case MACRO_QWERTY:
+ if (record->event.pressed)
+ {
+ persistant_default_layer_set(1UL<<LAYER_QWERTY);
}
break;
@@ -314,6 +352,8 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
if (record->event.pressed)
{
layer_on(LAYER_UPPER);
+ breathing_speed_set(2);
+ breathing_pulse();
update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
}
else
@@ -323,13 +363,32 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
}
break;
+ case MACRO_LOWER:
+ if (record->event.pressed)
+ {
+ layer_on(LAYER_LOWER);
+ breathing_speed_set(2);
+ breathing_pulse();
+ update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
+ }
+ else
+ {
+ layer_off(LAYER_LOWER);
+ update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
+ }
+ break;
+
case MACRO_FUNCTION:
if (record->event.pressed)
{
+ breathing_speed_set(3);
+ breathing_enable();
layer_on(LAYER_FUNCTION);
}
else
{
+ breathing_speed_set(1);
+ breathing_self_disable();
layer_off(LAYER_FUNCTION);
}
break;
@@ -352,6 +411,58 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
}
break;
+ case MACRO_MOUSE_MOVE_UL:
+ if (record->event.pressed)
+ {
+ mousekey_on(KC_MS_UP);
+ mousekey_on(KC_MS_LEFT);
+ }
+ else
+ {
+ mousekey_off(KC_MS_UP);
+ mousekey_off(KC_MS_LEFT);
+ }
+ break;
+
+ case MACRO_MOUSE_MOVE_UR:
+ if (record->event.pressed)
+ {
+ mousekey_on(KC_MS_UP);
+ mousekey_on(KC_MS_RIGHT);
+ }
+ else
+ {
+ mousekey_off(KC_MS_UP);
+ mousekey_off(KC_MS_RIGHT);
+ }
+ break;
+
+ case MACRO_MOUSE_MOVE_DL:
+ if (record->event.pressed)
+ {
+ mousekey_on(KC_MS_DOWN);
+ mousekey_on(KC_MS_LEFT);
+ }
+ else
+ {
+ mousekey_off(KC_MS_DOWN);
+ mousekey_off(KC_MS_LEFT);
+ }
+ break;
+
+ case MACRO_MOUSE_MOVE_DR:
+ if (record->event.pressed)
+ {
+ mousekey_on(KC_MS_DOWN);
+ mousekey_on(KC_MS_RIGHT);
+ }
+ else
+ {
+ mousekey_off(KC_MS_DOWN);
+ mousekey_off(KC_MS_RIGHT);
+ }
+ break;
+
#endif /* MOUSEKEY_ENABLE */
#ifdef AUDIO_ENABLE
diff --git a/keyboards/planck/keymaps/sgoodwin/Makefile b/keyboards/planck/keymaps/sgoodwin/Makefile
new file mode 100644
index 000000000..b2ca41944
--- /dev/null
+++ b/keyboards/planck/keymaps/sgoodwin/Makefile
@@ -0,0 +1,28 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
+
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = yes # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/sgoodwin/keymap.c b/keyboards/planck/keymaps/sgoodwin/keymap.c
new file mode 100644
index 000000000..4d5d3d7ef
--- /dev/null
+++ b/keyboards/planck/keymaps/sgoodwin/keymap.c
@@ -0,0 +1,233 @@
+// This is sgoodwin's layout file for the Quantum project.
+// It doesn't have Plover or Dvorak layers because he doesn't use that.
+// It Also doesn't allow for swapping alt with CMD because that only happens in error.
+
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 1
+#define _COLEMAK 0
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum planck_keycodes {
+ COLEMAK = SAFE_RANGE,
+ QWERTY,
+ LOWER,
+ RAISE,
+ BACKLIT,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |SHEnt |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Hyper| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = {
+ {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
+ {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_RSFT, KC_ENT) },
+ {ALL_T(KC_NO), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |SHEnt |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Hyper| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_RSFT, KC_ENT) },
+ {ALL_T(KC_NO), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
+ {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______},
+ {BACKLIT, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______},
+ {BACKLIT, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff| | |Qwerty|Colemk| | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+ {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
+ {_______, _______, _______, AU_ON, AU_OFF, _______, _______, QWERTY, COLEMAK, _______, _______, _______},
+ {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+}
+
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+ PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
diff --git a/keyboards/planck/keymaps/sgoodwin/readme.md b/keyboards/planck/keymaps/sgoodwin/readme.md
new file mode 100644
index 000000000..dfa88f380
--- /dev/null
+++ b/keyboards/planck/keymaps/sgoodwin/readme.md
@@ -0,0 +1,10 @@
+# sgoodwin's Planck Layout
+
+Includes:
+
+1. No Dvorak or Plover
+2. No alt-swapping
+3. Right enter is shift when held down, enter when tapped.
+4. Bottom left corner in normal layers is Hyper and not brightness control.
+5. Brightness is instead in the bottom corner on raise/lower.
+
diff --git a/keyboards/planck/keymaps/tak3over/Makefile b/keyboards/planck/keymaps/tak3over/Makefile
index 581e08cd0..b2ca41944 100644
--- a/keyboards/planck/keymaps/tak3over/Makefile
+++ b/keyboards/planck/keymaps/tak3over/Makefile
@@ -1,3 +1,6 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
# Build Options
@@ -22,4 +25,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
-endif \ No newline at end of file
+endif
diff --git a/keyboards/planck/keymaps/thermal_printer/Makefile b/keyboards/planck/keymaps/thermal_printer/Makefile
new file mode 100644
index 000000000..9477d1179
--- /dev/null
+++ b/keyboards/planck/keymaps/thermal_printer/Makefile
@@ -0,0 +1,29 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
+
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = yes # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+PRINTING_ENABLE = yes
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/thermal_printer/config.h b/keyboards/planck/keymaps/thermal_printer/config.h
new file mode 100644
index 000000000..430b6493c
--- /dev/null
+++ b/keyboards/planck/keymaps/thermal_printer/config.h
@@ -0,0 +1,23 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+# 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 & _BV(UDRE1))
+# define SERIAL_UART_INIT() do { \
+ /* baud rate */ \
+ UBRR1L = SERIAL_UART_UBRR; \
+ /* baud rate */ \
+ UBRR1H = SERIAL_UART_UBRR >> 8; \
+ /* enable TX */ \
+ UCSR1B = _BV(TXEN1); \
+ /* 8-bit data */ \
+ UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
+ sei(); \
+ } while(0)
+
+ #endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/thermal_printer/keymap.c b/keyboards/planck/keymaps/thermal_printer/keymap.c
new file mode 100644
index 000000000..e88059731
--- /dev/null
+++ b/keyboards/planck/keymaps/thermal_printer/keymap.c
@@ -0,0 +1,314 @@
+// 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 "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _PLOVER 5
+#define _ADJUST 16
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ PLOVER,
+ LOWER,
+ RAISE,
+ BACKLIT,
+ EXT_PLV
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
+ {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = {
+ {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
+ {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
+ {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = {
+ {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
+ {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
+ {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
+ {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
+ {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * | # | # | # | # | # | # | # | # | # | # | # | # |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | S | T | P | H | * | * | F | P | L | T | D |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |TogOut| S | K | W | R | * | * | R | B | G | S | Z |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit | | | A | O | | E | U | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = {
+ {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
+ {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC},
+ {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | Print|no prnt | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+ {_______, RESET, _______, PRINT_ON, PRINT_OFF, _______, _______, _______, _______, _______, _______, KC_DEL},
+ {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______},
+ {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+}
+
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_DVORAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ case PLOVER:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_NOTE_ARRAY(tone_plover, false, 0);
+ #endif
+ layer_off(_RAISE);
+ layer_off(_LOWER);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ break;
+ case EXT_PLV:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
+ #endif
+ layer_off(_PLOVER);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+ PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
diff --git a/keyboards/planck/keymaps/thermal_printer/readme.md b/keyboards/planck/keymaps/thermal_printer/readme.md
new file mode 100644
index 000000000..de9680b49
--- /dev/null
+++ b/keyboards/planck/keymaps/thermal_printer/readme.md
@@ -0,0 +1,2 @@
+# The Default Planck Layout
+
diff --git a/keyboards/planck/keymaps/tong92/Makefile b/keyboards/planck/keymaps/tong92/Makefile
new file mode 100644
index 000000000..e6608e74c
--- /dev/null
+++ b/keyboards/planck/keymaps/tong92/Makefile
@@ -0,0 +1,62 @@
+#----------------------------------------------------------------------------
+# 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".
+#----------------------------------------------------------------------------
+# Build Options
+# change to "no" to disable the options, or define them in the makefile.mk in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/tong92/keymap.c b/keyboards/planck/keymaps/tong92/keymap.c
new file mode 100644
index 000000000..2be28fb4f
--- /dev/null
+++ b/keyboards/planck/keymaps/tong92/keymap.c
@@ -0,0 +1,146 @@
+//Author: tong92 <tong92power@gmail.com>
+
+#include "planck.h"
+#ifdef BACKLIGHT_ENABLE
+ #include "backlight.h"
+#endif
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+#define LOWER M(1)
+#define RAISE M(2)
+#define GO_DEFT M(99)
+#
+
+//MIT Layout
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* 0: Qwerty layer (Default)
+* ,-----------------------------------------------------------------------.
+* |Tab | q | w | e | r | t | y | u | i | o | p | BS |
+* |-----------------------------------------------------------------------|
+* |Ctrl | a | s | d | f | g | h | j | k | l | ; |enter|
+* |-----------------------------------------------------------------------|
+* |Shift| z | x | c | v | b | n | m | , | . | / |Shift|
+* |-----------------------------------------------------------------------|
+* | Fn |Ctrl | Win | Alt |Lower| Space |Upper| ' | [ | ] | Alt |
+* `-----------------------------------------------------------------------'
+*/
+[0] ={
+{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+{KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_ENT },
+{KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT},
+{MO(4), KC_RCTL,KC_LGUI,KC_LALT,LOWER,KC_SPC,KC_SPC,RAISE,KC_QUOT,KC_LBRC,KC_RBRC,KC_RALT}
+},
+/* 1: Lower layer
+* ,-----------------------------------------------------------------------.
+* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | BS |
+* |-----------------------------------------------------------------------|
+* | | F1 | F2 | F3 | F4 | F5 | F6 | - | + | [ | ] | \ |
+* |-----------------------------------------------------------------------|
+* | | F7 | F8 | F9 | F10 | F11 | F12 | | HOME| PgUp| UP | PgDo|
+* |-----------------------------------------------------------------------|
+* | | | | | | SPACE |mouse| END | LEFT| DOWN|RIGHT|
+* `-----------------------------------------------------------------------'
+*/
+[1] ={
+{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC },
+{_______,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS,KC_PLUS,KC_LBRC,KC_RBRC,KC_BSLS },
+{_______,KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,KC_F12,_______,KC_HOME,KC_PGUP,KC_UP ,KC_PGDN },
+{XXXXXXX,_______,_______,_______,_______,KC_SPC,KC_SPC,_______,KC_END, KC_LEFT,KC_DOWN,KC_RIGHT}
+},
+/* 2: Upper layer
+* ,-----------------------------------------------------------------------.
+* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | BS |
+* |-----------------------------------------------------------------------|
+* | | F1 | F2 | F3 | F4 | F5 | F6 | _ | = | { | } | | |
+* |-----------------------------------------------------------------------|
+* | | F7 | F8 | F9 | F10 | F11 | F12 | | HOME| PgUp| UP | PgDo|
+* |-----------------------------------------------------------------------|
+* | | | | |mouse| SPACE | | END | LEFT| DOWN|RIGHT|
+* `-----------------------------------------------------------------------'
+*/
+[2] ={
+{KC_TILD,KC_EXLM,KC_AT, KC_HASH,KC_DLR, KC_PERC,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,KC_BSPC },
+{_______,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS,KC_EQL, KC_LCBR,KC_RCBR,KC_PIPE },
+{_______,KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,KC_HOME,KC_PGUP,KC_UP ,KC_PGDN },
+{XXXXXXX,_______,_______,_______,_______,KC_SPC, KC_SPC, _______,KC_END, KC_LEFT,KC_DOWN,KC_RIGHT}
+},
+/* 4: fn layer (Window shortcuts)
+* ,-----------------------------------------------------------------------.
+* | ESC |WinOf|WinUp| | |Sh+Ca| | PgUp| UP | PgDo|PrtSc| DEL |
+* |-----------------------------------------------------------------------|
+* | |WinLe|WinDo|WinRi| |Al+Ca|CapsL| LEFT| DOWN|RIGHT| | |
+* |-----------------------------------------------------------------------|
+* | |WinLW|WinRW| | |Ct+Ca|ScroL| HOME| | END | | |
+* |-----------------------------------------------------------------------|
+* | |DeskL|DeskR|DeskX|Task | ChangeLang| | | | | LED |
+* `-----------------------------------------------------------------------'
+*/
+[4] ={
+{KC_ESC ,LALT(KC_F4) ,LGUI(KC_UP) ,XXXXXXX ,XXXXXXX ,S(KC_CAPS) ,XXXXXXX,KC_PGUP,KC_UP,KC_PGDN,KC_PSCR,KC_DELT},
+{_______,LGUI(KC_LEFT) ,LGUI(KC_DOWN) ,LGUI(KC_RIGHT) ,XXXXXXX ,LALT(KC_CAPS),KC_CAPS,KC_LEFT,KC_DOWN,KC_RIGHT,XXXXXXX,XXXXXXX},
+{_______,LGUI(LSFT(KC_LEFT)),LGUI(LSFT(KC_RIGHT)),XXXXXXX ,XXXXXXX ,LCTL(KC_CAPS),KC_SLCK,KC_HOME,XXXXXXX,KC_END,XXXXXXX,XXXXXXX},
+{KC_TRNS,LGUI(LCTL(KC_LEFT)),LGUI(LCTL(KC_RIGHT)),LGUI(LCTL(KC_F4)),LCTL(LALT(KC_DELT)),LGUI(KC_SPC),LGUI(KC_SPC),XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,M(0)}
+},
+/* 10: mouse layer
+* ,-----------------------------------------------------------------------.
+* | | | |Mo_Up| | | |M_WhL|M_WhU|M_WhR| |RESET|
+* |-----------------------------------------------------------------------|
+* | | |Mo_Le|Mo_Do|Mo_Ri| | |M_Bt1|M_WhD|M_Bt2| | |
+* |-----------------------------------------------------------------------|
+* | | | | | | | |M_AC0|M_AC1|M_AC2| | |
+* |-----------------------------------------------------------------------|
+* | | | | | | GO_DEFT | | | | | |
+* `-----------------------------------------------------------------------'
+*/
+[10] ={
+{XXXXXXX,XXXXXXX,XXXXXXX,KC_MS_U,XXXXXXX,XXXXXXX,XXXXXXX,KC_WH_L,KC_WH_U,KC_WH_R,XXXXXXX,RESET},
+{XXXXXXX,XXXXXXX,KC_MS_L,KC_MS_D,KC_MS_R,XXXXXXX,XXXXXXX,KC_BTN1,KC_WH_D,KC_BTN2,XXXXXXX,XXXXXXX},
+{XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,KC_ACL0,KC_ACL1,KC_ACL2,XXXXXXX,XXXXXXX},
+{XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,GO_DEFT,GO_DEFT,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX}
+}
+
+};
+//Layout END
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ }
+ break;
+ case 1:
+ if (record->event.pressed) {
+ layer_on(1);
+ update_tri_layer(1, 2, 10);
+ } else {
+ layer_off(1);
+ update_tri_layer(1, 2, 10);
+ }
+ break;
+ case 2:
+ if (record->event.pressed) {
+ layer_on(2);
+ update_tri_layer(1, 2, 10);
+ } else {
+ layer_off(2);
+ update_tri_layer(1, 2, 10);
+ }
+ break;
+ case 99:
+ if (record->event.pressed) {
+ layer_off(10);
+ layer_off(1);
+ layer_off(2);
+ layer_on(0);
+ update_tri_layer(0 ,1 ,2);
+ }
+ break;
+ }
+ return MACRO_NONE;
+}; \ No newline at end of file
diff --git a/keyboards/planck/keymaps/tong92/readme.md b/keyboards/planck/keymaps/tong92/readme.md
new file mode 100644
index 000000000..328d005f6
--- /dev/null
+++ b/keyboards/planck/keymaps/tong92/readme.md
@@ -0,0 +1,66 @@
+# The Tong92 Layout
+- MIT Layout
+- my keymap for WIndow User
+- Lower && Upper Hold -> Mouse Layer
+- Mouse Layer : space -> Default Layer
+- No Audio
+
+## 1. Default Layer - Qwerty
+
+ ,-----------------------------------------------------------------------.
+ |Tab | q | w | e | r | t | y | u | i | o | p | BS |
+ |-----------------------------------------------------------------------|
+ |Ctrl | a | s | d | f | g | h | j | k | l | ; |enter|
+ |-----------------------------------------------------------------------|
+ |Shift| z | x | c | v | b | n | m | , | . | / |Shift|
+ |-----------------------------------------------------------------------|
+ | Fn |Ctrl | Win | Alt |Lower| Space |Upper| ' | [ | ] | Alt |
+ `-----------------------------------------------------------------------'
+
+## 2. Lower Layer
+
+ ,-----------------------------------------------------------------------.
+ | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | BS |
+ |-----------------------------------------------------------------------|
+ | | F1 | F2 | F3 | F4 | F5 | F6 | - | + | [ | ] | \ |
+ |-----------------------------------------------------------------------|
+ | | F7 | F8 | F9 | F10 | F11 | F12 | | HOME| PgUp| UP | PgDo|
+ |-----------------------------------------------------------------------|
+ | | | | | | SPACE |mouse| END | LEFT| DOWN|RIGHT|
+ `-----------------------------------------------------------------------'
+
+## 3. Upper Layer
+
+ ,-----------------------------------------------------------------------.
+ | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | BS |
+ |-----------------------------------------------------------------------|
+ | | F1 | F2 | F3 | F4 | F5 | F6 | _ | = | { | } | | |
+ |-----------------------------------------------------------------------|
+ | | F7 | F8 | F9 | F10 | F11 | F12 | | HOME| PgUp| UP | PgDo|
+ |-----------------------------------------------------------------------|
+ | | | | |mouse| SPACE | | END | LEFT| DOWN|RIGHT|
+ `-----------------------------------------------------------------------'
+
+## 4. Fn Layer - Window Shortcuts
+
+ ,-----------------------------------------------------------------------.
+ | ESC |WinOf|WinUp| | |Sh+Ca| | PgUp| UP | PgDo|PrtSc| DEL |
+ |-----------------------------------------------------------------------|
+ | |WinLe|WinDo|WinRi| |Al+Ca|CapsL| LEFT| DOWN|RIGHT| | |
+ |-----------------------------------------------------------------------|
+ | |WinLW|WinRW| | |Ct+Ca|ScroL| HOME| | END | | |
+ |-----------------------------------------------------------------------|
+ | |DeskL|DeskR|DeskX|Task | ChangeLang| | | | | LED |
+ `-----------------------------------------------------------------------'
+
+## 5. Mouse Layer
+
+ ,-----------------------------------------------------------------------.
+ | | | |Mo_Up| | | |M_WhL|M_WhU|M_WhR| |RESET|
+ |-----------------------------------------------------------------------|
+ | | |Mo_Le|Mo_Do|Mo_Ri| | |M_Bt1|M_WhD|M_Bt2| | |
+ |-----------------------------------------------------------------------|
+ | | | | | | | |M_AC0|M_AC1|M_AC2| | |
+ |-----------------------------------------------------------------------|
+ | | | | | |GO_DEFAULT | | | | | |
+ `-----------------------------------------------------------------------' \ No newline at end of file
diff --git a/keyboards/planck/keymaps/vifon/Makefile b/keyboards/planck/keymaps/vifon/Makefile
new file mode 100644
index 000000000..53660a2e7
--- /dev/null
+++ b/keyboards/planck/keymaps/vifon/Makefile
@@ -0,0 +1,28 @@
+# Please remove if no longer applicable
+$(warning THIS FILE MAY BE TOO LARGE FOR YOUR KEYBOARD)
+$(warning Please disable some options in the Makefile to resolve)
+
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = 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 # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/vifon/config.h b/keyboards/planck/keymaps/vifon/config.h
new file mode 100644
index 000000000..9cb0634fb
--- /dev/null
+++ b/keyboards/planck/keymaps/vifon/config.h
@@ -0,0 +1,91 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define MANUFACTURER Ortholinear Keyboards
+#define PRODUCT The Planck Keyboard
+#define DESCRIPTION A compact ortholinear keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/* Planck PCB default pin-out */
+#define MATRIX_ROW_PINS { D0, D5, B5, B6 }
+#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
+#define UNUSED_PINS
+
+#define BACKLIGHT_PIN B7
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * 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
+
+/* prevent the modifiers from being stuck, sacrificing some memory */
+#define PREVENT_STUCK_MODIFIERS
+
+#ifdef SUBPROJECT_rev3
+ #include "rev3/config.h"
+#endif
+#ifdef SUBPROJECT_rev4
+ #include "rev4/config.h"
+#endif
+
+#endif
diff --git a/keyboards/planck/keymaps/vifon/keymap.c b/keyboards/planck/keymaps/vifon/keymap.c
new file mode 100644
index 000000000..80c4a516c
--- /dev/null
+++ b/keyboards/planck/keymaps/vifon/keymap.c
@@ -0,0 +1,187 @@
+// 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 "planck.h"
+#ifdef BACKLIGHT_ENABLE
+# include "backlight.h"
+#endif
+#include "timer.h"
+#include <bootloader.h>
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum userlayer {
+ _QW = 0,
+ _CM,
+ _PP,
+ _PPG,
+ _NM,
+ _LW,
+ _RS,
+ _DL,
+ _DYN,
+};
+
+enum planck_keycodes {
+ KM_LW = SAFE_RANGE,
+ KM_RS,
+ KM_SHLK, /* ShiftLock */
+ KM_RST, /* Reset */
+ KM_NUM, /* Numeric layer */
+ KM_SLP, /* Sleep 250 ms */
+ KM_PPLR, /* Pure Pro layer */
+ DYNAMIC_MACRO_RANGE,
+};
+
+#include "dynamic_macro.h"
+
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QW] = { /* Qwerty */
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_FN0 },
+ {KC_LCTL, MO(_DYN),KC_LGUI, KC_LALT, KM_LW, KC_SPC, KC_SPC, KM_RS, KC_RALT, KC_DOWN, KC_UP, KC_RCTL}
+},
+[_CM] = { /* Colemak */
+ {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
+ {CTL_T(KC_ESC), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_FN0 },
+ {KC_LCTL, MO(_DYN),KC_LGUI, KC_LALT, KM_LW, KC_SPC, KC_SPC, KM_RS, KC_RALT, KC_DOWN, KC_UP, KC_RCTL}
+},
+[_PP] = { /* Pure Pro */
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT },
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_RSFT, KC_UP, KC_RCTL},
+ {KC_LCTL, MO(_DYN),KC_LGUI, KC_LALT, KM_LW, KC_SPC, KC_SPC, KM_RS, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT}
+},
+[_PPG] = { /* Pure Pro: Gaming */
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, DF(_RS), _______, _______},
+ {_______, _______, XXXXXXX, _______, KM_RS , _______, _______, KM_LW , _______, _______, _______, _______},
+},
+[_NM] = { /* Numeric */
+ {KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {KC_LSFT, _______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, _______, KC_FN0 },
+ {_______, _______, _______, _______, _______, KC_SPC, KC_SPC, _______, _______, _______, _______, _______}
+},
+[_LW]= { /* LOWER */
+ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
+ {KC_ESC, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), KM_NUM, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+ {_______, LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), KM_SLP, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_ENT },
+ {_______, BL_TOGG, _______, _______, _______, KC_BTN1, KC_BTN1, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+[_RS]= { /* RAISE */
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL },
+ {KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), KM_PPLR, KM_RST, KC_ENT },
+ {_______, BL_STEP, _______, _______, _______, KC_BTN2, KC_BTN2, _______, KC_MPLY, KC_VOLD, KC_VOLU, _______}
+},
+[_DL]= { /* DUAL */
+ {_______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______, _______, KC_APP, KC_INS, _______, KC_PSCR, _______},
+ {_______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_ACL0, KC_ACL2},
+ {_______, _______, KC_BTN2, KC_BTN3, KC_BTN1, KC_WWW_BACK, KC_WWW_FORWARD, KC_MUTE, _______, _______, _______, _______},
+ {_______, _______, KC_LGUI, KC_LALT, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+[_DYN]= { /* special */
+ {_______, DYN_REC_START1, DYN_MACRO_PLAY1, _______, _______, _______, _______, _______, KC_INS, _______, KC_PSCR, KC_PAUS},
+ {_______, DYN_REC_START2, DYN_MACRO_PLAY2, _______, _______, _______, _______, _______, _______, KC_CAPS, KC_SLCK, KC_NLCK},
+ {KM_SHLK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+};
+
+#undef _______
+
+const uint16_t PROGMEM fn_actions[] = {
+ ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),
+};
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ static uint16_t key_timer;
+
+ if (!process_record_dynamic_macro(keycode, record)) {
+ return false;
+ }
+
+ switch (keycode) {
+ case KM_LW:
+ if (record->event.pressed) {
+ layer_on(_LW);
+ } else {
+ layer_off(_LW);
+ }
+ update_tri_layer(_LW, _RS, _DL);
+ return false;
+ break;
+ case KM_RS:
+ if (record->event.pressed) {
+ layer_on(_RS);
+ } else {
+ layer_off(_RS);
+ }
+ update_tri_layer(_LW, _RS, _DL);
+ return false;
+ break;
+ case KM_SHLK:
+ register_code(KC_LSFT);
+ break;
+ case KM_RST:
+ if (record->event.pressed) {
+ key_timer = timer_read();
+ } else {
+ if (timer_elapsed(key_timer) >= 500) {
+ clear_keyboard();
+ backlight_toggle();
+ _delay_ms(250);
+ backlight_toggle();
+ bootloader_jump();
+ }
+ }
+ break;
+ case KM_PPLR:
+ if (record->event.pressed) {
+ key_timer = timer_read();
+ } else {
+ if (timer_elapsed(key_timer) >= 250) {
+ default_layer_set((1UL << _PP) | (1UL << _PPG));
+ backlight_toggle();
+ _delay_ms(100);
+ backlight_toggle();
+ } else {
+ default_layer_set(1UL << _PP);
+ }
+ }
+ break;
+ case KM_NUM:
+ layer_on(_NM);
+ break;
+ case KM_SLP:
+ if (record->event.pressed) {
+ _delay_ms(250);
+ }
+ break;
+ }
+
+
+ if (record->event.pressed
+ && IS_LAYER_ON(_NM)
+ && keymap_key_to_keycode(_NM, record->event.key) == KC_TRNS) {
+
+ layer_off(_NM);
+ }
+
+ return true;
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ return MACRO_NONE;
+}
diff --git a/keyboards/planck/keymaps/xyverz/keymap.c b/keyboards/planck/keymaps/xyverz/keymap.c
new file mode 100644
index 000000000..192933b18
--- /dev/null
+++ b/keyboards/planck/keymaps/xyverz/keymap.c
@@ -0,0 +1,262 @@
+// 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 "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+ BACKLIT
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
+ {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = {
+ {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
+ {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
+ {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | / |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | - |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z | Shift|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Alt | Left |Right |Lower | Bksp |Space |Raise | Up | Down | GUI |Enter |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = {
+ {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH},
+ {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS},
+ {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_T(KC_ENT)},
+ {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT }
+},
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | Mute | Vol- | Vol+ | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| | Home | End | | Del | Ins | | PgUp | PgDN | |Enter |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______},
+ {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______},
+ {BACKLIT, _______, KC_HOME, KC_END, _______, KC_DEL, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______}
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | Prev | Play | Next | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| | Home | End | | Del | Ins | | PgUp | PgDN | |Enter |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______},
+ {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______},
+ {BACKLIT, _______, KC_HOME, KC_END, _______, KC_DEL, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+ {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
+ {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______},
+ {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+}
+
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_DVORAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+ PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
diff --git a/keyboards/planck/keymaps/xyverz/makefile.mk b/keyboards/planck/keymaps/xyverz/makefile.mk
new file mode 100644
index 000000000..93a89bb4a
--- /dev/null
+++ b/keyboards/planck/keymaps/xyverz/makefile.mk
@@ -0,0 +1,25 @@
+
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = yes # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/yang/config.h b/keyboards/planck/keymaps/yang/config.h
index feb5a1190..4ed19d76f 100644
--- a/keyboards/planck/keymaps/yang/config.h
+++ b/keyboards/planck/keymaps/yang/config.h
@@ -5,7 +5,7 @@
/* ws2812 RGB LED */
#define RGB_DI_PIN D1
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 28 // Number of LEDs
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
diff --git a/keyboards/planck/planck.c b/keyboards/planck/planck.c
index 8d70bb4e5..3980b02f5 100644
--- a/keyboards/planck/planck.c
+++ b/keyboards/planck/planck.c
@@ -1,9 +1,19 @@
#include "planck.h"
+#ifdef ONEHAND_ENABLE
+__attribute__ ((weak))
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
+ {{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
+ {{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
+ {{11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
+};
+#endif
+
void matrix_init_kb(void) {
// Turn status LED on
DDRE |= (1<<6);
PORTE |= (1<<6);
matrix_init_user();
-} \ No newline at end of file
+}
diff --git a/keyboards/planck/readme.md b/keyboards/planck/readme.md
index f89fdeb93..4b24a690e 100644
--- a/keyboards/planck/readme.md
+++ b/keyboards/planck/readme.md
@@ -13,15 +13,17 @@ Download or clone the whole firmware and navigate to the keyboards/planck folder
Depending on which keymap you would like to use, you will have to compile slightly differently.
### Default
-To build with the default keymap, simply run `make`.
+To build with the default keymap, simply run `make default`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create 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:
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
```
-$ make KEYMAP=[default|jack|<name>]
+$ make [default|jack|<name>]
```
+
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
### Notable forks (which some of the keymap files are from)
diff --git a/keyboards/planck/rev3/Makefile b/keyboards/planck/rev3/rules.mk
index 3ed1445e4..3ed1445e4 100644
--- a/keyboards/planck/rev3/Makefile
+++ b/keyboards/planck/rev3/rules.mk
diff --git a/keyboards/planck/rev4/Makefile b/keyboards/planck/rev4/Makefile
index ed09f85a4..191c6bb66 100644
--- a/keyboards/planck/rev4/Makefile
+++ b/keyboards/planck/rev4/Makefile
@@ -1,5 +1,3 @@
-AUDIO_ENABLE ?= yes # Audio output on port C6
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../../Makefile
endif \ No newline at end of file
diff --git a/keyboards/planck/rev4/rules.mk b/keyboards/planck/rev4/rules.mk
new file mode 100644
index 000000000..ed09f85a4
--- /dev/null
+++ b/keyboards/planck/rev4/rules.mk
@@ -0,0 +1,5 @@
+AUDIO_ENABLE ?= yes # Audio output on port C6
+
+ifndef QUANTUM_DIR
+ include ../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/planck/rules.mk b/keyboards/planck/rules.mk
new file mode 100644
index 000000000..fb24e8235
--- /dev/null
+++ b/keyboards/planck/rules.mk
@@ -0,0 +1,68 @@
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
+MIDI_ENABLE ?= no # MIDI controls
+AUDIO_ENABLE ?= no # Audio output on port C6
+UNICODE_ENABLE ?= no # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+API_SYSEX_ENABLE = yes
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
diff --git a/keyboards/preonic/Makefile b/keyboards/preonic/Makefile
index 08e9205cb..4e2a6f00f 100644
--- a/keyboards/preonic/Makefile
+++ b/keyboards/preonic/Makefile
@@ -1,73 +1,3 @@
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= no # Console for debug(+400)
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
-NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
-MIDI_ENABLE ?= no # MIDI controls
-AUDIO_ENABLE ?= no # Audio output on port C6
-UNICODE_ENABLE ?= no # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../Makefile
endif \ No newline at end of file
diff --git a/keyboards/preonic/config.h b/keyboards/preonic/config.h
index 3fb978c2f..f88acf211 100644
--- a/keyboards/preonic/config.h
+++ b/keyboards/preonic/config.h
@@ -63,7 +63,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D1
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 28 // Number of LEDs
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
diff --git a/keyboards/preonic/keymaps/0xdec/Makefile b/keyboards/preonic/keymaps/0xdec/Makefile
new file mode 100644
index 000000000..6600e3689
--- /dev/null
+++ b/keyboards/preonic/keymaps/0xdec/Makefile
@@ -0,0 +1,21 @@
+# Build Options
+
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = yes # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/preonic/keymaps/0xdec/README.md b/keyboards/preonic/keymaps/0xdec/README.md
new file mode 100644
index 000000000..603d3d455
--- /dev/null
+++ b/keyboards/preonic/keymaps/0xdec/README.md
@@ -0,0 +1,30 @@
+Ergonomic Colemak Keymap
+========================
+An ergonomically optimized Colemak keymap for the grid-layout Preonic
+
+Modes
+----------
+
+#### Colemak
+
+> Base layer
+
+- All alphanumerics and symbols available on the base layer
+
+----------
+
+#### Game
+
+> QWERTY layout for use with games or number entry
+
+- Standard QWERTY layout
+- Integrated right-hand numpad in phone layout
+
+----------
+
+#### Function (Raise)
+
+> Functions and mode switching
+
+- Turns NEIO into arrow cluster, with nav cluster below (Home, Page Down, Page Up, End)
+- Reset key at lower left (Esc)
diff --git a/keyboards/preonic/keymaps/0xdec/config.h b/keyboards/preonic/keymaps/0xdec/config.h
new file mode 100644
index 000000000..5fc9b6f34
--- /dev/null
+++ b/keyboards/preonic/keymaps/0xdec/config.h
@@ -0,0 +1,10 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// Number of backlight levels
+#undef BACKLIGHT_LEVELS
+#define BACKLIGHT_LEVELS 5
+
+#endif
diff --git a/keyboards/preonic/keymaps/0xdec/keymap.c b/keyboards/preonic/keymaps/0xdec/keymap.c
new file mode 100644
index 000000000..6c4b8a6fa
--- /dev/null
+++ b/keyboards/preonic/keymaps/0xdec/keymap.c
@@ -0,0 +1,173 @@
+#include "preonic.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+
+// Layer names
+#define _COLEMAK 0
+#define _GAME 1
+#define _RAISE 2
+
+enum preonic_keycodes {
+ COLEMAK = SAFE_RANGE,
+ GAME,
+ RAISE
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | \ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | = | Q | W | F | P | G | J | L | U | Y | [ | ] |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | - | A | R | S | T | D | H | N | E | I | O | ' |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ; | Z | X | C | V | B | K | M | , | . | / | ENTER|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ESC | ALT | GUI | SHIFT| CTRL | BKSP | SPACE| RAISE| SHIFT| | DEL | TAB |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = {
+ {KC_GRV ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_BSLS},
+ {KC_EQL ,KC_Q ,KC_W ,KC_F ,KC_P ,KC_G ,KC_J ,KC_L ,KC_U ,KC_Y ,KC_LBRC,KC_RBRC},
+ {KC_MINS,KC_A ,KC_R ,KC_S ,KC_T ,KC_D ,KC_H ,KC_N ,KC_E ,KC_I ,KC_O ,KC_QUOT},
+ {KC_SCLN,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_K ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_ENT },
+ {KC_ESC ,KC_LALT,KC_LGUI,KC_LSFT,KC_LCTL,KC_BSPC,KC_SPC ,RAISE ,KC_RSFT,_______,KC_DEL ,KC_TAB }
+},
+
+/* Game
+ * ,-----------------------------------------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 |NUM LK| ÷ | × | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+
+ * | TAB | Q | W | E | R | T | Y | U | 1 | 2 | 3 | + |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+
+ * | CTRL | A | S | D | F | G | H | J | 4 | 5 | 6 | = |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+
+ * | SHIFT| Z | X | C | V | B | N | M | 7 | 8 | 9 | ENTER|
+ * |------+------+------+------+------+------+------+------+------+------+------+------+
+ * | | ALT | GUI | SPACE| CTRL | BKSP | SPACE| RAISE| , | 0 | . | TAB |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_GAME] = {
+ {KC_ESC ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_6 ,KC_7 ,KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS},
+ {KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_Y ,KC_U ,KC_P1 ,KC_P2 ,KC_P3 ,KC_PPLS},
+ {KC_LCTL,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_H ,KC_J ,KC_P4 ,KC_P5 ,KC_P6 ,KC_PEQL},
+ {KC_LSFT,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_N ,KC_M ,KC_P7 ,KC_P8 ,KC_P9 ,KC_PENT},
+ {XXXXXXX,KC_LALT,KC_LGUI,KC_SPC ,KC_LCTL,KC_BSPC,KC_SPC ,RAISE ,KC_PCMM,KC_P0 ,KC_PDOT,KC_TAB }
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | SLEEP| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 |PRTSCR|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | SYM | F11 | F12 | |AU TOG| VOL+ |BL INC|COLMAK| GAME | MUSIC| MENU |SCRLCK|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | CAPS | PREV | STOP | PLAY | NEXT | VOL- |BL DEC| LEFT | DOWN | UP | RIGHT| PAUSE|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | BACK | STOP | RFRSH| FRWRD| MUTE |BL TOG| HOME | PGDN | PGUP | END |INSERT|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | RESET| | | | | DEL | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+ {KC_SLEP,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_PSCR},
+ {XXXXXXX,KC_F11 ,KC_F12 ,XXXXXXX,AU_TOG ,KC_VOLU,BL_INC ,COLEMAK,GAME ,MU_TOG ,KC_MENU,KC_SLCK},
+ {KC_CAPS,KC_MPRV,KC_MSTP,KC_MPLY,KC_MNXT,KC_VOLD,BL_DEC ,KC_LEFT,KC_DOWN,KC_UP ,KC_RGHT,KC_PAUS},
+ {XXXXXXX,KC_WBAK,KC_WSTP,KC_WREF,KC_WFWD,KC_MUTE,BL_TOGG,KC_HOME,KC_PGDN,KC_PGUP,KC_END ,KC_INS },
+ {RESET ,_______,_______,_______,_______,KC_DEL ,_______,_______,_______,_______,_______,_______}
+}
+
+};
+
+
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = {
+ {NOTE_B5, 20},
+ {NOTE_B6, 8},
+ {NOTE_DS6, 20},
+ {NOTE_B6, 8}
+};
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_game[][2] = {
+ {NOTE_E6, 10} ,{NOTE_E6, 10} ,{NOTE_REST, 10} ,{NOTE_E6, 10} ,
+ {NOTE_REST, 10} ,{NOTE_C6, 10} ,{NOTE_E6, 10} ,{NOTE_REST, 10} ,
+ {NOTE_G6, 10} ,{NOTE_REST, 30},
+ {NOTE_G5, 10} ,{NOTE_REST, 30}
+};
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+void startup_user() {
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+void shutdown_user() {
+ PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void) {
+ music_scale_user();
+}
+void music_scale_user(void) {
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
+
+
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+}
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_COLEMAK);
+ }
+ break;
+ case GAME:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_game, false, STACCATO);
+ #endif
+ persistant_default_layer_set(1UL<<_GAME);
+ }
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ } else {
+ layer_off(_RAISE);
+ }
+ break;
+ default:
+ return true;
+ break;
+ }
+
+ return false;
+};
diff --git a/keyboards/preonic/keymaps/CMD-Preonic/README.md b/keyboards/preonic/keymaps/CMD-Preonic/README.md
new file mode 100644
index 000000000..2b80c2b3a
--- /dev/null
+++ b/keyboards/preonic/keymaps/CMD-Preonic/README.md
@@ -0,0 +1,77 @@
+CMD-Preonic
+===================
+The CMD project seeks to improve productivity by optimizing usage of the left hand via clever use of the function layers.
+
+>Note: This project is currently optimized for grid layout, and has not been confirmed to work 100% on MIT layout, although it is expected to work correctly.
+
+----------
+
+Modes
+-------------
+
+#### QWERTY
+
+>CMD-Qwerty is very similar to the default Preonic with a few key differences:
+
+ - Dual-role Raise/Enter Key at Caps Lock position. -Don't need to take your hand off the mouse to submit URLs
+ - Space_Function under left space (Grid layout) -Don't need to take your thumb off of the spacebar to use lower.
+ - Dedicated arrow keys replaced with ( - , = , [ , and ] ) - big improvement for programmers who are used to fn layer.
+
+----------
+
+#### Game
+
+> Disables extra features to facilitate easier usage of the Preonic while gaming. this mode is toggled in the adjust layer.
+
+ - Dual Role Function key becomes Caps Lock.
+ - Space_Function disabled and replaced with normal spacebar.
+ - Windows Key disabled.
+
+----------
+
+#### Numpad
+
+> Enables left-hand numpad
+
+ - Left-side numpad
+ - Can be toggled on in Adjust layer (under . key)
+
+----------
+
+#### Arrow - (Lower)
+
+> Makes arrow keys easily accessible to Left Hand, and much more.
+
+ - Arrow keys at WASD, Backspace at Q, Delete at E.
+ - Media Keys near arrow cluster, mute at A.
+ - Web Nav keys.
+ - Mouse cluster at YGHJ.
+ - Numpad in right side of board.
+ - Can be toggled on in Adjust layer (Under , key)
+
+----------
+
+#### Function- (Raise)
+
+> Basic Functions. Open Keys for customization.
+
+ - Turns WASD into Navigation cluster (Home, End, Page up and Page Down)
+ - Pok3r style right hand arrow cluster for accessibility (familiar for many users.)
+ - Doubles as shift key for top row numbers.
+ - Print Screen, Insert, etc.
+
+----------
+
+#### Adjust- (Raise + Lower)
+
+> Switch Modes
+
+ - Default modes moved to the left and new layer toggle modes located to the right.
+ - Sleep and Wake keys added.
+ - Reset button moved under Spacebar(s).
+
+Notes:
+-------------
+
+Please feel free to reach out to Commandlinedesign@gmail.com with suggestions.
+Special Thanks to Jack for QMK firmware and the Preonic!
diff --git a/keyboards/preonic/keymaps/CMD-Preonic/keymap.c b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c
new file mode 100644
index 000000000..5d217e261
--- /dev/null
+++ b/keyboards/preonic/keymaps/CMD-Preonic/keymap.c
@@ -0,0 +1,332 @@
+#include "preonic.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _GAME 3
+#define _ARROW 12
+#define _NUMPAD 13
+#define _LOWER 14
+#define _RAISE 15
+#define _ADJUST 16
+
+// Macro name shortcuts
+#define QWERTY M(_QWERTY)
+#define COLEMAK M(_COLEMAK)
+#define DVORAK M(_DVORAK)
+#define GAME M(_GAME)
+#define ARROW M(_ARROW)
+#define NUMPAD M(_NUMPAD)
+#define LOWER M(_LOWER)
+#define RAISE M(_RAISE)
+#define M_BL 5
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | \ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space | Raise| - | = | [ | ] |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+ {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH},
+ {LT(_RAISE, KC_ENT), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
+ {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, LT(_LOWER, KC_SPC), KC_SPC, RAISE, KC_MINUS, KC_EQUAL, KC_LBRC, KC_RBRC}
+},
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space | Raise| - | = | [ | ] |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = {
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, _______},
+ {_______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
+ {_______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space | Raise| - | = | [ | ] |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = {
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, _______},
+ {_______, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, _______},
+ {_______, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* GAME
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | \ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | CAPS | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | XXX | Lower | Space | Raise| - | = | [ | ] |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_GAME] = {
+ {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH},
+ {KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
+ {_______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* NUMPAD
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | / | * | - | 4 | 5 | 6 | 7 | 8 | 9 | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | 7 | 8 | 9 | + | R | T | Y | U | I | O | P | \ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | 4 | 5 | 6 | + | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | 1 | 2 | 3 | Enter| V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | 0 | 0 | . | Enter| Lower| Space | Raise| - | = | [ | ] |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_NUMPAD] = {
+ {KC_ESC, KC_PSLS, KC_PAST, KC_PMNS, _______, _______, _______, _______, _______, _______, _______, _______},
+ {KC_P7, KC_P8, KC_P9, KC_PPLS, _______, _______, _______, _______, _______, _______, _______, _______},
+ {KC_P4, KC_P5, KC_P6, KC_PPLS, _______, _______, _______, _______, _______, _______, _______, _______},
+ {KC_P1, KC_P2, KC_P3, KC_PENT, _______, _______, _______, _______, _______, _______, _______, _______},
+ {KC_P0, KC_P0, KC_PDOT, KC_PENT, _______, _______, _______, _______, _______, _______, _______, _______},
+},
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Mute | BkSpc| Up | Del | Forwd| MBtn1| MUp| MBtn2| / | 7 | 8 | 9 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Left | Down | Right| Refr MLeft| MDn |MRight| * | 4 | 5 | 6 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Vol+| Prev | Play | Next | Back | MWDn| MBtn3| MWUp | - | 1 | 2 | 3 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Vol- | | | | | | | + | Enter| 0 | . |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+ {KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL},
+ {KC_MUTE, KC_BSPC, KC_UP, KC_DEL, KC_WWW_FORWARD, KC_BTN1, KC_MS_U, KC_BTN2, KC_PSLS, KC_P7, KC_P8, KC_P9},
+ {_______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_WWW_REFRESH, KC_MS_L, KC_MS_D, KC_MS_R, KC_PAST, KC_P4, KC_P5, KC_P6},
+ {KC_VOLU, KC_MPRV, KC_MPLY, KC_MNXT, KC_WWW_BACK, KC_WH_D, KC_BTN3, KC_WH_U, KC_PMNS, KC_P1, KC_P2, KC_P3},
+ {KC_VOLD, _______, _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PENT, KC_P0, KC_PDOT}
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Bksp | PgUp | Del | | | | PgUp | Up | PgDn | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Home | PgDn | End | | | Home | Left | Down | Right| ] | \ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Pause| Ins | | | Print|Screen| End | | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+ {KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
+ {_______, KC_BSPC, KC_PGUP, KC_DEL, _______, _______, _______, KC_PGUP, KC_UP, _______, _______, _______},
+ {_______, KC_HOME, KC_PGDN, KC_END, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______},
+ {_______, KC_PAUSE, KC_INS, _______, KC_PSCR, KC_PSCR, _______, KC_END, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | |qwerty|ColMak|Dvorak| | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | |AGNorm|AGSwap| | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | |Aud On|AudOff|MidiOn|MdiOff| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus On|MusOff| Sleep| Wake | Arrow| Game |NUMPAD| | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | Reset | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+ {_______, _______, QWERTY, COLEMAK, DVORAK, _______, _______, _______, _______, _______, _______, _______},
+ {_______, RESET, _______, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______, _______, KC_DEL},
+ {_______, _______, _______, AU_ON, AU_OFF, MI_ON, MI_OFF, QWERTY, COLEMAK, DVORAK, _______, _______},
+ {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, KC_SYSTEM_SLEEP, KC_SYSTEM_WAKE, ARROW, GAME, NUMPAD, _______, _______},
+ {_______, _______, _______, _______, _______, RESET, RESET, _______, _______, _______, _______, _______}
+}
+
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+#ifdef AUDIO_ENABLE
+float start_up[][2] = {
+ {440.0*pow(2.0,(14)/12.0), 20},
+ {440.0*pow(2.0,(26)/12.0), 8},
+ {440.0*pow(2.0,(18)/12.0), 20},
+ {440.0*pow(2.0,(26)/12.0), 8}
+};
+
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+
+float goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case _QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ break;
+ case _COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_COLEMAK);
+ }
+ break;
+ case _DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_DVORAK);
+ }
+ break;
+ case _GAME:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_GAME);
+ }
+ break;
+ case _NUMPAD:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_NUMPAD);
+ }
+ break;
+ case _ARROW:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_LOWER);
+ }
+ break;
+ case _LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ break;
+ case _RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ break;
+ case M_BL:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(start_up, false, 0);
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void play_goodbye_tone()
+{
+ PLAY_NOTE_ARRAY(goodbye, false, 0);
+ _delay_ms(150);
+}
+
+#endif
diff --git a/keyboards/preonic/keymaps/CMD-Preonic/makefile b/keyboards/preonic/keymaps/CMD-Preonic/makefile
new file mode 100644
index 000000000..2f7787e86
--- /dev/null
+++ b/keyboards/preonic/keymaps/CMD-Preonic/makefile
@@ -0,0 +1,23 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = yes # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/preonic/keymaps/default/Makefile b/keyboards/preonic/keymaps/default/Makefile
index 581e08cd0..3d4659ceb 100644
--- a/keyboards/preonic/keymaps/default/Makefile
+++ b/keyboards/preonic/keymaps/default/Makefile
@@ -1,25 +1,3 @@
-
-
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = yes # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
ifndef QUANTUM_DIR
include ../../../../Makefile
endif \ No newline at end of file
diff --git a/keyboards/preonic/keymaps/default/keymap.c b/keyboards/preonic/keymaps/default/keymap.c
index 9a957f7ee..78b4997a8 100644
--- a/keyboards/preonic/keymaps/default/keymap.c
+++ b/keyboards/preonic/keymaps/default/keymap.c
@@ -102,7 +102,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
@@ -123,7 +123,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
@@ -142,9 +142,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | Reset| | | | | | | | | | Del |
* |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * | | | |Aud on|AudOff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * | |Voice-|Voice+|Musoff|Mus on| | | | | | | |
+ * | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff| | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
@@ -277,4 +277,4 @@ void music_scale_user(void)
PLAY_NOTE_ARRAY(music_scale, false, 0);
}
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/preonic/keymaps/jacwib/Makefile b/keyboards/preonic/keymaps/jacwib/Makefile
new file mode 100644
index 000000000..3e87d41d3
--- /dev/null
+++ b/keyboards/preonic/keymaps/jacwib/Makefile
@@ -0,0 +1,20 @@
+
+
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = yes # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/preonic/keymaps/jacwib/config.h b/keyboards/preonic/keymaps/jacwib/config.h
new file mode 100644
index 000000000..b98883120
--- /dev/null
+++ b/keyboards/preonic/keymaps/jacwib/config.h
@@ -0,0 +1,9 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+#define FORCE_NKRO 1
+#define PREVENT_STUCK_MODIFIERS
+
+#endif
diff --git a/keyboards/preonic/keymaps/jacwib/keymap.c b/keyboards/preonic/keymaps/jacwib/keymap.c
new file mode 100644
index 000000000..72ccc86cd
--- /dev/null
+++ b/keyboards/preonic/keymaps/jacwib/keymap.c
@@ -0,0 +1,293 @@
+#include "preonic.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+#include "keymap_nordic.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _LOWER 3
+#define _RAISE 4
+#define _MQWERTY 5
+#define _MLOWER 8
+#define _MRAISE 9
+#define _ADJUST 16
+
+enum preonic_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ MQWERTY,
+ MLOWER,
+ MRAISE
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | + | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P | Ã… |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G | H | J | K | L | Ö | Ä |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| < | Z | X | C | V | B | N | M | . | , | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Alt | GUI |AltGr |Lower | Space| Enter|Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+ {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, NO_PLUS, KC_BSPC},
+ {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AM },
+ {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NO_AE, NO_OSLH},
+ {KC_LSFT, NO_LESS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_COMM, NO_MINS},
+ {KC_LCTL, KC_LALT, KC_LGUI, NO_ALGR, LOWER, KC_SPC, KC_ENT, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | | @ | £ | $ | | | { | [ | ] | } | \ | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | |VolUp | | | ~ |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | |LastS |PauseP|NextS | | * |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | |VolDwn| | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | |Bspc | | |PgDn |PgUp | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+ {_______, NO_AT, NO_PND, NO_DLR, _______, _______, NO_LCBR, NO_LBRC, NO_RBRC, NO_RCBR, NO_BSLS, KC_DEL},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, NO_TILD},
+ {_______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, LSFT(KC_BSLS)},
+ {_______, NO_PIPE, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, KC_BSPC, _______, _______, KC_PGDN, KC_PGUP, _______}
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ! | " | # | ¤ | % | & | / | ( | ) | = | ? | Ins |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | |Mouse^| | | | |ScrlUp| | | ^ |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | |Mouse<|MouseV|Mouse>| | |MLC |MMC |MRC | ' | ¨ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | > | | | | | | |ScrlDown| : | ; | _ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | |Bspc | | | | PgDn | PgUp | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+ {LSFT(KC_1),NO_QUO2,LSFT(KC_3), NO_BULT,LSFT(KC_5), NO_AMPR, NO_SLSH, NO_LPRN, NO_RPRN, NO_EQL, NO_QUES, KC_INS},
+ {_______, _______, _______, KC_MS_U, _______, _______, _______, _______, KC_WH_U, _______, _______, NO_CIRC},
+ {_______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN1, KC_BTN3, KC_BTN2, NO_APOS, NO_QUOT},
+ {_______, NO_GRTR, _______, _______, _______, _______, _______, _______, KC_WH_D, NO_COLN, NO_SCLN, NO_UNDS},
+ {_______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, KC_PGDN, KC_PGUP, _______}
+},
+
+/* Mac Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | + | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P | Ã… |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G | H | J | K | L | Ö | Ä |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| < | Z | X | C | V | B | N | M | . | , | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Alt | GUI |AltGr |Lower | Space| Enter|Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_MQWERTY] = {
+ {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, NO_PLUS, KC_BSPC},
+ {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AM },
+ {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NO_AE, NO_OSLH},
+ {KC_LSFT, NO_LESS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_COMM, NO_MINS},
+ {KC_LCTL, KC_LALT, KC_LGUI, NO_ALGR, MLOWER, KC_SPC, KC_ENT, MRAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+/* Mac Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | | @ | £ | $ | | | { | [ | ] | } | \ | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | |VolUp | | | ~ |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | |LastS |PauseP|NextS | | * |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | |VolDwn| | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | |Bspc | | |PgDn |PgUp | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_MLOWER] = {
+ {_______, NO_AT, NO_PND, NO_DLR, _______, _______, LSFT(LALT(KC_8)), NO_LBRC, NO_RBRC, LSFT(LALT(KC_9)), LSFT(LALT(KC_7)), KC_DEL},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, NO_TILD},
+ {_______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, LSFT(KC_BSLS)},
+ {_______, NO_LBRC, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, KC_BSPC, _______, _______, KC_PGDN, KC_PGUP, _______}
+},
+
+/* Mac Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ! | " | # | ¤ | % | & | / | ( | ) | = | ? | Ins |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | |Mouse^| | | | |ScrlUp| | | ^ |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | |Mouse<|MouseV|Mouse>| | |MLC |MMC |MRC | ' | ¨ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | > | | | | | | |ScrlDown| : | ; | _ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | |Bspc | | | | PgDn | PgUp | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_MRAISE] = {
+ {LSFT(KC_1),NO_QUO2,LSFT(KC_3), NO_BULT,LSFT(KC_5), NO_AMPR, NO_SLSH, NO_LPRN, NO_RPRN, NO_EQL, NO_QUES, KC_INS},
+ {_______, _______, _______, KC_MS_U, _______, _______, _______, _______, KC_WH_U, _______, _______, NO_CIRC},
+ {_______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN1, KC_BTN3, KC_BTN2, NO_APOS, NO_QUOT},
+ {_______, NO_GRTR, _______, _______, _______, _______, _______, _______, KC_WH_D, NO_COLN, NO_SCLN, NO_UNDS},
+ {_______, _______, _______, _______, _______, KC_BSPC, _______, _______, _______, KC_PGDN, KC_PGUP, _______}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | Reset| | | | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | | |Rshift|
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |MusOn |MusOff| | | | |NrmMode|MacMode| | | Reset|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+ {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12},
+ {_______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT},
+ {_______, MU_ON, MU_OFF, _______, _______, _______, _______, TO(0), TO(5), _______, _______, RESET },
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+}
+
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_startup[][2] = {
+ {NOTE_D5, 8},
+ {NOTE_E6, 8},
+ {NOTE_D6, 8},
+ {NOTE_E5, 8}
+};
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case MQWERTY:
+ if (record->event.pressed) {
+ persistant_default_layer_set(1UL<<_MQWERTY);
+ }
+ return false;
+ break;
+ case MLOWER:
+ if (record->event.pressed) {
+ layer_on(_MLOWER);
+ update_tri_layer(_MLOWER, _MRAISE, _ADJUST);
+ } else {
+ layer_off(_MLOWER);
+ update_tri_layer(_MLOWER, _MRAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case MRAISE:
+ if (record->event.pressed) {
+ layer_on(_MRAISE);
+ update_tri_layer(_MLOWER, _MRAISE, _ADJUST);
+ } else {
+ layer_off(_MRAISE);
+ update_tri_layer(_MLOWER, _MRAISE, _ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+};
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+ PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
diff --git a/keyboards/preonic/keymaps/jacwib/readme.md b/keyboards/preonic/keymaps/jacwib/readme.md
new file mode 100644
index 000000000..8658d6cdd
--- /dev/null
+++ b/keyboards/preonic/keymaps/jacwib/readme.md
@@ -0,0 +1,15 @@
+# Jacwib's preonic keymap.
+
+Designed for use with a swedish language.
+
+Version 1.1:
+
+Added PgUp and PgDn keys.
+
+Also added "Mac mode". Unsure if it even works. Might however be able to test soon.
+
+Version 1.2:
+
+Changed around alt and super keys.
+
+Made "Mac mode" function, and tested it! (It works)
diff --git a/keyboards/preonic/keymaps/kinesis/Makefile b/keyboards/preonic/keymaps/kinesis/Makefile
new file mode 100644
index 000000000..6c8d2897c
--- /dev/null
+++ b/keyboards/preonic/keymaps/kinesis/Makefile
@@ -0,0 +1,27 @@
+
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = yes # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+TAP_DANCE_ENABLE = yes
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/ergodox_ez/config.h b/keyboards/preonic/keymaps/kinesis/config.h
index 2bb56731b..e6099ceb8 100644
--- a/keyboards/ergodox_ez/config.h
+++ b/keyboards/preonic/keymaps/kinesis/config.h
@@ -1,6 +1,5 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2013 Oleg Kostyuk <cub.uanic@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -23,22 +22,25 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x1307
+#define PRODUCT_ID 0x6061
#define DEVICE_VER 0x0001
-#define MANUFACTURER ErgoDox EZ
-#define PRODUCT ErgoDox EZ
-#define DESCRIPTION QMK keyboard firmware for Ergodox EZ
+#define MANUFACTURER Ortholinear Keyboards
+#define PRODUCT The Preonic Keyboard
+#define DESCRIPTION A compact ortholinear keyboard
/* key matrix size */
-#define MATRIX_ROWS 14
-#define MATRIX_COLS 6
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 12
-#define MOUSEKEY_DELAY 100
-#define MOUSEKEY_INTERVAL 20
-#define MOUSEKEY_MAX_SPEED 3
-#define MOUSEKEY_TIME_TO_MAX 10
+/* Planck PCB default pin-out */
+#define MATRIX_ROW_PINS { D2, D5, B5, B6, D3 }
+#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
+#define UNUSED_PINS
-#define TAPPING_TOGGLE 1
+#define BACKLIGHT_PIN B7
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
/* define if matrix has ghost */
//#define MATRIX_HAS_GHOST
@@ -47,9 +49,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define BACKLIGHT_LEVELS 3
/* Set 0 if debouncing isn't needed */
-#define DEBOUNCE 5
-#define TAPPING_TERM 200
-#define IGNORE_MOD_TAP_INTERRUPT // this makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when you hold it, and when this option isn't enabled, z rapidly followed by x actually sends Ctrl-x. That's bad.)
+#define DEBOUNCING_DELAY 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
@@ -58,15 +58,24 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* key combination for command */
#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTL)) || \
- keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D1
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 28 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
+#define TAPPING_TERM 200
+
/* disable debug print */
// #define NO_DEBUG
@@ -79,6 +88,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-//#define DEBUG_MATRIX_SCAN_RATE
#endif
diff --git a/keyboards/preonic/keymaps/kinesis/keymap.c b/keyboards/preonic/keymaps/kinesis/keymap.c
new file mode 100644
index 000000000..9691be91d
--- /dev/null
+++ b/keyboards/preonic/keymaps/kinesis/keymap.c
@@ -0,0 +1,144 @@
+#include "preonic.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+#ifdef AUDIO_ENABLE
+#include "audio.h"
+#endif
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _FN 1
+#define _ULCK 2
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+#define HYP_TIC ALL_T(KC_GRV)
+#define EQ_LOCK TD(TD_EQ_LOCK)
+#define MIN_ULK TD(TD_MIN_ULOCK)
+
+//Tap Dance Declarations
+enum {
+ TD_EQ_LOCK = 0,
+ TD_MIN_ULOCK
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | = | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | \ |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Ctrl | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | FN | ` | Alt | LGUI | Back | ESC |ENTER | SPCE | RGUI | [ | ] | FN |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_QWERTY] = {
+ {EQ_LOCK, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, MIN_ULK },
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS },
+ {KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT },
+ {KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC },
+ {MO(_FN), HYP_TIC, KC_LALT, KC_LGUI, KC_BSPC, KC_ESC, KC_ENT, KC_SPC, KC_RGUI, KC_LBRC, KC_RBRC, MO(_FN) }
+ },
+
+ /* Fn
+ * ,-----------------------------------------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | VOL- | VOL+ | MUTE |BLtogg| | LEFT | DOWN | UP | RGHT | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | BL- | BL+ |Aud on|AudOff|AGnorm|AGswap| | | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|MusOff| | |PLY/PS| | PREV | NEXT | |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_FN] = {
+ {_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______ },
+ {_______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______ },
+ {_______, KC_VOLD, KC_VOLU, KC_MUTE, BL_TOGG, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______ },
+ {_______, BL_DEC, BL_INC, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______ },
+ {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, _______, _______, KC_MPLY, _______, KC_MPRV, KC_MNXT, _______ }
+ }
+
+};
+
+float tone_startup[][2] = {
+ {NOTE_B5, 20},
+ {NOTE_B6, 8},
+ {NOTE_DS6, 20},
+ {NOTE_B6, 8}
+};
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+/*bool process_record_user(uint16_t keycode, keyrecord_t *record) {*/
+ /*return true;*/
+ /*[>switch (keycode) {<]*/
+ /*[>case QWERTY:<]*/
+ /*[>return true;<]*/
+ /*[>}<]*/
+/*};*/
+
+void matrix_init_user(void) {
+ startup_user();
+}
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+ PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ //Tap once for equal, twice for hyper + X (alfred lock)
+ [TD_EQ_LOCK] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, HYPR(KC_X)),
+ //Tap once for minus, twice for time.heals.nothing
+ [TD_MIN_ULOCK] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, M(_ULCK))
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case _ULCK:
+ if (record->event.pressed) {
+ /* time.heals.nothing */
+ return MACRO( I(220), T(T), T(I), T(M), T(E), T(DOT), T(H), T(E), T(A), T(L), T(S), T(DOT), T(N), T(O), T(T), T(H), T(I), T(N), T(G), END);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboards/preonic/keymaps/kinesis/readme.md b/keyboards/preonic/keymaps/kinesis/readme.md
new file mode 100644
index 000000000..e911968dd
--- /dev/null
+++ b/keyboards/preonic/keymaps/kinesis/readme.md
@@ -0,0 +1 @@
+# The default Preonic layout - largely based on the Planck's \ No newline at end of file
diff --git a/keyboards/preonic/keymaps/xyverz/keymap.c b/keyboards/preonic/keymaps/xyverz/keymap.c
new file mode 100644
index 000000000..adc7392e5
--- /dev/null
+++ b/keyboards/preonic/keymaps/xyverz/keymap.c
@@ -0,0 +1,342 @@
+#include "preonic.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _MUSIC 5
+#define _ADJUST 16
+
+// Macro name shortcuts
+#define QWERTY M(_QWERTY)
+#define COLEMAK M(_COLEMAK)
+#define DVORAK M(_DVORAK)
+#define LOWER M(_LOWER)
+#define RAISE M(_RAISE)
+#define M_BL 5
+#define AUD_OFF M(6)
+#define AUD_ON M(7)
+#define MUS_OFF M(8)
+#define MUS_ON M(9)
+#define VC_IN M(10)
+#define VC_DE M(11)
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | - | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / | Shift|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Alt | Left |Right |Lower | Space |Raise | Up | Down | GUI |Enter |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+ {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL},
+ {KC_MINS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT},
+ {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_SPC, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT }
+},
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = {
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL},
+ {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
+ {M(M_BL), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | / |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | - |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z | Shift|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Alt | Left |Right |Lower | Space |Raise | Up | Down | GUI |Enter |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = {
+ {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH},
+ {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS},
+ {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT},
+ {KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_SPC, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT }
+},
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | Mute | Vol- | Vol+ | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| | Home | End | | Ins | | PgUp | PgDN | |Enter |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL},
+ {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______},
+ {M(M_BL), _______, KC_HOME, KC_END, _______, KC_INS, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______}
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Caps | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | Prev | Play | Next | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| | Home | End | | Ins | | PgUp | PgDN | |Enter |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL},
+ {KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______},
+ {M(M_BL), _______, KC_HOME, KC_END, _______, KC_INS, KC_INS, _______, KC_PGUP, KC_PGDN, _______, _______}
+},
+
+/* Music (reserved for process_action_user)
+ *
+ */
+[_MUSIC] = {
+ {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+ {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+ {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+ {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX},
+ {XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Musoff|Mus on| | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+ {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12},
+ {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
+ {_______, _______, _______, AUD_ON, AUD_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______},
+ {_______, VC_DE, VC_IN, MUS_ON, MUS_OFF, _______, _______, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+}
+
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+#ifdef AUDIO_ENABLE
+float start_up[][2] = {
+ {440.0*pow(2.0,(14)/12.0), 20},
+ {440.0*pow(2.0,(26)/12.0), 8},
+ {440.0*pow(2.0,(18)/12.0), 20},
+ {440.0*pow(2.0,(26)/12.0), 8}
+};
+
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+float goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case _QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ break;
+ case _COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_COLEMAK);
+ }
+ break;
+ case _DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_DVORAK);
+ }
+ break;
+ case _LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ break;
+ case _RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ break;
+ case M_BL:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ case 6:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ audio_off();
+ #endif
+ }
+ break;
+ case 7:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ audio_on();
+ PLAY_NOTE_ARRAY(start_up, false, 0);
+ #endif
+ }
+ break;
+ case 8:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ layer_off(_MUSIC);
+ stop_all_notes();
+ #endif
+ }
+ break;
+ case 9:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+ layer_on(_MUSIC);
+ #endif
+ }
+ break;
+ case 10:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ voice_iterate();
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+ #endif
+ }
+ break;
+ case 11:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ voice_deiterate();
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+ #endif
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(start_up, false, 0);
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+uint8_t starting_note = 0x0C;
+int offset = 7;
+
+void process_action_user(keyrecord_t *record) {
+
+ if (IS_LAYER_ON(_MUSIC)) {
+ if (record->event.pressed) {
+ play_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)), 0xF);
+ } else {
+ stop_note(((double)220.0)*pow(2.0, -4.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row)));
+ }
+ }
+
+}
+
+void play_goodbye_tone()
+{
+ PLAY_NOTE_ARRAY(goodbye, false, 0);
+ _delay_ms(150);
+}
+
+#endif \ No newline at end of file
diff --git a/keyboards/preonic/keymaps/xyverz/makefile.mk b/keyboards/preonic/keymaps/xyverz/makefile.mk
new file mode 100644
index 000000000..628167ff6
--- /dev/null
+++ b/keyboards/preonic/keymaps/xyverz/makefile.mk
@@ -0,0 +1 @@
+AUDIO_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/preonic/preonic.c b/keyboards/preonic/preonic.c
index 889c3fc8f..d9c119b8d 100644
--- a/keyboards/preonic/preonic.c
+++ b/keyboards/preonic/preonic.c
@@ -1,5 +1,16 @@
#include "preonic.h"
+#ifdef ONEHAND_ENABLE
+__attribute__ ((weak))
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
+ {{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
+ {{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
+ {{11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
+ {{11, 4}, {10, 4}, {9, 4}, {8, 4}, {7, 4}, {6, 4}, {5, 4}, {4, 4}, {3, 4}, {2, 4}, {1, 4}, {0, 4}},
+};
+#endif
+
void matrix_init_kb(void) {
// Turn status LED on
diff --git a/keyboards/preonic/readme.md b/keyboards/preonic/readme.md
index f0be255a0..10763ee97 100644
--- a/keyboards/preonic/readme.md
+++ b/keyboards/preonic/readme.md
@@ -13,13 +13,15 @@ Download or clone the whole firmware and navigate to the keyboards/preonic folde
Depending on which keymap you would like to use, you will have to compile slightly differently.
### Default
-To build with the default keymap, simply run `make`.
+To build with the default keymap, simply run `make default`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap, create a file in the keymaps folder named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
-To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
```
-$ make KEYMAP=[default|jack|<name>]
+$ make [default|jack|<name>]
```
+
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/preonic/rules.mk b/keyboards/preonic/rules.mk
new file mode 100644
index 000000000..071bfdc7f
--- /dev/null
+++ b/keyboards/preonic/rules.mk
@@ -0,0 +1,70 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no # Console for debug(+400)
+COMMAND_ENABLE ?= no # Commands for debug and configuration
+NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
+MIDI_ENABLE ?= yes # MIDI controls
+AUDIO_ENABLE ?= yes # Audio output on port C6
+UNICODE_ENABLE ?= no # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+API_SYSEX_ENABLE ?= yes
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend \ No newline at end of file
diff --git a/keyboards/readme.md b/keyboards/readme.md
index e97986546..81a23c7e5 100644
--- a/keyboards/readme.md
+++ b/keyboards/readme.md
@@ -9,37 +9,47 @@ These keyboards are manufactured by the maintainers of QMK.
What makes OLKB keyboards shine is a combo of lean aesthetics, compact size, and killer tactile feel. These are available through [olkb.com](http://olkb.com) as well as through [Massdrop](http://massdrop.com) from time to time, as easy to assemble kits.
-* [Planck](/keyboards/planck/) - A 40% DIY powerhouse of customizability and modification capability. It's a lean, mean, typing machine.
-* [Preonic](/keyboards/preonic/) - Like the Planck, but bigger. 50%.
-* [Atomic](/keyboards/atomic/) - Imagine the size of the Planck. Now imagine the size of the Preonic. Now imagine _bigger_. That is the Atomic. A 60% keyboard.
+* [Planck](/keyboards/planck/) &mdash; A 40% DIY powerhouse of customizability and modification capability. It's a lean, mean, typing machine.
+* [Preonic](/keyboards/preonic/) &mdash; Like the Planck, but bigger. 50%.
+* [Atomic](/keyboards/atomic/) &mdash; Imagine the size of the Planck. Now imagine the size of the Preonic. Now imagine _bigger_. That is the Atomic. A 60% keyboard.
### ErgoDox EZ - Erez Zukerman
Made in Taiwan using advanced robotic manufacturing, the ErgoDox EZ is a fully-assembled, premium ergonomic keyboard. Its split design allows you to place both halves shoulder width, and its custom-made wrist rests and tilt/tent kit make for incredibly comfortable typing. Available on [ergodox-ez.com](https://ergodox-ez.com).
-* [ErgoDox EZ](/keyboards/ergodox_ez/) - Our one and only product. Yes, it's that awesome. Comes with either printed or blank keycaps, and 7 different keyswitch types.
+* [ErgoDox EZ](/keyboards/ergodox/) &mdash; Our one and only product. Yes, it's that awesome. Comes with either printed or blank keycaps, and 7 different keyswitch types.
### Clueboard - Zach White
Designed and built in Felton, CA, Clueboards keyboard emphasize quality and locally sourced components, available on [clueboard.co](http://clueboard.co)
-* [Clueboard](/keyboards/clueboard/) - The 66% custom keyboard.
-* [Cluepad](/keyboards/cluepad/) - A mechanical numpad with QMK superpowers.
+* [Clueboard](/keyboards/clueboard/) &mdash; The 66% custom keyboard.
+* [Cluecard](/keyboards/cluecard/) &mdash; A small board to help you hack on QMK.
+* [Cluepad](/keyboards/cluepad/) &mdash; A mechanical numpad with QMK superpowers.
## Community-supported QMK Keyboards
These keyboards are part of the QMK repository, but their manufacturers are not official maintainers of the repository.
-* [alps64](/keyboards/alps64/) &mdash; A 60% keyboard for Alps keyswitches.
-* [arrow_pad](/keyboards/arrow_pad) &mdash; A custom creation by IBNobody.
-* [atreus](/keyboards/atreus) &mdash; Made by Technomancy.
-* [bantam44](/keyboards/bantam44) &mdash; It is a 44-key 40% staggered keyboard.
-* [gh60](/keyboards/gh60) &mdash; A 60% Geekhack community-driven project.
-* [hhkb](/keyboards/hhkb) &mdash; The Happy Hacking keyboard can be hacked with a custom controller to run QMK.
-* [jd45](/keyboards/jd45) &mdash; Another Geekhack community project, designed by jdcarpe.
-* [kc60](/keyboards/kc60) &mdash; A programmable Chinese-made keyboard, lost in the mists of time.
-* [phantom](/keyboards/phantom) &mdash; A tenkeyless kit by Teel, also from Geekhack.
-* [retro_refit](/keyboards/retro_refit) &mdash; Another creation by IBNobody.
-* [satan](/keyboards/satan) &mdash; A GH60 variant.
-* [sixkeyboard](/keyboards/sixkeyboard) &mdash; A 6-key keyboard made by TechKeys.
+* [Alps64](/keyboards/alps64) &mdash; A 60% keyboard for Alps keyswitches.
+* [AMJ60](/keyboards/amj60) &mdash; DIY/Assembled compact 60% keyboard.
+* [Arrow Pad](/keyboards/arrow_pad) &mdash; A custom creation by IBNobody.
+* [Atreus](/keyboards/atreus) &mdash; Made by Technomancy.
+* [Bantam44](/keyboards/bantam44) &mdash; It is a 44-key 40% staggered keyboard.
+* [Ergodox Infinity](/keyboards/ergodox) - Ergonomic Split Keyboard by Input Club.
+* [GH60](/keyboards/gh60) &mdash; A 60% Geekhack community-driven project.
+* [Happy Hacking Keyboard](/keyboards/hhkb) &mdash; The Happy Hacking keyboard can be hacked with a custom controller to run QMK.
+* [Infinity 60%](/keyboards/infinity60) - &mdash; Compact community keyboard by Input Club.
+* [JD45](/keyboards/jd45) &mdash; Another Geekhack community project, designed by jdcarpe.
+* [KC60](/keyboards/kc60) &mdash; A programmable Chinese-made keyboard, lost in the mists of time.
+* [Kinesis Advantage](/keyboards/kinesis) &mdash; Contoured ergonomic keyboard by Kinesis Computer Ergonomics.
+* [The Kitten Paw](/keyboards/kitten_paw) &mdash; A replacement controller (2016 revision) for the Filco Majestouch by [Bathroom Epiphanies](https://github.com/BathroomEpiphanies).
+* [Lets Split](/keyboards/lets_split) - Split ortholinear 40% keyboard.
+* [Phantom](/keyboards/phantom) &mdash; A tenkeyless kit by Teel, also from Geekhack.
+* [Retro Refit](/keyboards/retro_refit) &mdash; Another creation by IBNobody.
+* [S60-x](/keyboards/s60-x) &mdash; DIY compact keyboard designed by VinnyCordeiro for Sentraq.
+* [Satan](/keyboards/satan) &mdash; A GH60 variant.
+* [SixKeyBoard](/keyboards/sixkeyboard) &mdash; A 6-key keyboard made by TechKeys.
+* [TheVan 44](/keyboars/tv44) &mdash; A 44-key staggered keybard by Evangs.
+* [Vision Division](/keyboards/vision_division) &mdash; Full Size / Split Linear Keyboard by IBNobody.
diff --git a/keyboards/s60-x/Makefile b/keyboards/s60-x/Makefile
new file mode 100644
index 000000000..4e2a6f00f
--- /dev/null
+++ b/keyboards/s60-x/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/s60-x/config.h b/keyboards/s60-x/config.h
new file mode 100644
index 000000000..ac7951c24
--- /dev/null
+++ b/keyboards/s60-x/config.h
@@ -0,0 +1,164 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2016 Julien Pecqueur <julien@peclu.net>
+Copyright 2016 Felix Uhl <ifreilicht@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Massdrop
+#define PRODUCT S60-X
+#define DESCRIPTION q.m.k. keyboard firmware for S60-X
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/*
+ * 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 { B7, B3, B2, B1, B0 }
+#define MATRIX_COL_PINS { D0, D1, D2, D3, D5, D4, D6, D7, B4, B5, B6, C6, C7, E6, F1 }
+#define UNUSED_PINS { F0 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* 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 */
+
+/* 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/keyboards/s60-x/keymaps/ansi_qwertz/Makefile b/keyboards/s60-x/keymaps/ansi_qwertz/Makefile
new file mode 100644
index 000000000..6a078bcc3
--- /dev/null
+++ b/keyboards/s60-x/keymaps/ansi_qwertz/Makefile
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # 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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/config.h b/keyboards/s60-x/keymaps/ansi_qwertz/config.h
new file mode 100644
index 000000000..6c01d579f
--- /dev/null
+++ b/keyboards/s60-x/keymaps/ansi_qwertz/config.h
@@ -0,0 +1,14 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// keymap needs oneshot functionality
+#undef NO_ACTION_ONESHOT
+
+#undef IS_COMMAND
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#endif \ No newline at end of file
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png
new file mode 100644
index 000000000..168780c82
--- /dev/null
+++ b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.png
Binary files differ
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg
new file mode 100644
index 000000000..f03858993
--- /dev/null
+++ b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg
@@ -0,0 +1,1046 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="900"
+ height="300"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.91 r13725"
+ version="1.0"
+ sodipodi:docname="KB_US-International-Alternative.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lend"
+ style="overflow:visible;">
+ <path
+ id="path5387"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.8) rotate(180)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lstart"
+ style="overflow:visible">
+ <path
+ id="path5390"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+ transform="scale(0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="Tail"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Tail"
+ style="overflow:visible">
+ <g
+ id="g5342"
+ transform="scale(-1.2)">
+ <path
+ id="path5344"
+ d="M -3.8048674,-3.9585227 L 0.54352094,-0.00068114835"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+ <path
+ id="path5346"
+ d="M -1.2866832,-3.9585227 L 3.0617053,-0.00068114835"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+ <path
+ id="path5348"
+ d="M 1.3053582,-3.9585227 L 5.6537466,-0.00068114835"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+ <path
+ id="path5350"
+ d="M -3.8048674,4.1775838 L 0.54352094,0.21974226"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+ <path
+ id="path5352"
+ d="M -1.2866832,4.1775838 L 3.0617053,0.21974226"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+ <path
+ id="path5354"
+ d="M 1.3053582,4.1775838 L 5.6537466,0.21974226"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+ </g>
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Mend"
+ style="overflow:visible;">
+ <path
+ id="path5363"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.6) rotate(180) translate(-5,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Lend"
+ style="overflow:visible;">
+ <path
+ id="path5369"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(1.1) rotate(180) translate(-5,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Send"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Send"
+ style="overflow:visible;">
+ <path
+ id="path5375"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.2) rotate(180)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Send"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Send"
+ style="overflow:visible;">
+ <path
+ id="path5357"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.3) rotate(180) translate(-5,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Mend"
+ style="overflow:visible;">
+ <path
+ id="path5381"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.4) rotate(180)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Lstart"
+ style="overflow:visible">
+ <path
+ id="path5372"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(1.1) translate(-5,0)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.4142136"
+ inkscape:cx="435.66801"
+ inkscape:cy="291.15819"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:grid-points="true"
+ showgrid="true"
+ gridtolerance="15px"
+ showborder="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1017"
+ inkscape:window-x="1912"
+ inkscape:window-y="-8"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:grid-bbox="true"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0px"
+ originy="0px"
+ spacingx="7.5px"
+ spacingy="7.5px"
+ color="#0000ff"
+ empcolor="#0000ff"
+ opacity="0.12156863"
+ empopacity="0.25098039"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0,0 L 60,0 L 60,60 L 0,60 L 0,0 z "
+ id="rect2186" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 60,0 L 120,0 L 120,60 L 60,60 L 60,0 z "
+ id="rect2218" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 120,0 L 180,0 L 180,60 L 120,60 L 120,0 z "
+ id="rect2222" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 180,0 L 240,0 L 240,60 L 180,60 L 180,0 z "
+ id="rect2228" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 240,0 L 300,0 L 300,60 L 240,60 L 240,0 z "
+ id="rect2230" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 300,0 L 360,0 L 360,60 L 300,60 L 300,0 z "
+ id="rect2232" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 360,0 L 420,0 L 420,60 L 360,60 L 360,0 z "
+ id="rect2234" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 420,0 L 480,0 L 480,60 L 420,60 L 420,0 z "
+ id="rect2236" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 480,0 L 540,0 L 540,60 L 480,60 L 480,0 z "
+ id="rect2238" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 540,0 L 600,0 L 600,60 L 540,60 L 540,0 z "
+ id="rect2240" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 600,0 L 660,0 L 660,60 L 600,60 L 600,0 z "
+ id="rect2242" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 660,0 L 720,0 L 720,60 L 660,60 L 660,0 z "
+ id="rect2244" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 720,0 L 780,0 L 780,60 L 720,60 L 720,0 z "
+ id="rect2246" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 780,0 L 900,0 L 900,60 L 780,60 L 780,0 z "
+ id="rect2248" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0,60 L 90,60 L 90,120 L 0,120 L 0,60 z "
+ id="rect2250" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 90,60 L 150,60 L 150,120 L 90,120 L 90,60 z "
+ id="rect2252" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 150,60 L 210,60 L 210,120 L 150,120 L 150,60 z "
+ id="rect2254" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 210,60 L 270,60 L 270,120 L 210,120 L 210,60 z "
+ id="rect2256" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 270,60 L 330,60 L 330,120 L 270,120 L 270,60 z "
+ id="rect2258" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 330,60 L 390,60 L 390,120 L 330,120 L 330,60 z "
+ id="rect2262" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 390,60 L 450,60 L 450,120 L 390,120 L 390,60 z "
+ id="rect2264" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 450,60 L 510,60 L 510,120 L 450,120 L 450,60 z "
+ id="rect2266" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 510,60 L 570,60 L 570,120 L 510,120 L 510,60 z "
+ id="rect2270" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 570,60 L 630,60 L 630,120 L 570,120 L 570,60 z "
+ id="rect2272" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 630,60 L 690,60 L 690,120 L 630,120 L 630,60 z "
+ id="rect2274" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 690,60 L 750,60 L 750,120 L 690,120 L 690,60 z "
+ id="rect2278" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 750,60 L 810,60 L 810,120 L 750,120 L 750,60 z "
+ id="rect2280" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 810,60 L 900,60 L 900,120 L 810,120 L 810,60 z "
+ id="rect2284" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0,120 L 105,120 L 105,180 L 0,180 L 0,120 z "
+ id="rect2286" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 105,120 L 165,120 L 165,180 L 105,180 L 105,120 z "
+ id="rect2292" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 165,120 L 225,120 L 225,180 L 165,180 L 165,120 z "
+ id="rect2296" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 225,120 L 285,120 L 285,180 L 225,180 L 225,120 z "
+ id="rect2298" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 285,120 L 345,120 L 345,180 L 285,180 L 285,120 z "
+ id="rect2300" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 345,120 L 405,120 L 405,180 L 345,180 L 345,120 z "
+ id="rect2302" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 405,120 L 465,120 L 465,180 L 405,180 L 405,120 z "
+ id="rect2306" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 465,120 L 525,120 L 525,180 L 465,180 L 465,120 z "
+ id="rect2308" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 525,120 L 585,120 L 585,180 L 525,180 L 525,120 z "
+ id="rect2312" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 585,120 L 645,120 L 645,180 L 585,180 L 585,120 z "
+ id="rect2314" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 645,120 L 705,120 L 705,180 L 645,180 L 645,120 z "
+ id="rect2316" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 705,120 L 765,120 L 765,180 L 705,180 L 705,120 z "
+ id="rect2318" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 765,120 L 900,120 L 900,180 L 765,180 L 765,120 z "
+ id="rect2320" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0,180 L 135,180 L 135,240 L 0,240 L 0,180 z "
+ id="rect2322" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 135,180 L 195,180 L 195,240 L 135,240 L 135,180 z "
+ id="rect2324" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 195,180 L 255,180 L 255,240 L 195,240 L 195,180 z "
+ id="rect2326" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 255,180 L 315,180 L 315,240 L 255,240 L 255,180 z "
+ id="rect2330" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 315,180 L 375,180 L 375,240 L 315,240 L 315,180 z "
+ id="rect2334" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 375,180 L 435,180 L 435,240 L 375,240 L 375,180 z "
+ id="rect2336" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 435,180 L 495,180 L 495,240 L 435,240 L 435,180 z "
+ id="rect2338" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 495,180 L 555,180 L 555,240 L 495,240 L 495,180 z "
+ id="rect2340" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 555,180 L 615,180 L 615,240 L 555,240 L 555,180 z "
+ id="rect2342" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 615,180 L 675,180 L 675,240 L 615,240 L 615,180 z "
+ id="rect2344" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 675,180 L 735,180 L 735,240 L 675,240 L 675,180 z "
+ id="rect2346" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 735,180 L 900,180 L 900,240 L 735,240 L 735,180 z "
+ id="rect2348" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0,240 L 90,240 L 90,300 L 0,300 L 0,240 z "
+ id="rect2350" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 810,240 L 900,240 L 900,300 L 810,300 L 810,240 z "
+ id="rect2352" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 150,240 L 240,240 L 240,300 L 150,300 L 150,240 z "
+ id="rect2354" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 600,240 L 690,240 L 690,300 L 600,300 L 600,240 z "
+ id="rect2360" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 240,240 L 600,240 L 600,300 L 240,300 L 240,240 z "
+ id="rect2362" />
+ <path
+ style="fill:#efefef;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 90,240 L 150,240 L 150,300 L 90,300 L 90,240 z "
+ id="rect2364" />
+ <path
+ style="fill:#efefef;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 690,240 L 750,240 L 750,300 L 690,300 L 690,240 z "
+ id="rect2366" />
+ <path
+ style="fill:#efefef;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 750,240 L 810,240 L 810,300 L 750,300 L 750,240 z "
+ id="rect2368" />
+ <path
+ style=""
+ d=""
+ id="flowRoot4146" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 75.351563,18.826172 L 74.4375,11.056641 L 74.4375,6.3691406 L 78.046875,6.3691406 L 78.046875,11.056641 L 77.132813,18.826172 L 75.351563,18.826172 M 74.484375,23.630859 L 74.484375,20.173828 L 77.964844,20.173828 L 77.964844,23.630859 L 74.484375,23.630859 M 75.351563,53.630859 L 75.351563,42.158203 L 71.34375,42.158203 L 71.34375,39.802734 L 71.601563,39.802734 C 73.062496,39.802748 74.124995,39.576186 74.789063,39.123047 C 75.460931,38.669937 75.855462,37.912125 75.972656,36.849609 L 78.65625,36.849609 L 78.65625,53.630859 L 75.351563,53.630859"
+ id="text5091" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 23.34375,14.220703 L 23.34375,16.810547 C 22.531233,17.365241 21.761702,17.775396 21.035156,18.041016 C 20.316391,18.298833 19.605455,18.42774 18.902344,18.427734 C 18.542956,18.42774 18.183581,18.39649 17.824219,18.333984 C 17.464832,18.27149 17.105457,18.181646 16.746094,18.064453 C 16.558583,18.001959 16.281239,17.904303 15.914063,17.771484 C 14.203116,17.185553 12.902336,16.892585 12.011719,16.892578 C 11.34765,16.892585 10.652339,17.041022 9.9257813,17.337891 C 9.2070275,17.626959 8.3984345,18.091802 7.5,18.732422 L 7.5,16.142578 C 8.3359346,15.580086 9.1328088,15.162118 9.890625,14.888672 C 10.648432,14.607431 11.363275,14.466806 12.035156,14.466797 C 12.949211,14.466806 14.085929,14.693368 15.445313,15.146484 C 15.46874,15.154305 15.484365,15.158212 15.492188,15.158203 C 15.632802,15.205087 15.847646,15.279305 16.136719,15.380859 C 17.347644,15.810555 18.285143,16.025398 18.949219,16.025391 C 19.613267,16.025398 20.29686,15.880867 21,15.591797 C 21.703109,15.302743 22.484358,14.845712 23.34375,14.220703 M 11.988281,35.033203 L 15.011719,35.033203 L 17.320313,39.369141 L 15.65625,39.369141 L 11.988281,35.033203"
+ id="text5103" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 136.47578,20.443359 C 136.04608,21.099612 135.54999,21.583986 134.9875,21.896484 C 134.42499,22.201173 133.76093,22.353517 132.99532,22.353516 C 131.76093,22.353517 130.81953,22.01758 130.1711,21.345703 C 129.53047,20.673831 129.21015,19.681645 129.21016,18.369141 C 129.21015,16.50196 129.75312,14.935556 130.83907,13.669922 C 131.93281,12.404308 133.27656,11.771496 134.87032,11.771484 C 135.4953,11.771496 136.03827,11.900402 136.49922,12.158203 C 136.96015,12.416027 137.33905,12.798839 137.63594,13.306641 L 138.25703,12.158203 L 140.34297,12.158203 L 138.62032,19.166016 C 138.59686,19.251958 138.57733,19.341801 138.56172,19.435547 C 138.54608,19.521488 138.53827,19.591801 138.53828,19.646484 C 138.53827,19.919926 138.63202,20.126957 138.81953,20.267578 C 139.00702,20.400394 139.28436,20.4668 139.65157,20.466797 C 139.95624,20.4668 140.27264,20.388675 140.60078,20.232422 C 140.9367,20.076175 141.2492,19.857426 141.53828,19.576172 C 142.21014,18.951177 142.71795,18.220709 143.06172,17.384766 C 143.41326,16.548835 143.58904,15.630867 143.58907,14.630859 C 143.58904,12.75587 142.86248,11.216809 141.40938,10.013672 C 139.96405,8.8027492 138.09686,8.1972811 135.80782,8.1972656 C 134.70624,8.1972811 133.6789,8.3300934 132.72578,8.5957031 C 131.78046,8.8613429 130.92109,9.2558737 130.14766,9.7792969 C 128.81953,10.669935 127.79609,11.783215 127.07735,13.119141 C 126.36641,14.455087 126.01094,15.91993 126.01094,17.513672 C 126.01094,19.912113 126.81953,21.83008 128.43672,23.267578 C 130.0539,24.697265 132.21406,25.412108 134.91719,25.412109 C 136.1828,25.412108 137.41718,25.220702 138.62032,24.837891 C 139.83124,24.455077 140.95623,23.90039 141.99532,23.173828 L 142.95625,24.544922 C 141.76092,25.443358 140.49139,26.119138 139.14766,26.572266 C 137.81171,27.025387 136.41718,27.25195 134.96407,27.251953 C 133.46405,27.25195 132.08515,27.060543 130.82735,26.677734 C 129.56953,26.302732 128.45234,25.744139 127.47578,25.001953 C 126.26484,24.05664 125.35859,22.966798 124.75703,21.732422 C 124.15547,20.49805 123.85469,19.099614 123.85469,17.537109 C 123.85469,16.232429 124.05781,14.990243 124.46407,13.810547 C 124.87813,12.623058 125.48359,11.544934 126.28047,10.576172 C 127.43672,9.1621238 128.82734,8.0918124 130.45235,7.3652344 C 132.07734,6.6386889 133.88593,6.275408 135.87813,6.2753906 C 137.19843,6.275408 138.43671,6.4550953 139.59297,6.8144531 C 140.75702,7.1660321 141.76873,7.6660316 142.62813,8.3144531 C 143.68279,9.1347801 144.46795,10.072279 144.9836,11.126953 C 145.50701,12.17384 145.76873,13.357432 145.76875,14.677734 C 145.76873,15.966805 145.51092,17.15821 144.99532,18.251953 C 144.48748,19.337895 143.75311,20.267581 142.79219,21.041016 C 142.2453,21.478518 141.64764,21.814455 140.99922,22.048828 C 140.35858,22.275392 139.69061,22.388673 138.99532,22.388672 C 138.16718,22.388673 137.54218,22.224611 137.12032,21.896484 C 136.70624,21.568361 136.4914,21.083987 136.47578,20.443359 M 137.06172,15.427734 C 136.96015,14.794931 136.73358,14.314462 136.38203,13.986328 C 136.03827,13.650401 135.58124,13.482432 135.01094,13.482422 C 134.1203,13.482432 133.34687,13.966807 132.69063,14.935547 C 132.03437,15.904305 131.70624,17.068366 131.70625,18.427734 C 131.70624,19.146489 131.86249,19.693363 132.175,20.068359 C 132.49531,20.443363 132.95624,20.630862 133.55782,20.630859 C 134.20624,20.630862 134.79608,20.384769 135.32735,19.892578 C 135.8664,19.400395 136.23358,18.75977 136.42891,17.970703 L 137.06172,15.427734 M 128.56563,53.630859 C 128.58125,52.130861 128.90156,50.861331 129.52657,49.822266 C 130.15156,48.775395 131.26094,47.716803 132.85469,46.646484 C 133.09687,46.482429 133.44844,46.255867 133.90938,45.966797 C 136.01875,44.615243 137.07343,43.314463 137.07344,42.064453 C 137.07343,41.322278 136.85078,40.736341 136.40547,40.306641 C 135.96015,39.876967 135.35078,39.662123 134.57735,39.662109 C 133.73359,39.662123 133.08125,39.927748 132.62032,40.458984 C 132.16719,40.982435 131.94062,41.732434 131.94063,42.708984 L 131.94063,42.849609 L 128.84688,42.849609 C 128.84688,40.927747 129.3625,39.44728 130.39375,38.408203 C 131.425,37.369157 132.89375,36.849626 134.8,36.849609 C 136.52656,36.849626 137.90546,37.322282 138.93672,38.267578 C 139.96796,39.205093 140.48358,40.455091 140.4836,42.017578 C 140.48358,43.134776 140.21405,44.103525 139.675,44.923828 C 139.13593,45.744149 138.09296,46.677741 136.5461,47.724609 C 136.21796,47.951178 135.76484,48.248052 135.18672,48.615234 C 133.71797,49.560551 132.88984,50.2793 132.70235,50.771484 L 140.31953,50.771484 L 140.31953,53.630859 L 128.56563,53.630859"
+ id="text5127" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 195.28125,13.693359 L 194.25,16.552734 L 197.19141,16.552734 L 198.19922,13.693359 L 195.28125,13.693359 M 195.28125,6.4746094 L 197.87109,6.4746094 L 196.16016,11.337891 L 198.99609,11.337891 L 200.73047,6.4746094 L 203.32031,6.4746094 L 201.58594,11.337891 L 204.90234,11.337891 L 204.03516,13.693359 L 200.75391,13.693359 L 199.76953,16.529297 L 203.16797,16.529297 L 202.33594,18.873047 L 198.92578,18.873047 L 197.19141,23.748047 L 194.60156,23.748047 L 196.33594,18.873047 L 193.47656,18.873047 L 191.73047,23.748047 L 189.15234,23.748047 L 190.86328,18.873047 L 187.5,18.873047 L 188.39063,16.529297 L 191.69531,16.529297 L 192.70313,13.693359 L 189.19922,13.693359 L 190.06641,11.337891 L 193.54688,11.337891 L 195.28125,6.4746094 M 190.07813,48.521484 L 193.30078,48.521484 C 193.30859,49.458989 193.53515,50.166019 193.98047,50.642578 C 194.42578,51.111331 195.08593,51.345705 195.96094,51.345703 C 196.80468,51.345705 197.45312,51.126956 197.90625,50.689453 C 198.36718,50.244144 198.59765,49.607426 198.59766,48.779297 C 198.59765,47.951178 198.32812,47.326178 197.78906,46.904297 C 197.2578,46.474617 196.46484,46.259773 195.41016,46.259766 C 195.35546,46.259773 195.26953,46.263679 195.15234,46.271484 C 195.04296,46.279304 194.96093,46.28321 194.90625,46.283203 L 194.90625,43.962891 L 195.26953,43.962891 C 196.23827,43.9629 196.95312,43.7754 197.41406,43.400391 C 197.8828,43.017589 198.11718,42.435558 198.11719,41.654297 C 198.11718,41.005872 197.91796,40.494154 197.51953,40.119141 C 197.1289,39.736342 196.59374,39.544936 195.91406,39.544922 C 195.17187,39.544936 194.59765,39.763686 194.19141,40.201172 C 193.78515,40.638685 193.58203,41.259778 193.58203,42.064453 L 193.58203,42.205078 L 190.41797,42.205078 C 190.45703,40.486341 190.96094,39.169936 191.92969,38.255859 C 192.90625,37.334001 194.28125,36.873064 196.05469,36.873047 C 197.73437,36.873064 199.0664,37.283219 200.05078,38.103516 C 201.03514,38.923843 201.52733,40.02931 201.52734,41.419922 C 201.52733,42.154308 201.35936,42.798839 201.02344,43.353516 C 200.68749,43.908213 200.18358,44.365244 199.51172,44.724609 C 200.37108,45.099618 201.01952,45.619149 201.45703,46.283203 C 201.90233,46.93946 202.12499,47.724615 202.125,48.638672 C 202.12499,50.318363 201.57421,51.650393 200.47266,52.634766 C 199.37108,53.619141 197.86718,54.111328 195.96094,54.111328 C 194.07812,54.111328 192.625,53.634766 191.60156,52.681641 C 190.58594,51.720705 190.07812,50.357425 190.07813,48.591797 L 190.07813,48.521484"
+ id="text5139" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 254.46094,21.451172 C 255.10155,21.365237 255.58984,21.134768 255.92578,20.759766 C 256.26171,20.384769 256.42968,19.884769 256.42969,19.259766 C 256.42968,18.705083 256.26952,18.248052 255.94922,17.888672 C 255.63671,17.52149 255.14062,17.236335 254.46094,17.033203 L 254.46094,21.451172 M 253.06641,13.435547 L 253.06641,9.4511719 C 252.45703,9.529311 251.99218,9.7402483 251.67188,10.083984 C 251.35156,10.419935 251.1914,10.87306 251.19141,11.443359 C 251.1914,11.919934 251.33984,12.318371 251.63672,12.638672 C 251.9414,12.958995 252.41796,13.22462 253.06641,13.435547 M 253.06641,26.267578 L 253.06641,24.017578 C 251.30078,23.908203 249.98047,23.396485 249.10547,22.482422 C 248.23047,21.568361 247.79297,20.24805 247.79297,18.521484 L 250.93359,18.521484 C 250.97265,19.365239 251.16796,20.033207 251.51953,20.525391 C 251.8789,21.009768 252.39453,21.318362 253.06641,21.451172 L 253.06641,16.599609 C 251.2539,16.138679 249.96484,15.537117 249.19922,14.794922 C 248.43359,14.052744 248.05078,13.03712 248.05078,11.748047 C 248.05078,10.318373 248.5039,9.1660301 249.41016,8.2910156 C 250.32422,7.4160318 251.54296,6.959001 253.06641,6.9199219 L 253.06641,5.4199219 L 254.46094,5.4199219 L 254.46094,6.9199219 C 255.98437,6.9980635 257.17186,7.4590005 258.02344,8.3027344 C 258.87499,9.1386864 259.34374,10.318373 259.42969,11.841797 L 256.24219,11.841797 C 256.18749,11.115247 256.01171,10.56056 255.71484,10.177734 C 255.42577,9.7871232 255.0078,9.5683734 254.46094,9.5214844 L 254.46094,13.787109 C 256.39062,14.388681 257.74999,15.07618 258.53906,15.849609 C 259.32811,16.623054 259.72264,17.642584 259.72266,18.908203 C 259.72264,20.400394 259.26171,21.591799 258.33984,22.482422 C 257.42577,23.373047 256.1328,23.892578 254.46094,24.041016 L 254.46094,26.267578 L 253.06641,26.267578 M 254.64844,47.419922 L 254.64844,40.236328 L 250.08984,47.419922 L 254.64844,47.419922 M 254.57813,53.630859 L 254.57813,50.009766 L 247.5,50.009766 L 247.5,47.056641 L 253.6875,37.330078 L 257.84766,37.330078 L 257.84766,47.337891 L 259.79297,47.337891 L 259.79297,50.009766 L 257.84766,50.009766 L 257.84766,53.630859 L 254.57813,53.630859"
+ id="text5145" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 320.42578,19.740234 C 320.42577,20.263675 320.60155,20.705081 320.95313,21.064453 C 321.30467,21.416018 321.73827,21.591799 322.25391,21.591797 C 322.75389,21.591799 323.18358,21.412112 323.54297,21.052734 C 323.90233,20.68555 324.08201,20.24805 324.08203,19.740234 C 324.08201,19.240239 323.90233,18.814458 323.54297,18.462891 C 323.19139,18.103521 322.7617,17.923834 322.25391,17.923828 C 321.73827,17.923834 321.30467,18.099615 320.95313,18.451172 C 320.60155,18.794927 320.42577,19.224614 320.42578,19.740234 M 317.88281,19.740234 C 317.8828,18.521489 318.30468,17.494147 319.14844,16.658203 C 319.99217,15.822273 321.02733,15.404305 322.25391,15.404297 C 323.45701,15.404305 324.48045,15.830086 325.32422,16.681641 C 326.17576,17.525397 326.60154,18.544927 326.60156,19.740234 C 326.60154,20.943362 326.17576,21.974611 325.32422,22.833984 C 324.47264,23.685547 323.4492,24.111328 322.25391,24.111328 C 321.02733,24.111328 319.99217,23.689453 319.14844,22.845703 C 318.30468,22.001955 317.8828,20.9668 317.88281,19.740234 M 311.07422,24.111328 L 321.08203,6.8496094 L 322.96875,6.8496094 L 312.96094,24.111328 L 311.07422,24.111328 M 310.04297,11.220703 C 310.04297,11.73634 310.21484,12.169933 310.55859,12.521484 C 310.91015,12.873058 311.34375,13.048839 311.85938,13.048828 C 312.36718,13.048839 312.79687,12.873058 313.14844,12.521484 C 313.50781,12.162121 313.68749,11.728528 313.6875,11.220703 C 313.68749,10.720716 313.50781,10.294935 313.14844,9.9433594 C 312.79687,9.5839984 312.36718,9.4043111 311.85938,9.4042969 C 311.34375,9.4043111 310.91015,9.5800922 310.55859,9.9316406 C 310.21484,10.275404 310.04297,10.705091 310.04297,11.220703 M 307.5,11.220703 C 307.5,10.001967 307.92187,8.9707178 308.76563,8.1269531 C 309.60937,7.275407 310.64062,6.8496262 311.85938,6.8496094 C 313.06249,6.8496262 314.08593,7.2793132 314.92969,8.1386719 C 315.78124,8.990249 316.20702,10.017592 316.20703,11.220703 C 316.20702,12.423839 315.78124,13.451182 314.92969,14.302734 C 314.08593,15.146493 313.06249,15.568367 311.85938,15.568359 C 310.63281,15.568367 309.59765,15.150399 308.75391,14.314453 C 307.91797,13.478526 307.5,12.447277 307.5,11.220703 M 310.85156,49.119141 L 314.13281,49.119141 C 314.1875,49.853519 314.43359,50.423831 314.87109,50.830078 C 315.30859,51.228518 315.89453,51.427737 316.62891,51.427734 C 317.53515,51.427737 318.22655,51.162112 318.70313,50.630859 C 319.18749,50.099613 319.42968,49.337895 319.42969,48.345703 C 319.42968,47.416022 319.18358,46.685554 318.69141,46.154297 C 318.19921,45.615242 317.51952,45.345711 316.65234,45.345703 C 316.16796,45.345711 315.74218,45.443368 315.375,45.638672 C 315.00781,45.833992 314.69531,46.123054 314.4375,46.505859 L 311.41406,46.330078 L 312.50391,37.330078 L 322.14844,37.330078 L 322.14844,40.166016 L 314.87109,40.166016 L 314.4375,43.529297 C 314.80468,43.240245 315.22656,43.025401 315.70313,42.884766 C 316.17968,42.736339 316.71093,42.66212 317.29688,42.662109 C 318.96874,42.66212 320.3164,43.169932 321.33984,44.185547 C 322.37108,45.20118 322.88671,46.53321 322.88672,48.181641 C 322.88671,49.986332 322.3203,51.427737 321.1875,52.505859 C 320.05468,53.576172 318.53515,54.111328 316.62891,54.111328 C 314.89453,54.111328 313.51172,53.669922 312.48047,52.787109 C 311.45703,51.896486 310.91406,50.673831 310.85156,49.119141"
+ id="text5151" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 372.15234,48.298828 C 372.15234,49.25977 372.39062,50.021488 372.86719,50.583984 C 373.35156,51.146487 374.00781,51.427737 374.83594,51.427734 C 375.60937,51.427737 376.21484,51.154299 376.65234,50.607422 C 377.08983,50.06055 377.30858,49.298832 377.30859,48.322266 C 377.30858,47.423834 377.08202,46.724616 376.62891,46.224609 C 376.17577,45.724617 375.53905,45.474618 374.71875,45.474609 C 373.91406,45.474618 373.28515,45.724617 372.83203,46.224609 C 372.3789,46.724616 372.15234,47.416022 372.15234,48.298828 M 372.10547,43.916016 C 372.48828,43.525401 372.94921,43.232432 373.48828,43.037109 C 374.02734,42.833995 374.6289,42.732433 375.29297,42.732422 C 376.93358,42.732433 378.24608,43.232432 379.23047,44.232422 C 380.22264,45.23243 380.71874,46.56446 380.71875,48.228516 C 380.71874,49.994144 380.17968,51.419924 379.10156,52.505859 C 378.02343,53.591797 376.60155,54.134765 374.83594,54.134766 C 372.79687,54.134765 371.24609,53.431641 370.18359,52.025391 C 369.1289,50.619144 368.60156,48.560552 368.60156,45.849609 C 368.60156,42.935558 369.16797,40.708997 370.30078,39.169922 C 371.43359,37.623063 373.0664,36.849626 375.19922,36.849609 C 376.68358,36.849626 377.8789,37.236345 378.78516,38.009766 C 379.69921,38.783218 380.19921,39.830092 380.28516,41.150391 L 376.88672,41.150391 C 376.80858,40.611341 376.59765,40.205092 376.25391,39.931641 C 375.91015,39.658217 375.42968,39.521498 374.8125,39.521484 C 373.96874,39.521498 373.32031,39.888686 372.86719,40.623047 C 372.41406,41.349622 372.16015,42.447277 372.10547,43.916016"
+ id="text5157" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 432.85547,16.095703 L 431.96484,16.740234 C 431.60546,16.990241 431.33593,17.291022 431.15625,17.642578 C 430.97656,17.994146 430.88671,18.388677 430.88672,18.826172 C 430.88671,19.490239 431.11328,20.048832 431.56641,20.501953 C 432.01953,20.955081 432.58593,21.181643 433.26563,21.181641 C 433.76562,21.181643 434.24218,21.080081 434.69531,20.876953 C 435.15624,20.666019 435.58202,20.361331 435.97266,19.962891 L 432.85547,16.095703 M 433.79297,12.404297 L 434.20313,12.111328 C 434.57812,11.853527 434.85546,11.564465 435.03516,11.244141 C 435.21483,10.923841 435.30468,10.556654 435.30469,10.142578 C 435.30468,9.7441545 435.17968,9.4277486 434.92969,9.1933594 C 434.68749,8.958999 434.35546,8.8418117 433.93359,8.8417969 C 433.5039,8.8418117 433.16406,8.9629053 432.91406,9.2050781 C 432.66406,9.4394673 432.53906,9.7597795 432.53906,10.166016 C 432.53906,10.384779 432.59765,10.62306 432.71484,10.880859 C 432.83984,11.138684 433.01562,11.412122 433.24219,11.701172 L 433.79297,12.404297 M 431.15625,13.962891 L 430.47656,13.072266 C 430.125,12.603527 429.87109,12.166027 429.71484,11.759766 C 429.5664,11.345715 429.49218,10.912122 429.49219,10.458984 C 429.49218,9.2089988 429.89062,8.2168123 430.6875,7.4824219 C 431.49218,6.7402513 432.58203,6.3691579 433.95703,6.3691406 C 435.27733,6.3691579 436.3203,6.7090013 437.08594,7.3886719 C 437.85155,8.0683749 438.23436,8.9863428 438.23438,10.142578 C 438.23436,11.017591 438.0078,11.802746 437.55469,12.498047 C 437.10936,13.185557 436.40624,13.833994 435.44531,14.443359 L 437.91797,17.490234 C 438.15233,17.107428 438.33593,16.677741 438.46875,16.201172 C 438.60936,15.724617 438.70702,15.193368 438.76172,14.607422 L 441.80859,14.607422 C 441.72264,15.623055 441.5117,16.56446 441.17578,17.431641 C 440.83983,18.298833 440.37889,19.091801 439.79297,19.810547 L 442.93359,23.630859 L 438.94922,23.630859 L 437.77734,22.189453 C 437.08983,22.822266 436.33202,23.302735 435.50391,23.630859 C 434.68359,23.951172 433.82421,24.111328 432.92578,24.111328 C 431.33203,24.111328 430.02734,23.638672 429.01172,22.693359 C 428.0039,21.748049 427.5,20.541019 427.5,19.072266 C 427.5,17.978521 427.78125,17.037116 428.34375,16.248047 C 428.90625,15.458993 429.84375,14.697275 431.15625,13.962891 M 434.66016,53.630859 L 431.15625,53.630859 C 431.28125,51.341799 431.83203,49.07227 432.80859,46.822266 C 433.79296,44.572275 435.19531,42.361339 437.01563,40.189453 L 428.76563,40.189453 L 428.76563,37.330078 L 440.66016,37.330078 L 440.66016,39.849609 C 438.8164,41.880871 437.39843,44.029306 436.40625,46.294922 C 435.42187,48.560552 434.83984,51.005862 434.66016,53.630859"
+ id="text5163" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 493.5,13.212891 L 491.4375,16.119141 L 489.44531,14.724609 L 491.69531,11.900391 L 488.41406,10.986328 L 489.17578,8.6074219 L 492.32813,9.7324219 L 492.32813,6.3691406 L 494.64844,6.3691406 L 494.64844,9.7324219 L 497.80078,8.6308594 L 498.58594,11.009766 L 495.30469,11.900391 L 497.53125,14.701172 L 495.49219,16.166016 L 493.5,13.212891 M 490.875,48.755859 C 490.875,49.576176 491.10156,50.208988 491.55469,50.654297 C 492.01562,51.099612 492.67187,51.322268 493.52344,51.322266 C 494.33593,51.322268 494.97265,51.095706 495.43359,50.642578 C 495.90233,50.189457 496.13671,49.560551 496.13672,48.755859 C 496.13671,47.982428 495.89843,47.361334 495.42188,46.892578 C 494.9453,46.423835 494.31249,46.189461 493.52344,46.189453 C 492.73437,46.189461 492.09374,46.427742 491.60156,46.904297 C 491.11718,47.380866 490.875,47.998053 490.875,48.755859 M 491.14453,41.560547 C 491.14453,42.208996 491.34765,42.708995 491.75391,43.060547 C 492.16015,43.404307 492.74218,43.576182 493.5,43.576172 C 494.2578,43.576182 494.83984,43.400401 495.24609,43.048828 C 495.66015,42.697277 495.86718,42.201183 495.86719,41.560547 C 495.86718,40.93556 495.65624,40.443373 495.23438,40.083984 C 494.81249,39.724623 494.23437,39.544936 493.5,39.544922 C 492.78124,39.544936 492.20703,39.72853 491.77734,40.095703 C 491.35546,40.462904 491.14453,40.951185 491.14453,41.560547 M 489.9375,44.818359 C 489.23437,44.427744 488.72656,43.970713 488.41406,43.447266 C 488.10156,42.923839 487.94531,42.255871 487.94531,41.443359 C 487.94531,40.005873 488.4375,38.876968 489.42188,38.056641 C 490.40625,37.236345 491.76562,36.826189 493.5,36.826172 C 495.24999,36.826189 496.61718,37.236345 497.60156,38.056641 C 498.59374,38.869155 499.08983,39.998061 499.08984,41.443359 C 499.08983,42.216808 498.92186,42.888683 498.58594,43.458984 C 498.24999,44.021494 497.74608,44.474619 497.07422,44.818359 C 497.89452,45.20118 498.51171,45.73243 498.92578,46.412109 C 499.33983,47.083991 499.54686,47.904303 499.54688,48.873047 C 499.54686,50.505862 499.0078,51.787111 497.92969,52.716797 C 496.85936,53.646484 495.3828,54.111328 493.5,54.111328 C 491.59375,54.111328 490.11328,53.650391 489.05859,52.728516 C 488.0039,51.806642 487.47656,50.521487 487.47656,48.873047 C 487.47656,47.912115 487.67187,47.107428 488.0625,46.458984 C 488.46094,45.802742 489.08594,45.255868 489.9375,44.818359"
+ id="text5169" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 557.85938,6.3691406 C 556.78124,8.1347811 555.98046,9.9316543 555.45703,11.759766 C 554.93359,13.587901 554.67187,15.505868 554.67188,17.513672 C 554.67187,19.513676 554.93359,21.427737 555.45703,23.255859 C 555.98046,25.083983 556.78124,26.880856 557.85938,28.646484 L 555.38672,28.646484 C 554.01953,26.779294 552.98046,24.904296 552.26953,23.021484 C 551.5664,21.130862 551.21484,19.294926 551.21484,17.513672 C 551.21484,15.73243 551.5664,13.896494 552.26953,12.005859 C 552.98046,10.115248 554.01953,8.2363435 555.38672,6.3691406 L 557.85938,6.3691406 M 556.06641,42.685547 C 556.0664,41.724621 555.82421,40.96681 555.33984,40.412109 C 554.86327,39.849623 554.21093,39.568373 553.38281,39.568359 C 552.60156,39.568373 551.99218,39.837904 551.55469,40.376953 C 551.125,40.916028 550.91015,41.669934 550.91016,42.638672 C 550.91015,43.544932 551.13671,44.251963 551.58984,44.759766 C 552.04296,45.267586 552.67968,45.521492 553.5,45.521484 C 554.30468,45.521492 554.93359,45.271493 555.38672,44.771484 C 555.83983,44.271494 556.0664,43.576182 556.06641,42.685547 M 556.125,47.056641 C 555.73437,47.447272 555.27343,47.74024 554.74219,47.935547 C 554.21093,48.130865 553.61327,48.228521 552.94922,48.228516 C 551.30078,48.228521 549.98047,47.732428 548.98828,46.740234 C 547.99609,45.748055 547.5,44.419931 547.5,42.755859 C 547.5,40.990247 548.03906,39.564467 549.11719,38.478516 C 550.19531,37.392594 551.61718,36.849626 553.38281,36.849609 C 555.42968,36.849626 556.98436,37.556657 558.04688,38.970703 C 559.11718,40.376966 559.65233,42.431652 559.65234,45.134766 C 559.65233,48.041021 559.08202,50.267581 557.94141,51.814453 C 556.80077,53.361328 555.16015,54.134765 553.01953,54.134766 C 551.54296,54.134765 550.35156,53.751953 549.44531,52.986328 C 548.53906,52.212892 548.04297,51.162112 547.95703,49.833984 L 551.34375,49.845703 C 551.42187,50.384769 551.63281,50.787112 551.97656,51.052734 C 552.32031,51.318362 552.80468,51.451174 553.42969,51.451172 C 554.27343,51.451174 554.91796,51.083987 555.36328,50.349609 C 555.80858,49.615238 556.06249,48.517583 556.125,47.056641"
+ id="text5175" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 609.375,6.3691406 L 611.87109,6.3691406 C 613.23046,8.228531 614.26171,10.103529 614.96484,11.994141 C 615.66796,13.876963 616.01952,15.716805 616.01953,17.513672 C 616.01952,19.302739 615.66796,21.142581 614.96484,23.033203 C 614.26171,24.923827 613.23046,26.794919 611.87109,28.646484 L 609.375,28.646484 C 610.46094,26.873044 611.26562,25.072264 611.78906,23.244141 C 612.32031,21.408205 612.58593,19.498051 612.58594,17.513672 C 612.58593,15.521492 612.32031,13.611338 611.78906,11.783203 C 611.26562,9.9550918 610.46094,8.1504061 609.375,6.3691406 M 610.98047,45.474609 C 610.98046,47.513678 611.18359,48.994145 611.58984,49.916016 C 612.0039,50.837893 612.66015,51.29883 613.55859,51.298828 C 614.45702,51.29883 615.11327,50.833987 615.52734,49.904297 C 615.9414,48.974614 616.14843,47.498053 616.14844,45.474609 C 616.14843,43.44337 615.9414,41.966809 615.52734,41.044922 C 615.11327,40.12306 614.45702,39.662123 613.55859,39.662109 C 612.66015,39.662123 612.0039,40.12306 611.58984,41.044922 C 611.18359,41.958996 610.98046,43.435557 610.98047,45.474609 M 607.5,45.474609 C 607.5,42.591808 608,40.43556 609,39.005859 C 610.00781,37.568375 611.52734,36.849626 613.55859,36.849609 C 615.58202,36.849626 617.09765,37.572282 618.10547,39.017578 C 619.12108,40.455091 619.62889,42.615245 619.62891,45.498047 C 619.62889,48.380865 619.12499,50.533206 618.11719,51.955078 C 617.11718,53.376953 615.59765,54.08789 613.55859,54.087891 C 611.52734,54.08789 610.00781,53.373047 609,51.943359 C 608,50.513675 607.5,48.357427 607.5,45.474609"
+ id="text5181" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 667.5,26.900391 L 679.5,26.900391 L 679.5,29.291016 L 667.5,29.291016 L 667.5,26.900391 M 670.20703,48.849609 L 670.20703,45.638672 L 676.79297,45.638672 L 676.79297,48.849609 L 670.20703,48.849609"
+ id="text5187" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 733.33594,9.3222656 L 735.70313,9.3222656 L 735.70313,15.298828 L 741.53906,15.298828 L 741.53906,17.630859 L 735.70313,17.630859 L 735.70313,23.630859 L 733.33594,23.630859 L 733.33594,17.630859 L 727.5,17.630859 L 727.5,15.298828 L 733.33594,15.298828 L 733.33594,9.3222656 M 727.5,47.818359 L 741.53906,47.818359 L 741.53906,50.150391 L 727.5,50.150391 L 727.5,47.818359 M 727.5,42.779297 L 741.53906,42.779297 L 741.53906,45.111328 L 727.5,45.111328 L 727.5,42.779297"
+ id="text5201" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 11.070313,95.601563 L 11.070313,86.148438 L 7.65625,86.148438 L 7.65625,84.09375 L 16.828125,84.09375 L 16.828125,86.148438 L 13.4375,86.148438 L 13.4375,95.601563 L 11.070313,95.601563 M 22.859375,94.546875 C 22.572911,94.989584 22.197911,95.328125 21.734375,95.5625 C 21.270829,95.791666 20.731767,95.90625 20.117188,95.90625 C 19.294269,95.90625 18.658853,95.671875 18.210938,95.203125 C 17.768228,94.734376 17.546874,94.06771 17.546875,93.203125 C 17.546874,92.401045 17.768228,91.789066 18.210938,91.367188 C 18.658853,90.945317 19.395831,90.656255 20.421875,90.5 C 20.656246,90.463547 20.963538,90.42188 21.34375,90.375 C 22.307286,90.250005 22.789057,89.97136 22.789063,89.539063 C 22.789057,89.195319 22.682286,88.950527 22.46875,88.804688 C 22.255203,88.653653 21.898433,88.578132 21.398438,88.578125 C 20.9401,88.578132 20.588538,88.669278 20.34375,88.851563 C 20.098955,89.033861 19.97656,89.294277 19.976563,89.632813 L 19.976563,89.757813 L 17.851563,89.757813 L 17.851563,89.601563 C 17.851562,88.731778 18.158853,88.049487 18.773438,87.554688 C 19.388018,87.054696 20.236976,86.804696 21.320313,86.804688 C 22.507807,86.804696 23.41666,87.010425 24.046875,87.421875 C 24.682284,87.833341 24.999992,88.427091 25,89.203125 L 25,94.03125 C 24.999992,94.385418 25.03645,94.651043 25.109375,94.828125 C 25.182283,95.000001 25.304679,95.130209 25.476563,95.21875 L 25.476563,95.601563 L 23.109375,95.601563 C 23.031244,95.455729 22.971348,95.294271 22.929688,95.117188 C 22.888015,94.940105 22.864577,94.750001 22.859375,94.546875 M 22.820313,91.421875 C 22.450515,91.593754 22.023432,91.731775 21.539063,91.835938 C 21.059892,91.940108 20.812496,91.994795 20.796875,92 C 20.39583,92.114587 20.11458,92.257816 19.953125,92.429688 C 19.796872,92.601566 19.718747,92.838544 19.71875,93.140625 C 19.718747,93.453127 19.82031,93.703127 20.023438,93.890625 C 20.226559,94.072918 20.499997,94.164064 20.84375,94.164063 C 21.458329,94.164064 21.940099,93.992189 22.289063,93.648438 C 22.643224,93.299481 22.820307,92.825524 22.820313,92.226563 L 22.820313,91.421875 M 27.039063,84.09375 L 29.25,84.09375 L 29.25,88.164063 C 29.531246,87.721362 29.882809,87.388029 30.304688,87.164063 C 30.731766,86.934905 31.216141,86.820321 31.757813,86.820313 C 32.783847,86.820321 33.622388,87.2448 34.273438,88.09375 C 34.92447,88.937507 35.249991,90.036464 35.25,91.390625 C 35.249991,92.734378 34.92447,93.820314 34.273438,94.648438 C 33.622388,95.476563 32.773431,95.890625 31.726563,95.890625 C 31.179682,95.890625 30.70312,95.776041 30.296875,95.546875 C 29.895829,95.317709 29.531246,94.953126 29.203125,94.453125 L 29.203125,95.601563 L 27.039063,95.601563 L 27.039063,84.09375 M 32.992188,91.296875 C 32.992181,90.51563 32.828118,89.903652 32.5,89.460938 C 32.171869,89.013027 31.721348,88.789069 31.148438,88.789063 C 30.544266,88.789069 30.075517,89.007819 29.742188,89.445313 C 29.414059,89.87761 29.249997,90.494797 29.25,91.296875 C 29.249997,92.161462 29.406247,92.817711 29.71875,93.265625 C 30.036454,93.713544 30.497391,93.937502 31.101563,93.9375 C 31.71614,93.937502 32.18489,93.713544 32.507813,93.265625 C 32.830722,92.812503 32.992181,92.156253 32.992188,91.296875"
+ id="text5427" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 789.76563,44.369141 L 792.57031,44.369141 C 793.23176,44.369143 793.71353,44.249351 794.01563,44.009766 C 794.3177,43.770185 794.46874,43.392581 794.46875,42.876953 C 794.46874,42.340499 794.3203,41.955083 794.02344,41.720703 C 793.72656,41.481125 793.23697,41.361333 792.55469,41.361328 L 789.76563,41.361328 L 789.76563,44.369141 M 789.76563,39.392578 L 792.46875,39.392578 C 793.05208,39.392585 793.47916,39.293627 793.75,39.095703 C 794.02083,38.892586 794.15624,38.574878 794.15625,38.142578 C 794.15624,37.720712 794.02343,37.416025 793.75781,37.228516 C 793.49739,37.035817 793.06249,36.939463 792.45313,36.939453 L 789.76563,36.939453 L 789.76563,39.392578 M 787.5,46.447266 L 787.5,34.939453 L 792.92188,34.939453 C 794.09895,34.939465 794.99478,35.189464 795.60938,35.689453 C 796.22916,36.184255 796.53905,36.905609 796.53906,37.853516 C 796.53905,38.436857 796.42447,38.923836 796.19531,39.314453 C 795.96614,39.705085 795.62239,40.007168 795.16406,40.220703 C 795.7578,40.460292 796.20051,40.806646 796.49219,41.259766 C 796.78905,41.707687 796.93749,42.267582 796.9375,42.939453 C 796.93749,44.059247 796.57291,44.92383 795.84375,45.533203 C 795.11457,46.142578 794.08072,46.447266 792.74219,46.447266 L 787.5,46.447266 M 803.45313,45.392578 C 803.16666,45.835287 802.79166,46.173828 802.32813,46.408203 C 801.86458,46.63737 801.32552,46.751953 800.71094,46.751953 C 799.88802,46.751953 799.2526,46.517578 798.80469,46.048828 C 798.36198,45.580079 798.14062,44.913413 798.14063,44.048828 C 798.14062,43.246748 798.36198,42.634769 798.80469,42.212891 C 799.2526,41.79102 799.98958,41.501958 801.01563,41.345703 C 801.25,41.30925 801.55729,41.267583 801.9375,41.220703 C 802.90104,41.095708 803.38281,40.817063 803.38281,40.384766 C 803.38281,40.041022 803.27604,39.796231 803.0625,39.650391 C 802.84895,39.499356 802.49218,39.423835 801.99219,39.423828 C 801.53385,39.423835 801.18229,39.514981 800.9375,39.697266 C 800.69271,39.879564 800.57031,40.13998 800.57031,40.478516 L 800.57031,40.603516 L 798.44531,40.603516 L 798.44531,40.447266 C 798.44531,39.577481 798.7526,38.89519 799.36719,38.400391 C 799.98177,37.900399 800.83073,37.650399 801.91406,37.650391 C 803.10156,37.650399 804.01041,37.856128 804.64063,38.267578 C 805.27603,38.679044 805.59374,39.272794 805.59375,40.048828 L 805.59375,44.876953 C 805.59374,45.231121 805.6302,45.496746 805.70313,45.673828 C 805.77603,45.845704 805.89843,45.975912 806.07031,46.064453 L 806.07031,46.447266 L 803.70313,46.447266 C 803.62499,46.301432 803.5651,46.139974 803.52344,45.962891 C 803.48176,45.785808 803.45833,45.595704 803.45313,45.392578 M 803.41406,42.267578 C 803.04427,42.439457 802.61718,42.577478 802.13281,42.681641 C 801.65364,42.785811 801.40625,42.840498 801.39063,42.845703 C 800.98958,42.96029 800.70833,43.103519 800.54688,43.275391 C 800.39062,43.447269 800.3125,43.684248 800.3125,43.986328 C 800.3125,44.29883 800.41406,44.54883 800.61719,44.736328 C 800.82031,44.918621 801.09375,45.009767 801.4375,45.009766 C 802.05208,45.009767 802.53385,44.837892 802.88281,44.494141 C 803.23697,44.145185 803.41406,43.671227 803.41406,43.072266 L 803.41406,42.267578 M 812.71875,43.244141 L 814.96094,43.244141 C 814.86718,44.322268 814.47395,45.173829 813.78125,45.798828 C 813.08854,46.423828 812.19791,46.736328 811.10938,46.736328 C 809.875,46.736328 808.90625,46.335287 808.20313,45.533203 C 807.50521,44.725913 807.15625,43.611331 807.15625,42.189453 C 807.15625,40.772792 807.51302,39.663418 808.22656,38.861328 C 808.94531,38.054045 809.93229,37.650399 811.1875,37.650391 C 812.28645,37.650399 813.16666,37.942066 813.82813,38.525391 C 814.49478,39.108731 814.86718,39.92123 814.94531,40.962891 L 812.6875,40.962891 C 812.62499,40.509772 812.46614,40.163418 812.21094,39.923828 C 811.95572,39.684252 811.61979,39.56446 811.20313,39.564453 C 810.64062,39.56446 810.21875,39.785814 809.9375,40.228516 C 809.66146,40.67123 809.52343,41.335292 809.52344,42.220703 C 809.52343,43.038415 809.66666,43.668623 809.95313,44.111328 C 810.24479,44.54883 810.66145,44.76758 811.20313,44.767578 C 811.62499,44.76758 811.96354,44.639976 812.21875,44.384766 C 812.47395,44.12956 812.64062,43.749352 812.71875,43.244141 M 816.44531,46.447266 L 816.44531,34.939453 L 818.65625,34.939453 L 818.65625,40.978516 L 821.35938,37.955078 L 824.09375,37.955078 L 821.13281,41.103516 L 824.27344,46.447266 L 821.54688,46.447266 L 819.51563,42.830078 L 818.65625,43.759766 L 818.65625,46.447266 L 816.44531,46.447266 M 824.79688,43.681641 L 827.0625,43.681641 C 827.08333,44.113935 827.23958,44.436851 827.53125,44.650391 C 827.82291,44.858726 828.26041,44.962892 828.84375,44.962891 C 829.28645,44.962892 829.6276,44.889976 829.86719,44.744141 C 830.11197,44.593101 830.23437,44.382164 830.23438,44.111328 C 830.23437,43.725914 829.78124,43.436852 828.875,43.244141 C 828.5052,43.166019 828.21093,43.098311 827.99219,43.041016 C 826.88802,42.759769 826.11979,42.426436 825.6875,42.041016 C 825.26042,41.655604 825.04687,41.134771 825.04688,40.478516 C 825.04687,39.608731 825.35937,38.921231 825.98438,38.416016 C 826.61458,37.905608 827.46614,37.650399 828.53906,37.650391 C 829.67447,37.650399 830.5651,37.903003 831.21094,38.408203 C 831.86197,38.913419 832.20833,39.624356 832.25,40.541016 L 830.03906,40.541016 C 830.02343,40.181647 829.88541,39.903001 829.625,39.705078 C 829.36979,39.507168 829.01302,39.40821 828.55469,39.408203 C 828.12239,39.40821 827.79948,39.473314 827.58594,39.603516 C 827.3776,39.733731 827.27343,39.929043 827.27344,40.189453 C 827.27343,40.528001 827.83854,40.82748 828.96875,41.087891 C 829.22916,41.145188 829.43489,41.192063 829.58594,41.228516 C 830.71614,41.494146 831.48697,41.814458 831.89844,42.189453 C 832.3151,42.564457 832.52343,43.093102 832.52344,43.775391 C 832.52343,44.738934 832.18228,45.473308 831.5,45.978516 C 830.82291,46.483724 829.83593,46.736328 828.53906,46.736328 C 827.36718,46.736328 826.45052,46.473307 825.78906,45.947266 C 825.1276,45.421225 824.79687,44.697267 824.79688,43.775391 L 824.79688,43.681641 M 840.02344,42.251953 C 840.02343,41.397792 839.86197,40.74675 839.53906,40.298828 C 839.21614,39.84571 838.74739,39.619147 838.13281,39.619141 C 837.52864,39.619147 837.0677,39.843106 836.75,40.291016 C 836.4375,40.738938 836.28125,41.392583 836.28125,42.251953 C 836.28125,43.05404 836.44531,43.673831 836.77344,44.111328 C 837.10677,44.54883 837.57552,44.76758 838.17969,44.767578 C 838.7526,44.76758 839.20312,44.543622 839.53125,44.095703 C 839.85937,43.647789 840.02343,43.033207 840.02344,42.251953 M 834.07031,49.853516 L 834.07031,37.955078 L 836.23438,37.955078 L 836.23438,39.103516 C 836.5625,38.603523 836.92708,38.23894 837.32813,38.009766 C 837.73437,37.780608 838.21093,37.666024 838.75781,37.666016 C 839.80468,37.666024 840.65364,38.080086 841.30469,38.908203 C 841.95572,39.731127 842.28124,40.814459 842.28125,42.158203 C 842.28124,43.517581 841.95572,44.621747 841.30469,45.470703 C 840.65364,46.314453 839.8151,46.736328 838.78906,46.736328 C 838.24739,46.736328 837.76302,46.621745 837.33594,46.392578 C 836.91406,46.163412 836.5625,45.830079 836.28125,45.392578 L 836.28125,49.853516 L 834.07031,49.853516 M 848.70313,45.392578 C 848.41666,45.835287 848.04166,46.173828 847.57813,46.408203 C 847.11458,46.63737 846.57552,46.751953 845.96094,46.751953 C 845.13802,46.751953 844.5026,46.517578 844.05469,46.048828 C 843.61198,45.580079 843.39062,44.913413 843.39063,44.048828 C 843.39062,43.246748 843.61198,42.634769 844.05469,42.212891 C 844.5026,41.79102 845.23958,41.501958 846.26563,41.345703 C 846.5,41.30925 846.80729,41.267583 847.1875,41.220703 C 848.15104,41.095708 848.63281,40.817063 848.63281,40.384766 C 848.63281,40.041022 848.52604,39.796231 848.3125,39.650391 C 848.09895,39.499356 847.74218,39.423835 847.24219,39.423828 C 846.78385,39.423835 846.43229,39.514981 846.1875,39.697266 C 845.94271,39.879564 845.82031,40.13998 845.82031,40.478516 L 845.82031,40.603516 L 843.69531,40.603516 L 843.69531,40.447266 C 843.69531,39.577481 844.0026,38.89519 844.61719,38.400391 C 845.23177,37.900399 846.08073,37.650399 847.16406,37.650391 C 848.35156,37.650399 849.26041,37.856128 849.89063,38.267578 C 850.52603,38.679044 850.84374,39.272794 850.84375,40.048828 L 850.84375,44.876953 C 850.84374,45.231121 850.8802,45.496746 850.95313,45.673828 C 851.02603,45.845704 851.14843,45.975912 851.32031,46.064453 L 851.32031,46.447266 L 848.95313,46.447266 C 848.87499,46.301432 848.8151,46.139974 848.77344,45.962891 C 848.73176,45.785808 848.70833,45.595704 848.70313,45.392578 M 848.66406,42.267578 C 848.29427,42.439457 847.86718,42.577478 847.38281,42.681641 C 846.90364,42.785811 846.65625,42.840498 846.64063,42.845703 C 846.23958,42.96029 845.95833,43.103519 845.79688,43.275391 C 845.64062,43.447269 845.5625,43.684248 845.5625,43.986328 C 845.5625,44.29883 845.66406,44.54883 845.86719,44.736328 C 846.07031,44.918621 846.34375,45.009767 846.6875,45.009766 C 847.30208,45.009767 847.78385,44.837892 848.13281,44.494141 C 848.48697,44.145185 848.66406,43.671227 848.66406,43.072266 L 848.66406,42.267578 M 857.96875,43.244141 L 860.21094,43.244141 C 860.11718,44.322268 859.72395,45.173829 859.03125,45.798828 C 858.33854,46.423828 857.44791,46.736328 856.35938,46.736328 C 855.125,46.736328 854.15625,46.335287 853.45313,45.533203 C 852.75521,44.725913 852.40625,43.611331 852.40625,42.189453 C 852.40625,40.772792 852.76302,39.663418 853.47656,38.861328 C 854.19531,38.054045 855.18229,37.650399 856.4375,37.650391 C 857.53645,37.650399 858.41666,37.942066 859.07813,38.525391 C 859.74478,39.108731 860.11718,39.92123 860.19531,40.962891 L 857.9375,40.962891 C 857.87499,40.509772 857.71614,40.163418 857.46094,39.923828 C 857.20572,39.684252 856.86979,39.56446 856.45313,39.564453 C 855.89062,39.56446 855.46875,39.785814 855.1875,40.228516 C 854.91146,40.67123 854.77343,41.335292 854.77344,42.220703 C 854.77343,43.038415 854.91666,43.668623 855.20313,44.111328 C 855.49479,44.54883 855.91145,44.76758 856.45313,44.767578 C 856.87499,44.76758 857.21354,44.639976 857.46875,44.384766 C 857.72395,44.12956 857.89062,43.749352 857.96875,43.244141 M 866.88281,43.869141 L 869.14844,43.869141 C 868.91926,44.764976 868.45572,45.4681 867.75781,45.978516 C 867.0651,46.483724 866.21874,46.736328 865.21875,46.736328 C 863.98958,46.736328 863.01562,46.32487 862.29688,45.501953 C 861.57812,44.67383 861.21875,43.554039 861.21875,42.142578 C 861.21875,40.751959 861.57292,39.655606 862.28125,38.853516 C 862.98958,38.051441 863.95833,37.650399 865.1875,37.650391 C 866.48958,37.650399 867.49478,38.046232 868.20313,38.837891 C 868.91145,39.624356 869.26562,40.74675 869.26563,42.205078 C 869.26562,42.366541 869.26301,42.488936 869.25781,42.572266 C 869.2578,42.650394 869.2526,42.725915 869.24219,42.798828 L 863.57031,42.798828 C 863.60156,43.465498 863.76302,43.968101 864.05469,44.306641 C 864.35156,44.645184 864.77604,44.814455 865.32813,44.814453 C 865.71874,44.814455 866.03906,44.738934 866.28906,44.587891 C 866.53906,44.431643 866.73697,44.19206 866.88281,43.869141 M 863.57031,41.306641 L 866.91406,41.306641 C 866.89322,40.73373 866.73958,40.298834 866.45313,40.001953 C 866.17187,39.699877 865.76562,39.548835 865.23438,39.548828 C 864.73958,39.548835 864.34895,39.699877 864.0625,40.001953 C 863.78125,40.304043 863.61718,40.738938 863.57031,41.306641"
+ id="text5207" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 840,17.646484 L 797.02608,17.646484"
+ id="path5439" />
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 802.5,25.146484 L 802.5,10.146484 L 787.5,17.646484 L 802.5,25.146484 z "
+ id="path5441" />
+ <g
+ id="g5459"
+ transform="translate(0,7.5)">
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 82.50003,75 L 54.020182,75"
+ id="path5453" />
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 60,82.5 L 60,67.5 L 45,75 L 60,82.5 z "
+ id="path5455" />
+ <path
+ id="path5457"
+ d="M 45,67.5 C 45,82.5 45,82.5 45,82.5"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <g
+ id="g5464"
+ transform="matrix(-1,9.581637e-17,-9.581637e-17,-1,127.5,172.5)">
+ <path
+ id="path5466"
+ d="M 82.50003,75 L 54.020182,75"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path5468"
+ d="M 60,82.5 L 60,67.5 L 45,75 L 60,82.5 z "
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 45,67.5 C 45,82.5 45,82.5 45,82.5"
+ id="path5470" />
+ </g>
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 107.0625,80.560547 L 105.23438,78.779297 L 107.17969,76.763672 L 109.05469,78.591797 C 109.30467,78.123052 109.49608,77.587897 109.62891,76.986328 C 109.7617,76.384773 109.82811,75.728524 109.82813,75.017578 C 109.82811,73.119151 109.40233,71.646496 108.55078,70.599609 C 107.69921,69.544936 106.5078,69.017593 104.97656,69.017578 C 103.46093,69.017593 102.28124,69.54103 101.4375,70.587891 C 100.59374,71.634778 100.17187,73.111339 100.17188,75.017578 C 100.17187,76.916022 100.59374,78.392583 101.4375,79.447266 C 102.28124,80.494144 103.46093,81.017581 104.97656,81.017578 C 105.36718,81.017581 105.73436,80.978518 106.07813,80.900391 C 106.42968,80.822268 106.7578,80.708987 107.0625,80.560547 M 109.55859,82.916016 C 108.97264,83.306641 108.28905,83.603516 107.50781,83.806641 C 106.73436,84.009765 105.89061,84.111328 104.97656,84.111328 C 102.39843,84.111328 100.34765,83.291016 98.824219,81.650391 C 97.308592,80.009769 96.55078,77.798834 96.550781,75.017578 C 96.55078,72.228527 97.308592,70.017592 98.824219,68.384766 C 100.34765,66.744158 102.39843,65.923846 104.97656,65.923828 C 107.55468,65.923846 109.60545,66.744158 111.12891,68.384766 C 112.66014,70.025404 113.42576,72.23634 113.42578,75.017578 C 113.42576,76.236336 113.26951,77.353522 112.95703,78.369141 C 112.64451,79.376957 112.18358,80.259769 111.57422,81.017578 L 113.44922,82.810547 L 111.52734,84.826172 L 109.55859,82.916016"
+ id="text5474" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 158.94141,83.630859 L 153.99609,66.369141 L 157.67578,66.369141 L 160.62891,78.544922 L 163.125,66.369141 L 166.91016,66.369141 L 169.40625,78.544922 L 172.35938,66.369141 L 176.00391,66.369141 L 171.07031,83.630859 L 167.68359,83.630859 L 165.01172,70.412109 L 162.32813,83.630859 L 158.94141,83.630859"
+ id="text5482" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 218.52539,83.630859 L 218.52539,66.369141 L 231.05273,66.369141 L 231.05273,69.369141 L 222.0293,69.369141 L 222.0293,73.048828 L 230.2793,73.048828 L 230.2793,76.001953 L 222.0293,76.001953 L 222.0293,80.443359 L 231.47461,80.443359 L 231.47461,83.630859 L 218.52539,83.630859"
+ id="text5492" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 281.4375,73.916016 L 285.60938,73.916016 C 286.51561,73.916025 287.17968,73.732432 287.60156,73.365234 C 288.03124,72.998058 288.24608,72.419933 288.24609,71.630859 C 288.24608,70.880872 288.03905,70.314466 287.625,69.931641 C 287.21093,69.54103 286.59374,69.345717 285.77344,69.345703 L 281.4375,69.345703 L 281.4375,73.916016 M 277.88672,83.630859 L 277.88672,66.369141 L 286.25391,66.369141 C 288.13671,66.369158 289.53124,66.771501 290.4375,67.576172 C 291.34373,68.380875 291.79686,69.611342 291.79688,71.267578 C 291.79686,72.322277 291.5742,73.201182 291.12891,73.904297 C 290.69139,74.607431 290.05858,75.087899 289.23047,75.345703 C 289.98045,75.611336 290.5117,76.017586 290.82422,76.564453 C 291.14452,77.111335 291.32811,77.962896 291.375,79.119141 L 291.44531,81.158203 C 291.4453,81.173831 291.4453,81.197268 291.44531,81.228516 C 291.46873,82.259767 291.69139,82.884766 292.11328,83.103516 L 292.11328,83.630859 L 288.22266,83.630859 C 288.09764,83.388672 287.99999,83.091797 287.92969,82.740234 C 287.86718,82.380861 287.82811,81.95508 287.8125,81.462891 L 287.76563,79.646484 C 287.72655,78.576177 287.52343,77.853521 287.15625,77.478516 C 286.79686,77.103522 286.14452,76.916022 285.19922,76.916016 L 281.4375,76.916016 L 281.4375,83.630859 L 277.88672,83.630859"
+ id="text5500" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 343.24219,83.630859 L 343.24219,69.451172 L 338.12109,69.451172 L 338.12109,66.369141 L 351.87891,66.369141 L 351.87891,69.451172 L 346.79297,69.451172 L 346.79297,83.630859 L 343.24219,83.630859"
+ id="text5504" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 407.06836,83.630859 L 403.51758,83.630859 L 403.51758,77.197266 L 397.24805,66.369141 L 401.5957,66.369141 L 405.28711,73.810547 L 408.69727,66.369141 L 412.75195,66.369141 L 407.06836,77.197266 L 407.06836,83.630859"
+ id="text5518" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 458.08594,66.105469 L 461.67188,66.105469 L 461.67188,76.933594 C 461.67187,78.269536 461.93749,79.246098 462.46875,79.863281 C 462.99999,80.472659 463.84374,80.777346 465,80.777344 C 466.17187,80.777346 467.02343,80.472659 467.55469,79.863281 C 468.09374,79.25391 468.36327,78.277349 468.36328,76.933594 L 468.36328,66.105469 L 471.91406,66.105469 L 471.91406,77.320313 C 471.91405,79.437504 471.3203,81.062502 470.13281,82.195313 C 468.95311,83.328125 467.24999,83.894531 465.02344,83.894531 C 462.78124,83.894531 461.0625,83.332031 459.86719,82.207031 C 458.67969,81.074221 458.08594,79.445316 458.08594,77.320313 L 458.08594,66.105469"
+ id="text5522" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 523.22461,83.630859 L 523.22461,66.369141 L 526.77539,66.369141 L 526.77539,83.630859 L 523.22461,83.630859"
+ id="text5526" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 580.18359,75 C 580.18359,76.898444 580.60546,78.375005 581.44922,79.429688 C 582.29296,80.476566 583.47265,81.000003 584.98828,81 C 586.51952,81.000003 587.71093,80.476566 588.5625,79.429688 C 589.41405,78.375005 589.83983,76.898444 589.83984,75 C 589.83983,73.101573 589.41405,71.628918 588.5625,70.582031 C 587.71093,69.527358 586.51952,69.000015 584.98828,69 C 583.47265,69.000015 582.29296,69.523452 581.44922,70.570313 C 580.60546,71.617199 580.18359,73.093761 580.18359,75 M 576.5625,75 C 576.5625,72.210949 577.32031,70.000014 578.83594,68.367188 C 580.35937,66.726579 582.41015,65.906268 584.98828,65.90625 C 587.56639,65.906268 589.61717,66.726579 591.14063,68.367188 C 592.67186,70.007826 593.43748,72.218761 593.4375,75 C 593.43748,77.781256 592.67186,79.992191 591.14063,81.632813 C 589.61717,83.273438 587.56639,84.09375 584.98828,84.09375 C 582.41015,84.09375 580.35937,83.273438 578.83594,81.632813 C 577.32031,79.992191 576.5625,77.781256 576.5625,75"
+ id="text5530" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 641.97656,74.361328 L 645.41016,74.361328 C 646.33983,74.361337 647.01561,74.166025 647.4375,73.775391 C 647.85936,73.376963 648.0703,72.740245 648.07031,71.865234 C 648.0703,71.044934 647.86327,70.423841 647.44922,70.001953 C 647.03515,69.580092 646.41796,69.369155 645.59766,69.369141 L 641.97656,69.369141 L 641.97656,74.361328 M 641.95313,77.490234 L 641.95313,83.630859 L 638.40234,83.630859 L 638.40234,66.369141 L 646.07813,66.369141 C 647.89061,66.369158 649.26171,66.841814 650.19141,67.787109 C 651.12889,68.724624 651.59764,70.103529 651.59766,71.923828 C 651.59764,73.705088 651.14061,75.080087 650.22656,76.048828 C 649.31249,77.009772 648.0078,77.490241 646.3125,77.490234 L 641.95313,77.490234"
+ id="text5534" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 709.24805,63.919922 L 709.24805,66.369141 C 709.17772,66.369155 709.08007,66.365249 708.95508,66.357422 C 708.83007,66.349624 708.74413,66.345718 708.69727,66.345703 C 707.90819,66.345718 707.37304,66.498062 707.0918,66.802734 C 706.81835,67.099624 706.68163,67.732435 706.68164,68.701172 L 706.68164,71.513672 C 706.68163,72.66993 706.50585,73.490242 706.1543,73.974609 C 705.80273,74.458991 705.16992,74.806647 704.25586,75.017578 C 705.16992,75.228522 705.80273,75.572271 706.1543,76.048828 C 706.50585,76.525395 706.68163,77.341801 706.68164,78.498047 L 706.68164,81.322266 C 706.68163,82.283202 706.81835,82.912108 707.0918,83.208984 C 707.36523,83.505857 707.90038,83.654294 708.69727,83.654297 C 708.74413,83.654294 708.83007,83.650388 708.95508,83.642578 C 709.08007,83.634763 709.17772,83.630857 709.24805,83.630859 L 709.24805,86.080078 C 709.13866,86.080073 708.98632,86.08398 708.79102,86.091797 C 708.59569,86.099605 708.45116,86.103511 708.35742,86.103516 C 707.57616,86.103511 706.92382,86.056636 706.40039,85.962891 C 705.87695,85.869136 705.43163,85.724605 705.06445,85.529297 C 704.61913,85.263668 704.30273,84.904293 704.11523,84.451172 C 703.93554,84.005857 703.8457,83.228514 703.8457,82.119141 L 703.8457,79.166016 C 703.8457,78.095706 703.64648,77.337895 703.24805,76.892578 C 702.84961,76.439458 702.17773,76.212896 701.23242,76.212891 C 701.18554,76.212896 701.10742,76.216802 700.99805,76.224609 C 700.88867,76.232427 700.80664,76.236333 700.75195,76.236328 L 700.75195,73.787109 C 700.80664,73.787117 700.88867,73.791023 700.99805,73.798828 C 701.10742,73.806648 701.18554,73.810554 701.23242,73.810547 C 702.16992,73.810554 702.83789,73.583992 703.23633,73.130859 C 703.64257,72.677743 703.8457,71.912119 703.8457,70.833984 L 703.8457,67.904297 C 703.8457,66.787124 703.93554,66.001968 704.11523,65.548828 C 704.30273,65.095719 704.61913,64.736345 705.06445,64.470703 C 705.43163,64.275408 705.87695,64.130876 706.40039,64.037109 C 706.92382,63.943377 707.57616,63.896502 708.35742,63.896484 C 708.45116,63.896502 708.59569,63.900408 708.79102,63.908203 C 708.98632,63.916033 709.13866,63.919939 709.24805,63.919922 M 703.0957,93.966797 L 709.01367,93.966797 L 709.01367,96.462891 L 706.25977,96.462891 L 706.25977,113.8418 L 709.01367,113.8418 L 709.01367,116.33789 L 703.0957,116.33789 L 703.0957,93.966797"
+ id="text5546" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 760.75195,63.908203 L 761.54883,63.908203 C 762.4082,63.90822 763.09961,63.955095 763.62305,64.048828 C 764.14648,64.142595 764.58398,64.291033 764.93555,64.494141 C 765.38085,64.744157 765.69335,65.103532 765.87305,65.572266 C 766.06054,66.033218 766.15429,66.806655 766.1543,67.892578 L 766.1543,70.845703 C 766.15429,71.916025 766.35351,72.677743 766.75195,73.130859 C 767.15038,73.57618 767.82226,73.798836 768.76758,73.798828 C 768.81444,73.798836 768.89257,73.794929 769.00195,73.787109 C 769.11132,73.779304 769.19335,73.775398 769.24805,73.775391 L 769.24805,76.224609 L 768.81445,76.224609 C 767.83788,76.224614 767.15038,76.443364 766.75195,76.880859 C 766.35351,77.318363 766.15429,78.076175 766.1543,79.154297 L 766.1543,82.107422 C 766.15429,83.224607 766.06054,84.009763 765.87305,84.462891 C 765.69335,84.916012 765.38085,85.267574 764.93555,85.517578 C 764.56835,85.712886 764.12304,85.857417 763.59961,85.951172 C 763.07617,86.044917 762.42382,86.091792 761.64258,86.091797 C 761.54883,86.091792 761.40429,86.087886 761.20898,86.080078 C 761.01367,86.072261 760.86133,86.068355 760.75195,86.068359 L 760.75195,83.619141 C 760.82226,83.619138 760.91992,83.623044 761.04492,83.630859 C 761.16992,83.638669 761.25586,83.642576 761.30273,83.642578 C 762.09179,83.642576 762.62304,83.490232 762.89648,83.185547 C 763.17773,82.88867 763.31836,82.263671 763.31836,81.310547 L 763.31836,78.509766 C 763.31836,77.337895 763.49414,76.513677 763.8457,76.037109 C 764.19726,75.55274 764.83007,75.20899 765.74414,75.005859 C 764.83007,74.794928 764.19726,74.447272 763.8457,73.962891 C 763.49414,73.478523 763.31836,72.658212 763.31836,71.501953 L 763.31836,68.666016 C 763.31836,67.712904 763.17773,67.087905 762.89648,66.791016 C 762.62304,66.486343 762.09179,66.333999 761.30273,66.333984 C 761.25586,66.333999 761.16992,66.337906 761.04492,66.345703 C 760.91992,66.35353 760.82226,66.357437 760.75195,66.357422 L 760.75195,63.908203 M 767.00977,93.955078 L 767.00977,116.32617 L 761.08008,116.32617 L 761.08008,113.83008 L 763.8457,113.83008 L 763.8457,96.451172 L 761.08008,96.451172 L 761.08008,93.955078 L 767.00977,93.955078"
+ id="text5554" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 823.79883,62.977287 L 826.21289,62.977287 L 826.21289,86.977287 L 823.79883,86.977287 L 823.79883,62.977287 M 827.10352,113.54369 L 821.29102,93.6101 L 822.87305,93.6101 L 828.70898,113.54369 L 827.10352,113.54369"
+ id="text5564" />
+ <g
+ id="g3597">
+ <path
+ id="text5570"
+ d="M 22.996094,139.10156 C 22.907541,140.40886 22.403635,141.44792 21.484375,142.21875 C 20.565095,142.98958 19.365878,143.375 17.886719,143.375 C 16.183589,143.375 14.859372,142.84375 13.914063,141.78125 C 12.968749,140.71875 12.496093,139.22917 12.496094,137.3125 C 12.496093,135.35417 12.977863,133.85418 13.941406,132.8125 C 14.904945,131.77084 16.29036,131.25001 18.097656,131.25 C 19.566398,131.25001 20.726554,131.60808 21.578125,132.32422 C 22.429677,133.04037 22.897124,134.05209 22.980469,135.35938 L 20.644531,135.35938 C 20.545564,134.70834 20.279939,134.21225 19.847656,133.87109 C 19.415357,133.52996 18.832024,133.35938 18.097656,133.35938 C 17.055984,133.35938 16.264318,133.69532 15.722656,134.36719 C 15.180986,135.03907 14.910153,136.02084 14.910156,137.3125 C 14.910153,138.5625 15.179684,139.52865 15.71875,140.21094 C 16.257808,140.89323 17.024734,141.23438 18.019531,141.23438 C 18.738274,141.23438 19.326815,141.05078 19.785156,140.68359 C 20.243481,140.31641 20.540356,139.78907 20.675781,139.10156 L 22.996094,139.10156 z M 29.558594,142 C 29.27213,142.44271 28.89713,142.77995 28.433594,143.01172 C 27.970048,143.24349 27.430986,143.35937 26.816406,143.35938 C 25.993487,143.35937 25.359373,143.125 24.914063,142.65625 C 24.468749,142.1875 24.246093,141.52083 24.246094,140.65625 C 24.246093,139.85417 24.468749,139.24219 24.914063,138.82031 C 25.359373,138.39844 26.09505,138.10938 27.121094,137.95313 C 27.355465,137.91667 27.662756,137.87501 28.042969,137.82813 C 29.006505,137.70313 29.488275,137.42448 29.488281,136.99219 C 29.488275,136.64844 29.381505,136.40235 29.167969,136.25391 C 28.954422,136.10548 28.597651,136.03126 28.097656,136.03125 C 27.639319,136.03126 27.287757,136.1224 27.042969,136.30469 C 26.798174,136.48699 26.675778,136.7474 26.675781,137.08594 L 26.675781,137.21094 L 24.550781,137.21094 L 24.550781,137.05469 C 24.55078,136.1849 24.858072,135.50131 25.472656,135.00391 C 26.087237,134.50652 26.936195,134.25782 28.019531,134.25781 C 29.207026,134.25782 30.117181,134.46355 30.75,134.875 C 31.382805,135.28647 31.699211,135.88022 31.699219,136.65625 L 31.699219,141.48438 C 31.699211,141.83854 31.735669,142.10287 31.808594,142.27734 C 31.881502,142.45182 32.003898,142.58333 32.175781,142.67188 L 32.175781,143.05469 L 29.808594,143.05469 C 29.730463,142.90885 29.670567,142.7474 29.628906,142.57031 C 29.587234,142.39323 29.563796,142.20313 29.558594,142 L 29.558594,142 z M 29.519531,138.875 C 29.149734,139.04688 28.723953,139.1849 28.242188,139.28906 C 27.760413,139.39323 27.511715,139.44792 27.496094,139.45313 C 27.095049,139.56771 26.815101,139.71094 26.65625,139.88281 C 26.497393,140.05469 26.417966,140.29167 26.417969,140.59375 C 26.417966,140.90625 26.519528,141.15495 26.722656,141.33984 C 26.925778,141.52474 27.199215,141.61719 27.542969,141.61719 C 28.157548,141.61719 28.64062,141.44401 28.992188,141.09766 C 29.343744,140.7513 29.519525,140.27865 29.519531,139.67969 L 29.519531,138.875 z M 39.691406,138.85938 C 39.691399,138.00521 39.529941,137.35287 39.207031,136.90234 C 38.884108,136.45183 38.415359,136.22657 37.800781,136.22656 C 37.19661,136.22657 36.736975,136.45053 36.421875,136.89844 C 36.106767,137.34636 35.949216,138.00001 35.949219,138.85938 C 35.949216,139.66146 36.11458,140.28125 36.445313,140.71875 C 36.776038,141.15625 37.243485,141.375 37.847656,141.375 C 38.420567,141.375 38.871088,141.15104 39.199219,140.70313 C 39.527337,140.25521 39.691399,139.64063 39.691406,138.85938 L 39.691406,138.85938 z M 33.738281,146.46094 L 33.738281,134.5625 L 35.902344,134.5625 L 35.902344,135.71094 C 36.230465,135.21095 36.59635,134.84636 37,134.61719 C 37.403641,134.38803 37.878901,134.27345 38.425781,134.27344 C 39.472649,134.27345 40.321607,134.68621 40.972656,135.51172 C 41.623689,136.33725 41.94921,137.42188 41.949219,138.76563 C 41.94921,140.125 41.623689,141.22787 40.972656,142.07422 C 40.321607,142.92057 39.483066,143.34375 38.457031,143.34375 C 37.915359,143.34375 37.432287,143.22917 37.007813,143 C 36.583329,142.77083 36.230465,142.4375 35.949219,142 L 35.949219,146.46094 L 33.738281,146.46094 z M 43.027344,140.28906 L 45.292969,140.28906 C 45.313799,140.72136 45.470049,141.04297 45.761719,141.25391 C 46.053382,141.46485 46.490881,141.57031 47.074219,141.57031 C 47.516922,141.57031 47.85937,141.4961 48.101563,141.34766 C 48.343744,141.19922 48.464838,140.98959 48.464844,140.71875 C 48.464838,140.33334 48.011713,140.04427 47.105469,139.85156 C 46.735673,139.77344 46.441402,139.70573 46.222656,139.64844 C 45.118487,139.36719 44.351561,139.03386 43.921875,138.64844 C 43.492187,138.26303 43.277343,137.74219 43.277344,137.08594 C 43.277343,136.21615 43.591145,135.52735 44.21875,135.01953 C 44.846352,134.51173 45.696611,134.25782 46.769531,134.25781 C 47.904943,134.25782 48.796869,134.51043 49.445313,135.01563 C 50.093742,135.52084 50.438794,136.23178 50.480469,137.14844 L 48.269531,137.14844 C 48.253901,136.78907 48.117182,136.51042 47.859375,136.3125 C 47.601557,136.11459 47.243485,136.01563 46.785156,136.01563 C 46.352861,136.01563 46.031246,136.08074 45.820313,136.21094 C 45.609372,136.34115 45.503903,136.53646 45.503906,136.79688 C 45.503903,137.13542 46.069007,137.4349 47.199219,137.69531 C 47.45963,137.75261 47.665359,137.79948 47.816406,137.83594 C 48.946608,138.10157 49.718743,138.42188 50.132813,138.79688 C 50.546867,139.17188 50.753898,139.70052 50.753906,140.38281 C 50.753898,141.34636 50.414055,142.08073 49.734375,142.58594 C 49.054681,143.09115 48.066401,143.34375 46.769531,143.34375 C 45.597653,143.34375 44.680987,143.08073 44.019531,142.55469 C 43.358072,142.02865 43.027343,141.30469 43.027344,140.38281 L 43.027344,140.28906 z M 57.011719,143.05469 L 57.011719,131.54688 L 59.378906,131.54688 L 59.378906,140.92969 L 64.996094,140.92969 L 64.996094,143.05469 L 57.011719,143.05469 z M 67.972656,138.79688 C 67.972653,139.64063 68.14583,140.29167 68.492188,140.75 C 68.838538,141.20834 69.332027,141.4375 69.972656,141.4375 C 70.602859,141.4375 71.09114,141.20834 71.4375,140.75 C 71.783847,140.29167 71.957024,139.64063 71.957031,138.79688 C 71.957024,137.95834 71.78515,137.3112 71.441406,136.85547 C 71.09765,136.39975 70.608067,136.17188 69.972656,136.17188 C 69.332027,136.17188 68.838538,136.39975 68.492188,136.85547 C 68.14583,137.3112 67.972653,137.95834 67.972656,138.79688 L 67.972656,138.79688 z M 65.667969,138.79688 C 65.667968,137.38542 66.05078,136.27605 66.816406,135.46875 C 67.582029,134.66147 68.634111,134.25782 69.972656,134.25781 C 71.305983,134.25782 72.356764,134.66147 73.125,135.46875 C 73.89322,136.27605 74.277335,137.38542 74.277344,138.79688 C 74.277335,140.21354 73.89322,141.32552 73.125,142.13281 C 72.356764,142.9401 71.305983,143.34375 69.972656,143.34375 C 68.634111,143.34375 67.582029,142.9401 66.816406,142.13281 C 66.05078,141.32552 65.667968,140.21354 65.667969,138.79688 L 65.667969,138.79688 z M 80.949219,139.85156 L 83.191406,139.85156 C 83.097648,140.92969 82.704419,141.78125 82.011719,142.40625 C 81.319004,143.03125 80.42838,143.34375 79.339844,143.34375 C 78.105465,143.34375 77.138019,142.94141 76.4375,142.13672 C 75.736978,141.33203 75.386718,140.21875 75.386719,138.79688 C 75.386718,137.38021 75.744791,136.26954 76.460938,135.46484 C 77.177081,134.66016 78.162757,134.25782 79.417969,134.25781 C 80.516921,134.25782 81.398431,134.54949 82.0625,135.13281 C 82.726555,135.71615 83.097648,136.52865 83.175781,137.57031 L 80.917969,137.57031 C 80.855463,137.11719 80.696609,136.77084 80.441406,136.53125 C 80.186193,136.29167 79.850255,136.17188 79.433594,136.17188 C 78.87109,136.17188 78.450517,136.39324 78.171875,136.83594 C 77.893226,137.27865 77.753903,137.94271 77.753906,138.82813 C 77.753903,139.64584 77.898434,140.27474 78.1875,140.71484 C 78.476559,141.15495 78.891923,141.375 79.433594,141.375 C 79.855464,141.375 80.194005,141.2474 80.449219,140.99219 C 80.704421,140.73698 80.871088,140.35677 80.949219,139.85156 L 80.949219,139.85156 z M 84.675781,143.05469 L 84.675781,131.54688 L 86.886719,131.54688 L 86.886719,137.58594 L 89.589844,134.5625 L 92.324219,134.5625 L 89.363281,137.71094 L 92.503906,143.05469 L 89.777344,143.05469 L 87.746094,139.4375 L 86.886719,140.36719 L 86.886719,143.05469 L 84.675781,143.05469 z "
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT" />
+ <path
+ id="path5584"
+ d="M 23.746094,146.25 L 12.496094,161.25 L 19.996094,161.25 L 19.996094,168.75 L 27.496094,168.75 L 27.496094,161.25 L 34.996094,161.25 L 23.746094,146.25 z M 22.714844,150.46875 L 24.746094,150.46875 L 27.871094,159.09375 L 25.996094,159.09375 L 25.402344,157.3125 L 22.058594,157.3125 L 21.496094,159.09375 L 19.621094,159.09375 L 22.714844,150.46875 z M 23.746094,152.1875 L 22.527344,155.84375 L 24.933594,155.84375 L 23.746094,152.1875 z "
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 119.9707,129.82617 L 117.58008,137.17383 L 122.37305,137.17383 L 119.9707,129.82617 M 117.9082,126.36914 L 122.00977,126.36914 L 128.23242,143.63086 L 124.50586,143.63086 L 123.33398,140.08008 L 116.64258,140.08008 L 115.50586,143.63086 L 111.76758,143.63086 L 117.9082,126.36914"
+ id="text5641" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 172.98047,138.29297 L 176.48438,138.29297 C 176.61718,139.23829 177.0039,139.94141 177.64453,140.40234 C 178.28515,140.85547 179.21093,141.08203 180.42188,141.08203 C 181.45312,141.08203 182.23046,140.89844 182.75391,140.53125 C 183.27733,140.16407 183.53905,139.6211 183.53906,138.90234 C 183.53905,137.85547 182.03515,136.98829 179.02734,136.30078 C 178.98827,136.29298 178.95312,136.28516 178.92188,136.27734 C 178.84374,136.26173 178.72265,136.23438 178.55859,136.19531 C 176.94921,135.84376 175.80078,135.44923 175.11328,135.01172 C 174.5039,134.6211 174.03906,134.09767 173.71875,133.44141 C 173.39844,132.77735 173.23828,131.99611 173.23828,131.09766 C 173.23828,129.41798 173.80859,128.13283 174.94922,127.24219 C 176.08984,126.34377 177.73828,125.89455 179.89453,125.89453 C 181.91015,125.89455 183.48436,126.37111 184.61719,127.32422 C 185.7578,128.27736 186.35936,129.62111 186.42188,131.35547 L 183.01172,131.35547 C 182.94921,130.51954 182.6289,129.88283 182.05078,129.44531 C 181.47265,129.00783 180.64843,128.78908 179.57813,128.78906 C 178.64843,128.78908 177.92968,128.97267 177.42188,129.33984 C 176.92187,129.69923 176.67187,130.21486 176.67188,130.88672 C 176.67187,131.80079 177.65234,132.48439 179.61328,132.9375 C 180.14452,133.06251 180.55859,133.16017 180.85547,133.23047 C 182.11327,133.55079 183.0039,133.80079 183.52734,133.98047 C 184.05858,134.16017 184.51952,134.35938 184.91016,134.57813 C 185.61327,134.96876 186.14061,135.48829 186.49219,136.13672 C 186.84374,136.77735 187.01952,137.54688 187.01953,138.44531 C 187.01952,140.24219 186.41405,141.63672 185.20313,142.62891 C 183.99218,143.61328 182.28515,144.10547 180.08203,144.10547 C 177.91015,144.10547 176.20703,143.60156 174.97266,142.59375 C 173.73828,141.58594 173.07422,140.15235 172.98047,138.29297"
+ id="text5645" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 236.16211,140.51367 L 239.00977,140.51367 C 240.65819,140.51367 241.8496,140.08399 242.58398,139.22461 C 243.32616,138.35743 243.69725,136.95508 243.69727,135.01758 C 243.69725,133.0879 243.3535,131.66993 242.66602,130.76367 C 241.9785,129.85744 240.90429,129.40431 239.44336,129.4043 L 236.16211,129.4043 L 236.16211,140.51367 M 232.68164,143.63086 L 232.68164,126.36914 L 239.44336,126.36914 C 242.09179,126.36916 244.06444,127.084 245.36133,128.51367 C 246.666,129.94337 247.31834,132.11134 247.31836,135.01758 C 247.31834,136.59571 247.07616,137.98633 246.5918,139.18945 C 246.11522,140.39258 245.41991,141.36133 244.50586,142.0957 C 243.81835,142.64258 243.0371,143.03711 242.16211,143.2793 C 241.2871,143.51367 240.06054,143.63086 238.48242,143.63086 L 232.68164,143.63086"
+ id="text5649" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 293.97656,143.63086 L 293.97656,126.36914 L 306.02344,126.36914 L 306.02344,129.36914 L 297.48047,129.36914 L 297.48047,133.2832 L 304.96875,133.2832 L 304.96875,136.2832 L 297.48047,136.2832 L 297.48047,143.63086 L 293.97656,143.63086"
+ id="text5653" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 365.17969,141.57422 C 364.53905,142.44141 363.80858,143.07813 362.98828,143.48438 C 362.17577,143.89062 361.21874,144.09375 360.11719,144.09375 C 357.70312,144.09375 355.74609,143.25781 354.24609,141.58594 C 352.7539,139.90625 352.00781,137.70313 352.00781,134.97656 C 352.00781,132.22657 352.7539,130.02736 354.24609,128.37891 C 355.73828,126.73049 357.72656,125.90627 360.21094,125.90625 C 362.37499,125.90627 364.14061,126.4258 365.50781,127.46484 C 366.87498,128.49611 367.68748,129.91798 367.94531,131.73047 L 364.32422,131.73047 C 364.10546,130.83204 363.65624,130.14845 362.97656,129.67969 C 362.30468,129.21095 361.42577,128.97658 360.33984,128.97656 C 358.89452,128.97658 357.75781,129.50783 356.92969,130.57031 C 356.10937,131.62501 355.69921,133.08595 355.69922,134.95313 C 355.69921,136.82813 356.1289,138.29688 356.98828,139.35938 C 357.84765,140.42188 359.02734,140.95313 360.52734,140.95313 C 361.65233,140.95313 362.59374,140.6211 363.35156,139.95703 C 364.10936,139.29297 364.57811,138.38282 364.75781,137.22656 L 360.84375,137.22656 L 360.84375,134.27344 L 367.99219,134.27344 L 367.99219,143.61328 L 365.61328,143.61328 L 365.17969,141.57422"
+ id="text5657" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 412.86328,143.63086 L 412.86328,126.36914 L 416.4375,126.36914 L 416.4375,132.80273 L 423.5625,132.80273 L 423.5625,126.36914 L 427.13672,126.36914 L 427.13672,143.63086 L 423.5625,143.63086 L 423.5625,135.97852 L 416.4375,135.97852 L 416.4375,143.63086 L 412.86328,143.63086"
+ id="text5661" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 474.48047,136.95703 L 477.91406,136.95703 L 477.91406,139.04297 C 477.91406,139.64453 478.09375,140.10547 478.45313,140.42578 C 478.8125,140.73828 479.32812,140.89453 480,140.89453 C 480.73437,140.89453 481.24609,140.70313 481.53516,140.32031 C 481.82421,139.9375 481.96874,139.21875 481.96875,138.16406 L 481.96875,126.12891 L 485.51953,126.12891 L 485.51953,138.32813 C 485.51952,139.42188 485.45311,140.22657 485.32031,140.74219 C 485.1953,141.25 484.98436,141.69922 484.6875,142.08984 C 484.23436,142.66797 483.61327,143.10938 482.82422,143.41406 C 482.03515,143.71875 481.10937,143.87109 480.04688,143.87109 C 479.07031,143.87109 478.20703,143.73828 477.45703,143.47266 C 476.70703,143.20703 476.08203,142.8125 475.58203,142.28906 C 475.18359,141.86719 474.89844,141.39844 474.72656,140.88281 C 474.5625,140.35938 474.48047,139.5 474.48047,138.30469 L 474.48047,136.95703"
+ id="text5665" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 532.32422,143.63086 L 532.32422,126.36914 L 535.875,126.36914 L 535.875,133.45898 L 542.61328,126.36914 L 547.05469,126.36914 L 540.16406,133.35352 L 547.67578,143.63086 L 543.33984,143.63086 L 537.71484,135.73242 L 535.875,137.56055 L 535.875,143.63086 L 532.32422,143.63086"
+ id="text5669" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 594.01172,143.63086 L 594.01172,126.36914 L 597.5625,126.36914 L 597.5625,140.44336 L 605.98828,140.44336 L 605.98828,143.63086 L 594.01172,143.63086"
+ id="text5673" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 143.15039,203.63086 L 143.15039,200.63086 L 152.53711,189.49805 L 143.33789,189.49805 L 143.33789,186.36914 L 156.84961,186.36914 L 156.84961,189.36914 L 147.43945,200.51367 L 156.63867,200.51367 L 156.63867,203.63086 L 143.15039,203.63086"
+ id="text5679" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 202.37109,203.63086 L 207.79688,194.81836 L 202.37109,186.36914 L 206.47266,186.36914 L 210,192.4043 L 213.50391,186.36914 L 217.62891,186.36914 L 212.20313,194.79492 L 217.62891,203.63086 L 213.52734,203.63086 L 210,197.6543 L 206.47266,203.63086 L 202.37109,203.63086"
+ id="text5683" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 277.875,197.68359 C 277.74217,199.64454 276.98436,201.20313 275.60156,202.35938 C 274.22655,203.51563 272.42968,204.09375 270.21094,204.09375 C 267.65624,204.09375 265.66796,203.29688 264.24609,201.70313 C 262.83203,200.10938 262.125,197.87501 262.125,195 C 262.125,192.06251 262.84765,189.81251 264.29297,188.25 C 265.73828,186.68752 267.8164,185.90627 270.52734,185.90625 C 272.73046,185.90627 274.46874,186.44533 275.74219,187.52344 C 277.02342,188.59377 277.72655,190.10939 277.85156,192.07031 L 274.34766,192.07031 C 274.19921,191.09376 273.80077,190.35158 273.15234,189.84375 C 272.50389,189.32814 271.6289,189.07033 270.52734,189.07031 C 268.96484,189.07033 267.77734,189.57423 266.96484,190.58203 C 266.15234,191.58986 265.74609,193.06251 265.74609,195 C 265.74609,196.87501 266.14843,198.32422 266.95313,199.34766 C 267.76562,200.3711 268.91796,200.88282 270.41016,200.88281 C 271.48827,200.88282 272.37108,200.60938 273.05859,200.0625 C 273.74608,199.50782 274.19139,198.71485 274.39453,197.68359 L 277.875,197.68359"
+ id="text5687" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 328.33594,203.63086 L 322.38281,186.36914 L 326.32031,186.36914 L 329.98828,199.2832 L 333.72656,186.36914 L 337.61719,186.36914 L 331.73438,203.63086 L 328.33594,203.63086"
+ id="text5691" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 386.32031,200.51367 L 390.52734,200.51367 C 391.51952,200.51367 392.24218,200.33399 392.69531,199.97461 C 393.14843,199.61524 393.37499,199.04883 393.375,198.27539 C 393.37499,197.47071 393.15233,196.89258 392.70703,196.54102 C 392.26171,196.18165 391.52733,196.00196 390.50391,196.00195 L 386.32031,196.00195 L 386.32031,200.51367 M 386.32031,193.04883 L 390.375,193.04883 C 391.24999,193.04884 391.89061,192.9004 392.29688,192.60352 C 392.70311,192.29884 392.90624,191.82228 392.90625,191.17383 C 392.90624,190.54103 392.70702,190.084 392.30859,189.80273 C 391.91796,189.51369 391.26561,189.36915 390.35156,189.36914 L 386.32031,189.36914 L 386.32031,193.04883 M 382.92188,203.63086 L 382.92188,186.36914 L 391.05469,186.36914 C 392.8203,186.36916 394.16405,186.74416 395.08594,187.49414 C 396.01561,188.23634 396.48045,189.31837 396.48047,190.74023 C 396.48045,191.61525 396.30858,192.34571 395.96484,192.93164 C 395.62108,193.51759 395.10545,193.97071 394.41797,194.29102 C 395.30858,194.6504 395.97264,195.16993 396.41016,195.84961 C 396.85545,196.52149 397.07811,197.36133 397.07813,198.36914 C 397.07811,200.04883 396.53123,201.34571 395.4375,202.25977 C 394.34374,203.17383 392.79296,203.63086 390.78516,203.63086 L 382.92188,203.63086"
+ id="text5695" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 442.88672,203.63086 L 442.88672,186.36914 L 446.60156,186.36914 L 453.60938,198.22852 L 453.60938,186.36914 L 457.11328,186.36914 L 457.11328,203.63086 L 453.44531,203.63086 L 446.39063,191.77148 L 446.39063,203.63086 L 442.88672,203.63086"
+ id="text5699" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 501.32813,203.63086 L 501.32813,186.36914 L 506.57813,186.36914 L 510.01172,199.50586 L 513.39844,186.36914 L 518.67188,186.36914 L 518.67188,203.63086 L 515.34375,203.63086 L 515.34375,189.70898 L 511.83984,203.63086 L 508.20703,203.63086 L 504.65625,189.70898 L 504.65625,203.63086 L 501.32813,203.63086"
+ id="text5703" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 658.22461,134.6543 L 658.22461,131.10352 L 661.77539,131.10352 L 661.77539,134.6543 L 658.22461,134.6543 M 658.22461,143.63086 L 658.22461,140.10352 L 661.77539,140.10352 L 661.77539,143.63086 L 658.22461,143.63086 M 658.24805,164.6543 L 658.24805,161.10352 L 661.77539,161.10352 L 661.77539,164.6543 L 658.24805,164.6543 M 658.24805,177.68555 L 658.24805,176.31445 C 658.90429,176.12695 659.38867,175.83789 659.70117,175.44727 C 660.01367,175.05664 660.16992,174.54883 660.16992,173.92383 L 660.16992,173.63086 L 658.22461,173.63086 L 658.22461,170.10352 L 661.77539,170.10352 L 661.77539,173.49023 C 661.77539,174.66211 661.47851,175.59961 660.88477,176.30273 C 660.29101,177.01367 659.41211,177.47461 658.24805,177.68555"
+ id="text5725" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 720.78516,126.7793 L 723.03516,126.7793 L 723.03516,133.33008 L 720.78516,133.33008 L 720.78516,126.7793 M 716.96484,126.7793 L 719.21484,126.7793 L 719.21484,133.33008 L 716.96484,133.33008 L 716.96484,126.7793 M 718.88672,156.7793 L 721.13672,156.7793 L 721.13672,163.33008 L 718.88672,163.33008 L 718.88672,156.7793"
+ id="text5731" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 772.5,140.60938 L 772.5,129.10156 L 780.85156,129.10156 L 780.85156,131.10156 L 774.83594,131.10156 L 774.83594,133.55469 L 780.33594,133.55469 L 780.33594,135.52344 L 774.83594,135.52344 L 774.83594,138.48438 L 781.13281,138.48438 L 781.13281,140.60938 L 772.5,140.60938 M 782.74219,140.60938 L 782.74219,132.11719 L 784.96875,132.11719 L 784.96875,133.125 C 785.28645,132.71355 785.66145,132.40626 786.09375,132.20313 C 786.52604,131.9948 787.00781,131.89063 787.53906,131.89063 C 788.47656,131.89063 789.17708,132.13543 789.64063,132.625 C 790.10937,133.10938 790.34374,133.84115 790.34375,134.82031 L 790.34375,140.60938 L 788.07031,140.60938 L 788.07031,135.47656 C 788.07031,134.86719 787.96614,134.4323 787.75781,134.17188 C 787.55468,133.91147 787.22135,133.78126 786.75781,133.78125 C 786.22135,133.78126 785.79687,133.94271 785.48438,134.26563 C 785.17187,134.58334 785.01562,135.01823 785.01563,135.57031 L 785.01563,140.60938 L 782.74219,140.60938 M 796.07813,140.67188 C 795.86979,140.67708 795.61979,140.6849 795.32813,140.69531 C 795.04166,140.71094 794.85937,140.71875 794.78125,140.71875 C 793.91146,140.71875 793.3151,140.55729 792.99219,140.23438 C 792.67448,139.90625 792.51562,139.26302 792.51563,138.30469 L 792.51563,133.71094 L 791.39063,133.71094 L 791.39063,132.11719 L 792.51563,132.11719 L 792.51563,129.79688 L 794.76563,129.79688 L 794.76563,132.11719 L 796.07813,132.11719 L 796.07813,133.71094 L 794.76563,133.71094 L 794.76563,138.41406 C 794.76562,138.63802 794.8151,138.78646 794.91406,138.85938 C 795.01302,138.92709 795.21614,138.96094 795.52344,138.96094 L 796.07813,138.96094 L 796.07813,140.67188 M 802.63281,138.03125 L 804.89844,138.03125 C 804.66926,138.92709 804.20572,139.63021 803.50781,140.14063 C 802.8151,140.64583 801.96874,140.89844 800.96875,140.89844 C 799.73958,140.89844 798.76562,140.48698 798.04688,139.66406 C 797.32812,138.83594 796.96875,137.71615 796.96875,136.30469 C 796.96875,134.91407 797.32292,133.81772 798.03125,133.01563 C 798.73958,132.21355 799.70833,131.81251 800.9375,131.8125 C 802.23958,131.81251 803.24478,132.20834 803.95313,133 C 804.66145,133.78647 805.01562,134.90886 805.01563,136.36719 C 805.01562,136.52865 805.01301,136.65105 805.00781,136.73438 C 805.0078,136.8125 805.0026,136.88802 804.99219,136.96094 L 799.32031,136.96094 C 799.35156,137.62761 799.51302,138.13021 799.80469,138.46875 C 800.10156,138.80729 800.52604,138.97656 801.07813,138.97656 C 801.46874,138.97656 801.78906,138.90104 802.03906,138.75 C 802.28906,138.59375 802.48697,138.35417 802.63281,138.03125 M 799.32031,135.46875 L 802.66406,135.46875 C 802.64322,134.89584 802.48958,134.46094 802.20313,134.16406 C 801.92187,133.86199 801.51562,133.71094 800.98438,133.71094 C 800.48958,133.71094 800.09895,133.86199 799.8125,134.16406 C 799.53125,134.46615 799.36718,134.90105 799.32031,135.46875 M 806.52344,140.60938 L 806.52344,132.11719 L 808.63281,132.11719 L 808.63281,133.57031 C 808.92968,132.98699 809.27604,132.5599 809.67188,132.28906 C 810.0677,132.01303 810.53906,131.87501 811.08594,131.875 C 811.17447,131.87501 811.24218,131.87761 811.28906,131.88281 C 811.34114,131.88282 811.38281,131.88543 811.41406,131.89063 L 811.42188,134.19531 L 810.66406,134.19531 C 810.04427,134.19532 809.57812,134.35678 809.26563,134.67969 C 808.95312,135.00261 808.79687,135.48178 808.79688,136.11719 L 808.79688,140.60938 L 806.52344,140.60938"
+ id="text5737" />
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 787.5,172.5 L 787.5,157.5 L 772.5,165 L 787.5,172.5 z "
+ id="path5745" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 810,150 L 810,165 L 780,165"
+ id="path5747" />
+ <g
+ id="g3601">
+ <path
+ id="text5753"
+ d="M 12.496094,197.64063 L 14.832032,197.64063 C 14.92057,198.27084 15.178382,198.73828 15.605469,199.04297 C 16.032548,199.34766 16.649735,199.5 17.457032,199.5 C 18.144525,199.5 18.662754,199.37761 19.011719,199.13281 C 19.36067,198.88802 19.535149,198.52604 19.535157,198.04688 C 19.535149,197.34896 18.532546,196.77084 16.527344,196.3125 C 16.501298,196.3073 16.47786,196.30209 16.457032,196.29688 C 16.404944,196.28646 16.324215,196.26823 16.214844,196.24219 C 15.141924,196.00782 14.3763,195.7448 13.917969,195.45313 C 13.511717,195.19271 13.201822,194.84245 12.988282,194.40234 C 12.774739,193.96225 12.667968,193.44272 12.667969,192.84375 C 12.667968,191.72397 13.048176,190.8659 13.808594,190.26953 C 14.569008,189.67319 15.667965,189.37501 17.105469,189.375 C 18.449212,189.37501 19.499993,189.69272 20.257813,190.32813 C 21.015616,190.96355 21.415355,191.85938 21.457032,193.01563 L 19.183594,193.01563 C 19.14192,192.45834 18.928379,192.03386 18.542969,191.74219 C 18.157546,191.45053 17.608067,191.3047 16.894532,191.30469 C 16.274735,191.3047 15.796871,191.42579 15.460938,191.66797 C 15.124997,191.91017 14.957028,192.25522 14.957032,192.70313 C 14.957028,193.31251 15.610674,193.76824 16.917969,194.07031 C 17.27213,194.15365 17.548172,194.21876 17.746094,194.26563 C 18.584629,194.47917 19.17968,194.64584 19.53125,194.76563 C 19.882805,194.88542 20.188794,195.01824 20.449219,195.16406 C 20.91796,195.42448 21.269522,195.76954 21.503907,196.19922 C 21.738272,196.62891 21.855459,197.14323 21.855469,197.74219 C 21.855459,198.94011 21.451814,199.86849 20.644532,200.52734 C 19.837232,201.1862 18.699212,201.51562 17.230469,201.51563 C 15.782548,201.51562 14.647133,201.17969 13.824219,200.50781 C 13.001301,199.83594 12.558593,198.88021 12.496094,197.64063 L 12.496094,197.64063 z M 23.566407,201.19531 L 23.566407,189.6875 L 25.824219,189.6875 L 25.824219,193.64063 C 26.131507,193.25522 26.497392,192.96485 26.921875,192.76953 C 27.34635,192.57423 27.82161,192.47657 28.347657,192.47656 C 28.84765,192.47657 29.299473,192.56251 29.703125,192.73438 C 30.106764,192.90626 30.433586,193.15105 30.683594,193.46875 C 30.855461,193.6823 30.976554,193.92709 31.046875,194.20313 C 31.117179,194.47917 31.152335,194.92188 31.152344,195.53125 L 31.152344,195.6875 L 31.152344,201.19531 L 28.894532,201.19531 L 28.894532,196.75 C 28.894525,195.69792 28.798171,195.03777 28.605469,194.76953 C 28.412755,194.50131 28.066401,194.36719 27.566407,194.36719 C 27.029944,194.36719 26.605465,194.52735 26.292969,194.84766 C 25.980466,195.16797 25.824216,195.60417 25.824219,196.15625 L 25.824219,201.19531 L 23.566407,201.19531 z M 33.191407,191.75781 L 33.191407,189.6875 L 35.464844,189.6875 L 35.464844,191.75781 L 33.191407,191.75781 z M 33.191407,201.19531 L 33.191407,192.70313 L 35.464844,192.70313 L 35.464844,201.19531 L 33.191407,201.19531 z M 37.886719,201.19531 L 37.886719,194.29688 L 36.675782,194.29688 L 36.675782,192.70313 L 37.886719,192.70313 L 37.886719,191.91406 C 37.886718,191.12241 38.091144,190.54038 38.5,190.16797 C 38.908852,189.79558 39.553383,189.60939 40.433594,189.60938 C 40.595048,189.60939 40.765621,189.61329 40.945313,189.62109 C 41.124996,189.62892 41.316402,189.64324 41.519532,189.66406 L 41.519532,191.46875 L 40.925782,191.46875 C 40.587236,191.46876 40.36458,191.51303 40.257813,191.60156 C 40.151038,191.69011 40.097653,191.85938 40.097657,192.10938 L 40.097657,192.70313 L 41.519532,192.70313 L 41.519532,194.29688 L 40.113282,194.29688 L 40.113282,201.19531 L 37.886719,201.19531 z M 46.449219,201.25781 C 46.240881,201.26302 45.992183,201.27214 45.703125,201.28516 C 45.414059,201.29818 45.230465,201.30469 45.152344,201.30469 C 44.28255,201.30469 43.687498,201.14193 43.367188,200.81641 C 43.046874,200.49089 42.886718,199.84896 42.886719,198.89063 L 42.886719,194.29688 L 41.761719,194.29688 L 41.761719,192.70313 L 42.886719,192.70313 L 42.886719,190.38281 L 45.136719,190.38281 L 45.136719,192.70313 L 46.449219,192.70313 L 46.449219,194.29688 L 45.136719,194.29688 L 45.136719,199 C 45.136716,199.22396 45.186195,199.3711 45.285157,199.44141 C 45.384111,199.51172 45.587236,199.54688 45.894532,199.54688 L 46.449219,199.54688 L 46.449219,201.25781 z "
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 24.746094,207.125 L 13.496094,222.125 L 20.996094,222.125 L 20.996094,229.625 L 28.496094,229.625 L 28.496094,222.125 L 35.996094,222.125 L 24.746094,207.125 z "
+ id="path5757" />
+ </g>
+ <g
+ id="g5795"
+ transform="translate(727.5,0)">
+ <text
+ sodipodi:linespacing="125%"
+ id="text5797"
+ y="201.19531"
+ x="31.8125"
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ xml:space="preserve"><tspan
+ y="201.19531"
+ x="31.8125"
+ id="tspan5799"
+ sodipodi:role="line">Shift</tspan></text>
+ <path
+ id="path5801"
+ d="M 27.25,207.125 L 16,222.125 L 23.5,222.125 L 23.5,229.625 L 31,229.625 L 31,222.125 L 38.5,222.125 L 27.25,207.125 z "
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 576.90234,189.63867 L 576.90234,192.20508 L 566.4375,196.48242 L 576.90234,200.74805 L 576.90234,203.31445 L 563.09766,197.63086 L 563.09766,195.29883 L 576.90234,189.63867 M 568.21875,237.68555 L 568.21875,236.31445 C 568.875,236.12695 569.35937,235.83789 569.67188,235.44727 C 569.98437,235.05664 570.14062,234.54883 570.14063,233.92383 L 570.14063,233.63086 L 568.21875,233.63086 L 568.21875,230.10352 L 571.76953,230.10352 L 571.76953,233.49023 C 571.76953,234.6543 571.46875,235.59179 570.86719,236.30273 C 570.27343,237.01367 569.39062,237.47461 568.21875,237.68555"
+ id="text5803" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 623.09766,189.63867 L 636.90234,195.29883 L 636.90234,197.63086 L 623.09766,203.31445 L 623.09766,200.74805 L 633.58594,196.48242 L 623.09766,192.20508 L 623.09766,189.63867 M 628.21875,233.63086 L 628.21875,230.10352 L 631.74609,230.10352 L 631.74609,233.63086 L 628.21875,233.63086"
+ id="text5813" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 688.44727,198.61523 C 688.44726,198.5293 688.44335,198.41602 688.43555,198.27539 C 688.42773,198.12696 688.42382,198.01758 688.42383,197.94727 C 688.42382,197.25977 688.49804,196.68946 688.64648,196.23633 C 688.79492,195.7754 689.0332,195.34571 689.36133,194.94727 C 689.61132,194.6504 689.98242,194.31056 690.47461,193.92773 C 690.9746,193.54493 691.29882,193.26759 691.44727,193.0957 C 691.75976,192.74415 691.9746,192.42775 692.0918,192.14648 C 692.20898,191.86525 692.26757,191.55665 692.26758,191.2207 C 692.26757,190.47853 692.06054,189.9004 691.64648,189.48633 C 691.23241,189.07228 690.65429,188.86525 689.91211,188.86523 C 689.16992,188.86525 688.58398,189.11525 688.1543,189.61523 C 687.73242,190.10744 687.50195,190.80275 687.46289,191.70117 L 684.1582,191.70117 L 684.1582,191.33789 C 684.1582,189.68947 684.67773,188.37697 685.7168,187.40039 C 686.76367,186.41603 688.16992,185.92385 689.93555,185.92383 C 691.74023,185.92385 693.17382,186.38869 694.23633,187.31836 C 695.30663,188.24025 695.84178,189.47853 695.8418,191.0332 C 695.84178,191.58009 695.77928,192.07228 695.6543,192.50977 C 695.5371,192.93946 695.3535,193.33399 695.10352,193.69336 C 694.78319,194.14649 694.2871,194.63868 693.61523,195.16992 C 692.95116,195.69337 692.54882,196.01759 692.4082,196.14258 C 692.11132,196.43165 691.89648,196.73634 691.76367,197.05664 C 691.63866,197.37696 691.57616,197.75977 691.57617,198.20508 C 691.57616,198.24415 691.58007,198.31055 691.58789,198.4043 C 691.59569,198.49805 691.5996,198.56836 691.59961,198.61523 L 688.44727,198.61523 M 688.2832,203.63086 L 688.2832,200.19727 L 691.74023,200.19727 L 691.74023,203.63086 L 688.2832,203.63086 M 686.31445,235.85742 L 692.12695,215.92383 L 693.73242,215.92383 L 687.89648,235.85742 L 686.31445,235.85742"
+ id="text5819" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 18,271.78906 C 17.911447,273.09636 17.406239,274.13542 16.484375,274.90625 C 15.5677,275.67708 14.369784,276.0625 12.890625,276.0625 C 11.187496,276.0625 9.8619761,275.53125 8.9140625,274.46875 C 7.971353,273.40625 7.4999993,271.91667 7.5,270 C 7.4999993,268.04167 7.9817696,266.54168 8.9453125,265.5 C 9.9088511,264.45834 11.294266,263.93751 13.101563,263.9375 C 14.570305,263.93751 15.729158,264.29689 16.578125,265.01563 C 17.432281,265.72918 17.901031,266.73959 17.984375,268.04688 L 15.648438,268.04688 C 15.54947,267.39584 15.283846,266.90105 14.851563,266.5625 C 14.419263,266.21876 13.83593,266.04688 13.101563,266.04688 C 12.059891,266.04688 11.268225,266.38282 10.726563,267.05469 C 10.184892,267.72657 9.9140594,268.70834 9.9140625,270 C 9.9140594,271.25 10.182288,272.21615 10.71875,272.89844 C 11.260412,273.58073 12.028641,273.92188 13.023438,273.92188 C 13.742181,273.92188 14.330722,273.73959 14.789063,273.375 C 15.247387,273.00521 15.544262,272.47657 15.679688,271.78906 L 18,271.78906 M 23.46875,275.80469 C 23.260412,275.8099 23.010412,275.81771 22.71875,275.82813 C 22.432288,275.84375 22.249996,275.85156 22.171875,275.85156 C 21.302081,275.85156 20.705727,275.6901 20.382813,275.36719 C 20.065103,275.03906 19.906249,274.39583 19.90625,273.4375 L 19.90625,268.84375 L 18.78125,268.84375 L 18.78125,267.25 L 19.90625,267.25 L 19.90625,264.92969 L 22.15625,264.92969 L 22.15625,267.25 L 23.46875,267.25 L 23.46875,268.84375 L 22.15625,268.84375 L 22.15625,273.54688 C 22.156247,273.77084 22.205726,273.91927 22.304688,273.99219 C 22.403642,274.0599 22.606767,274.09375 22.914063,274.09375 L 23.46875,274.09375 L 23.46875,275.80469 M 24.789063,275.74219 L 24.789063,267.25 L 26.898438,267.25 L 26.898438,268.70313 C 27.195309,268.1198 27.541663,267.69272 27.9375,267.42188 C 28.333329,267.14584 28.804682,267.00782 29.351563,267.00781 C 29.440099,267.00782 29.507807,267.01043 29.554688,267.01563 C 29.606765,267.01563 29.648432,267.01824 29.679688,267.02344 L 29.6875,269.32813 L 28.929688,269.32813 C 28.309891,269.32813 27.843746,269.48959 27.53125,269.8125 C 27.218747,270.13542 27.062497,270.61459 27.0625,271.25 L 27.0625,275.74219 L 24.789063,275.74219 M 31.023438,275.74219 L 31.023438,264.23438 L 33.296875,264.23438 L 33.296875,275.74219 L 31.023438,275.74219"
+ id="text5827" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 162.96875,266.49609 L 161.375,271.39453 L 164.57031,271.39453 L 162.96875,266.49609 M 161.59375,264.19141 L 164.32813,264.19141 L 168.47656,275.69922 L 165.99219,275.69922 L 165.21094,273.33203 L 160.75,273.33203 L 159.99219,275.69922 L 157.5,275.69922 L 161.59375,264.19141 M 169.53906,275.69922 L 169.53906,264.19141 L 171.8125,264.19141 L 171.8125,275.69922 L 169.53906,275.69922 M 177.64063,275.76172 C 177.43229,275.76693 177.18229,275.77474 176.89063,275.78516 C 176.60416,275.80078 176.42187,275.80859 176.34375,275.80859 C 175.47396,275.80859 174.8776,275.64714 174.55469,275.32422 C 174.23698,274.99609 174.07812,274.35287 174.07813,273.39453 L 174.07813,268.80078 L 172.95313,268.80078 L 172.95313,267.20703 L 174.07813,267.20703 L 174.07813,264.88672 L 176.32813,264.88672 L 176.32813,267.20703 L 177.64063,267.20703 L 177.64063,268.80078 L 176.32813,268.80078 L 176.32813,273.50391 C 176.32812,273.72787 176.3776,273.8763 176.47656,273.94922 C 176.57552,274.01693 176.77864,274.05078 177.08594,274.05078 L 177.64063,274.05078 L 177.64063,275.76172"
+ id="text5831" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 612.96875,266.53906 L 611.375,271.4375 L 614.57031,271.4375 L 612.96875,266.53906 M 611.59375,264.23438 L 614.32813,264.23438 L 618.47656,275.74219 L 615.99219,275.74219 L 615.21094,273.375 L 610.75,273.375 L 609.99219,275.74219 L 607.5,275.74219 L 611.59375,264.23438 M 619.53906,275.74219 L 619.53906,264.23438 L 621.8125,264.23438 L 621.8125,275.74219 L 619.53906,275.74219 M 627.64063,275.80469 C 627.43229,275.8099 627.18229,275.81771 626.89063,275.82813 C 626.60416,275.84375 626.42187,275.85156 626.34375,275.85156 C 625.47396,275.85156 624.8776,275.6901 624.55469,275.36719 C 624.23698,275.03906 624.07812,274.39583 624.07813,273.4375 L 624.07813,268.84375 L 622.95313,268.84375 L 622.95313,267.25 L 624.07813,267.25 L 624.07813,264.92969 L 626.32813,264.92969 L 626.32813,267.25 L 627.64063,267.25 L 627.64063,268.84375 L 626.32813,268.84375 L 626.32813,273.54688 C 626.32812,273.77084 626.3776,273.91927 626.47656,273.99219 C 626.57552,274.0599 626.77864,274.09375 627.08594,274.09375 L 627.64063,274.09375 L 627.64063,275.80469 M 642,274.38281 C 641.57291,274.96094 641.08593,275.38542 640.53906,275.65625 C 639.99739,275.92708 639.35937,276.0625 638.625,276.0625 C 637.01562,276.0625 635.71093,275.50521 634.71094,274.39063 C 633.71614,273.27084 633.21875,271.80209 633.21875,269.98438 C 633.21875,268.15105 633.71614,266.6849 634.71094,265.58594 C 635.70573,264.48699 637.03125,263.93751 638.6875,263.9375 C 640.1302,263.93751 641.30728,264.28387 642.21875,264.97656 C 643.1302,265.66407 643.67186,266.61199 643.84375,267.82031 L 641.42969,267.82031 C 641.28385,267.22136 640.98437,266.76563 640.53125,266.45313 C 640.08333,266.14063 639.49739,265.98438 638.77344,265.98438 C 637.80989,265.98438 637.05208,266.33855 636.5,267.04688 C 635.95312,267.75001 635.67968,268.72397 635.67969,269.96875 C 635.67968,271.21875 635.96614,272.19792 636.53906,272.90625 C 637.11197,273.61459 637.89843,273.96875 638.89844,273.96875 C 639.64843,273.96875 640.27603,273.7474 640.78125,273.30469 C 641.28645,272.86198 641.59895,272.25521 641.71875,271.48438 L 639.10938,271.48438 L 639.10938,269.51563 L 643.875,269.51563 L 643.875,275.74219 L 642.28906,275.74219 L 642,274.38281 M 645.96094,275.74219 L 645.96094,267.25 L 648.07031,267.25 L 648.07031,268.70313 C 648.36718,268.1198 648.71354,267.69272 649.10938,267.42188 C 649.5052,267.14584 649.97656,267.00782 650.52344,267.00781 C 650.61197,267.00782 650.67968,267.01043 650.72656,267.01563 C 650.77864,267.01563 650.82031,267.01824 650.85156,267.02344 L 650.85938,269.32813 L 650.10156,269.32813 C 649.48177,269.32813 649.01562,269.48959 648.70313,269.8125 C 648.39062,270.13542 648.23437,270.61459 648.23438,271.25 L 648.23438,275.74219 L 645.96094,275.74219"
+ id="text5835" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 828,271.78906 C 827.91145,273.09636 827.40624,274.13542 826.48438,274.90625 C 825.5677,275.67708 824.36978,276.0625 822.89063,276.0625 C 821.1875,276.0625 819.86198,275.53125 818.91406,274.46875 C 817.97135,273.40625 817.5,271.91667 817.5,270 C 817.5,268.04167 817.98177,266.54168 818.94531,265.5 C 819.90885,264.45834 821.29427,263.93751 823.10156,263.9375 C 824.5703,263.93751 825.72916,264.29689 826.57813,265.01563 C 827.43228,265.72918 827.90103,266.73959 827.98438,268.04688 L 825.64844,268.04688 C 825.54947,267.39584 825.28385,266.90105 824.85156,266.5625 C 824.41926,266.21876 823.83593,266.04688 823.10156,266.04688 C 822.05989,266.04688 821.26822,266.38282 820.72656,267.05469 C 820.18489,267.72657 819.91406,268.70834 819.91406,270 C 819.91406,271.25 820.18229,272.21615 820.71875,272.89844 C 821.26041,273.58073 822.02864,273.92188 823.02344,273.92188 C 823.74218,273.92188 824.33072,273.73959 824.78906,273.375 C 825.24739,273.00521 825.54426,272.47657 825.67969,271.78906 L 828,271.78906 M 833.46875,275.80469 C 833.26041,275.8099 833.01041,275.81771 832.71875,275.82813 C 832.43229,275.84375 832.25,275.85156 832.17188,275.85156 C 831.30208,275.85156 830.70573,275.6901 830.38281,275.36719 C 830.0651,275.03906 829.90625,274.39583 829.90625,273.4375 L 829.90625,268.84375 L 828.78125,268.84375 L 828.78125,267.25 L 829.90625,267.25 L 829.90625,264.92969 L 832.15625,264.92969 L 832.15625,267.25 L 833.46875,267.25 L 833.46875,268.84375 L 832.15625,268.84375 L 832.15625,273.54688 C 832.15625,273.77084 832.20573,273.91927 832.30469,273.99219 C 832.40364,274.0599 832.60677,274.09375 832.91406,274.09375 L 833.46875,274.09375 L 833.46875,275.80469 M 834.78906,275.74219 L 834.78906,267.25 L 836.89844,267.25 L 836.89844,268.70313 C 837.19531,268.1198 837.54166,267.69272 837.9375,267.42188 C 838.33333,267.14584 838.80468,267.00782 839.35156,267.00781 C 839.4401,267.00782 839.50781,267.01043 839.55469,267.01563 C 839.60677,267.01563 839.64843,267.01824 839.67969,267.02344 L 839.6875,269.32813 L 838.92969,269.32813 C 838.30989,269.32813 837.84375,269.48959 837.53125,269.8125 C 837.21875,270.13542 837.0625,270.61459 837.0625,271.25 L 837.0625,275.74219 L 834.78906,275.74219 M 841.02344,275.74219 L 841.02344,264.23438 L 843.29688,264.23438 L 843.29688,275.74219 L 841.02344,275.74219"
+ id="text5839" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 108.94531,264.01953 L 105.64844,252.51172 L 108.10156,252.51172 L 110.07031,260.62891 L 111.73438,252.51172 L 114.25781,252.51172 L 115.92188,260.62891 L 117.89063,252.51172 L 120.32031,252.51172 L 117.03125,264.01953 L 114.77344,264.01953 L 112.99219,255.20703 L 111.20313,264.01953 L 108.94531,264.01953 M 121.5,254.58203 L 121.5,252.51172 L 123.77344,252.51172 L 123.77344,254.58203 L 121.5,254.58203 M 121.5,264.01953 L 121.5,255.52734 L 123.77344,255.52734 L 123.77344,264.01953 L 121.5,264.01953 M 125.79688,264.01953 L 125.79688,255.52734 L 128.02344,255.52734 L 128.02344,256.53516 C 128.34114,256.12371 128.71614,255.81641 129.14844,255.61328 C 129.58072,255.40496 130.06249,255.30079 130.59375,255.30078 C 131.53124,255.30079 132.23176,255.54558 132.69531,256.03516 C 133.16405,256.51954 133.39843,257.25131 133.39844,258.23047 L 133.39844,264.01953 L 131.125,264.01953 L 131.125,258.88672 C 131.12499,258.27735 131.02083,257.84245 130.8125,257.58203 C 130.60937,257.32162 130.27604,257.19141 129.8125,257.19141 C 129.27604,257.19141 128.85156,257.35287 128.53906,257.67578 C 128.22656,257.9935 128.07031,258.42839 128.07031,258.98047 L 128.07031,264.01953 L 125.79688,264.01953 M 106.64844,284.01953 L 106.64844,272.51172 L 109.01563,272.51172 L 109.01563,277.23828 L 113.50781,272.51172 L 116.46875,272.51172 L 111.875,277.16797 L 116.88281,284.01953 L 113.99219,284.01953 L 110.24219,278.75391 L 109.01563,279.97266 L 109.01563,284.01953 L 106.64844,284.01953 M 122.9375,281.44141 L 125.20313,281.44141 C 124.97395,282.33724 124.51041,283.04037 123.8125,283.55078 C 123.11979,284.05599 122.27343,284.30859 121.27344,284.30859 C 120.04427,284.30859 119.07031,283.89714 118.35156,283.07422 C 117.63281,282.2461 117.27344,281.1263 117.27344,279.71484 C 117.27344,278.32422 117.6276,277.22787 118.33594,276.42578 C 119.04427,275.62371 120.01302,275.22267 121.24219,275.22266 C 122.54427,275.22267 123.54947,275.6185 124.25781,276.41016 C 124.96614,277.19662 125.3203,278.31902 125.32031,279.77734 C 125.3203,279.93881 125.3177,280.0612 125.3125,280.14453 C 125.31249,280.22266 125.30728,280.29818 125.29688,280.37109 L 119.625,280.37109 C 119.65625,281.03776 119.81771,281.54037 120.10938,281.87891 C 120.40625,282.21745 120.83073,282.38672 121.38281,282.38672 C 121.77343,282.38672 122.09374,282.3112 122.34375,282.16016 C 122.59374,282.00391 122.79166,281.76433 122.9375,281.44141 M 119.625,278.87891 L 122.96875,278.87891 C 122.94791,278.306 122.79426,277.8711 122.50781,277.57422 C 122.22656,277.27214 121.82031,277.1211 121.28906,277.12109 C 120.79427,277.1211 120.40364,277.27214 120.11719,277.57422 C 119.83593,277.87631 119.67187,278.3112 119.625,278.87891 M 127.16406,287.42578 L 127.16406,285.58984 C 127.23698,285.60026 127.3125,285.60807 127.39063,285.61328 C 127.46875,285.61849 127.57031,285.62109 127.69531,285.62109 C 128.14323,285.62109 128.47916,285.51432 128.70313,285.30078 C 128.92708,285.09245 129.03906,284.77734 129.03906,284.35547 C 129.03906,284.32422 129.03385,284.28516 129.02344,284.23828 C 129.01302,284.19141 129.0026,284.15234 128.99219,284.12109 L 125.92969,275.52734 L 128.42969,275.52734 L 130.21875,281.65234 L 131.96094,275.52734 L 134.35156,275.52734 L 130.85938,285.54297 C 130.59895,286.29297 130.27343,286.80338 129.88281,287.07422 C 129.49218,287.35026 128.90625,287.48828 128.125,287.48828 C 127.98437,287.48828 127.83333,287.48307 127.67188,287.47266 C 127.51041,287.46224 127.34114,287.44661 127.16406,287.42578"
+ id="text5872" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 708.94531,264.01953 L 705.64844,252.51172 L 708.10156,252.51172 L 710.07031,260.62891 L 711.73438,252.51172 L 714.25781,252.51172 L 715.92188,260.62891 L 717.89063,252.51172 L 720.32031,252.51172 L 717.03125,264.01953 L 714.77344,264.01953 L 712.99219,255.20703 L 711.20313,264.01953 L 708.94531,264.01953 M 721.5,254.58203 L 721.5,252.51172 L 723.77344,252.51172 L 723.77344,254.58203 L 721.5,254.58203 M 721.5,264.01953 L 721.5,255.52734 L 723.77344,255.52734 L 723.77344,264.01953 L 721.5,264.01953 M 725.79688,264.01953 L 725.79688,255.52734 L 728.02344,255.52734 L 728.02344,256.53516 C 728.34114,256.12371 728.71614,255.81641 729.14844,255.61328 C 729.58072,255.40496 730.06249,255.30079 730.59375,255.30078 C 731.53124,255.30079 732.23176,255.54558 732.69531,256.03516 C 733.16405,256.51954 733.39843,257.25131 733.39844,258.23047 L 733.39844,264.01953 L 731.125,264.01953 L 731.125,258.88672 C 731.12499,258.27735 731.02083,257.84245 730.8125,257.58203 C 730.60937,257.32162 730.27604,257.19141 729.8125,257.19141 C 729.27604,257.19141 728.85156,257.35287 728.53906,257.67578 C 728.22656,257.9935 728.07031,258.42839 728.07031,258.98047 L 728.07031,264.01953 L 725.79688,264.01953 M 706.64844,284.01953 L 706.64844,272.51172 L 709.01563,272.51172 L 709.01563,277.23828 L 713.50781,272.51172 L 716.46875,272.51172 L 711.875,277.16797 L 716.88281,284.01953 L 713.99219,284.01953 L 710.24219,278.75391 L 709.01563,279.97266 L 709.01563,284.01953 L 706.64844,284.01953 M 722.9375,281.44141 L 725.20313,281.44141 C 724.97395,282.33724 724.51041,283.04037 723.8125,283.55078 C 723.11979,284.05599 722.27343,284.30859 721.27344,284.30859 C 720.04427,284.30859 719.07031,283.89714 718.35156,283.07422 C 717.63281,282.2461 717.27344,281.1263 717.27344,279.71484 C 717.27344,278.32422 717.6276,277.22787 718.33594,276.42578 C 719.04427,275.62371 720.01302,275.22267 721.24219,275.22266 C 722.54427,275.22267 723.54947,275.6185 724.25781,276.41016 C 724.96614,277.19662 725.3203,278.31902 725.32031,279.77734 C 725.3203,279.93881 725.3177,280.0612 725.3125,280.14453 C 725.31249,280.22266 725.30728,280.29818 725.29688,280.37109 L 719.625,280.37109 C 719.65625,281.03776 719.81771,281.54037 720.10938,281.87891 C 720.40625,282.21745 720.83073,282.38672 721.38281,282.38672 C 721.77343,282.38672 722.09374,282.3112 722.34375,282.16016 C 722.59374,282.00391 722.79166,281.76433 722.9375,281.44141 M 719.625,278.87891 L 722.96875,278.87891 C 722.94791,278.306 722.79426,277.8711 722.50781,277.57422 C 722.22656,277.27214 721.82031,277.1211 721.28906,277.12109 C 720.79427,277.1211 720.40364,277.27214 720.11719,277.57422 C 719.83593,277.87631 719.67187,278.3112 719.625,278.87891 M 727.16406,287.42578 L 727.16406,285.58984 C 727.23698,285.60026 727.3125,285.60807 727.39063,285.61328 C 727.46875,285.61849 727.57031,285.62109 727.69531,285.62109 C 728.14323,285.62109 728.47916,285.51432 728.70313,285.30078 C 728.92708,285.09245 729.03906,284.77734 729.03906,284.35547 C 729.03906,284.32422 729.03385,284.28516 729.02344,284.23828 C 729.01302,284.19141 729.0026,284.15234 728.99219,284.12109 L 725.92969,275.52734 L 728.42969,275.52734 L 730.21875,281.65234 L 731.96094,275.52734 L 734.35156,275.52734 L 730.85938,285.54297 C 730.59895,286.29297 730.27343,286.80338 729.88281,287.07422 C 729.49218,287.35026 728.90625,287.48828 728.125,287.48828 C 727.98437,287.48828 727.83333,287.48307 727.67188,287.47266 C 727.51041,287.46224 727.34114,287.44661 727.16406,287.42578"
+ id="text5878" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 759.98438,275.60938 L 759.98438,264.10156 L 763.48438,264.10156 L 765.77344,272.85938 L 768.03125,264.10156 L 771.54688,264.10156 L 771.54688,275.60938 L 769.32813,275.60938 L 769.32813,266.32813 L 766.99219,275.60938 L 764.57031,275.60938 L 762.20313,266.32813 L 762.20313,275.60938 L 759.98438,275.60938 M 778.99219,273.03125 L 781.25781,273.03125 C 781.02864,273.92709 780.5651,274.63021 779.86719,275.14063 C 779.17447,275.64583 778.32812,275.89844 777.32813,275.89844 C 776.09896,275.89844 775.125,275.48698 774.40625,274.66406 C 773.6875,273.83594 773.32812,272.71615 773.32813,271.30469 C 773.32812,269.91407 773.68229,268.81772 774.39063,268.01563 C 775.09896,267.21355 776.06771,266.81251 777.29688,266.8125 C 778.59895,266.81251 779.60416,267.20834 780.3125,268 C 781.02083,268.78647 781.37499,269.90886 781.375,271.36719 C 781.37499,271.52865 781.37239,271.65105 781.36719,271.73438 C 781.36718,271.8125 781.36197,271.88802 781.35156,271.96094 L 775.67969,271.96094 C 775.71093,272.62761 775.87239,273.13021 776.16406,273.46875 C 776.46093,273.80729 776.88541,273.97656 777.4375,273.97656 C 777.82812,273.97656 778.14843,273.90104 778.39844,273.75 C 778.64843,273.59375 778.84635,273.35417 778.99219,273.03125 M 775.67969,270.46875 L 779.02344,270.46875 C 779.0026,269.89584 778.84895,269.46094 778.5625,269.16406 C 778.28124,268.86199 777.87499,268.71094 777.34375,268.71094 C 776.84895,268.71094 776.45833,268.86199 776.17188,269.16406 C 775.89062,269.46615 775.72656,269.90105 775.67969,270.46875 M 782.88281,275.60938 L 782.88281,267.11719 L 785.10938,267.11719 L 785.10938,268.125 C 785.42708,267.71355 785.80208,267.40626 786.23438,267.20313 C 786.66666,266.9948 787.14843,266.89063 787.67969,266.89063 C 788.61718,266.89063 789.3177,267.13543 789.78125,267.625 C 790.24999,268.10938 790.48437,268.84115 790.48438,269.82031 L 790.48438,275.60938 L 788.21094,275.60938 L 788.21094,270.47656 C 788.21093,269.86719 788.10676,269.4323 787.89844,269.17188 C 787.69531,268.91147 787.36197,268.78126 786.89844,268.78125 C 786.36197,268.78126 785.9375,268.94272 785.625,269.26563 C 785.3125,269.58334 785.15625,270.01823 785.15625,270.57031 L 785.15625,275.60938 L 782.88281,275.60938 M 800.01563,267.11719 L 800.01563,275.60938 L 797.78906,275.60938 L 797.78906,274.60156 C 797.46614,275.01302 797.08854,275.32292 796.65625,275.53125 C 796.22916,275.73437 795.74739,275.83594 795.21094,275.83594 C 794.27864,275.83594 793.57812,275.59115 793.10938,275.10156 C 792.64583,274.61198 792.41406,273.88021 792.41406,272.90625 L 792.41406,267.11719 L 794.6875,267.11719 L 794.6875,272.25 C 794.6875,272.85417 794.78906,273.28646 794.99219,273.54688 C 795.19531,273.80209 795.53125,273.92969 796,273.92969 C 796.53124,273.92969 796.95312,273.77084 797.26563,273.45313 C 797.58333,273.13021 797.74218,272.69271 797.74219,272.14063 L 797.74219,267.11719 L 800.01563,267.11719"
+ id="text5884" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 104.41406,17.103516 L 104.41406,10.212891 L 101.74219,10.212891 L 101.74219,8.7949219 L 101.94141,8.7949219 C 102.89453,8.7949367 103.58984,8.6621243 104.02734,8.3964844 C 104.47265,8.1308749 104.73828,7.6894691 104.82422,7.0722656 L 106.59375,7.0722656 L 106.59375,17.103516 L 104.41406,17.103516 M 106.72266,36.369141 L 106.72266,39.826172 L 103.24219,39.826172 L 103.24219,36.369141 L 106.72266,36.369141 M 105.89063,41.173828 L 106.80469,48.978516 L 106.80469,53.630859 L 103.19531,53.630859 L 103.19531,48.978516 L 104.10938,41.173828 L 105.89063,41.173828"
+ id="text5890" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 160.85156,47.103516 C 160.875,46.197273 161.08984,45.431649 161.49609,44.806641 C 161.91015,44.18165 162.63672,43.548838 163.67578,42.908203 C 163.82422,42.822276 164.03125,42.701183 164.29688,42.544922 C 165.74218,41.724621 166.46484,40.931653 166.46484,40.166016 C 166.46484,39.720717 166.32031,39.369155 166.03125,39.111328 C 165.74218,38.85353 165.34375,38.724624 164.83594,38.724609 C 164.27343,38.724624 163.83984,38.88478 163.53516,39.205078 C 163.23047,39.517592 163.07812,39.966811 163.07813,40.552734 L 163.07813,40.646484 L 161.03906,40.646484 C 161.03906,39.498061 161.37891,38.615249 162.05859,37.998047 C 162.73828,37.380876 163.71093,37.072282 164.97656,37.072266 C 166.11718,37.072282 167.02343,37.353532 167.69531,37.916016 C 168.37499,38.470718 168.71484,39.212905 168.71484,40.142578 C 168.71484,40.814466 168.53905,41.39259 168.1875,41.876953 C 167.83593,42.361339 167.14843,42.919933 166.125,43.552734 C 165.89843,43.701182 165.57812,43.896494 165.16406,44.138672 C 164.22656,44.685556 163.69922,45.115243 163.58203,45.427734 L 168.62109,45.427734 L 168.62109,47.103516 L 160.85156,47.103516"
+ id="text5910" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 220.92188,44.033203 L 223.05469,44.033203 C 223.07031,44.603525 223.22265,45.029305 223.51172,45.310547 C 223.80078,45.591805 224.23437,45.73243 224.8125,45.732422 C 225.36718,45.73243 225.79687,45.599617 226.10156,45.333984 C 226.40624,45.068368 226.55859,44.689462 226.55859,44.197266 C 226.55859,43.697276 226.38281,43.322276 226.03125,43.072266 C 225.67968,42.814464 225.15234,42.685558 224.44922,42.685547 L 224.10938,42.685547 L 224.10938,41.291016 L 224.35547,41.291016 C 225.0039,41.291028 225.48046,41.181653 225.78516,40.962891 C 226.09765,40.736341 226.2539,40.392591 226.25391,39.931641 C 226.2539,39.54103 226.12109,39.232436 225.85547,39.005859 C 225.58984,38.771499 225.23437,38.654312 224.78906,38.654297 C 224.29687,38.654312 223.91797,38.787124 223.65234,39.052734 C 223.38672,39.310561 223.2539,39.681655 223.25391,40.166016 L 223.25391,40.236328 L 221.16797,40.236328 C 221.19141,39.212905 221.51953,38.431656 222.15234,37.892578 C 222.79297,37.345719 223.70312,37.072282 224.88281,37.072266 C 225.99218,37.072282 226.86718,37.314469 227.50781,37.798828 C 228.15624,38.283218 228.48046,38.943374 228.48047,39.779297 C 228.48046,40.21681 228.36718,40.603529 228.14063,40.939453 C 227.92187,41.26759 227.59374,41.537121 227.15625,41.748047 C 227.72656,41.974621 228.15624,42.291027 228.44531,42.697266 C 228.74218,43.095714 228.89062,43.564463 228.89063,44.103516 C 228.89062,45.119149 228.52343,45.923836 227.78906,46.517578 C 227.06249,47.103522 226.07031,47.396491 224.8125,47.396484 C 223.57031,47.396491 222.60937,47.107428 221.92969,46.529297 C 221.25781,45.95118 220.92187,45.134774 220.92188,44.080078 L 220.92188,44.033203"
+ id="text5922" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 278.92969,21.685547 C 279.86719,21.037112 280.53125,20.439456 280.92188,19.892578 C 281.32031,19.345707 281.51953,18.75977 281.51953,18.134766 C 281.51953,17.837896 281.47265,17.525397 281.37891,17.197266 C 281.28515,16.861335 281.14843,16.509773 280.96875,16.142578 L 278.90625,16.142578 L 278.90625,14.841797 L 280.17188,14.841797 C 279.82812,14.162119 279.57812,13.556651 279.42188,13.025391 C 279.26562,12.494152 279.1875,11.998059 279.1875,11.537109 C 279.1875,10.146498 279.69531,9.021499 280.71094,8.1621094 C 281.73437,7.3027507 283.08203,6.8730636 284.75391,6.8730469 C 286.5664,6.8730636 287.98827,7.3379069 289.01953,8.2675781 C 290.05077,9.1972801 290.61327,10.517591 290.70703,12.228516 L 287.47266,12.228516 C 287.41015,11.345715 287.15624,10.669935 286.71094,10.201172 C 286.26562,9.7324358 285.65624,9.498061 284.88281,9.4980469 C 284.14843,9.498061 283.58203,9.6894671 283.18359,10.072266 C 282.79296,10.455091 282.59765,11.005872 282.59766,11.724609 C 282.59765,12.138683 282.84375,12.888683 283.33594,13.974609 C 283.50781,14.349619 283.63671,14.638681 283.72266,14.841797 L 287.0625,14.841797 L 287.0625,16.142578 L 284.20313,16.142578 C 284.27343,16.43946 284.32421,16.712898 284.35547,16.962891 C 284.38671,17.212897 284.40234,17.443366 284.40234,17.654297 C 284.40234,18.216802 284.22656,18.779302 283.875,19.341797 C 283.53124,19.896488 282.94531,20.548831 282.11719,21.298828 C 282.625,21.064456 283.08203,20.892581 283.48828,20.783203 C 283.90234,20.666019 284.27734,20.607425 284.61328,20.607422 C 285.01952,20.607425 285.57421,20.701175 286.27734,20.888672 C 286.98046,21.068362 287.48046,21.158206 287.77734,21.158203 C 288.16796,21.158206 288.55077,21.095706 288.92578,20.970703 C 289.30858,20.845706 289.68749,20.6543 290.0625,20.396484 L 291.09375,22.939453 C 290.4453,23.322266 289.82421,23.611328 289.23047,23.806641 C 288.63671,24.009765 288.08202,24.111328 287.56641,24.111328 C 286.97265,24.111328 286.16796,23.955078 285.15234,23.642578 C 284.14453,23.330078 283.41406,23.173829 282.96094,23.173828 C 282.48437,23.173829 282.01953,23.251954 281.56641,23.408203 C 281.12109,23.564453 280.6875,23.798828 280.26563,24.111328 L 278.92969,21.685547 M 284.94141,40.025391 C 284.05859,40.025404 283.29687,40.345716 282.65625,40.986328 C 282.01562,41.626965 281.69531,42.384777 281.69531,43.259766 C 281.69531,44.1504 282.01171,44.912118 282.64453,45.544922 C 283.27734,46.169929 284.04296,46.482429 284.94141,46.482422 C 285.82421,46.482429 286.58202,46.169929 287.21484,45.544922 C 287.85546,44.912118 288.17577,44.1504 288.17578,43.259766 C 288.17577,42.384777 287.85546,41.626965 287.21484,40.986328 C 286.58202,40.345716 285.82421,40.025404 284.94141,40.025391 M 279.65625,36.779297 L 282.05859,39.158203 C 282.48046,38.85353 282.92578,38.626968 283.39453,38.478516 C 283.86328,38.322281 284.37109,38.244156 284.91797,38.244141 C 285.46484,38.244156 285.97655,38.322281 286.45313,38.478516 C 286.93749,38.626968 287.39062,38.85353 287.8125,39.158203 L 290.19141,36.779297 L 291.42188,38.033203 L 289.04297,40.435547 C 289.33983,40.849622 289.56249,41.294934 289.71094,41.771484 C 289.85936,42.240246 289.93358,42.736339 289.93359,43.259766 C 289.93358,43.783213 289.85936,44.279306 289.71094,44.748047 C 289.56249,45.216805 289.33983,45.666024 289.04297,46.095703 L 291.42188,48.498047 L 290.19141,49.716797 L 287.8125,47.337891 C 287.39062,47.650397 286.9414,47.880865 286.46484,48.029297 C 285.98827,48.17774 285.48046,48.251959 284.94141,48.251953 C 284.3789,48.251959 283.85937,48.17774 283.38281,48.029297 C 282.91406,47.880865 282.47265,47.650397 282.05859,47.337891 L 279.65625,49.716797 L 278.4375,48.498047 L 280.80469,46.095703 C 280.50781,45.673836 280.28515,45.23243 280.13672,44.771484 C 279.99609,44.302744 279.92578,43.798838 279.92578,43.259766 C 279.92578,42.736339 279.99609,42.240246 280.13672,41.771484 C 280.28515,41.294934 280.50781,40.849622 280.80469,40.435547 L 278.4375,38.033203 L 279.65625,36.779297"
+ id="text5928" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 352.875,47.701172 C 352.74217,49.662113 351.98436,51.220706 350.60156,52.376953 C 349.22655,53.533203 347.42968,54.111328 345.21094,54.111328 C 342.65624,54.111328 340.66796,53.314453 339.24609,51.720703 C 337.83203,50.126957 337.125,47.892584 337.125,45.017578 C 337.125,42.08009 337.84765,39.830092 339.29297,38.267578 C 340.73828,36.705095 342.8164,35.923846 345.52734,35.923828 C 347.73046,35.923846 349.46874,36.462908 350.74219,37.541016 C 352.02342,38.611343 352.72655,40.126967 352.85156,42.087891 L 349.34766,42.087891 C 349.19921,41.111341 348.80077,40.369154 348.15234,39.861328 C 347.50389,39.345717 346.6289,39.087905 345.52734,39.087891 C 343.96484,39.087905 342.77734,39.591811 341.96484,40.599609 C 341.15234,41.607434 340.74609,43.080089 340.74609,45.017578 C 340.74609,46.892585 341.14843,48.341802 341.95313,49.365234 C 342.76562,50.388675 343.91796,50.900393 345.41016,50.900391 C 346.48827,50.900393 347.37108,50.626956 348.05859,50.080078 C 348.74608,49.525395 349.19139,48.732427 349.39453,47.701172 L 352.875,47.701172"
+ id="text5946" />
+ <path
+ transform="matrix(1.16233,0,-0.444745,0.860341,0,0)"
+ style="font-size:16.72912407px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 307.52845,53.268758 L 317.31434,53.268758 L 317.31434,54.894293 L 307.52845,54.894293 L 307.52845,53.268758 M 307.52845,49.756296 L 317.31434,49.756296 L 317.31434,51.381831 L 307.52845,51.381831 L 307.52845,49.756296"
+ id="text5956" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 411.45117,50.150391 L 411.45117,46.142578 L 408.63867,50.150391 L 411.45117,50.150391 M 411.45117,53.630859 L 411.45117,51.591797 L 406.98633,51.591797 L 406.98633,49.962891 L 410.90039,44.513672 L 413.51367,44.513672 L 413.51367,50.103516 L 414.73242,50.103516 L 414.73242,51.591797 L 413.51367,51.591797 L 413.51367,53.630859 L 411.45117,53.630859 M 398.58398,54.111328 L 408.7793,36.615234 L 410.70117,36.615234 L 400.48242,54.111328 L 398.58398,54.111328 M 397.78711,46.458984 L 397.78711,40.025391 L 395.26758,40.025391 L 395.26758,38.701172 L 395.44336,38.701172 C 396.36523,38.701187 397.0332,38.576187 397.44727,38.326172 C 397.86914,38.076187 398.11914,37.658219 398.19727,37.072266 L 399.88477,37.072266 L 399.88477,46.458984 L 397.78711,46.458984"
+ id="text5960" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 467.0918,53.630859 C 467.11522,52.779298 467.32225,52.064455 467.71289,51.486328 C 468.11131,50.900393 468.80663,50.31055 469.79883,49.716797 C 469.95506,49.630863 470.16991,49.50977 470.44336,49.353516 C 471.7949,48.595708 472.47068,47.861334 472.4707,47.150391 C 472.47068,46.736335 472.33006,46.40821 472.04883,46.166016 C 471.76756,45.923836 471.38475,45.802742 470.90039,45.802734 C 470.36912,45.802742 469.95506,45.95118 469.6582,46.248047 C 469.36913,46.544929 469.22459,46.966804 469.22461,47.513672 L 469.22461,47.607422 L 467.2793,47.607422 C 467.27928,46.529304 467.6035,45.70118 468.25195,45.123047 C 468.90038,44.537118 469.82616,44.24415 471.0293,44.244141 C 472.12303,44.24415 472.99412,44.505868 473.64258,45.029297 C 474.29881,45.552742 474.62693,46.251961 474.62695,47.126953 C 474.62693,47.751959 474.45506,48.294927 474.11133,48.755859 C 473.77537,49.208989 473.11522,49.72852 472.13086,50.314453 C 471.9199,50.439456 471.63084,50.607425 471.26367,50.818359 C 470.34959,51.341799 469.83397,51.744143 469.7168,52.025391 L 474.50977,52.025391 L 474.50977,53.630859 L 467.0918,53.630859 M 458.68945,54.111328 L 468.88477,36.615234 L 470.80664,36.615234 L 460.58789,54.111328 L 458.68945,54.111328 M 457.89258,46.458984 L 457.89258,40.025391 L 455.37305,40.025391 L 455.37305,38.701172 L 455.54883,38.701172 C 456.4707,38.701187 457.13867,38.576187 457.55273,38.326172 C 457.97461,38.076187 458.22461,37.658219 458.30273,37.072266 L 459.99023,37.072266 L 459.99023,46.458984 L 457.89258,46.458984"
+ id="text5967" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 531.83203,50.150391 L 531.83203,46.142578 L 529.01953,50.150391 L 531.83203,50.150391 M 531.83203,53.630859 L 531.83203,51.591797 L 527.36719,51.591797 L 527.36719,49.962891 L 531.28125,44.513672 L 533.89453,44.513672 L 533.89453,50.103516 L 535.11328,50.103516 L 535.11328,51.591797 L 533.89453,51.591797 L 533.89453,53.630859 L 531.83203,53.630859 M 518.96484,54.111328 L 529.16016,36.615234 L 531.08203,36.615234 L 520.86328,54.111328 L 518.96484,54.111328 M 514.88672,43.599609 L 516.89063,43.599609 C 516.91406,44.130869 517.0625,44.529306 517.33594,44.794922 C 517.61718,45.052743 518.03125,45.181649 518.57813,45.181641 C 519.10937,45.181649 519.51953,45.060555 519.80859,44.818359 C 520.09765,44.568368 520.24218,44.208994 520.24219,43.740234 C 520.24218,43.271495 520.07421,42.919933 519.73828,42.685547 C 519.40234,42.443371 518.90625,42.322277 518.25,42.322266 C 518.20312,42.322277 518.14453,42.326183 518.07422,42.333984 C 518.0039,42.341808 517.94922,42.345714 517.91016,42.345703 L 517.91016,41.033203 L 518.14453,41.033203 C 518.76171,41.033216 519.21484,40.931653 519.50391,40.728516 C 519.80078,40.517591 519.94921,40.193373 519.94922,39.755859 C 519.94921,39.388686 519.82421,39.099624 519.57422,38.888672 C 519.32421,38.669937 518.98437,38.560562 518.55469,38.560547 C 518.08593,38.560562 517.72265,38.685562 517.46484,38.935547 C 517.21484,39.177749 517.08984,39.525405 517.08984,39.978516 L 517.08984,40.048828 L 515.08594,40.048828 C 515.10156,39.087905 515.41797,38.353531 516.03516,37.845703 C 516.65234,37.330094 517.52343,37.072282 518.64844,37.072266 C 519.70312,37.072282 520.53906,37.302751 521.15625,37.763672 C 521.77343,38.216812 522.08202,38.833999 522.08203,39.615234 C 522.08202,40.02931 521.97655,40.392591 521.76563,40.705078 C 521.55468,41.009778 521.23827,41.263684 520.81641,41.466797 C 521.36327,41.677746 521.77343,41.970715 522.04688,42.345703 C 522.32812,42.712902 522.46874,43.154307 522.46875,43.669922 C 522.46874,44.607431 522.11718,45.349618 521.41406,45.896484 C 520.71874,46.443367 519.77343,46.716804 518.57813,46.716797 C 517.39062,46.716804 516.47656,46.451179 515.83594,45.919922 C 515.20312,45.380868 514.88672,44.615243 514.88672,43.623047 L 514.88672,43.599609"
+ id="text5973" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 586.63477,39.404297 L 586.63477,42.498047 L 583.36523,42.498047 L 583.36523,39.474609 C 583.36523,38.482437 583.66992,37.654313 584.2793,36.990234 C 584.88867,36.326189 585.67382,35.970721 586.63477,35.923828 L 586.63477,37.119141 C 586.04101,37.259782 585.59961,37.509782 585.31055,37.869141 C 585.02148,38.220719 584.87695,38.681656 584.87695,39.251953 L 584.87695,39.404297 L 586.63477,39.404297"
+ id="text5979" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 643.36523,39.474609 L 643.36523,36.369141 L 646.63477,36.369141 L 646.63477,39.427734 C 646.63476,40.412123 646.33007,41.240247 645.7207,41.912109 C 645.11132,42.576183 644.32617,42.931651 643.36523,42.978516 L 643.36523,41.771484 C 643.95898,41.630871 644.39648,41.384778 644.67773,41.033203 C 644.96679,40.673841 645.11132,40.201185 645.11133,39.615234 L 645.11133,39.474609 L 643.36523,39.474609"
+ id="text5985" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 706.89258,53.630859 L 703.50586,53.630859 L 703.50586,47.560547 L 703.27148,47.150391 L 698.00977,47.150391 L 698.00977,45.826172 L 702.49805,45.826172 L 701.64258,44.337891 L 698.00977,44.337891 L 698.00977,43.025391 L 700.86914,43.025391 L 697.61133,37.330078 L 701.41992,37.330078 L 705.19336,44.724609 L 708.69727,37.330078 L 712.27148,37.330078 L 709.27148,43.025391 L 712.00195,43.025391 L 712.00195,44.337891 L 708.58008,44.337891 L 707.7832,45.826172 L 712.00195,45.826172 L 712.00195,47.150391 L 707.0918,47.150391 L 706.89258,47.560547 L 706.89258,53.630859"
+ id="text5991" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 764.97656,19.306641 C 765.46093,19.306645 765.8789,19.482426 766.23047,19.833984 C 766.58202,20.18555 766.7578,20.603519 766.75781,21.087891 C 766.7578,21.564455 766.58202,21.974611 766.23047,22.318359 C 765.8789,22.66211 765.46093,22.833985 764.97656,22.833984 C 764.48437,22.833985 764.06249,22.666017 763.71094,22.330078 C 763.36718,21.994142 763.1953,21.58008 763.19531,21.087891 C 763.1953,20.595706 763.36718,20.177738 763.71094,19.833984 C 764.06249,19.482426 764.48437,19.306645 764.97656,19.306641 M 757.94531,15.298828 L 771.98438,15.298828 L 771.98438,17.630859 L 757.94531,17.630859 L 757.94531,15.298828 M 764.97656,10.095703 C 765.46093,10.095717 765.8789,10.271498 766.23047,10.623047 C 766.58202,10.96681 766.7578,11.380872 766.75781,11.865234 C 766.7578,12.357433 766.58202,12.779308 766.23047,13.130859 C 765.88671,13.47462 765.46874,13.646494 764.97656,13.646484 C 764.48437,13.646494 764.06249,13.47462 763.71094,13.130859 C 763.36718,12.779308 763.1953,12.357433 763.19531,11.865234 C 763.1953,11.373059 763.36718,10.955091 763.71094,10.611328 C 764.06249,10.267591 764.48437,10.095717 764.97656,10.095703 M 759.84375,39.544922 L 765.11719,44.818359 L 770.40234,39.544922 L 772.05469,41.173828 L 766.78125,46.482422 L 772.05469,51.755859 L 770.40234,53.396484 L 765.11719,48.111328 L 759.84375,53.396484 L 758.20313,51.755859 L 763.48828,46.482422 L 758.20313,41.173828 L 759.84375,39.544922"
+ id="text5997" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 134.9707,69.826172 L 132.58008,77.173828 L 137.37305,77.173828 L 134.9707,69.826172 M 132.9082,66.369141 L 137.00977,66.369141 L 143.23242,83.630859 L 139.50586,83.630859 L 138.33398,80.080078 L 131.64258,80.080078 L 130.50586,83.630859 L 126.76758,83.630859 L 132.9082,66.369141 M 135.70898,64.166016 L 135.70898,61.283203 L 138.35742,61.283203 L 138.35742,64.166016 L 135.70898,64.166016 M 131.63086,64.166016 L 131.63086,61.283203 L 134.2793,61.283203 L 134.2793,64.166016 L 131.63086,64.166016"
+ id="text6003" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 194.9707,62.126953 C 194.5957,62.126975 194.27538,62.267599 194.00977,62.548828 C 193.74413,62.822286 193.61132,63.154317 193.61133,63.544922 C 193.61132,63.927754 193.74023,64.251973 193.99805,64.517578 C 194.26366,64.783222 194.58788,64.916034 194.9707,64.916016 C 195.36132,64.916034 195.69335,64.783222 195.9668,64.517578 C 196.24804,64.24416 196.38866,63.919942 196.38867,63.544922 C 196.38866,63.16213 196.24804,62.830099 195.9668,62.548828 C 195.69335,62.267599 195.36132,62.126975 194.9707,62.126953 M 194.9707,60.521484 C 195.81444,60.521507 196.52929,60.814476 197.11523,61.400391 C 197.70116,61.978537 197.99413,62.685568 197.99414,63.521484 C 197.99413,64.357441 197.70116,65.068378 197.11523,65.654297 C 196.52929,66.232439 195.81444,66.521501 194.9707,66.521484 C 194.13476,66.521501 193.42773,66.232439 192.84961,65.654297 C 192.27929,65.07619 191.99414,64.365254 191.99414,63.521484 C 191.99414,62.677755 192.27929,61.966819 192.84961,61.388672 C 193.42773,60.81057 194.13476,60.521507 194.9707,60.521484 M 192.7207,67.072266 L 197.23242,67.072266 L 203.23242,83.630859 L 199.50586,83.630859 L 198.33398,80.080078 L 191.64258,80.080078 L 190.50586,83.630859 L 186.76758,83.630859 L 192.7207,67.072266 M 194.9707,69.826172 L 192.58008,77.173828 L 197.37305,77.173828 L 194.9707,69.826172"
+ id="text6007" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 248.52539,83.630859 L 248.52539,66.369141 L 261.05273,66.369141 L 261.05273,69.369141 L 252.0293,69.369141 L 252.0293,73.048828 L 260.2793,73.048828 L 260.2793,76.001953 L 252.0293,76.001953 L 252.0293,80.443359 L 261.47461,80.443359 L 261.47461,83.630859 L 248.52539,83.630859 M 258.24023,60.521484 L 254.57227,64.857422 L 252.9082,64.857422 L 255.2168,60.521484 L 258.24023,60.521484"
+ id="text6011" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 313.72266,101.49056 L 313.72266,104.29134 L 314.88281,104.29134 C 315.5703,104.29135 316.07421,104.18198 316.39453,103.96322 C 316.71483,103.74448 316.87499,103.40073 316.875,102.93197 C 316.87499,102.43979 316.70311,102.07651 316.35938,101.84212 C 316.01561,101.60776 315.48436,101.49057 314.76563,101.49056 L 313.72266,101.49056 M 311.37891,100.00228 L 315.16406,100.00228 C 316.53905,100.00229 317.5703,100.23667 318.25781,100.70541 C 318.95311,101.16636 319.30077,101.85776 319.30078,102.77962 C 319.30077,103.42026 319.11327,103.96713 318.73828,104.42025 C 318.36327,104.87338 317.84374,105.18198 317.17969,105.34603 L 319.34766,109.67025 L 316.72266,109.67025 L 314.88281,105.70931 L 313.72266,105.70931 L 313.72266,109.67025 L 311.37891,109.67025 L 311.37891,100.00228 M 315,97.717125 C 314.0078,97.717141 313.08593,97.892922 312.23438,98.244469 C 311.38281,98.588234 310.61718,99.099952 309.9375,99.779625 C 309.22656,100.49058 308.67968,101.29917 308.29688,102.20541 C 307.91406,103.10385 307.72265,104.03354 307.72266,104.99447 C 307.72265,105.96323 307.90234,106.8851 308.26172,107.76009 C 308.62109,108.62729 309.14062,109.40072 309.82031,110.08041 C 310.51562,110.79135 311.30859,111.33822 312.19922,111.72103 C 313.08984,112.09603 314.01562,112.28353 314.97656,112.28353 C 315.91405,112.28353 316.82421,112.09994 317.70703,111.73275 C 318.59764,111.36556 319.40624,110.83822 320.13281,110.15072 C 320.81248,109.49447 321.33983,108.72885 321.71484,107.85384 C 322.08983,106.97885 322.27733,106.0726 322.27734,105.13509 C 322.27733,104.09604 322.10155,103.13901 321.75,102.264 C 321.40623,101.38901 320.89061,100.60386 320.20313,99.908531 C 319.49999,99.181983 318.70702,98.635109 317.82422,98.267906 C 316.94921,97.900734 316.0078,97.717141 315,97.717125 M 314.97656,96.275719 C 316.17968,96.275736 317.31249,96.502298 318.375,96.955406 C 319.4453,97.400735 320.39842,98.049172 321.23438,98.900719 C 322.03905,99.713233 322.65233,100.64292 323.07422,101.68978 C 323.49608,102.73667 323.70701,103.84604 323.70703,105.01791 C 323.70701,106.20541 323.48826,107.33041 323.05078,108.39291 C 322.61326,109.4476 321.97655,110.37728 321.14063,111.18197 C 320.30467,112.00228 319.35155,112.63119 318.28125,113.06869 C 317.21874,113.50619 316.11718,113.72494 314.97656,113.72494 C 313.81249,113.72494 312.69921,113.49838 311.63672,113.04525 C 310.57421,112.59213 309.625,111.93978 308.78906,111.08822 C 307.97656,110.26791 307.35547,109.33822 306.92578,108.29916 C 306.5039,107.25229 306.29297,106.15854 306.29297,105.01791 C 306.29297,104.22104 306.39844,103.4476 306.60938,102.69759 C 306.82031,101.93979 307.13672,101.20151 307.55859,100.48275 C 308.34765,99.154639 309.39062,98.12339 310.6875,97.389 C 311.98437,96.646829 313.41405,96.275736 314.97656,96.275719"
+ id="text6015" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 372.0293,69.064453 L 376.06055,69.064453 C 377.84179,69.064468 379.18944,69.505874 380.10352,70.388672 C 381.01756,71.263684 381.47459,72.556652 381.47461,74.267578 C 381.47459,75.939461 381.02538,77.228522 380.12695,78.134766 C 379.23632,79.033208 377.95897,79.482426 376.29492,79.482422 L 372.0293,79.482422 L 372.0293,83.630859 L 368.52539,83.630859 L 368.52539,66.369141 L 372.0293,66.369141 L 372.0293,69.064453 M 372.05273,76.599609 L 375.47461,76.599609 C 376.4121,76.599616 377.09179,76.416023 377.51367,76.048828 C 377.93554,75.673836 378.14647,75.080087 378.14648,74.267578 C 378.14647,73.509776 377.93554,72.939464 377.51367,72.556641 C 377.09179,72.166027 376.47069,71.970715 375.65039,71.970703 L 372.05273,71.970703 L 372.05273,76.599609"
+ id="text6019" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 428.08594,66.322266 L 431.67188,66.322266 L 431.67188,77.150391 C 431.67187,78.486333 431.93749,79.462895 432.46875,80.080078 C 432.99999,80.689456 433.84374,80.994143 435,80.994141 C 436.17187,80.994143 437.02343,80.689456 437.55469,80.080078 C 438.09374,79.470707 438.36327,78.494146 438.36328,77.150391 L 438.36328,66.322266 L 441.91406,66.322266 L 441.91406,77.537109 C 441.91405,79.654301 441.3203,81.279299 440.13281,82.412109 C 438.95311,83.544922 437.24999,84.111328 435.02344,84.111328 C 432.78124,84.111328 431.0625,83.548828 429.86719,82.423828 C 428.67969,81.291018 428.08594,79.662113 428.08594,77.537109 L 428.08594,66.322266 M 435.73828,64.166016 L 435.73828,61.283203 L 438.38672,61.283203 L 438.38672,64.166016 L 435.73828,64.166016 M 431.66016,64.166016 L 431.66016,61.283203 L 434.30859,61.283203 L 434.30859,64.166016 L 431.66016,64.166016"
+ id="text6023" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 488.08594,66.105469 L 491.67188,66.105469 L 491.67188,76.933594 C 491.67187,78.269536 491.93749,79.246098 492.46875,79.863281 C 492.99999,80.472659 493.84374,80.777346 495,80.777344 C 496.17187,80.777346 497.02343,80.472659 497.55469,79.863281 C 498.09374,79.25391 498.36327,78.277349 498.36328,76.933594 L 498.36328,66.105469 L 501.91406,66.105469 L 501.91406,77.320313 C 501.91405,79.437504 501.3203,81.062502 500.13281,82.195313 C 498.95311,83.328125 497.24999,83.894531 495.02344,83.894531 C 492.78124,83.894531 491.0625,83.332031 489.86719,82.207031 C 488.67969,81.074221 488.08594,79.445316 488.08594,77.320313 L 488.08594,66.105469 M 498.45703,60.304688 L 494.78906,64.640625 L 493.125,64.640625 L 495.43359,60.304688 L 498.45703,60.304688"
+ id="text6029" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 552.43945,83.630859 L 552.43945,66.369141 L 555.99023,66.369141 L 555.99023,83.630859 L 552.43945,83.630859 M 557.66602,60.521484 L 553.99805,64.857422 L 552.33398,64.857422 L 554.64258,60.521484 L 557.66602,60.521484"
+ id="text6033" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 610.18359,75 C 610.18359,76.898444 610.60546,78.375005 611.44922,79.429688 C 612.29296,80.476566 613.47265,81.000003 614.98828,81 C 616.51952,81.000003 617.71093,80.476566 618.5625,79.429688 C 619.41405,78.375005 619.83983,76.898444 619.83984,75 C 619.83983,73.101573 619.41405,71.628918 618.5625,70.582031 C 617.71093,69.527358 616.51952,69.000015 614.98828,69 C 613.47265,69.000015 612.29296,69.523452 611.44922,70.570313 C 610.60546,71.617199 610.18359,73.093761 610.18359,75 M 606.5625,75 C 606.5625,72.210949 607.32031,70.000014 608.83594,68.367188 C 610.35937,66.726579 612.41015,65.906268 614.98828,65.90625 C 617.56639,65.906268 619.61717,66.726579 621.14063,68.367188 C 622.67186,70.007826 623.43748,72.218761 623.4375,75 C 623.43748,77.781256 622.67186,79.992191 621.14063,81.632813 C 619.61717,83.273438 617.56639,84.09375 614.98828,84.09375 C 612.41015,84.09375 610.35937,83.273438 608.83594,81.632813 C 607.32031,79.992191 606.5625,77.781256 606.5625,75 M 618.44531,60.503906 L 614.77734,64.839844 L 613.11328,64.839844 L 615.42188,60.503906 L 618.44531,60.503906"
+ id="text6037" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 670.18359,75.017578 C 670.18359,76.916022 670.60546,78.392583 671.44922,79.447266 C 672.29296,80.494144 673.47265,81.017581 674.98828,81.017578 C 676.51952,81.017581 677.71093,80.494144 678.5625,79.447266 C 679.41405,78.392583 679.83983,76.916022 679.83984,75.017578 C 679.83983,73.119151 679.41405,71.646496 678.5625,70.599609 C 677.71093,69.544936 676.51952,69.017593 674.98828,69.017578 C 673.47265,69.017593 672.29296,69.54103 671.44922,70.587891 C 670.60546,71.634778 670.18359,73.111339 670.18359,75.017578 M 666.5625,75.017578 C 666.5625,72.228527 667.32031,70.017592 668.83594,68.384766 C 670.35937,66.744158 672.41015,65.923846 674.98828,65.923828 C 677.56639,65.923846 679.61717,66.744158 681.14063,68.384766 C 682.67186,70.025404 683.43748,72.23634 683.4375,75.017578 C 683.43748,77.798834 682.67186,80.009769 681.14063,81.650391 C 679.61717,83.291016 677.56639,84.111328 674.98828,84.111328 C 672.41015,84.111328 670.35937,83.291016 668.83594,81.650391 C 667.32031,80.009769 666.5625,77.798834 666.5625,75.017578 M 675.72656,64.166016 L 675.72656,61.283203 L 678.375,61.283203 L 678.375,64.166016 L 675.72656,64.166016 M 671.64844,64.166016 L 671.64844,61.283203 L 674.29688,61.283203 L 674.29688,64.166016 L 671.64844,64.166016"
+ id="text6041" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 735.5332,106.35352 L 735.5332,103.35352 L 739.44727,99.966797 L 739.44727,102.75586 L 737.04492,104.8418 L 739.44727,106.92773 L 739.44727,109.74023 L 735.5332,106.35352 M 730.4707,106.35352 L 730.4707,103.35352 L 734.4082,99.966797 L 734.4082,102.75586 L 732.00586,104.8418 L 734.4082,106.92773 L 734.4082,109.74023 L 730.4707,106.35352"
+ id="text6045" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 799.44727,103.3418 L 799.44727,106.3418 L 795.5332,109.72852 L 795.5332,106.93945 L 797.93555,104.83008 L 795.5332,102.76758 L 795.5332,99.955078 L 799.44727,103.3418 M 794.4082,103.3418 L 794.4082,106.3418 L 790.4707,109.72852 L 790.4707,106.93945 L 792.86133,104.83008 L 790.4707,102.76758 L 790.4707,99.955078 L 794.4082,103.3418"
+ id="text6051" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 883.81641,76.535881 L 886.23047,76.535881 L 886.23047,85.418694 L 883.81641,85.418694 L 883.81641,76.535881 M 883.81641,64.535881 L 886.23047,64.535881 L 886.23047,73.418694 L 883.81641,73.418694 L 883.81641,64.535881 M 877.98047,101.19213 L 892.01953,101.19213 L 892.01953,107.07494 L 889.6875,107.07494 L 889.6875,103.48901 L 877.98047,103.48901 L 877.98047,101.19213"
+ id="text6057" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 149.9707,129.82617 L 147.58008,137.17383 L 152.37305,137.17383 L 149.9707,129.82617 M 147.9082,126.36914 L 152.00977,126.36914 L 158.23242,143.63086 L 154.50586,143.63086 L 153.33398,140.08008 L 146.64258,140.08008 L 145.50586,143.63086 L 141.76758,143.63086 L 147.9082,126.36914 M 153.42773,120.52148 L 149.75977,124.85742 L 148.0957,124.85742 L 150.4043,120.52148 L 153.42773,120.52148"
+ id="text6065" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 211.40625,137.91797 C 211.71874,137.73829 211.95312,137.53907 212.10938,137.32031 C 212.26562,137.10157 212.34374,136.86719 212.34375,136.61719 C 212.34374,136.31251 212.2539,136.0547 212.07422,135.84375 C 211.89452,135.62501 211.52343,135.3711 210.96094,135.08203 L 207.85547,133.47656 C 207.55078,133.65626 207.3164,133.85938 207.15234,134.08594 C 206.99609,134.31251 206.91797,134.5547 206.91797,134.8125 C 206.91797,135.1172 207.03125,135.38673 207.25781,135.62109 C 207.49218,135.84766 208.0039,136.16407 208.79297,136.57031 L 211.40625,137.91797 M 205.03125,141.75 L 207.92578,141.75 C 207.98828,142.35938 208.16796,142.8125 208.46484,143.10938 C 208.76953,143.40625 209.19921,143.55469 209.75391,143.55469 C 210.26952,143.55469 210.67968,143.43359 210.98438,143.19141 C 211.28905,142.94141 211.4414,142.60547 211.44141,142.18359 C 211.4414,141.83985 211.32812,141.54297 211.10156,141.29297 C 210.87499,141.03516 210.42577,140.74219 209.75391,140.41406 L 206.95313,138.99609 C 206.0625,138.55079 205.39844,138.03907 204.96094,137.46094 C 204.52344,136.88282 204.30469,136.23438 204.30469,135.51563 C 204.30469,134.82032 204.47266,134.21095 204.80859,133.6875 C 205.15234,133.15626 205.65625,132.71485 206.32031,132.36328 C 205.92969,132.01173 205.64062,131.62892 205.45313,131.21484 C 205.26562,130.79298 205.17187,130.32814 205.17188,129.82031 C 205.17187,128.64845 205.57422,127.70705 206.37891,126.99609 C 207.18359,126.27736 208.2539,125.91799 209.58984,125.91797 C 210.96484,125.91799 212.04296,126.26955 212.82422,126.97266 C 213.60546,127.6758 214.0078,128.64845 214.03125,129.89063 L 211.26563,129.89063 C 211.24999,129.3672 211.09374,128.96876 210.79688,128.69531 C 210.50781,128.42189 210.08984,128.28517 209.54297,128.28516 C 209.05859,128.28517 208.68359,128.39064 208.41797,128.60156 C 208.16015,128.81251 208.03125,129.10939 208.03125,129.49219 C 208.03125,129.8047 208.18359,130.09767 208.48828,130.37109 C 208.80078,130.63673 209.35937,130.95704 210.16406,131.33203 L 212.13281,132.24609 C 213.1328,132.72267 213.87108,133.25392 214.34766,133.83984 C 214.82421,134.41798 215.06249,135.08595 215.0625,135.84375 C 215.06249,136.55469 214.8828,137.17579 214.52344,137.70703 C 214.17186,138.23047 213.66405,138.63672 213,138.92578 C 213.45312,139.32422 213.79296,139.76563 214.01953,140.25 C 214.24608,140.73438 214.35936,141.26563 214.35938,141.84375 C 214.35936,143.04688 213.92968,144.03906 213.07031,144.82031 C 212.21093,145.60937 211.10546,146.0039 209.75391,146.00391 C 208.26953,146.0039 207.1289,145.64453 206.33203,144.92578 C 205.53515,144.20703 205.10156,143.14844 205.03125,141.75 M 203.97656,173.625 L 203.97656,160.59375 C 203.97656,159.29689 204.48047,158.25002 205.48828,157.45313 C 206.49609,156.64845 207.83984,156.24611 209.51953,156.24609 C 211.23046,156.24611 212.5703,156.63674 213.53906,157.41797 C 214.5078,158.19923 214.99217,159.27345 214.99219,160.64063 C 214.99217,161.48439 214.84764,162.17579 214.55859,162.71484 C 214.27733,163.25392 213.83983,163.66798 213.24609,163.95703 C 214.16796,164.32423 214.85936,164.86329 215.32031,165.57422 C 215.78905,166.28516 216.02342,167.16016 216.02344,168.19922 C 216.02342,169.94922 215.51952,171.36328 214.51172,172.44141 C 213.5039,173.51953 212.18358,174.05859 210.55078,174.05859 C 210.32421,174.05859 210.0703,174.04687 209.78906,174.02344 C 209.51562,174 209.21874,173.96484 208.89844,173.91797 L 208.89844,171.17578 C 208.99999,171.19141 209.10156,171.20313 209.20313,171.21094 C 209.31249,171.21875 209.47265,171.22266 209.68359,171.22266 C 210.60546,171.22266 211.3164,170.96875 211.81641,170.46094 C 212.3164,169.94532 212.5664,169.21485 212.56641,168.26953 C 212.5664,167.35548 212.29296,166.66016 211.74609,166.18359 C 211.20702,165.70704 210.41796,165.46876 209.37891,165.46875 L 209.0625,165.46875 L 209.07422,163.06641 C 209.12109,163.07423 209.17187,163.08204 209.22656,163.08984 C 209.28124,163.08985 209.36327,163.08985 209.47266,163.08984 C 210.16796,163.08985 210.6953,162.91798 211.05469,162.57422 C 211.42187,162.22267 211.60546,161.71486 211.60547,161.05078 C 211.60546,160.38673 211.41405,159.88283 211.03125,159.53906 C 210.65624,159.18751 210.10546,159.01173 209.37891,159.01172 C 208.70703,159.01173 208.19531,159.20705 207.84375,159.59766 C 207.49218,159.98048 207.3164,160.54298 207.31641,161.28516 L 207.31641,173.625 L 203.97656,173.625"
+ id="text6073" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 267.09961,140.51367 L 269.94727,140.51367 C 271.60351,140.51367 272.80272,140.08008 273.54492,139.21289 C 274.2871,138.34571 274.65819,136.94727 274.6582,135.01758 C 274.65819,133.09571 274.31053,131.68165 273.61523,130.77539 C 272.92772,129.86134 271.8496,129.40431 270.38086,129.4043 L 267.09961,129.4043 L 267.09961,133.23633 L 270.88477,133.23633 L 270.88477,135.47461 L 267.09961,135.47461 L 267.09961,140.51367 M 263.61914,143.63086 L 263.61914,135.47461 L 261.74414,135.47461 L 261.74414,133.23633 L 263.61914,133.23633 L 263.61914,126.36914 L 270.4043,126.36914 C 273.04491,126.36916 275.01366,127.084 276.31055,128.51367 C 277.60741,129.93556 278.25584,132.10353 278.25586,135.01758 C 278.25584,136.60352 278.01756,137.99805 277.54102,139.20117 C 277.07225,140.4043 276.38084,141.36914 275.4668,142.0957 C 274.77928,142.64258 273.99413,143.03711 273.11133,143.2793 C 272.23632,143.51367 271.00585,143.63086 269.41992,143.63086 L 263.61914,143.63086"
+ id="text6077" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 626.72461,139.55273 C 627.17773,140.04493 627.68945,140.41211 628.25977,140.6543 C 628.83007,140.89649 629.47069,141.01758 630.18164,141.01758 C 631.71288,141.01758 632.90428,140.49414 633.75586,139.44727 C 634.60741,138.39258 635.03319,136.91602 635.0332,135.01758 C 635.03319,134.24415 634.96288,133.54493 634.82227,132.91992 C 634.68163,132.28712 634.4785,131.73634 634.21289,131.26758 L 626.72461,139.55273 M 625.98633,138.36914 L 633.39258,130.21289 C 632.9785,129.81447 632.50585,129.51759 631.97461,129.32227 C 631.44335,129.11916 630.84569,129.01759 630.18164,129.01758 C 628.66601,129.01759 627.48632,129.54103 626.64258,130.58789 C 625.79882,131.63478 625.37695,133.11134 625.37695,135.01758 C 625.37695,135.72071 625.42382,136.34571 625.51758,136.89258 C 625.61914,137.43946 625.77539,137.93165 625.98633,138.36914 M 621.36914,143.36133 L 623.51367,140.9707 C 622.91992,140.16602 622.47851,139.27149 622.18945,138.28711 C 621.90039,137.29493 621.75586,136.20509 621.75586,135.01758 C 621.75586,132.22853 622.51367,130.01759 624.0293,128.38477 C 625.55273,126.74416 627.60351,125.92385 630.18164,125.92383 C 631.28319,125.92385 632.27147,126.06447 633.14648,126.3457 C 634.02928,126.62697 634.84178,127.06056 635.58398,127.64648 L 637.30664,125.70117 L 638.45508,126.73242 L 636.63867,128.70117 C 637.30272,129.5215 637.79881,130.45509 638.12695,131.50195 C 638.46287,132.54884 638.63084,133.72071 638.63086,135.01758 C 638.63084,137.79883 637.86912,140.00977 636.3457,141.65039 C 634.82225,143.29102 632.76757,144.11133 630.18164,144.11133 C 629.01757,144.11133 627.96679,143.94727 627.0293,143.61914 C 626.0996,143.29102 625.26367,142.79102 624.52148,142.11914 L 622.50586,144.4043 L 621.36914,143.36133"
+ id="text6081" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 690,127.98633 C 689.42968,127.98634 688.9414,128.18556 688.53516,128.58398 C 688.13672,128.98244 687.9375,129.4629 687.9375,130.02539 C 687.9375,130.60353 688.13672,131.09181 688.53516,131.49023 C 688.93359,131.88868 689.42187,132.0879 690,132.08789 C 690.5625,132.0879 691.04296,131.88478 691.44141,131.47852 C 691.83984,131.07228 692.03906,130.5879 692.03906,130.02539 C 692.03906,129.4629 691.83984,128.98244 691.44141,128.58398 C 691.04296,128.18556 690.5625,127.98634 690,127.98633 M 690,126.47461 C 690.98437,126.47463 691.82031,126.82619 692.50781,127.5293 C 693.20312,128.22462 693.55077,129.06447 693.55078,130.04883 C 693.55077,131.0254 693.20312,131.86134 692.50781,132.55664 C 691.81249,133.25196 690.96875,133.59962 689.97656,133.59961 C 688.99218,133.59962 688.15625,133.25587 687.46875,132.56836 C 686.78906,131.88087 686.44922,131.04103 686.44922,130.04883 C 686.44922,129.05666 686.79297,128.21291 687.48047,127.51758 C 688.17578,126.82228 689.01562,126.47463 690,126.47461 M 695.51953,156.29883 L 695.51953,157.59961 L 694.19531,157.59961 L 694.19531,173.63086 L 692.42578,173.63086 L 692.42578,157.59961 L 690.57422,157.59961 L 690.57422,173.63086 L 688.78125,173.63086 L 688.78125,164.44336 C 687.47656,164.39649 686.43359,164.00196 685.65234,163.25977 C 684.87109,162.51759 684.48047,161.56056 684.48047,160.38867 C 684.48047,159.15431 684.89844,158.16603 685.73438,157.42383 C 686.57031,156.67385 687.67968,156.29885 689.0625,156.29883 L 695.51953,156.29883"
+ id="text6085" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 373.13672,6.5214844 L 376.08984,6.5214844 L 381.72656,13.095703 L 378.97266,13.095703 L 374.625,8.7480469 L 370.25391,13.095703 L 367.5,13.095703 L 373.13672,6.5214844"
+ id="text6091" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 750.67969,128.67773 L 750.67969,125.79492 L 753.32813,125.79492 L 753.32813,128.67773 L 750.67969,128.67773 M 746.60156,128.67773 L 746.60156,125.79492 L 749.25,125.79492 L 749.25,128.67773 L 746.60156,128.67773 M 753.39844,155.0332 L 749.73047,159.36914 L 748.06641,159.36914 L 750.375,155.0332 L 753.39844,155.0332"
+ id="text6099" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 171.07031,197.29102 L 175.92188,197.29102 L 175.92188,189.29883 L 173.97656,189.29883 L 171.07031,197.29102 M 165,203.63086 L 171.80859,186.36914 L 187.81641,186.36914 L 187.81641,189.36914 L 179.34375,189.36914 L 179.34375,193.04883 L 187.05469,193.04883 L 187.05469,196.00195 L 179.34375,196.00195 L 179.34375,200.44336 L 188.25,200.44336 L 188.25,203.63086 L 175.92188,203.63086 L 175.92188,200.08008 L 170.0625,200.08008 L 168.76172,203.63086 L 165,203.63086"
+ id="text6105" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 300.46875,193.23633 C 300.32031,193.22071 300.20312,193.20899 300.11719,193.20117 C 300.03906,193.19337 299.96484,193.18946 299.89453,193.18945 C 299.05859,193.18946 298.42578,193.53321 297.99609,194.2207 C 297.5664,194.90821 297.35156,195.92384 297.35156,197.26758 C 297.35156,198.04102 297.4375,198.70899 297.60938,199.27148 C 297.78906,199.83399 298.04687,200.28711 298.38281,200.63086 L 300.46875,193.23633 M 296.68359,206.49023 L 297.48047,203.63086 C 296.30859,203.13867 295.42187,202.35352 294.82031,201.27539 C 294.21875,200.19727 293.91797,198.85352 293.91797,197.24414 C 293.91797,195.11134 294.45312,193.43946 295.52344,192.22852 C 296.60156,191.01759 298.07421,190.41212 299.94141,190.41211 C 300.15234,190.41212 300.35937,190.41994 300.5625,190.43555 C 300.76562,190.45119 300.96874,190.47462 301.17188,190.50586 L 301.69922,188.56055 L 302.97656,188.56055 L 302.34375,190.78711 C 303.32811,191.09181 304.09765,191.63478 304.65234,192.41602 C 305.20702,193.18946 305.52733,194.17774 305.61328,195.38086 L 302.32031,195.36914 C 302.28124,194.98634 302.1914,194.65821 302.05078,194.38477 C 301.91796,194.10353 301.72265,193.85743 301.46484,193.64648 L 299.36719,201.13477 C 299.38281,201.13477 299.40624,201.13867 299.4375,201.14648 C 299.67187,201.16992 299.85156,201.18164 299.97656,201.18164 C 300.66406,201.18164 301.19921,200.99024 301.58203,200.60742 C 301.97265,200.22461 302.23437,199.62305 302.36719,198.80273 L 305.66016,198.80273 C 305.54296,200.41993 304.96874,201.70117 303.9375,202.64648 C 302.91405,203.5918 301.59374,204.06445 299.97656,204.06445 C 299.76562,204.06445 299.55077,204.05664 299.33203,204.04102 C 299.11328,204.02539 298.88671,204.00195 298.65234,203.9707 L 297.96094,206.49023 L 296.68359,206.49023 M 304.19531,223.0957 L 301.99219,223.0957 C 301.92968,222.54884 301.72264,222.12696 301.37109,221.83008 C 301.01952,221.5254 300.55468,221.37306 299.97656,221.37305 C 299.26562,221.37306 298.70702,221.69337 298.30078,222.33398 C 297.89452,222.96681 297.6914,223.85353 297.69141,224.99414 C 297.6914,226.14259 297.89452,227.01758 298.30078,227.61914 C 298.70702,228.22071 299.29687,228.52149 300.07031,228.52148 C 300.64061,228.52149 301.09765,228.35743 301.44141,228.0293 C 301.78514,227.70118 301.99218,227.23633 302.0625,226.63477 L 304.32422,226.62305 C 304.2617,227.70899 303.83592,228.58008 303.04688,229.23633 C 302.2578,229.89258 301.24218,230.22071 300,230.2207 C 298.54687,230.22071 297.39843,229.75977 296.55469,228.83789 C 295.71874,227.91602 295.30078,226.65821 295.30078,225.06445 C 295.30078,223.45509 295.72656,222.17384 296.57813,221.2207 C 297.43749,220.25978 298.58593,219.77931 300.02344,219.7793 C 301.21093,219.77931 302.18749,220.084 302.95313,220.69336 C 303.72655,221.30275 304.14061,222.10353 304.19531,223.0957 M 300,217.7168 C 298.99999,217.71681 298.06249,217.8965 297.1875,218.25586 C 296.32031,218.61525 295.54687,219.13869 294.86719,219.82617 C 294.17187,220.52931 293.64062,221.32618 293.27344,222.2168 C 292.90625,223.09962 292.72265,224.0254 292.72266,224.99414 C 292.72265,225.97071 292.90625,226.89649 293.27344,227.77148 C 293.64062,228.64649 294.17187,229.43164 294.86719,230.12695 C 295.55468,230.81446 296.33984,231.3418 297.22266,231.70898 C 298.10546,232.07617 299.03124,232.25977 300,232.25977 C 300.96874,232.25977 301.89452,232.07617 302.77734,231.70898 C 303.66796,231.3418 304.46874,230.80664 305.17969,230.10352 C 305.86717,229.43164 306.3867,228.66211 306.73828,227.79492 C 307.09764,226.92774 307.27733,225.99415 307.27734,224.99414 C 307.27733,224.00978 307.09373,223.08009 306.72656,222.20508 C 306.36717,221.32228 305.84373,220.53712 305.15625,219.84961 C 304.46092,219.15431 303.67577,218.62697 302.80078,218.26758 C 301.92577,217.90041 300.99218,217.71681 300,217.7168 M 299.97656,216.27539 C 301.16405,216.27541 302.28514,216.49416 303.33984,216.93164 C 304.40233,217.36916 305.35155,218.00587 306.1875,218.8418 C 307.0078,219.66212 307.63279,220.60353 308.0625,221.66602 C 308.49217,222.72071 308.70701,223.8379 308.70703,225.01758 C 308.70701,226.20509 308.49217,227.31446 308.0625,228.3457 C 307.64061,229.37696 307.01561,230.29883 306.1875,231.11133 C 305.3203,231.95508 304.35155,232.60352 303.28125,233.05664 C 302.21093,233.50195 301.10936,233.72461 299.97656,233.72461 C 298.82812,233.72461 297.73046,233.50586 296.68359,233.06836 C 295.64453,232.62305 294.70312,231.97852 293.85938,231.13477 C 293.02343,230.30664 292.38672,229.36914 291.94922,228.32227 C 291.51172,227.26758 291.29297,226.16602 291.29297,225.01758 C 291.29297,223.85353 291.51172,222.74415 291.94922,221.68945 C 292.38672,220.62697 293.02343,219.66994 293.85938,218.81836 C 294.67968,217.99025 295.60937,217.36134 296.64844,216.93164 C 297.68749,216.49416 298.79687,216.27541 299.97656,216.27539"
+ id="text6109" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 472.88672,203.63086 L 472.88672,186.36914 L 476.60156,186.36914 L 483.60938,198.22852 L 483.60938,186.36914 L 487.11328,186.36914 L 487.11328,203.63086 L 483.44531,203.63086 L 476.39063,191.77148 L 476.39063,203.63086 L 472.88672,203.63086 M 483.82031,181.0957 C 483.61717,182.07229 483.31639,182.79494 482.91797,183.26367 C 482.51952,183.72463 482.0078,183.9551 481.38281,183.95508 C 481.21874,183.9551 481.0664,183.94729 480.92578,183.93164 C 480.78515,183.90822 480.64452,183.87307 480.50391,183.82617 L 479.48438,183.52148 C 479.33593,183.48244 479.19921,183.4551 479.07422,183.43945 C 478.94921,183.41604 478.82812,183.40432 478.71094,183.4043 C 478.44531,183.40432 478.23046,183.47463 478.06641,183.61523 C 477.90234,183.75588 477.77343,183.98635 477.67969,184.30664 L 476.39063,184.30664 C 476.57812,183.36135 476.86718,182.66604 477.25781,182.2207 C 477.64843,181.77541 478.15624,181.55276 478.78125,181.55273 C 478.9453,181.55276 479.10937,181.56838 479.27344,181.59961 C 479.43749,181.62307 479.60937,181.66213 479.78906,181.7168 L 480.87891,182.00977 C 480.97265,182.04104 481.0703,182.06447 481.17188,182.08008 C 481.28124,182.09572 481.39843,182.10354 481.52344,182.10352 C 481.77343,182.10354 481.98046,182.02151 482.14453,181.85742 C 482.3164,181.68557 482.4453,181.43166 482.53125,181.0957 L 483.82031,181.0957"
+ id="text6113" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 535.83398,220.83432 L 539.2207,220.83432 L 538.33008,225.93198 C 538.21289,226.55698 538.12304,227.15073 538.06055,227.71323 C 537.99804,228.26792 537.96679,228.72104 537.9668,229.0726 C 537.96679,229.79917 538.13085,230.34214 538.45898,230.70151 C 538.7871,231.05307 539.2871,231.22885 539.95898,231.22885 C 540.74023,231.22885 541.3457,230.90854 541.77539,230.26791 C 542.21288,229.62729 542.57616,228.49058 542.86523,226.85776 L 543.91992,220.83432 L 547.30664,220.83432 L 545.04492,233.6312 L 541.9043,233.6312 L 542.11523,232.2601 C 541.7871,232.86948 541.41991,233.31479 541.01367,233.59604 C 540.61523,233.87729 540.14257,234.01791 539.5957,234.01791 C 539.07226,234.01791 538.60742,233.90073 538.20117,233.66635 C 537.79492,233.43979 537.42773,233.08432 537.09961,232.59995 L 536.04492,238.76401 L 532.69336,238.76401 L 535.83398,220.83432"
+ id="text6117" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 607.875,197.70117 C 607.74217,199.66211 606.98436,201.22071 605.60156,202.37695 C 604.22655,203.5332 602.42968,204.11133 600.21094,204.11133 C 597.65624,204.11133 595.66796,203.31445 594.24609,201.7207 C 592.83203,200.12696 592.125,197.89258 592.125,195.01758 C 592.125,192.08009 592.84765,189.83009 594.29297,188.26758 C 595.73828,186.7051 597.8164,185.92385 600.52734,185.92383 C 602.73046,185.92385 604.46874,186.46291 605.74219,187.54102 C 607.02342,188.61134 607.72655,190.12697 607.85156,192.08789 L 604.34766,192.08789 C 604.19921,191.11134 603.80077,190.36915 603.15234,189.86133 C 602.50389,189.34572 601.6289,189.08791 600.52734,189.08789 C 598.96484,189.08791 597.77734,189.59181 596.96484,190.59961 C 596.15234,191.60743 595.74609,193.08009 595.74609,195.01758 C 595.74609,196.89258 596.14843,198.3418 596.95313,199.36523 C 597.76562,200.38868 598.91796,200.90039 600.41016,200.90039 C 601.48827,200.90039 602.37108,200.62696 603.05859,200.08008 C 603.74608,199.52539 604.19139,198.73243 604.39453,197.70117 L 607.875,197.70117 M 597.62109,208.76367 L 597.62109,207.25195 C 598.24609,207.41601 598.81249,207.54101 599.32031,207.62695 C 599.82812,207.71289 600.26171,207.75586 600.62109,207.75586 C 601.02733,207.75586 601.32421,207.68554 601.51172,207.54492 C 601.69921,207.41211 601.79296,207.19726 601.79297,206.90039 C 601.79296,206.60351 601.68358,206.39258 601.46484,206.26758 C 601.24608,206.14258 600.8828,206.08008 600.375,206.08008 C 600.1953,206.08008 600.05858,206.08008 599.96484,206.08008 C 599.87108,206.08789 599.78515,206.0957 599.70703,206.10352 L 599.70703,203.63086 L 600.90234,203.63086 L 600.90234,204.68555 L 601.07813,204.68555 C 601.99218,204.68555 602.67968,204.87305 603.14063,205.24805 C 603.60155,205.62304 603.83202,206.18164 603.83203,206.92383 C 603.83202,207.70507 603.57421,208.29101 603.05859,208.68164 C 602.54296,209.07226 601.76952,209.26757 600.73828,209.26758 C 600.33983,209.26757 599.87108,209.2246 599.33203,209.13867 C 598.80077,209.05273 598.23046,208.92773 597.62109,208.76367"
+ id="text6121" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 721.7168,216.36914 L 721.7168,219.82617 L 718.23633,219.82617 L 718.23633,216.36914 L 721.7168,216.36914 M 721.55273,221.39648 C 721.55273,221.47462 721.55663,221.5879 721.56445,221.73633 C 721.57226,221.88478 721.57616,221.99415 721.57617,222.06445 C 721.57616,222.74415 721.50194,223.31446 721.35352,223.77539 C 721.20507,224.23634 720.96679,224.66602 720.63867,225.06445 C 720.38085,225.36134 720.00195,225.70118 719.50195,226.08398 C 719.00976,226.4668 718.69335,226.74415 718.55273,226.91602 C 718.24804,227.25977 718.0332,227.57618 717.9082,227.86523 C 717.79101,228.1543 717.73242,228.4668 717.73242,228.80273 C 717.73242,229.55274 717.93554,230.13477 718.3418,230.54883 C 718.74804,230.95508 719.32226,231.15821 720.06445,231.1582 C 720.79882,231.15821 721.38085,230.91211 721.81055,230.41992 C 722.24023,229.91993 722.4746,229.22071 722.51367,228.32227 L 725.8418,228.32227 L 725.8418,228.68555 C 725.84178,230.3418 725.31835,231.66211 724.27148,232.64648 C 723.23241,233.62305 721.83007,234.11133 720.06445,234.11133 C 718.25976,234.11133 716.82226,233.64648 715.75195,232.7168 C 714.68945,231.7793 714.1582,230.53321 714.1582,228.97852 C 714.1582,228.40821 714.2168,227.90821 714.33398,227.47852 C 714.45117,227.04883 714.63086,226.65821 714.87305,226.30664 C 715.18554,225.86915 715.67773,225.39259 716.34961,224.87695 C 717.02148,224.36134 717.43554,224.03321 717.5918,223.89258 C 717.88867,223.60353 718.0996,223.29884 718.22461,222.97852 C 718.35742,222.6504 718.42382,222.25587 718.42383,221.79492 C 718.42382,221.75587 718.41992,221.69337 718.41211,221.60742 C 718.40429,221.51368 718.40039,221.44337 718.40039,221.39648 L 721.55273,221.39648"
+ id="text6131" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Matrix Unicode"
+ d=""
+ id="text6955" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="137.05411"
+ y="23.149496"
+ id="text4346"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4348"
+ x="137.05411"
+ y="23.149496"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"> Ë </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="186.05411"
+ y="27.3995"
+ id="text4346-3"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4348-1"
+ x="186.05411"
+ y="27.3995"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"> ¯ </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="482.80411"
+ y="24.6495"
+ id="text4346-1"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4348-7"
+ x="482.80411"
+ y="24.6495"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"> Ë› </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="558.30408"
+ y="24.399498"
+ id="text4346-6"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4348-0"
+ x="558.30408"
+ y="24.399498"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"> ˘ </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="626.55408"
+ y="11.1495"
+ id="text4346-0"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4348-09"
+ x="626.55408"
+ y="11.1495"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ id="tspan4483"> o</tspan></tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="667.80408"
+ y="28.899498"
+ id="text4346-31"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4348-15"
+ x="667.80408"
+ y="28.899498"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"> . </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="619.55408"
+ y="203.14951"
+ id="text4346-38"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4348-8"
+ x="619.55408"
+ y="203.14951"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"> ˇ </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="620.30408"
+ y="232.14951"
+ id="text4346-9"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4348-6"
+ x="620.30408"
+ y="232.14951"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"> Ë™ </tspan></text>
+ <path
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:24px;line-height:125%;font-family:'Swis721 BT';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 402.88672,6.52148 2.95312,0 5.63672,6.574219 -2.7539,0 -4.34766,-4.3476565 -4.37109,4.3476565 -2.75391,0 5.63672,-6.574219"
+ id="text6091-3" />
+ </g>
+</svg>
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg
new file mode 100644
index 000000000..2304b2a4c
--- /dev/null
+++ b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International-Alternative.svg.2016_08_18_09_06_36.0.svg
@@ -0,0 +1,1049 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="900"
+ height="300"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.91 r13725"
+ version="1.0"
+ sodipodi:docname="KB_US-International-Alternative.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="D:\Users\Felix\Source\Repos\qmk_firmware\keyboards\s60-x\keymaps\ansi_qwertz\docs\KB_US-International-Alternative.png"
+ inkscape:export-xdpi="79.910004"
+ inkscape:export-ydpi="79.910004">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lend"
+ style="overflow:visible;">
+ <path
+ id="path5387"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.8) rotate(180)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lstart"
+ style="overflow:visible">
+ <path
+ id="path5390"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+ transform="scale(0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="Tail"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Tail"
+ style="overflow:visible">
+ <g
+ id="g5342"
+ transform="scale(-1.2)">
+ <path
+ id="path5344"
+ d="M -3.8048674,-3.9585227 L 0.54352094,-0.00068114835"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+ <path
+ id="path5346"
+ d="M -1.2866832,-3.9585227 L 3.0617053,-0.00068114835"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+ <path
+ id="path5348"
+ d="M 1.3053582,-3.9585227 L 5.6537466,-0.00068114835"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+ <path
+ id="path5350"
+ d="M -3.8048674,4.1775838 L 0.54352094,0.21974226"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+ <path
+ id="path5352"
+ d="M -1.2866832,4.1775838 L 3.0617053,0.21974226"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+ <path
+ id="path5354"
+ d="M 1.3053582,4.1775838 L 5.6537466,0.21974226"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+ </g>
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Mend"
+ style="overflow:visible;">
+ <path
+ id="path5363"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.6) rotate(180) translate(-5,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Lend"
+ style="overflow:visible;">
+ <path
+ id="path5369"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(1.1) rotate(180) translate(-5,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Send"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Send"
+ style="overflow:visible;">
+ <path
+ id="path5375"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.2) rotate(180)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Send"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Send"
+ style="overflow:visible;">
+ <path
+ id="path5357"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.3) rotate(180) translate(-5,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Mend"
+ style="overflow:visible;">
+ <path
+ id="path5381"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.4) rotate(180)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Lstart"
+ style="overflow:visible">
+ <path
+ id="path5372"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(1.1) translate(-5,0)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.4142136"
+ inkscape:cx="435.66801"
+ inkscape:cy="291.15819"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:grid-points="true"
+ showgrid="true"
+ gridtolerance="15px"
+ showborder="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1017"
+ inkscape:window-x="1912"
+ inkscape:window-y="-8"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:grid-bbox="true"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0px"
+ originy="0px"
+ spacingx="7.5px"
+ spacingy="7.5px"
+ color="#0000ff"
+ empcolor="#0000ff"
+ opacity="0.12156863"
+ empopacity="0.25098039"
+ empspacing="4" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0,0 L 60,0 L 60,60 L 0,60 L 0,0 z "
+ id="rect2186" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 60,0 L 120,0 L 120,60 L 60,60 L 60,0 z "
+ id="rect2218" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 120,0 L 180,0 L 180,60 L 120,60 L 120,0 z "
+ id="rect2222" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 180,0 L 240,0 L 240,60 L 180,60 L 180,0 z "
+ id="rect2228" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 240,0 L 300,0 L 300,60 L 240,60 L 240,0 z "
+ id="rect2230" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 300,0 L 360,0 L 360,60 L 300,60 L 300,0 z "
+ id="rect2232" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 360,0 L 420,0 L 420,60 L 360,60 L 360,0 z "
+ id="rect2234" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 420,0 L 480,0 L 480,60 L 420,60 L 420,0 z "
+ id="rect2236" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 480,0 L 540,0 L 540,60 L 480,60 L 480,0 z "
+ id="rect2238" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 540,0 L 600,0 L 600,60 L 540,60 L 540,0 z "
+ id="rect2240" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 600,0 L 660,0 L 660,60 L 600,60 L 600,0 z "
+ id="rect2242" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 660,0 L 720,0 L 720,60 L 660,60 L 660,0 z "
+ id="rect2244" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 720,0 L 780,0 L 780,60 L 720,60 L 720,0 z "
+ id="rect2246" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 780,0 L 900,0 L 900,60 L 780,60 L 780,0 z "
+ id="rect2248" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0,60 L 90,60 L 90,120 L 0,120 L 0,60 z "
+ id="rect2250" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 90,60 L 150,60 L 150,120 L 90,120 L 90,60 z "
+ id="rect2252" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 150,60 L 210,60 L 210,120 L 150,120 L 150,60 z "
+ id="rect2254" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 210,60 L 270,60 L 270,120 L 210,120 L 210,60 z "
+ id="rect2256" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 270,60 L 330,60 L 330,120 L 270,120 L 270,60 z "
+ id="rect2258" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 330,60 L 390,60 L 390,120 L 330,120 L 330,60 z "
+ id="rect2262" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 390,60 L 450,60 L 450,120 L 390,120 L 390,60 z "
+ id="rect2264" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 450,60 L 510,60 L 510,120 L 450,120 L 450,60 z "
+ id="rect2266" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 510,60 L 570,60 L 570,120 L 510,120 L 510,60 z "
+ id="rect2270" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 570,60 L 630,60 L 630,120 L 570,120 L 570,60 z "
+ id="rect2272" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 630,60 L 690,60 L 690,120 L 630,120 L 630,60 z "
+ id="rect2274" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 690,60 L 750,60 L 750,120 L 690,120 L 690,60 z "
+ id="rect2278" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 750,60 L 810,60 L 810,120 L 750,120 L 750,60 z "
+ id="rect2280" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 810,60 L 900,60 L 900,120 L 810,120 L 810,60 z "
+ id="rect2284" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0,120 L 105,120 L 105,180 L 0,180 L 0,120 z "
+ id="rect2286" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 105,120 L 165,120 L 165,180 L 105,180 L 105,120 z "
+ id="rect2292" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 165,120 L 225,120 L 225,180 L 165,180 L 165,120 z "
+ id="rect2296" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 225,120 L 285,120 L 285,180 L 225,180 L 225,120 z "
+ id="rect2298" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 285,120 L 345,120 L 345,180 L 285,180 L 285,120 z "
+ id="rect2300" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 345,120 L 405,120 L 405,180 L 345,180 L 345,120 z "
+ id="rect2302" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 405,120 L 465,120 L 465,180 L 405,180 L 405,120 z "
+ id="rect2306" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 465,120 L 525,120 L 525,180 L 465,180 L 465,120 z "
+ id="rect2308" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 525,120 L 585,120 L 585,180 L 525,180 L 525,120 z "
+ id="rect2312" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 585,120 L 645,120 L 645,180 L 585,180 L 585,120 z "
+ id="rect2314" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 645,120 L 705,120 L 705,180 L 645,180 L 645,120 z "
+ id="rect2316" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 705,120 L 765,120 L 765,180 L 705,180 L 705,120 z "
+ id="rect2318" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 765,120 L 900,120 L 900,180 L 765,180 L 765,120 z "
+ id="rect2320" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0,180 L 135,180 L 135,240 L 0,240 L 0,180 z "
+ id="rect2322" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 135,180 L 195,180 L 195,240 L 135,240 L 135,180 z "
+ id="rect2324" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 195,180 L 255,180 L 255,240 L 195,240 L 195,180 z "
+ id="rect2326" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 255,180 L 315,180 L 315,240 L 255,240 L 255,180 z "
+ id="rect2330" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 315,180 L 375,180 L 375,240 L 315,240 L 315,180 z "
+ id="rect2334" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 375,180 L 435,180 L 435,240 L 375,240 L 375,180 z "
+ id="rect2336" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 435,180 L 495,180 L 495,240 L 435,240 L 435,180 z "
+ id="rect2338" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 495,180 L 555,180 L 555,240 L 495,240 L 495,180 z "
+ id="rect2340" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 555,180 L 615,180 L 615,240 L 555,240 L 555,180 z "
+ id="rect2342" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 615,180 L 675,180 L 675,240 L 615,240 L 615,180 z "
+ id="rect2344" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 675,180 L 735,180 L 735,240 L 675,240 L 675,180 z "
+ id="rect2346" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 735,180 L 900,180 L 900,240 L 735,240 L 735,180 z "
+ id="rect2348" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0,240 L 90,240 L 90,300 L 0,300 L 0,240 z "
+ id="rect2350" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 810,240 L 900,240 L 900,300 L 810,300 L 810,240 z "
+ id="rect2352" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 150,240 L 240,240 L 240,300 L 150,300 L 150,240 z "
+ id="rect2354" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 600,240 L 690,240 L 690,300 L 600,300 L 600,240 z "
+ id="rect2360" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 240,240 L 600,240 L 600,300 L 240,300 L 240,240 z "
+ id="rect2362" />
+ <path
+ style="fill:#efefef;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 90,240 L 150,240 L 150,300 L 90,300 L 90,240 z "
+ id="rect2364" />
+ <path
+ style="fill:#efefef;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 690,240 L 750,240 L 750,300 L 690,300 L 690,240 z "
+ id="rect2366" />
+ <path
+ style="fill:#efefef;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 750,240 L 810,240 L 810,300 L 750,300 L 750,240 z "
+ id="rect2368" />
+ <path
+ style=""
+ d=""
+ id="flowRoot4146" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 75.351563,18.826172 L 74.4375,11.056641 L 74.4375,6.3691406 L 78.046875,6.3691406 L 78.046875,11.056641 L 77.132813,18.826172 L 75.351563,18.826172 M 74.484375,23.630859 L 74.484375,20.173828 L 77.964844,20.173828 L 77.964844,23.630859 L 74.484375,23.630859 M 75.351563,53.630859 L 75.351563,42.158203 L 71.34375,42.158203 L 71.34375,39.802734 L 71.601563,39.802734 C 73.062496,39.802748 74.124995,39.576186 74.789063,39.123047 C 75.460931,38.669937 75.855462,37.912125 75.972656,36.849609 L 78.65625,36.849609 L 78.65625,53.630859 L 75.351563,53.630859"
+ id="text5091" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 23.34375,14.220703 L 23.34375,16.810547 C 22.531233,17.365241 21.761702,17.775396 21.035156,18.041016 C 20.316391,18.298833 19.605455,18.42774 18.902344,18.427734 C 18.542956,18.42774 18.183581,18.39649 17.824219,18.333984 C 17.464832,18.27149 17.105457,18.181646 16.746094,18.064453 C 16.558583,18.001959 16.281239,17.904303 15.914063,17.771484 C 14.203116,17.185553 12.902336,16.892585 12.011719,16.892578 C 11.34765,16.892585 10.652339,17.041022 9.9257813,17.337891 C 9.2070275,17.626959 8.3984345,18.091802 7.5,18.732422 L 7.5,16.142578 C 8.3359346,15.580086 9.1328088,15.162118 9.890625,14.888672 C 10.648432,14.607431 11.363275,14.466806 12.035156,14.466797 C 12.949211,14.466806 14.085929,14.693368 15.445313,15.146484 C 15.46874,15.154305 15.484365,15.158212 15.492188,15.158203 C 15.632802,15.205087 15.847646,15.279305 16.136719,15.380859 C 17.347644,15.810555 18.285143,16.025398 18.949219,16.025391 C 19.613267,16.025398 20.29686,15.880867 21,15.591797 C 21.703109,15.302743 22.484358,14.845712 23.34375,14.220703 M 11.988281,35.033203 L 15.011719,35.033203 L 17.320313,39.369141 L 15.65625,39.369141 L 11.988281,35.033203"
+ id="text5103" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 136.47578,20.443359 C 136.04608,21.099612 135.54999,21.583986 134.9875,21.896484 C 134.42499,22.201173 133.76093,22.353517 132.99532,22.353516 C 131.76093,22.353517 130.81953,22.01758 130.1711,21.345703 C 129.53047,20.673831 129.21015,19.681645 129.21016,18.369141 C 129.21015,16.50196 129.75312,14.935556 130.83907,13.669922 C 131.93281,12.404308 133.27656,11.771496 134.87032,11.771484 C 135.4953,11.771496 136.03827,11.900402 136.49922,12.158203 C 136.96015,12.416027 137.33905,12.798839 137.63594,13.306641 L 138.25703,12.158203 L 140.34297,12.158203 L 138.62032,19.166016 C 138.59686,19.251958 138.57733,19.341801 138.56172,19.435547 C 138.54608,19.521488 138.53827,19.591801 138.53828,19.646484 C 138.53827,19.919926 138.63202,20.126957 138.81953,20.267578 C 139.00702,20.400394 139.28436,20.4668 139.65157,20.466797 C 139.95624,20.4668 140.27264,20.388675 140.60078,20.232422 C 140.9367,20.076175 141.2492,19.857426 141.53828,19.576172 C 142.21014,18.951177 142.71795,18.220709 143.06172,17.384766 C 143.41326,16.548835 143.58904,15.630867 143.58907,14.630859 C 143.58904,12.75587 142.86248,11.216809 141.40938,10.013672 C 139.96405,8.8027492 138.09686,8.1972811 135.80782,8.1972656 C 134.70624,8.1972811 133.6789,8.3300934 132.72578,8.5957031 C 131.78046,8.8613429 130.92109,9.2558737 130.14766,9.7792969 C 128.81953,10.669935 127.79609,11.783215 127.07735,13.119141 C 126.36641,14.455087 126.01094,15.91993 126.01094,17.513672 C 126.01094,19.912113 126.81953,21.83008 128.43672,23.267578 C 130.0539,24.697265 132.21406,25.412108 134.91719,25.412109 C 136.1828,25.412108 137.41718,25.220702 138.62032,24.837891 C 139.83124,24.455077 140.95623,23.90039 141.99532,23.173828 L 142.95625,24.544922 C 141.76092,25.443358 140.49139,26.119138 139.14766,26.572266 C 137.81171,27.025387 136.41718,27.25195 134.96407,27.251953 C 133.46405,27.25195 132.08515,27.060543 130.82735,26.677734 C 129.56953,26.302732 128.45234,25.744139 127.47578,25.001953 C 126.26484,24.05664 125.35859,22.966798 124.75703,21.732422 C 124.15547,20.49805 123.85469,19.099614 123.85469,17.537109 C 123.85469,16.232429 124.05781,14.990243 124.46407,13.810547 C 124.87813,12.623058 125.48359,11.544934 126.28047,10.576172 C 127.43672,9.1621238 128.82734,8.0918124 130.45235,7.3652344 C 132.07734,6.6386889 133.88593,6.275408 135.87813,6.2753906 C 137.19843,6.275408 138.43671,6.4550953 139.59297,6.8144531 C 140.75702,7.1660321 141.76873,7.6660316 142.62813,8.3144531 C 143.68279,9.1347801 144.46795,10.072279 144.9836,11.126953 C 145.50701,12.17384 145.76873,13.357432 145.76875,14.677734 C 145.76873,15.966805 145.51092,17.15821 144.99532,18.251953 C 144.48748,19.337895 143.75311,20.267581 142.79219,21.041016 C 142.2453,21.478518 141.64764,21.814455 140.99922,22.048828 C 140.35858,22.275392 139.69061,22.388673 138.99532,22.388672 C 138.16718,22.388673 137.54218,22.224611 137.12032,21.896484 C 136.70624,21.568361 136.4914,21.083987 136.47578,20.443359 M 137.06172,15.427734 C 136.96015,14.794931 136.73358,14.314462 136.38203,13.986328 C 136.03827,13.650401 135.58124,13.482432 135.01094,13.482422 C 134.1203,13.482432 133.34687,13.966807 132.69063,14.935547 C 132.03437,15.904305 131.70624,17.068366 131.70625,18.427734 C 131.70624,19.146489 131.86249,19.693363 132.175,20.068359 C 132.49531,20.443363 132.95624,20.630862 133.55782,20.630859 C 134.20624,20.630862 134.79608,20.384769 135.32735,19.892578 C 135.8664,19.400395 136.23358,18.75977 136.42891,17.970703 L 137.06172,15.427734 M 128.56563,53.630859 C 128.58125,52.130861 128.90156,50.861331 129.52657,49.822266 C 130.15156,48.775395 131.26094,47.716803 132.85469,46.646484 C 133.09687,46.482429 133.44844,46.255867 133.90938,45.966797 C 136.01875,44.615243 137.07343,43.314463 137.07344,42.064453 C 137.07343,41.322278 136.85078,40.736341 136.40547,40.306641 C 135.96015,39.876967 135.35078,39.662123 134.57735,39.662109 C 133.73359,39.662123 133.08125,39.927748 132.62032,40.458984 C 132.16719,40.982435 131.94062,41.732434 131.94063,42.708984 L 131.94063,42.849609 L 128.84688,42.849609 C 128.84688,40.927747 129.3625,39.44728 130.39375,38.408203 C 131.425,37.369157 132.89375,36.849626 134.8,36.849609 C 136.52656,36.849626 137.90546,37.322282 138.93672,38.267578 C 139.96796,39.205093 140.48358,40.455091 140.4836,42.017578 C 140.48358,43.134776 140.21405,44.103525 139.675,44.923828 C 139.13593,45.744149 138.09296,46.677741 136.5461,47.724609 C 136.21796,47.951178 135.76484,48.248052 135.18672,48.615234 C 133.71797,49.560551 132.88984,50.2793 132.70235,50.771484 L 140.31953,50.771484 L 140.31953,53.630859 L 128.56563,53.630859"
+ id="text5127" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 195.28125,13.693359 L 194.25,16.552734 L 197.19141,16.552734 L 198.19922,13.693359 L 195.28125,13.693359 M 195.28125,6.4746094 L 197.87109,6.4746094 L 196.16016,11.337891 L 198.99609,11.337891 L 200.73047,6.4746094 L 203.32031,6.4746094 L 201.58594,11.337891 L 204.90234,11.337891 L 204.03516,13.693359 L 200.75391,13.693359 L 199.76953,16.529297 L 203.16797,16.529297 L 202.33594,18.873047 L 198.92578,18.873047 L 197.19141,23.748047 L 194.60156,23.748047 L 196.33594,18.873047 L 193.47656,18.873047 L 191.73047,23.748047 L 189.15234,23.748047 L 190.86328,18.873047 L 187.5,18.873047 L 188.39063,16.529297 L 191.69531,16.529297 L 192.70313,13.693359 L 189.19922,13.693359 L 190.06641,11.337891 L 193.54688,11.337891 L 195.28125,6.4746094 M 190.07813,48.521484 L 193.30078,48.521484 C 193.30859,49.458989 193.53515,50.166019 193.98047,50.642578 C 194.42578,51.111331 195.08593,51.345705 195.96094,51.345703 C 196.80468,51.345705 197.45312,51.126956 197.90625,50.689453 C 198.36718,50.244144 198.59765,49.607426 198.59766,48.779297 C 198.59765,47.951178 198.32812,47.326178 197.78906,46.904297 C 197.2578,46.474617 196.46484,46.259773 195.41016,46.259766 C 195.35546,46.259773 195.26953,46.263679 195.15234,46.271484 C 195.04296,46.279304 194.96093,46.28321 194.90625,46.283203 L 194.90625,43.962891 L 195.26953,43.962891 C 196.23827,43.9629 196.95312,43.7754 197.41406,43.400391 C 197.8828,43.017589 198.11718,42.435558 198.11719,41.654297 C 198.11718,41.005872 197.91796,40.494154 197.51953,40.119141 C 197.1289,39.736342 196.59374,39.544936 195.91406,39.544922 C 195.17187,39.544936 194.59765,39.763686 194.19141,40.201172 C 193.78515,40.638685 193.58203,41.259778 193.58203,42.064453 L 193.58203,42.205078 L 190.41797,42.205078 C 190.45703,40.486341 190.96094,39.169936 191.92969,38.255859 C 192.90625,37.334001 194.28125,36.873064 196.05469,36.873047 C 197.73437,36.873064 199.0664,37.283219 200.05078,38.103516 C 201.03514,38.923843 201.52733,40.02931 201.52734,41.419922 C 201.52733,42.154308 201.35936,42.798839 201.02344,43.353516 C 200.68749,43.908213 200.18358,44.365244 199.51172,44.724609 C 200.37108,45.099618 201.01952,45.619149 201.45703,46.283203 C 201.90233,46.93946 202.12499,47.724615 202.125,48.638672 C 202.12499,50.318363 201.57421,51.650393 200.47266,52.634766 C 199.37108,53.619141 197.86718,54.111328 195.96094,54.111328 C 194.07812,54.111328 192.625,53.634766 191.60156,52.681641 C 190.58594,51.720705 190.07812,50.357425 190.07813,48.591797 L 190.07813,48.521484"
+ id="text5139" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 254.46094,21.451172 C 255.10155,21.365237 255.58984,21.134768 255.92578,20.759766 C 256.26171,20.384769 256.42968,19.884769 256.42969,19.259766 C 256.42968,18.705083 256.26952,18.248052 255.94922,17.888672 C 255.63671,17.52149 255.14062,17.236335 254.46094,17.033203 L 254.46094,21.451172 M 253.06641,13.435547 L 253.06641,9.4511719 C 252.45703,9.529311 251.99218,9.7402483 251.67188,10.083984 C 251.35156,10.419935 251.1914,10.87306 251.19141,11.443359 C 251.1914,11.919934 251.33984,12.318371 251.63672,12.638672 C 251.9414,12.958995 252.41796,13.22462 253.06641,13.435547 M 253.06641,26.267578 L 253.06641,24.017578 C 251.30078,23.908203 249.98047,23.396485 249.10547,22.482422 C 248.23047,21.568361 247.79297,20.24805 247.79297,18.521484 L 250.93359,18.521484 C 250.97265,19.365239 251.16796,20.033207 251.51953,20.525391 C 251.8789,21.009768 252.39453,21.318362 253.06641,21.451172 L 253.06641,16.599609 C 251.2539,16.138679 249.96484,15.537117 249.19922,14.794922 C 248.43359,14.052744 248.05078,13.03712 248.05078,11.748047 C 248.05078,10.318373 248.5039,9.1660301 249.41016,8.2910156 C 250.32422,7.4160318 251.54296,6.959001 253.06641,6.9199219 L 253.06641,5.4199219 L 254.46094,5.4199219 L 254.46094,6.9199219 C 255.98437,6.9980635 257.17186,7.4590005 258.02344,8.3027344 C 258.87499,9.1386864 259.34374,10.318373 259.42969,11.841797 L 256.24219,11.841797 C 256.18749,11.115247 256.01171,10.56056 255.71484,10.177734 C 255.42577,9.7871232 255.0078,9.5683734 254.46094,9.5214844 L 254.46094,13.787109 C 256.39062,14.388681 257.74999,15.07618 258.53906,15.849609 C 259.32811,16.623054 259.72264,17.642584 259.72266,18.908203 C 259.72264,20.400394 259.26171,21.591799 258.33984,22.482422 C 257.42577,23.373047 256.1328,23.892578 254.46094,24.041016 L 254.46094,26.267578 L 253.06641,26.267578 M 254.64844,47.419922 L 254.64844,40.236328 L 250.08984,47.419922 L 254.64844,47.419922 M 254.57813,53.630859 L 254.57813,50.009766 L 247.5,50.009766 L 247.5,47.056641 L 253.6875,37.330078 L 257.84766,37.330078 L 257.84766,47.337891 L 259.79297,47.337891 L 259.79297,50.009766 L 257.84766,50.009766 L 257.84766,53.630859 L 254.57813,53.630859"
+ id="text5145" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 320.42578,19.740234 C 320.42577,20.263675 320.60155,20.705081 320.95313,21.064453 C 321.30467,21.416018 321.73827,21.591799 322.25391,21.591797 C 322.75389,21.591799 323.18358,21.412112 323.54297,21.052734 C 323.90233,20.68555 324.08201,20.24805 324.08203,19.740234 C 324.08201,19.240239 323.90233,18.814458 323.54297,18.462891 C 323.19139,18.103521 322.7617,17.923834 322.25391,17.923828 C 321.73827,17.923834 321.30467,18.099615 320.95313,18.451172 C 320.60155,18.794927 320.42577,19.224614 320.42578,19.740234 M 317.88281,19.740234 C 317.8828,18.521489 318.30468,17.494147 319.14844,16.658203 C 319.99217,15.822273 321.02733,15.404305 322.25391,15.404297 C 323.45701,15.404305 324.48045,15.830086 325.32422,16.681641 C 326.17576,17.525397 326.60154,18.544927 326.60156,19.740234 C 326.60154,20.943362 326.17576,21.974611 325.32422,22.833984 C 324.47264,23.685547 323.4492,24.111328 322.25391,24.111328 C 321.02733,24.111328 319.99217,23.689453 319.14844,22.845703 C 318.30468,22.001955 317.8828,20.9668 317.88281,19.740234 M 311.07422,24.111328 L 321.08203,6.8496094 L 322.96875,6.8496094 L 312.96094,24.111328 L 311.07422,24.111328 M 310.04297,11.220703 C 310.04297,11.73634 310.21484,12.169933 310.55859,12.521484 C 310.91015,12.873058 311.34375,13.048839 311.85938,13.048828 C 312.36718,13.048839 312.79687,12.873058 313.14844,12.521484 C 313.50781,12.162121 313.68749,11.728528 313.6875,11.220703 C 313.68749,10.720716 313.50781,10.294935 313.14844,9.9433594 C 312.79687,9.5839984 312.36718,9.4043111 311.85938,9.4042969 C 311.34375,9.4043111 310.91015,9.5800922 310.55859,9.9316406 C 310.21484,10.275404 310.04297,10.705091 310.04297,11.220703 M 307.5,11.220703 C 307.5,10.001967 307.92187,8.9707178 308.76563,8.1269531 C 309.60937,7.275407 310.64062,6.8496262 311.85938,6.8496094 C 313.06249,6.8496262 314.08593,7.2793132 314.92969,8.1386719 C 315.78124,8.990249 316.20702,10.017592 316.20703,11.220703 C 316.20702,12.423839 315.78124,13.451182 314.92969,14.302734 C 314.08593,15.146493 313.06249,15.568367 311.85938,15.568359 C 310.63281,15.568367 309.59765,15.150399 308.75391,14.314453 C 307.91797,13.478526 307.5,12.447277 307.5,11.220703 M 310.85156,49.119141 L 314.13281,49.119141 C 314.1875,49.853519 314.43359,50.423831 314.87109,50.830078 C 315.30859,51.228518 315.89453,51.427737 316.62891,51.427734 C 317.53515,51.427737 318.22655,51.162112 318.70313,50.630859 C 319.18749,50.099613 319.42968,49.337895 319.42969,48.345703 C 319.42968,47.416022 319.18358,46.685554 318.69141,46.154297 C 318.19921,45.615242 317.51952,45.345711 316.65234,45.345703 C 316.16796,45.345711 315.74218,45.443368 315.375,45.638672 C 315.00781,45.833992 314.69531,46.123054 314.4375,46.505859 L 311.41406,46.330078 L 312.50391,37.330078 L 322.14844,37.330078 L 322.14844,40.166016 L 314.87109,40.166016 L 314.4375,43.529297 C 314.80468,43.240245 315.22656,43.025401 315.70313,42.884766 C 316.17968,42.736339 316.71093,42.66212 317.29688,42.662109 C 318.96874,42.66212 320.3164,43.169932 321.33984,44.185547 C 322.37108,45.20118 322.88671,46.53321 322.88672,48.181641 C 322.88671,49.986332 322.3203,51.427737 321.1875,52.505859 C 320.05468,53.576172 318.53515,54.111328 316.62891,54.111328 C 314.89453,54.111328 313.51172,53.669922 312.48047,52.787109 C 311.45703,51.896486 310.91406,50.673831 310.85156,49.119141"
+ id="text5151" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 372.15234,48.298828 C 372.15234,49.25977 372.39062,50.021488 372.86719,50.583984 C 373.35156,51.146487 374.00781,51.427737 374.83594,51.427734 C 375.60937,51.427737 376.21484,51.154299 376.65234,50.607422 C 377.08983,50.06055 377.30858,49.298832 377.30859,48.322266 C 377.30858,47.423834 377.08202,46.724616 376.62891,46.224609 C 376.17577,45.724617 375.53905,45.474618 374.71875,45.474609 C 373.91406,45.474618 373.28515,45.724617 372.83203,46.224609 C 372.3789,46.724616 372.15234,47.416022 372.15234,48.298828 M 372.10547,43.916016 C 372.48828,43.525401 372.94921,43.232432 373.48828,43.037109 C 374.02734,42.833995 374.6289,42.732433 375.29297,42.732422 C 376.93358,42.732433 378.24608,43.232432 379.23047,44.232422 C 380.22264,45.23243 380.71874,46.56446 380.71875,48.228516 C 380.71874,49.994144 380.17968,51.419924 379.10156,52.505859 C 378.02343,53.591797 376.60155,54.134765 374.83594,54.134766 C 372.79687,54.134765 371.24609,53.431641 370.18359,52.025391 C 369.1289,50.619144 368.60156,48.560552 368.60156,45.849609 C 368.60156,42.935558 369.16797,40.708997 370.30078,39.169922 C 371.43359,37.623063 373.0664,36.849626 375.19922,36.849609 C 376.68358,36.849626 377.8789,37.236345 378.78516,38.009766 C 379.69921,38.783218 380.19921,39.830092 380.28516,41.150391 L 376.88672,41.150391 C 376.80858,40.611341 376.59765,40.205092 376.25391,39.931641 C 375.91015,39.658217 375.42968,39.521498 374.8125,39.521484 C 373.96874,39.521498 373.32031,39.888686 372.86719,40.623047 C 372.41406,41.349622 372.16015,42.447277 372.10547,43.916016"
+ id="text5157" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 432.85547,16.095703 L 431.96484,16.740234 C 431.60546,16.990241 431.33593,17.291022 431.15625,17.642578 C 430.97656,17.994146 430.88671,18.388677 430.88672,18.826172 C 430.88671,19.490239 431.11328,20.048832 431.56641,20.501953 C 432.01953,20.955081 432.58593,21.181643 433.26563,21.181641 C 433.76562,21.181643 434.24218,21.080081 434.69531,20.876953 C 435.15624,20.666019 435.58202,20.361331 435.97266,19.962891 L 432.85547,16.095703 M 433.79297,12.404297 L 434.20313,12.111328 C 434.57812,11.853527 434.85546,11.564465 435.03516,11.244141 C 435.21483,10.923841 435.30468,10.556654 435.30469,10.142578 C 435.30468,9.7441545 435.17968,9.4277486 434.92969,9.1933594 C 434.68749,8.958999 434.35546,8.8418117 433.93359,8.8417969 C 433.5039,8.8418117 433.16406,8.9629053 432.91406,9.2050781 C 432.66406,9.4394673 432.53906,9.7597795 432.53906,10.166016 C 432.53906,10.384779 432.59765,10.62306 432.71484,10.880859 C 432.83984,11.138684 433.01562,11.412122 433.24219,11.701172 L 433.79297,12.404297 M 431.15625,13.962891 L 430.47656,13.072266 C 430.125,12.603527 429.87109,12.166027 429.71484,11.759766 C 429.5664,11.345715 429.49218,10.912122 429.49219,10.458984 C 429.49218,9.2089988 429.89062,8.2168123 430.6875,7.4824219 C 431.49218,6.7402513 432.58203,6.3691579 433.95703,6.3691406 C 435.27733,6.3691579 436.3203,6.7090013 437.08594,7.3886719 C 437.85155,8.0683749 438.23436,8.9863428 438.23438,10.142578 C 438.23436,11.017591 438.0078,11.802746 437.55469,12.498047 C 437.10936,13.185557 436.40624,13.833994 435.44531,14.443359 L 437.91797,17.490234 C 438.15233,17.107428 438.33593,16.677741 438.46875,16.201172 C 438.60936,15.724617 438.70702,15.193368 438.76172,14.607422 L 441.80859,14.607422 C 441.72264,15.623055 441.5117,16.56446 441.17578,17.431641 C 440.83983,18.298833 440.37889,19.091801 439.79297,19.810547 L 442.93359,23.630859 L 438.94922,23.630859 L 437.77734,22.189453 C 437.08983,22.822266 436.33202,23.302735 435.50391,23.630859 C 434.68359,23.951172 433.82421,24.111328 432.92578,24.111328 C 431.33203,24.111328 430.02734,23.638672 429.01172,22.693359 C 428.0039,21.748049 427.5,20.541019 427.5,19.072266 C 427.5,17.978521 427.78125,17.037116 428.34375,16.248047 C 428.90625,15.458993 429.84375,14.697275 431.15625,13.962891 M 434.66016,53.630859 L 431.15625,53.630859 C 431.28125,51.341799 431.83203,49.07227 432.80859,46.822266 C 433.79296,44.572275 435.19531,42.361339 437.01563,40.189453 L 428.76563,40.189453 L 428.76563,37.330078 L 440.66016,37.330078 L 440.66016,39.849609 C 438.8164,41.880871 437.39843,44.029306 436.40625,46.294922 C 435.42187,48.560552 434.83984,51.005862 434.66016,53.630859"
+ id="text5163" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 493.5,13.212891 L 491.4375,16.119141 L 489.44531,14.724609 L 491.69531,11.900391 L 488.41406,10.986328 L 489.17578,8.6074219 L 492.32813,9.7324219 L 492.32813,6.3691406 L 494.64844,6.3691406 L 494.64844,9.7324219 L 497.80078,8.6308594 L 498.58594,11.009766 L 495.30469,11.900391 L 497.53125,14.701172 L 495.49219,16.166016 L 493.5,13.212891 M 490.875,48.755859 C 490.875,49.576176 491.10156,50.208988 491.55469,50.654297 C 492.01562,51.099612 492.67187,51.322268 493.52344,51.322266 C 494.33593,51.322268 494.97265,51.095706 495.43359,50.642578 C 495.90233,50.189457 496.13671,49.560551 496.13672,48.755859 C 496.13671,47.982428 495.89843,47.361334 495.42188,46.892578 C 494.9453,46.423835 494.31249,46.189461 493.52344,46.189453 C 492.73437,46.189461 492.09374,46.427742 491.60156,46.904297 C 491.11718,47.380866 490.875,47.998053 490.875,48.755859 M 491.14453,41.560547 C 491.14453,42.208996 491.34765,42.708995 491.75391,43.060547 C 492.16015,43.404307 492.74218,43.576182 493.5,43.576172 C 494.2578,43.576182 494.83984,43.400401 495.24609,43.048828 C 495.66015,42.697277 495.86718,42.201183 495.86719,41.560547 C 495.86718,40.93556 495.65624,40.443373 495.23438,40.083984 C 494.81249,39.724623 494.23437,39.544936 493.5,39.544922 C 492.78124,39.544936 492.20703,39.72853 491.77734,40.095703 C 491.35546,40.462904 491.14453,40.951185 491.14453,41.560547 M 489.9375,44.818359 C 489.23437,44.427744 488.72656,43.970713 488.41406,43.447266 C 488.10156,42.923839 487.94531,42.255871 487.94531,41.443359 C 487.94531,40.005873 488.4375,38.876968 489.42188,38.056641 C 490.40625,37.236345 491.76562,36.826189 493.5,36.826172 C 495.24999,36.826189 496.61718,37.236345 497.60156,38.056641 C 498.59374,38.869155 499.08983,39.998061 499.08984,41.443359 C 499.08983,42.216808 498.92186,42.888683 498.58594,43.458984 C 498.24999,44.021494 497.74608,44.474619 497.07422,44.818359 C 497.89452,45.20118 498.51171,45.73243 498.92578,46.412109 C 499.33983,47.083991 499.54686,47.904303 499.54688,48.873047 C 499.54686,50.505862 499.0078,51.787111 497.92969,52.716797 C 496.85936,53.646484 495.3828,54.111328 493.5,54.111328 C 491.59375,54.111328 490.11328,53.650391 489.05859,52.728516 C 488.0039,51.806642 487.47656,50.521487 487.47656,48.873047 C 487.47656,47.912115 487.67187,47.107428 488.0625,46.458984 C 488.46094,45.802742 489.08594,45.255868 489.9375,44.818359"
+ id="text5169" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 557.85938,6.3691406 C 556.78124,8.1347811 555.98046,9.9316543 555.45703,11.759766 C 554.93359,13.587901 554.67187,15.505868 554.67188,17.513672 C 554.67187,19.513676 554.93359,21.427737 555.45703,23.255859 C 555.98046,25.083983 556.78124,26.880856 557.85938,28.646484 L 555.38672,28.646484 C 554.01953,26.779294 552.98046,24.904296 552.26953,23.021484 C 551.5664,21.130862 551.21484,19.294926 551.21484,17.513672 C 551.21484,15.73243 551.5664,13.896494 552.26953,12.005859 C 552.98046,10.115248 554.01953,8.2363435 555.38672,6.3691406 L 557.85938,6.3691406 M 556.06641,42.685547 C 556.0664,41.724621 555.82421,40.96681 555.33984,40.412109 C 554.86327,39.849623 554.21093,39.568373 553.38281,39.568359 C 552.60156,39.568373 551.99218,39.837904 551.55469,40.376953 C 551.125,40.916028 550.91015,41.669934 550.91016,42.638672 C 550.91015,43.544932 551.13671,44.251963 551.58984,44.759766 C 552.04296,45.267586 552.67968,45.521492 553.5,45.521484 C 554.30468,45.521492 554.93359,45.271493 555.38672,44.771484 C 555.83983,44.271494 556.0664,43.576182 556.06641,42.685547 M 556.125,47.056641 C 555.73437,47.447272 555.27343,47.74024 554.74219,47.935547 C 554.21093,48.130865 553.61327,48.228521 552.94922,48.228516 C 551.30078,48.228521 549.98047,47.732428 548.98828,46.740234 C 547.99609,45.748055 547.5,44.419931 547.5,42.755859 C 547.5,40.990247 548.03906,39.564467 549.11719,38.478516 C 550.19531,37.392594 551.61718,36.849626 553.38281,36.849609 C 555.42968,36.849626 556.98436,37.556657 558.04688,38.970703 C 559.11718,40.376966 559.65233,42.431652 559.65234,45.134766 C 559.65233,48.041021 559.08202,50.267581 557.94141,51.814453 C 556.80077,53.361328 555.16015,54.134765 553.01953,54.134766 C 551.54296,54.134765 550.35156,53.751953 549.44531,52.986328 C 548.53906,52.212892 548.04297,51.162112 547.95703,49.833984 L 551.34375,49.845703 C 551.42187,50.384769 551.63281,50.787112 551.97656,51.052734 C 552.32031,51.318362 552.80468,51.451174 553.42969,51.451172 C 554.27343,51.451174 554.91796,51.083987 555.36328,50.349609 C 555.80858,49.615238 556.06249,48.517583 556.125,47.056641"
+ id="text5175" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 609.375,6.3691406 L 611.87109,6.3691406 C 613.23046,8.228531 614.26171,10.103529 614.96484,11.994141 C 615.66796,13.876963 616.01952,15.716805 616.01953,17.513672 C 616.01952,19.302739 615.66796,21.142581 614.96484,23.033203 C 614.26171,24.923827 613.23046,26.794919 611.87109,28.646484 L 609.375,28.646484 C 610.46094,26.873044 611.26562,25.072264 611.78906,23.244141 C 612.32031,21.408205 612.58593,19.498051 612.58594,17.513672 C 612.58593,15.521492 612.32031,13.611338 611.78906,11.783203 C 611.26562,9.9550918 610.46094,8.1504061 609.375,6.3691406 M 610.98047,45.474609 C 610.98046,47.513678 611.18359,48.994145 611.58984,49.916016 C 612.0039,50.837893 612.66015,51.29883 613.55859,51.298828 C 614.45702,51.29883 615.11327,50.833987 615.52734,49.904297 C 615.9414,48.974614 616.14843,47.498053 616.14844,45.474609 C 616.14843,43.44337 615.9414,41.966809 615.52734,41.044922 C 615.11327,40.12306 614.45702,39.662123 613.55859,39.662109 C 612.66015,39.662123 612.0039,40.12306 611.58984,41.044922 C 611.18359,41.958996 610.98046,43.435557 610.98047,45.474609 M 607.5,45.474609 C 607.5,42.591808 608,40.43556 609,39.005859 C 610.00781,37.568375 611.52734,36.849626 613.55859,36.849609 C 615.58202,36.849626 617.09765,37.572282 618.10547,39.017578 C 619.12108,40.455091 619.62889,42.615245 619.62891,45.498047 C 619.62889,48.380865 619.12499,50.533206 618.11719,51.955078 C 617.11718,53.376953 615.59765,54.08789 613.55859,54.087891 C 611.52734,54.08789 610.00781,53.373047 609,51.943359 C 608,50.513675 607.5,48.357427 607.5,45.474609"
+ id="text5181" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 667.5,26.900391 L 679.5,26.900391 L 679.5,29.291016 L 667.5,29.291016 L 667.5,26.900391 M 670.20703,48.849609 L 670.20703,45.638672 L 676.79297,45.638672 L 676.79297,48.849609 L 670.20703,48.849609"
+ id="text5187" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 733.33594,9.3222656 L 735.70313,9.3222656 L 735.70313,15.298828 L 741.53906,15.298828 L 741.53906,17.630859 L 735.70313,17.630859 L 735.70313,23.630859 L 733.33594,23.630859 L 733.33594,17.630859 L 727.5,17.630859 L 727.5,15.298828 L 733.33594,15.298828 L 733.33594,9.3222656 M 727.5,47.818359 L 741.53906,47.818359 L 741.53906,50.150391 L 727.5,50.150391 L 727.5,47.818359 M 727.5,42.779297 L 741.53906,42.779297 L 741.53906,45.111328 L 727.5,45.111328 L 727.5,42.779297"
+ id="text5201" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 11.070313,95.601563 L 11.070313,86.148438 L 7.65625,86.148438 L 7.65625,84.09375 L 16.828125,84.09375 L 16.828125,86.148438 L 13.4375,86.148438 L 13.4375,95.601563 L 11.070313,95.601563 M 22.859375,94.546875 C 22.572911,94.989584 22.197911,95.328125 21.734375,95.5625 C 21.270829,95.791666 20.731767,95.90625 20.117188,95.90625 C 19.294269,95.90625 18.658853,95.671875 18.210938,95.203125 C 17.768228,94.734376 17.546874,94.06771 17.546875,93.203125 C 17.546874,92.401045 17.768228,91.789066 18.210938,91.367188 C 18.658853,90.945317 19.395831,90.656255 20.421875,90.5 C 20.656246,90.463547 20.963538,90.42188 21.34375,90.375 C 22.307286,90.250005 22.789057,89.97136 22.789063,89.539063 C 22.789057,89.195319 22.682286,88.950527 22.46875,88.804688 C 22.255203,88.653653 21.898433,88.578132 21.398438,88.578125 C 20.9401,88.578132 20.588538,88.669278 20.34375,88.851563 C 20.098955,89.033861 19.97656,89.294277 19.976563,89.632813 L 19.976563,89.757813 L 17.851563,89.757813 L 17.851563,89.601563 C 17.851562,88.731778 18.158853,88.049487 18.773438,87.554688 C 19.388018,87.054696 20.236976,86.804696 21.320313,86.804688 C 22.507807,86.804696 23.41666,87.010425 24.046875,87.421875 C 24.682284,87.833341 24.999992,88.427091 25,89.203125 L 25,94.03125 C 24.999992,94.385418 25.03645,94.651043 25.109375,94.828125 C 25.182283,95.000001 25.304679,95.130209 25.476563,95.21875 L 25.476563,95.601563 L 23.109375,95.601563 C 23.031244,95.455729 22.971348,95.294271 22.929688,95.117188 C 22.888015,94.940105 22.864577,94.750001 22.859375,94.546875 M 22.820313,91.421875 C 22.450515,91.593754 22.023432,91.731775 21.539063,91.835938 C 21.059892,91.940108 20.812496,91.994795 20.796875,92 C 20.39583,92.114587 20.11458,92.257816 19.953125,92.429688 C 19.796872,92.601566 19.718747,92.838544 19.71875,93.140625 C 19.718747,93.453127 19.82031,93.703127 20.023438,93.890625 C 20.226559,94.072918 20.499997,94.164064 20.84375,94.164063 C 21.458329,94.164064 21.940099,93.992189 22.289063,93.648438 C 22.643224,93.299481 22.820307,92.825524 22.820313,92.226563 L 22.820313,91.421875 M 27.039063,84.09375 L 29.25,84.09375 L 29.25,88.164063 C 29.531246,87.721362 29.882809,87.388029 30.304688,87.164063 C 30.731766,86.934905 31.216141,86.820321 31.757813,86.820313 C 32.783847,86.820321 33.622388,87.2448 34.273438,88.09375 C 34.92447,88.937507 35.249991,90.036464 35.25,91.390625 C 35.249991,92.734378 34.92447,93.820314 34.273438,94.648438 C 33.622388,95.476563 32.773431,95.890625 31.726563,95.890625 C 31.179682,95.890625 30.70312,95.776041 30.296875,95.546875 C 29.895829,95.317709 29.531246,94.953126 29.203125,94.453125 L 29.203125,95.601563 L 27.039063,95.601563 L 27.039063,84.09375 M 32.992188,91.296875 C 32.992181,90.51563 32.828118,89.903652 32.5,89.460938 C 32.171869,89.013027 31.721348,88.789069 31.148438,88.789063 C 30.544266,88.789069 30.075517,89.007819 29.742188,89.445313 C 29.414059,89.87761 29.249997,90.494797 29.25,91.296875 C 29.249997,92.161462 29.406247,92.817711 29.71875,93.265625 C 30.036454,93.713544 30.497391,93.937502 31.101563,93.9375 C 31.71614,93.937502 32.18489,93.713544 32.507813,93.265625 C 32.830722,92.812503 32.992181,92.156253 32.992188,91.296875"
+ id="text5427" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 789.76563,44.369141 L 792.57031,44.369141 C 793.23176,44.369143 793.71353,44.249351 794.01563,44.009766 C 794.3177,43.770185 794.46874,43.392581 794.46875,42.876953 C 794.46874,42.340499 794.3203,41.955083 794.02344,41.720703 C 793.72656,41.481125 793.23697,41.361333 792.55469,41.361328 L 789.76563,41.361328 L 789.76563,44.369141 M 789.76563,39.392578 L 792.46875,39.392578 C 793.05208,39.392585 793.47916,39.293627 793.75,39.095703 C 794.02083,38.892586 794.15624,38.574878 794.15625,38.142578 C 794.15624,37.720712 794.02343,37.416025 793.75781,37.228516 C 793.49739,37.035817 793.06249,36.939463 792.45313,36.939453 L 789.76563,36.939453 L 789.76563,39.392578 M 787.5,46.447266 L 787.5,34.939453 L 792.92188,34.939453 C 794.09895,34.939465 794.99478,35.189464 795.60938,35.689453 C 796.22916,36.184255 796.53905,36.905609 796.53906,37.853516 C 796.53905,38.436857 796.42447,38.923836 796.19531,39.314453 C 795.96614,39.705085 795.62239,40.007168 795.16406,40.220703 C 795.7578,40.460292 796.20051,40.806646 796.49219,41.259766 C 796.78905,41.707687 796.93749,42.267582 796.9375,42.939453 C 796.93749,44.059247 796.57291,44.92383 795.84375,45.533203 C 795.11457,46.142578 794.08072,46.447266 792.74219,46.447266 L 787.5,46.447266 M 803.45313,45.392578 C 803.16666,45.835287 802.79166,46.173828 802.32813,46.408203 C 801.86458,46.63737 801.32552,46.751953 800.71094,46.751953 C 799.88802,46.751953 799.2526,46.517578 798.80469,46.048828 C 798.36198,45.580079 798.14062,44.913413 798.14063,44.048828 C 798.14062,43.246748 798.36198,42.634769 798.80469,42.212891 C 799.2526,41.79102 799.98958,41.501958 801.01563,41.345703 C 801.25,41.30925 801.55729,41.267583 801.9375,41.220703 C 802.90104,41.095708 803.38281,40.817063 803.38281,40.384766 C 803.38281,40.041022 803.27604,39.796231 803.0625,39.650391 C 802.84895,39.499356 802.49218,39.423835 801.99219,39.423828 C 801.53385,39.423835 801.18229,39.514981 800.9375,39.697266 C 800.69271,39.879564 800.57031,40.13998 800.57031,40.478516 L 800.57031,40.603516 L 798.44531,40.603516 L 798.44531,40.447266 C 798.44531,39.577481 798.7526,38.89519 799.36719,38.400391 C 799.98177,37.900399 800.83073,37.650399 801.91406,37.650391 C 803.10156,37.650399 804.01041,37.856128 804.64063,38.267578 C 805.27603,38.679044 805.59374,39.272794 805.59375,40.048828 L 805.59375,44.876953 C 805.59374,45.231121 805.6302,45.496746 805.70313,45.673828 C 805.77603,45.845704 805.89843,45.975912 806.07031,46.064453 L 806.07031,46.447266 L 803.70313,46.447266 C 803.62499,46.301432 803.5651,46.139974 803.52344,45.962891 C 803.48176,45.785808 803.45833,45.595704 803.45313,45.392578 M 803.41406,42.267578 C 803.04427,42.439457 802.61718,42.577478 802.13281,42.681641 C 801.65364,42.785811 801.40625,42.840498 801.39063,42.845703 C 800.98958,42.96029 800.70833,43.103519 800.54688,43.275391 C 800.39062,43.447269 800.3125,43.684248 800.3125,43.986328 C 800.3125,44.29883 800.41406,44.54883 800.61719,44.736328 C 800.82031,44.918621 801.09375,45.009767 801.4375,45.009766 C 802.05208,45.009767 802.53385,44.837892 802.88281,44.494141 C 803.23697,44.145185 803.41406,43.671227 803.41406,43.072266 L 803.41406,42.267578 M 812.71875,43.244141 L 814.96094,43.244141 C 814.86718,44.322268 814.47395,45.173829 813.78125,45.798828 C 813.08854,46.423828 812.19791,46.736328 811.10938,46.736328 C 809.875,46.736328 808.90625,46.335287 808.20313,45.533203 C 807.50521,44.725913 807.15625,43.611331 807.15625,42.189453 C 807.15625,40.772792 807.51302,39.663418 808.22656,38.861328 C 808.94531,38.054045 809.93229,37.650399 811.1875,37.650391 C 812.28645,37.650399 813.16666,37.942066 813.82813,38.525391 C 814.49478,39.108731 814.86718,39.92123 814.94531,40.962891 L 812.6875,40.962891 C 812.62499,40.509772 812.46614,40.163418 812.21094,39.923828 C 811.95572,39.684252 811.61979,39.56446 811.20313,39.564453 C 810.64062,39.56446 810.21875,39.785814 809.9375,40.228516 C 809.66146,40.67123 809.52343,41.335292 809.52344,42.220703 C 809.52343,43.038415 809.66666,43.668623 809.95313,44.111328 C 810.24479,44.54883 810.66145,44.76758 811.20313,44.767578 C 811.62499,44.76758 811.96354,44.639976 812.21875,44.384766 C 812.47395,44.12956 812.64062,43.749352 812.71875,43.244141 M 816.44531,46.447266 L 816.44531,34.939453 L 818.65625,34.939453 L 818.65625,40.978516 L 821.35938,37.955078 L 824.09375,37.955078 L 821.13281,41.103516 L 824.27344,46.447266 L 821.54688,46.447266 L 819.51563,42.830078 L 818.65625,43.759766 L 818.65625,46.447266 L 816.44531,46.447266 M 824.79688,43.681641 L 827.0625,43.681641 C 827.08333,44.113935 827.23958,44.436851 827.53125,44.650391 C 827.82291,44.858726 828.26041,44.962892 828.84375,44.962891 C 829.28645,44.962892 829.6276,44.889976 829.86719,44.744141 C 830.11197,44.593101 830.23437,44.382164 830.23438,44.111328 C 830.23437,43.725914 829.78124,43.436852 828.875,43.244141 C 828.5052,43.166019 828.21093,43.098311 827.99219,43.041016 C 826.88802,42.759769 826.11979,42.426436 825.6875,42.041016 C 825.26042,41.655604 825.04687,41.134771 825.04688,40.478516 C 825.04687,39.608731 825.35937,38.921231 825.98438,38.416016 C 826.61458,37.905608 827.46614,37.650399 828.53906,37.650391 C 829.67447,37.650399 830.5651,37.903003 831.21094,38.408203 C 831.86197,38.913419 832.20833,39.624356 832.25,40.541016 L 830.03906,40.541016 C 830.02343,40.181647 829.88541,39.903001 829.625,39.705078 C 829.36979,39.507168 829.01302,39.40821 828.55469,39.408203 C 828.12239,39.40821 827.79948,39.473314 827.58594,39.603516 C 827.3776,39.733731 827.27343,39.929043 827.27344,40.189453 C 827.27343,40.528001 827.83854,40.82748 828.96875,41.087891 C 829.22916,41.145188 829.43489,41.192063 829.58594,41.228516 C 830.71614,41.494146 831.48697,41.814458 831.89844,42.189453 C 832.3151,42.564457 832.52343,43.093102 832.52344,43.775391 C 832.52343,44.738934 832.18228,45.473308 831.5,45.978516 C 830.82291,46.483724 829.83593,46.736328 828.53906,46.736328 C 827.36718,46.736328 826.45052,46.473307 825.78906,45.947266 C 825.1276,45.421225 824.79687,44.697267 824.79688,43.775391 L 824.79688,43.681641 M 840.02344,42.251953 C 840.02343,41.397792 839.86197,40.74675 839.53906,40.298828 C 839.21614,39.84571 838.74739,39.619147 838.13281,39.619141 C 837.52864,39.619147 837.0677,39.843106 836.75,40.291016 C 836.4375,40.738938 836.28125,41.392583 836.28125,42.251953 C 836.28125,43.05404 836.44531,43.673831 836.77344,44.111328 C 837.10677,44.54883 837.57552,44.76758 838.17969,44.767578 C 838.7526,44.76758 839.20312,44.543622 839.53125,44.095703 C 839.85937,43.647789 840.02343,43.033207 840.02344,42.251953 M 834.07031,49.853516 L 834.07031,37.955078 L 836.23438,37.955078 L 836.23438,39.103516 C 836.5625,38.603523 836.92708,38.23894 837.32813,38.009766 C 837.73437,37.780608 838.21093,37.666024 838.75781,37.666016 C 839.80468,37.666024 840.65364,38.080086 841.30469,38.908203 C 841.95572,39.731127 842.28124,40.814459 842.28125,42.158203 C 842.28124,43.517581 841.95572,44.621747 841.30469,45.470703 C 840.65364,46.314453 839.8151,46.736328 838.78906,46.736328 C 838.24739,46.736328 837.76302,46.621745 837.33594,46.392578 C 836.91406,46.163412 836.5625,45.830079 836.28125,45.392578 L 836.28125,49.853516 L 834.07031,49.853516 M 848.70313,45.392578 C 848.41666,45.835287 848.04166,46.173828 847.57813,46.408203 C 847.11458,46.63737 846.57552,46.751953 845.96094,46.751953 C 845.13802,46.751953 844.5026,46.517578 844.05469,46.048828 C 843.61198,45.580079 843.39062,44.913413 843.39063,44.048828 C 843.39062,43.246748 843.61198,42.634769 844.05469,42.212891 C 844.5026,41.79102 845.23958,41.501958 846.26563,41.345703 C 846.5,41.30925 846.80729,41.267583 847.1875,41.220703 C 848.15104,41.095708 848.63281,40.817063 848.63281,40.384766 C 848.63281,40.041022 848.52604,39.796231 848.3125,39.650391 C 848.09895,39.499356 847.74218,39.423835 847.24219,39.423828 C 846.78385,39.423835 846.43229,39.514981 846.1875,39.697266 C 845.94271,39.879564 845.82031,40.13998 845.82031,40.478516 L 845.82031,40.603516 L 843.69531,40.603516 L 843.69531,40.447266 C 843.69531,39.577481 844.0026,38.89519 844.61719,38.400391 C 845.23177,37.900399 846.08073,37.650399 847.16406,37.650391 C 848.35156,37.650399 849.26041,37.856128 849.89063,38.267578 C 850.52603,38.679044 850.84374,39.272794 850.84375,40.048828 L 850.84375,44.876953 C 850.84374,45.231121 850.8802,45.496746 850.95313,45.673828 C 851.02603,45.845704 851.14843,45.975912 851.32031,46.064453 L 851.32031,46.447266 L 848.95313,46.447266 C 848.87499,46.301432 848.8151,46.139974 848.77344,45.962891 C 848.73176,45.785808 848.70833,45.595704 848.70313,45.392578 M 848.66406,42.267578 C 848.29427,42.439457 847.86718,42.577478 847.38281,42.681641 C 846.90364,42.785811 846.65625,42.840498 846.64063,42.845703 C 846.23958,42.96029 845.95833,43.103519 845.79688,43.275391 C 845.64062,43.447269 845.5625,43.684248 845.5625,43.986328 C 845.5625,44.29883 845.66406,44.54883 845.86719,44.736328 C 846.07031,44.918621 846.34375,45.009767 846.6875,45.009766 C 847.30208,45.009767 847.78385,44.837892 848.13281,44.494141 C 848.48697,44.145185 848.66406,43.671227 848.66406,43.072266 L 848.66406,42.267578 M 857.96875,43.244141 L 860.21094,43.244141 C 860.11718,44.322268 859.72395,45.173829 859.03125,45.798828 C 858.33854,46.423828 857.44791,46.736328 856.35938,46.736328 C 855.125,46.736328 854.15625,46.335287 853.45313,45.533203 C 852.75521,44.725913 852.40625,43.611331 852.40625,42.189453 C 852.40625,40.772792 852.76302,39.663418 853.47656,38.861328 C 854.19531,38.054045 855.18229,37.650399 856.4375,37.650391 C 857.53645,37.650399 858.41666,37.942066 859.07813,38.525391 C 859.74478,39.108731 860.11718,39.92123 860.19531,40.962891 L 857.9375,40.962891 C 857.87499,40.509772 857.71614,40.163418 857.46094,39.923828 C 857.20572,39.684252 856.86979,39.56446 856.45313,39.564453 C 855.89062,39.56446 855.46875,39.785814 855.1875,40.228516 C 854.91146,40.67123 854.77343,41.335292 854.77344,42.220703 C 854.77343,43.038415 854.91666,43.668623 855.20313,44.111328 C 855.49479,44.54883 855.91145,44.76758 856.45313,44.767578 C 856.87499,44.76758 857.21354,44.639976 857.46875,44.384766 C 857.72395,44.12956 857.89062,43.749352 857.96875,43.244141 M 866.88281,43.869141 L 869.14844,43.869141 C 868.91926,44.764976 868.45572,45.4681 867.75781,45.978516 C 867.0651,46.483724 866.21874,46.736328 865.21875,46.736328 C 863.98958,46.736328 863.01562,46.32487 862.29688,45.501953 C 861.57812,44.67383 861.21875,43.554039 861.21875,42.142578 C 861.21875,40.751959 861.57292,39.655606 862.28125,38.853516 C 862.98958,38.051441 863.95833,37.650399 865.1875,37.650391 C 866.48958,37.650399 867.49478,38.046232 868.20313,38.837891 C 868.91145,39.624356 869.26562,40.74675 869.26563,42.205078 C 869.26562,42.366541 869.26301,42.488936 869.25781,42.572266 C 869.2578,42.650394 869.2526,42.725915 869.24219,42.798828 L 863.57031,42.798828 C 863.60156,43.465498 863.76302,43.968101 864.05469,44.306641 C 864.35156,44.645184 864.77604,44.814455 865.32813,44.814453 C 865.71874,44.814455 866.03906,44.738934 866.28906,44.587891 C 866.53906,44.431643 866.73697,44.19206 866.88281,43.869141 M 863.57031,41.306641 L 866.91406,41.306641 C 866.89322,40.73373 866.73958,40.298834 866.45313,40.001953 C 866.17187,39.699877 865.76562,39.548835 865.23438,39.548828 C 864.73958,39.548835 864.34895,39.699877 864.0625,40.001953 C 863.78125,40.304043 863.61718,40.738938 863.57031,41.306641"
+ id="text5207" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 840,17.646484 L 797.02608,17.646484"
+ id="path5439" />
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 802.5,25.146484 L 802.5,10.146484 L 787.5,17.646484 L 802.5,25.146484 z "
+ id="path5441" />
+ <g
+ id="g5459"
+ transform="translate(0,7.5)">
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 82.50003,75 L 54.020182,75"
+ id="path5453" />
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 60,82.5 L 60,67.5 L 45,75 L 60,82.5 z "
+ id="path5455" />
+ <path
+ id="path5457"
+ d="M 45,67.5 C 45,82.5 45,82.5 45,82.5"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <g
+ id="g5464"
+ transform="matrix(-1,9.581637e-17,-9.581637e-17,-1,127.5,172.5)">
+ <path
+ id="path5466"
+ d="M 82.50003,75 L 54.020182,75"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path5468"
+ d="M 60,82.5 L 60,67.5 L 45,75 L 60,82.5 z "
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 45,67.5 C 45,82.5 45,82.5 45,82.5"
+ id="path5470" />
+ </g>
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 107.0625,80.560547 L 105.23438,78.779297 L 107.17969,76.763672 L 109.05469,78.591797 C 109.30467,78.123052 109.49608,77.587897 109.62891,76.986328 C 109.7617,76.384773 109.82811,75.728524 109.82813,75.017578 C 109.82811,73.119151 109.40233,71.646496 108.55078,70.599609 C 107.69921,69.544936 106.5078,69.017593 104.97656,69.017578 C 103.46093,69.017593 102.28124,69.54103 101.4375,70.587891 C 100.59374,71.634778 100.17187,73.111339 100.17188,75.017578 C 100.17187,76.916022 100.59374,78.392583 101.4375,79.447266 C 102.28124,80.494144 103.46093,81.017581 104.97656,81.017578 C 105.36718,81.017581 105.73436,80.978518 106.07813,80.900391 C 106.42968,80.822268 106.7578,80.708987 107.0625,80.560547 M 109.55859,82.916016 C 108.97264,83.306641 108.28905,83.603516 107.50781,83.806641 C 106.73436,84.009765 105.89061,84.111328 104.97656,84.111328 C 102.39843,84.111328 100.34765,83.291016 98.824219,81.650391 C 97.308592,80.009769 96.55078,77.798834 96.550781,75.017578 C 96.55078,72.228527 97.308592,70.017592 98.824219,68.384766 C 100.34765,66.744158 102.39843,65.923846 104.97656,65.923828 C 107.55468,65.923846 109.60545,66.744158 111.12891,68.384766 C 112.66014,70.025404 113.42576,72.23634 113.42578,75.017578 C 113.42576,76.236336 113.26951,77.353522 112.95703,78.369141 C 112.64451,79.376957 112.18358,80.259769 111.57422,81.017578 L 113.44922,82.810547 L 111.52734,84.826172 L 109.55859,82.916016"
+ id="text5474" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 158.94141,83.630859 L 153.99609,66.369141 L 157.67578,66.369141 L 160.62891,78.544922 L 163.125,66.369141 L 166.91016,66.369141 L 169.40625,78.544922 L 172.35938,66.369141 L 176.00391,66.369141 L 171.07031,83.630859 L 167.68359,83.630859 L 165.01172,70.412109 L 162.32813,83.630859 L 158.94141,83.630859"
+ id="text5482" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 218.52539,83.630859 L 218.52539,66.369141 L 231.05273,66.369141 L 231.05273,69.369141 L 222.0293,69.369141 L 222.0293,73.048828 L 230.2793,73.048828 L 230.2793,76.001953 L 222.0293,76.001953 L 222.0293,80.443359 L 231.47461,80.443359 L 231.47461,83.630859 L 218.52539,83.630859"
+ id="text5492" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 281.4375,73.916016 L 285.60938,73.916016 C 286.51561,73.916025 287.17968,73.732432 287.60156,73.365234 C 288.03124,72.998058 288.24608,72.419933 288.24609,71.630859 C 288.24608,70.880872 288.03905,70.314466 287.625,69.931641 C 287.21093,69.54103 286.59374,69.345717 285.77344,69.345703 L 281.4375,69.345703 L 281.4375,73.916016 M 277.88672,83.630859 L 277.88672,66.369141 L 286.25391,66.369141 C 288.13671,66.369158 289.53124,66.771501 290.4375,67.576172 C 291.34373,68.380875 291.79686,69.611342 291.79688,71.267578 C 291.79686,72.322277 291.5742,73.201182 291.12891,73.904297 C 290.69139,74.607431 290.05858,75.087899 289.23047,75.345703 C 289.98045,75.611336 290.5117,76.017586 290.82422,76.564453 C 291.14452,77.111335 291.32811,77.962896 291.375,79.119141 L 291.44531,81.158203 C 291.4453,81.173831 291.4453,81.197268 291.44531,81.228516 C 291.46873,82.259767 291.69139,82.884766 292.11328,83.103516 L 292.11328,83.630859 L 288.22266,83.630859 C 288.09764,83.388672 287.99999,83.091797 287.92969,82.740234 C 287.86718,82.380861 287.82811,81.95508 287.8125,81.462891 L 287.76563,79.646484 C 287.72655,78.576177 287.52343,77.853521 287.15625,77.478516 C 286.79686,77.103522 286.14452,76.916022 285.19922,76.916016 L 281.4375,76.916016 L 281.4375,83.630859 L 277.88672,83.630859"
+ id="text5500" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 343.24219,83.630859 L 343.24219,69.451172 L 338.12109,69.451172 L 338.12109,66.369141 L 351.87891,66.369141 L 351.87891,69.451172 L 346.79297,69.451172 L 346.79297,83.630859 L 343.24219,83.630859"
+ id="text5504" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 407.06836,83.630859 L 403.51758,83.630859 L 403.51758,77.197266 L 397.24805,66.369141 L 401.5957,66.369141 L 405.28711,73.810547 L 408.69727,66.369141 L 412.75195,66.369141 L 407.06836,77.197266 L 407.06836,83.630859"
+ id="text5518" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 458.08594,66.105469 L 461.67188,66.105469 L 461.67188,76.933594 C 461.67187,78.269536 461.93749,79.246098 462.46875,79.863281 C 462.99999,80.472659 463.84374,80.777346 465,80.777344 C 466.17187,80.777346 467.02343,80.472659 467.55469,79.863281 C 468.09374,79.25391 468.36327,78.277349 468.36328,76.933594 L 468.36328,66.105469 L 471.91406,66.105469 L 471.91406,77.320313 C 471.91405,79.437504 471.3203,81.062502 470.13281,82.195313 C 468.95311,83.328125 467.24999,83.894531 465.02344,83.894531 C 462.78124,83.894531 461.0625,83.332031 459.86719,82.207031 C 458.67969,81.074221 458.08594,79.445316 458.08594,77.320313 L 458.08594,66.105469"
+ id="text5522" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 523.22461,83.630859 L 523.22461,66.369141 L 526.77539,66.369141 L 526.77539,83.630859 L 523.22461,83.630859"
+ id="text5526" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 580.18359,75 C 580.18359,76.898444 580.60546,78.375005 581.44922,79.429688 C 582.29296,80.476566 583.47265,81.000003 584.98828,81 C 586.51952,81.000003 587.71093,80.476566 588.5625,79.429688 C 589.41405,78.375005 589.83983,76.898444 589.83984,75 C 589.83983,73.101573 589.41405,71.628918 588.5625,70.582031 C 587.71093,69.527358 586.51952,69.000015 584.98828,69 C 583.47265,69.000015 582.29296,69.523452 581.44922,70.570313 C 580.60546,71.617199 580.18359,73.093761 580.18359,75 M 576.5625,75 C 576.5625,72.210949 577.32031,70.000014 578.83594,68.367188 C 580.35937,66.726579 582.41015,65.906268 584.98828,65.90625 C 587.56639,65.906268 589.61717,66.726579 591.14063,68.367188 C 592.67186,70.007826 593.43748,72.218761 593.4375,75 C 593.43748,77.781256 592.67186,79.992191 591.14063,81.632813 C 589.61717,83.273438 587.56639,84.09375 584.98828,84.09375 C 582.41015,84.09375 580.35937,83.273438 578.83594,81.632813 C 577.32031,79.992191 576.5625,77.781256 576.5625,75"
+ id="text5530" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 641.97656,74.361328 L 645.41016,74.361328 C 646.33983,74.361337 647.01561,74.166025 647.4375,73.775391 C 647.85936,73.376963 648.0703,72.740245 648.07031,71.865234 C 648.0703,71.044934 647.86327,70.423841 647.44922,70.001953 C 647.03515,69.580092 646.41796,69.369155 645.59766,69.369141 L 641.97656,69.369141 L 641.97656,74.361328 M 641.95313,77.490234 L 641.95313,83.630859 L 638.40234,83.630859 L 638.40234,66.369141 L 646.07813,66.369141 C 647.89061,66.369158 649.26171,66.841814 650.19141,67.787109 C 651.12889,68.724624 651.59764,70.103529 651.59766,71.923828 C 651.59764,73.705088 651.14061,75.080087 650.22656,76.048828 C 649.31249,77.009772 648.0078,77.490241 646.3125,77.490234 L 641.95313,77.490234"
+ id="text5534" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 709.24805,63.919922 L 709.24805,66.369141 C 709.17772,66.369155 709.08007,66.365249 708.95508,66.357422 C 708.83007,66.349624 708.74413,66.345718 708.69727,66.345703 C 707.90819,66.345718 707.37304,66.498062 707.0918,66.802734 C 706.81835,67.099624 706.68163,67.732435 706.68164,68.701172 L 706.68164,71.513672 C 706.68163,72.66993 706.50585,73.490242 706.1543,73.974609 C 705.80273,74.458991 705.16992,74.806647 704.25586,75.017578 C 705.16992,75.228522 705.80273,75.572271 706.1543,76.048828 C 706.50585,76.525395 706.68163,77.341801 706.68164,78.498047 L 706.68164,81.322266 C 706.68163,82.283202 706.81835,82.912108 707.0918,83.208984 C 707.36523,83.505857 707.90038,83.654294 708.69727,83.654297 C 708.74413,83.654294 708.83007,83.650388 708.95508,83.642578 C 709.08007,83.634763 709.17772,83.630857 709.24805,83.630859 L 709.24805,86.080078 C 709.13866,86.080073 708.98632,86.08398 708.79102,86.091797 C 708.59569,86.099605 708.45116,86.103511 708.35742,86.103516 C 707.57616,86.103511 706.92382,86.056636 706.40039,85.962891 C 705.87695,85.869136 705.43163,85.724605 705.06445,85.529297 C 704.61913,85.263668 704.30273,84.904293 704.11523,84.451172 C 703.93554,84.005857 703.8457,83.228514 703.8457,82.119141 L 703.8457,79.166016 C 703.8457,78.095706 703.64648,77.337895 703.24805,76.892578 C 702.84961,76.439458 702.17773,76.212896 701.23242,76.212891 C 701.18554,76.212896 701.10742,76.216802 700.99805,76.224609 C 700.88867,76.232427 700.80664,76.236333 700.75195,76.236328 L 700.75195,73.787109 C 700.80664,73.787117 700.88867,73.791023 700.99805,73.798828 C 701.10742,73.806648 701.18554,73.810554 701.23242,73.810547 C 702.16992,73.810554 702.83789,73.583992 703.23633,73.130859 C 703.64257,72.677743 703.8457,71.912119 703.8457,70.833984 L 703.8457,67.904297 C 703.8457,66.787124 703.93554,66.001968 704.11523,65.548828 C 704.30273,65.095719 704.61913,64.736345 705.06445,64.470703 C 705.43163,64.275408 705.87695,64.130876 706.40039,64.037109 C 706.92382,63.943377 707.57616,63.896502 708.35742,63.896484 C 708.45116,63.896502 708.59569,63.900408 708.79102,63.908203 C 708.98632,63.916033 709.13866,63.919939 709.24805,63.919922 M 703.0957,93.966797 L 709.01367,93.966797 L 709.01367,96.462891 L 706.25977,96.462891 L 706.25977,113.8418 L 709.01367,113.8418 L 709.01367,116.33789 L 703.0957,116.33789 L 703.0957,93.966797"
+ id="text5546" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 760.75195,63.908203 L 761.54883,63.908203 C 762.4082,63.90822 763.09961,63.955095 763.62305,64.048828 C 764.14648,64.142595 764.58398,64.291033 764.93555,64.494141 C 765.38085,64.744157 765.69335,65.103532 765.87305,65.572266 C 766.06054,66.033218 766.15429,66.806655 766.1543,67.892578 L 766.1543,70.845703 C 766.15429,71.916025 766.35351,72.677743 766.75195,73.130859 C 767.15038,73.57618 767.82226,73.798836 768.76758,73.798828 C 768.81444,73.798836 768.89257,73.794929 769.00195,73.787109 C 769.11132,73.779304 769.19335,73.775398 769.24805,73.775391 L 769.24805,76.224609 L 768.81445,76.224609 C 767.83788,76.224614 767.15038,76.443364 766.75195,76.880859 C 766.35351,77.318363 766.15429,78.076175 766.1543,79.154297 L 766.1543,82.107422 C 766.15429,83.224607 766.06054,84.009763 765.87305,84.462891 C 765.69335,84.916012 765.38085,85.267574 764.93555,85.517578 C 764.56835,85.712886 764.12304,85.857417 763.59961,85.951172 C 763.07617,86.044917 762.42382,86.091792 761.64258,86.091797 C 761.54883,86.091792 761.40429,86.087886 761.20898,86.080078 C 761.01367,86.072261 760.86133,86.068355 760.75195,86.068359 L 760.75195,83.619141 C 760.82226,83.619138 760.91992,83.623044 761.04492,83.630859 C 761.16992,83.638669 761.25586,83.642576 761.30273,83.642578 C 762.09179,83.642576 762.62304,83.490232 762.89648,83.185547 C 763.17773,82.88867 763.31836,82.263671 763.31836,81.310547 L 763.31836,78.509766 C 763.31836,77.337895 763.49414,76.513677 763.8457,76.037109 C 764.19726,75.55274 764.83007,75.20899 765.74414,75.005859 C 764.83007,74.794928 764.19726,74.447272 763.8457,73.962891 C 763.49414,73.478523 763.31836,72.658212 763.31836,71.501953 L 763.31836,68.666016 C 763.31836,67.712904 763.17773,67.087905 762.89648,66.791016 C 762.62304,66.486343 762.09179,66.333999 761.30273,66.333984 C 761.25586,66.333999 761.16992,66.337906 761.04492,66.345703 C 760.91992,66.35353 760.82226,66.357437 760.75195,66.357422 L 760.75195,63.908203 M 767.00977,93.955078 L 767.00977,116.32617 L 761.08008,116.32617 L 761.08008,113.83008 L 763.8457,113.83008 L 763.8457,96.451172 L 761.08008,96.451172 L 761.08008,93.955078 L 767.00977,93.955078"
+ id="text5554" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 823.79883,62.977287 L 826.21289,62.977287 L 826.21289,86.977287 L 823.79883,86.977287 L 823.79883,62.977287 M 827.10352,113.54369 L 821.29102,93.6101 L 822.87305,93.6101 L 828.70898,113.54369 L 827.10352,113.54369"
+ id="text5564" />
+ <g
+ id="g3597">
+ <path
+ id="text5570"
+ d="M 22.996094,139.10156 C 22.907541,140.40886 22.403635,141.44792 21.484375,142.21875 C 20.565095,142.98958 19.365878,143.375 17.886719,143.375 C 16.183589,143.375 14.859372,142.84375 13.914063,141.78125 C 12.968749,140.71875 12.496093,139.22917 12.496094,137.3125 C 12.496093,135.35417 12.977863,133.85418 13.941406,132.8125 C 14.904945,131.77084 16.29036,131.25001 18.097656,131.25 C 19.566398,131.25001 20.726554,131.60808 21.578125,132.32422 C 22.429677,133.04037 22.897124,134.05209 22.980469,135.35938 L 20.644531,135.35938 C 20.545564,134.70834 20.279939,134.21225 19.847656,133.87109 C 19.415357,133.52996 18.832024,133.35938 18.097656,133.35938 C 17.055984,133.35938 16.264318,133.69532 15.722656,134.36719 C 15.180986,135.03907 14.910153,136.02084 14.910156,137.3125 C 14.910153,138.5625 15.179684,139.52865 15.71875,140.21094 C 16.257808,140.89323 17.024734,141.23438 18.019531,141.23438 C 18.738274,141.23438 19.326815,141.05078 19.785156,140.68359 C 20.243481,140.31641 20.540356,139.78907 20.675781,139.10156 L 22.996094,139.10156 z M 29.558594,142 C 29.27213,142.44271 28.89713,142.77995 28.433594,143.01172 C 27.970048,143.24349 27.430986,143.35937 26.816406,143.35938 C 25.993487,143.35937 25.359373,143.125 24.914063,142.65625 C 24.468749,142.1875 24.246093,141.52083 24.246094,140.65625 C 24.246093,139.85417 24.468749,139.24219 24.914063,138.82031 C 25.359373,138.39844 26.09505,138.10938 27.121094,137.95313 C 27.355465,137.91667 27.662756,137.87501 28.042969,137.82813 C 29.006505,137.70313 29.488275,137.42448 29.488281,136.99219 C 29.488275,136.64844 29.381505,136.40235 29.167969,136.25391 C 28.954422,136.10548 28.597651,136.03126 28.097656,136.03125 C 27.639319,136.03126 27.287757,136.1224 27.042969,136.30469 C 26.798174,136.48699 26.675778,136.7474 26.675781,137.08594 L 26.675781,137.21094 L 24.550781,137.21094 L 24.550781,137.05469 C 24.55078,136.1849 24.858072,135.50131 25.472656,135.00391 C 26.087237,134.50652 26.936195,134.25782 28.019531,134.25781 C 29.207026,134.25782 30.117181,134.46355 30.75,134.875 C 31.382805,135.28647 31.699211,135.88022 31.699219,136.65625 L 31.699219,141.48438 C 31.699211,141.83854 31.735669,142.10287 31.808594,142.27734 C 31.881502,142.45182 32.003898,142.58333 32.175781,142.67188 L 32.175781,143.05469 L 29.808594,143.05469 C 29.730463,142.90885 29.670567,142.7474 29.628906,142.57031 C 29.587234,142.39323 29.563796,142.20313 29.558594,142 L 29.558594,142 z M 29.519531,138.875 C 29.149734,139.04688 28.723953,139.1849 28.242188,139.28906 C 27.760413,139.39323 27.511715,139.44792 27.496094,139.45313 C 27.095049,139.56771 26.815101,139.71094 26.65625,139.88281 C 26.497393,140.05469 26.417966,140.29167 26.417969,140.59375 C 26.417966,140.90625 26.519528,141.15495 26.722656,141.33984 C 26.925778,141.52474 27.199215,141.61719 27.542969,141.61719 C 28.157548,141.61719 28.64062,141.44401 28.992188,141.09766 C 29.343744,140.7513 29.519525,140.27865 29.519531,139.67969 L 29.519531,138.875 z M 39.691406,138.85938 C 39.691399,138.00521 39.529941,137.35287 39.207031,136.90234 C 38.884108,136.45183 38.415359,136.22657 37.800781,136.22656 C 37.19661,136.22657 36.736975,136.45053 36.421875,136.89844 C 36.106767,137.34636 35.949216,138.00001 35.949219,138.85938 C 35.949216,139.66146 36.11458,140.28125 36.445313,140.71875 C 36.776038,141.15625 37.243485,141.375 37.847656,141.375 C 38.420567,141.375 38.871088,141.15104 39.199219,140.70313 C 39.527337,140.25521 39.691399,139.64063 39.691406,138.85938 L 39.691406,138.85938 z M 33.738281,146.46094 L 33.738281,134.5625 L 35.902344,134.5625 L 35.902344,135.71094 C 36.230465,135.21095 36.59635,134.84636 37,134.61719 C 37.403641,134.38803 37.878901,134.27345 38.425781,134.27344 C 39.472649,134.27345 40.321607,134.68621 40.972656,135.51172 C 41.623689,136.33725 41.94921,137.42188 41.949219,138.76563 C 41.94921,140.125 41.623689,141.22787 40.972656,142.07422 C 40.321607,142.92057 39.483066,143.34375 38.457031,143.34375 C 37.915359,143.34375 37.432287,143.22917 37.007813,143 C 36.583329,142.77083 36.230465,142.4375 35.949219,142 L 35.949219,146.46094 L 33.738281,146.46094 z M 43.027344,140.28906 L 45.292969,140.28906 C 45.313799,140.72136 45.470049,141.04297 45.761719,141.25391 C 46.053382,141.46485 46.490881,141.57031 47.074219,141.57031 C 47.516922,141.57031 47.85937,141.4961 48.101563,141.34766 C 48.343744,141.19922 48.464838,140.98959 48.464844,140.71875 C 48.464838,140.33334 48.011713,140.04427 47.105469,139.85156 C 46.735673,139.77344 46.441402,139.70573 46.222656,139.64844 C 45.118487,139.36719 44.351561,139.03386 43.921875,138.64844 C 43.492187,138.26303 43.277343,137.74219 43.277344,137.08594 C 43.277343,136.21615 43.591145,135.52735 44.21875,135.01953 C 44.846352,134.51173 45.696611,134.25782 46.769531,134.25781 C 47.904943,134.25782 48.796869,134.51043 49.445313,135.01563 C 50.093742,135.52084 50.438794,136.23178 50.480469,137.14844 L 48.269531,137.14844 C 48.253901,136.78907 48.117182,136.51042 47.859375,136.3125 C 47.601557,136.11459 47.243485,136.01563 46.785156,136.01563 C 46.352861,136.01563 46.031246,136.08074 45.820313,136.21094 C 45.609372,136.34115 45.503903,136.53646 45.503906,136.79688 C 45.503903,137.13542 46.069007,137.4349 47.199219,137.69531 C 47.45963,137.75261 47.665359,137.79948 47.816406,137.83594 C 48.946608,138.10157 49.718743,138.42188 50.132813,138.79688 C 50.546867,139.17188 50.753898,139.70052 50.753906,140.38281 C 50.753898,141.34636 50.414055,142.08073 49.734375,142.58594 C 49.054681,143.09115 48.066401,143.34375 46.769531,143.34375 C 45.597653,143.34375 44.680987,143.08073 44.019531,142.55469 C 43.358072,142.02865 43.027343,141.30469 43.027344,140.38281 L 43.027344,140.28906 z M 57.011719,143.05469 L 57.011719,131.54688 L 59.378906,131.54688 L 59.378906,140.92969 L 64.996094,140.92969 L 64.996094,143.05469 L 57.011719,143.05469 z M 67.972656,138.79688 C 67.972653,139.64063 68.14583,140.29167 68.492188,140.75 C 68.838538,141.20834 69.332027,141.4375 69.972656,141.4375 C 70.602859,141.4375 71.09114,141.20834 71.4375,140.75 C 71.783847,140.29167 71.957024,139.64063 71.957031,138.79688 C 71.957024,137.95834 71.78515,137.3112 71.441406,136.85547 C 71.09765,136.39975 70.608067,136.17188 69.972656,136.17188 C 69.332027,136.17188 68.838538,136.39975 68.492188,136.85547 C 68.14583,137.3112 67.972653,137.95834 67.972656,138.79688 L 67.972656,138.79688 z M 65.667969,138.79688 C 65.667968,137.38542 66.05078,136.27605 66.816406,135.46875 C 67.582029,134.66147 68.634111,134.25782 69.972656,134.25781 C 71.305983,134.25782 72.356764,134.66147 73.125,135.46875 C 73.89322,136.27605 74.277335,137.38542 74.277344,138.79688 C 74.277335,140.21354 73.89322,141.32552 73.125,142.13281 C 72.356764,142.9401 71.305983,143.34375 69.972656,143.34375 C 68.634111,143.34375 67.582029,142.9401 66.816406,142.13281 C 66.05078,141.32552 65.667968,140.21354 65.667969,138.79688 L 65.667969,138.79688 z M 80.949219,139.85156 L 83.191406,139.85156 C 83.097648,140.92969 82.704419,141.78125 82.011719,142.40625 C 81.319004,143.03125 80.42838,143.34375 79.339844,143.34375 C 78.105465,143.34375 77.138019,142.94141 76.4375,142.13672 C 75.736978,141.33203 75.386718,140.21875 75.386719,138.79688 C 75.386718,137.38021 75.744791,136.26954 76.460938,135.46484 C 77.177081,134.66016 78.162757,134.25782 79.417969,134.25781 C 80.516921,134.25782 81.398431,134.54949 82.0625,135.13281 C 82.726555,135.71615 83.097648,136.52865 83.175781,137.57031 L 80.917969,137.57031 C 80.855463,137.11719 80.696609,136.77084 80.441406,136.53125 C 80.186193,136.29167 79.850255,136.17188 79.433594,136.17188 C 78.87109,136.17188 78.450517,136.39324 78.171875,136.83594 C 77.893226,137.27865 77.753903,137.94271 77.753906,138.82813 C 77.753903,139.64584 77.898434,140.27474 78.1875,140.71484 C 78.476559,141.15495 78.891923,141.375 79.433594,141.375 C 79.855464,141.375 80.194005,141.2474 80.449219,140.99219 C 80.704421,140.73698 80.871088,140.35677 80.949219,139.85156 L 80.949219,139.85156 z M 84.675781,143.05469 L 84.675781,131.54688 L 86.886719,131.54688 L 86.886719,137.58594 L 89.589844,134.5625 L 92.324219,134.5625 L 89.363281,137.71094 L 92.503906,143.05469 L 89.777344,143.05469 L 87.746094,139.4375 L 86.886719,140.36719 L 86.886719,143.05469 L 84.675781,143.05469 z "
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT" />
+ <path
+ id="path5584"
+ d="M 23.746094,146.25 L 12.496094,161.25 L 19.996094,161.25 L 19.996094,168.75 L 27.496094,168.75 L 27.496094,161.25 L 34.996094,161.25 L 23.746094,146.25 z M 22.714844,150.46875 L 24.746094,150.46875 L 27.871094,159.09375 L 25.996094,159.09375 L 25.402344,157.3125 L 22.058594,157.3125 L 21.496094,159.09375 L 19.621094,159.09375 L 22.714844,150.46875 z M 23.746094,152.1875 L 22.527344,155.84375 L 24.933594,155.84375 L 23.746094,152.1875 z "
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 119.9707,129.82617 L 117.58008,137.17383 L 122.37305,137.17383 L 119.9707,129.82617 M 117.9082,126.36914 L 122.00977,126.36914 L 128.23242,143.63086 L 124.50586,143.63086 L 123.33398,140.08008 L 116.64258,140.08008 L 115.50586,143.63086 L 111.76758,143.63086 L 117.9082,126.36914"
+ id="text5641" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 172.98047,138.29297 L 176.48438,138.29297 C 176.61718,139.23829 177.0039,139.94141 177.64453,140.40234 C 178.28515,140.85547 179.21093,141.08203 180.42188,141.08203 C 181.45312,141.08203 182.23046,140.89844 182.75391,140.53125 C 183.27733,140.16407 183.53905,139.6211 183.53906,138.90234 C 183.53905,137.85547 182.03515,136.98829 179.02734,136.30078 C 178.98827,136.29298 178.95312,136.28516 178.92188,136.27734 C 178.84374,136.26173 178.72265,136.23438 178.55859,136.19531 C 176.94921,135.84376 175.80078,135.44923 175.11328,135.01172 C 174.5039,134.6211 174.03906,134.09767 173.71875,133.44141 C 173.39844,132.77735 173.23828,131.99611 173.23828,131.09766 C 173.23828,129.41798 173.80859,128.13283 174.94922,127.24219 C 176.08984,126.34377 177.73828,125.89455 179.89453,125.89453 C 181.91015,125.89455 183.48436,126.37111 184.61719,127.32422 C 185.7578,128.27736 186.35936,129.62111 186.42188,131.35547 L 183.01172,131.35547 C 182.94921,130.51954 182.6289,129.88283 182.05078,129.44531 C 181.47265,129.00783 180.64843,128.78908 179.57813,128.78906 C 178.64843,128.78908 177.92968,128.97267 177.42188,129.33984 C 176.92187,129.69923 176.67187,130.21486 176.67188,130.88672 C 176.67187,131.80079 177.65234,132.48439 179.61328,132.9375 C 180.14452,133.06251 180.55859,133.16017 180.85547,133.23047 C 182.11327,133.55079 183.0039,133.80079 183.52734,133.98047 C 184.05858,134.16017 184.51952,134.35938 184.91016,134.57813 C 185.61327,134.96876 186.14061,135.48829 186.49219,136.13672 C 186.84374,136.77735 187.01952,137.54688 187.01953,138.44531 C 187.01952,140.24219 186.41405,141.63672 185.20313,142.62891 C 183.99218,143.61328 182.28515,144.10547 180.08203,144.10547 C 177.91015,144.10547 176.20703,143.60156 174.97266,142.59375 C 173.73828,141.58594 173.07422,140.15235 172.98047,138.29297"
+ id="text5645" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 236.16211,140.51367 L 239.00977,140.51367 C 240.65819,140.51367 241.8496,140.08399 242.58398,139.22461 C 243.32616,138.35743 243.69725,136.95508 243.69727,135.01758 C 243.69725,133.0879 243.3535,131.66993 242.66602,130.76367 C 241.9785,129.85744 240.90429,129.40431 239.44336,129.4043 L 236.16211,129.4043 L 236.16211,140.51367 M 232.68164,143.63086 L 232.68164,126.36914 L 239.44336,126.36914 C 242.09179,126.36916 244.06444,127.084 245.36133,128.51367 C 246.666,129.94337 247.31834,132.11134 247.31836,135.01758 C 247.31834,136.59571 247.07616,137.98633 246.5918,139.18945 C 246.11522,140.39258 245.41991,141.36133 244.50586,142.0957 C 243.81835,142.64258 243.0371,143.03711 242.16211,143.2793 C 241.2871,143.51367 240.06054,143.63086 238.48242,143.63086 L 232.68164,143.63086"
+ id="text5649" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 293.97656,143.63086 L 293.97656,126.36914 L 306.02344,126.36914 L 306.02344,129.36914 L 297.48047,129.36914 L 297.48047,133.2832 L 304.96875,133.2832 L 304.96875,136.2832 L 297.48047,136.2832 L 297.48047,143.63086 L 293.97656,143.63086"
+ id="text5653" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 365.17969,141.57422 C 364.53905,142.44141 363.80858,143.07813 362.98828,143.48438 C 362.17577,143.89062 361.21874,144.09375 360.11719,144.09375 C 357.70312,144.09375 355.74609,143.25781 354.24609,141.58594 C 352.7539,139.90625 352.00781,137.70313 352.00781,134.97656 C 352.00781,132.22657 352.7539,130.02736 354.24609,128.37891 C 355.73828,126.73049 357.72656,125.90627 360.21094,125.90625 C 362.37499,125.90627 364.14061,126.4258 365.50781,127.46484 C 366.87498,128.49611 367.68748,129.91798 367.94531,131.73047 L 364.32422,131.73047 C 364.10546,130.83204 363.65624,130.14845 362.97656,129.67969 C 362.30468,129.21095 361.42577,128.97658 360.33984,128.97656 C 358.89452,128.97658 357.75781,129.50783 356.92969,130.57031 C 356.10937,131.62501 355.69921,133.08595 355.69922,134.95313 C 355.69921,136.82813 356.1289,138.29688 356.98828,139.35938 C 357.84765,140.42188 359.02734,140.95313 360.52734,140.95313 C 361.65233,140.95313 362.59374,140.6211 363.35156,139.95703 C 364.10936,139.29297 364.57811,138.38282 364.75781,137.22656 L 360.84375,137.22656 L 360.84375,134.27344 L 367.99219,134.27344 L 367.99219,143.61328 L 365.61328,143.61328 L 365.17969,141.57422"
+ id="text5657" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 412.86328,143.63086 L 412.86328,126.36914 L 416.4375,126.36914 L 416.4375,132.80273 L 423.5625,132.80273 L 423.5625,126.36914 L 427.13672,126.36914 L 427.13672,143.63086 L 423.5625,143.63086 L 423.5625,135.97852 L 416.4375,135.97852 L 416.4375,143.63086 L 412.86328,143.63086"
+ id="text5661" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 474.48047,136.95703 L 477.91406,136.95703 L 477.91406,139.04297 C 477.91406,139.64453 478.09375,140.10547 478.45313,140.42578 C 478.8125,140.73828 479.32812,140.89453 480,140.89453 C 480.73437,140.89453 481.24609,140.70313 481.53516,140.32031 C 481.82421,139.9375 481.96874,139.21875 481.96875,138.16406 L 481.96875,126.12891 L 485.51953,126.12891 L 485.51953,138.32813 C 485.51952,139.42188 485.45311,140.22657 485.32031,140.74219 C 485.1953,141.25 484.98436,141.69922 484.6875,142.08984 C 484.23436,142.66797 483.61327,143.10938 482.82422,143.41406 C 482.03515,143.71875 481.10937,143.87109 480.04688,143.87109 C 479.07031,143.87109 478.20703,143.73828 477.45703,143.47266 C 476.70703,143.20703 476.08203,142.8125 475.58203,142.28906 C 475.18359,141.86719 474.89844,141.39844 474.72656,140.88281 C 474.5625,140.35938 474.48047,139.5 474.48047,138.30469 L 474.48047,136.95703"
+ id="text5665" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 532.32422,143.63086 L 532.32422,126.36914 L 535.875,126.36914 L 535.875,133.45898 L 542.61328,126.36914 L 547.05469,126.36914 L 540.16406,133.35352 L 547.67578,143.63086 L 543.33984,143.63086 L 537.71484,135.73242 L 535.875,137.56055 L 535.875,143.63086 L 532.32422,143.63086"
+ id="text5669" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 594.01172,143.63086 L 594.01172,126.36914 L 597.5625,126.36914 L 597.5625,140.44336 L 605.98828,140.44336 L 605.98828,143.63086 L 594.01172,143.63086"
+ id="text5673" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 143.15039,203.63086 L 143.15039,200.63086 L 152.53711,189.49805 L 143.33789,189.49805 L 143.33789,186.36914 L 156.84961,186.36914 L 156.84961,189.36914 L 147.43945,200.51367 L 156.63867,200.51367 L 156.63867,203.63086 L 143.15039,203.63086"
+ id="text5679" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 202.37109,203.63086 L 207.79688,194.81836 L 202.37109,186.36914 L 206.47266,186.36914 L 210,192.4043 L 213.50391,186.36914 L 217.62891,186.36914 L 212.20313,194.79492 L 217.62891,203.63086 L 213.52734,203.63086 L 210,197.6543 L 206.47266,203.63086 L 202.37109,203.63086"
+ id="text5683" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 277.875,197.68359 C 277.74217,199.64454 276.98436,201.20313 275.60156,202.35938 C 274.22655,203.51563 272.42968,204.09375 270.21094,204.09375 C 267.65624,204.09375 265.66796,203.29688 264.24609,201.70313 C 262.83203,200.10938 262.125,197.87501 262.125,195 C 262.125,192.06251 262.84765,189.81251 264.29297,188.25 C 265.73828,186.68752 267.8164,185.90627 270.52734,185.90625 C 272.73046,185.90627 274.46874,186.44533 275.74219,187.52344 C 277.02342,188.59377 277.72655,190.10939 277.85156,192.07031 L 274.34766,192.07031 C 274.19921,191.09376 273.80077,190.35158 273.15234,189.84375 C 272.50389,189.32814 271.6289,189.07033 270.52734,189.07031 C 268.96484,189.07033 267.77734,189.57423 266.96484,190.58203 C 266.15234,191.58986 265.74609,193.06251 265.74609,195 C 265.74609,196.87501 266.14843,198.32422 266.95313,199.34766 C 267.76562,200.3711 268.91796,200.88282 270.41016,200.88281 C 271.48827,200.88282 272.37108,200.60938 273.05859,200.0625 C 273.74608,199.50782 274.19139,198.71485 274.39453,197.68359 L 277.875,197.68359"
+ id="text5687" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 328.33594,203.63086 L 322.38281,186.36914 L 326.32031,186.36914 L 329.98828,199.2832 L 333.72656,186.36914 L 337.61719,186.36914 L 331.73438,203.63086 L 328.33594,203.63086"
+ id="text5691" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 386.32031,200.51367 L 390.52734,200.51367 C 391.51952,200.51367 392.24218,200.33399 392.69531,199.97461 C 393.14843,199.61524 393.37499,199.04883 393.375,198.27539 C 393.37499,197.47071 393.15233,196.89258 392.70703,196.54102 C 392.26171,196.18165 391.52733,196.00196 390.50391,196.00195 L 386.32031,196.00195 L 386.32031,200.51367 M 386.32031,193.04883 L 390.375,193.04883 C 391.24999,193.04884 391.89061,192.9004 392.29688,192.60352 C 392.70311,192.29884 392.90624,191.82228 392.90625,191.17383 C 392.90624,190.54103 392.70702,190.084 392.30859,189.80273 C 391.91796,189.51369 391.26561,189.36915 390.35156,189.36914 L 386.32031,189.36914 L 386.32031,193.04883 M 382.92188,203.63086 L 382.92188,186.36914 L 391.05469,186.36914 C 392.8203,186.36916 394.16405,186.74416 395.08594,187.49414 C 396.01561,188.23634 396.48045,189.31837 396.48047,190.74023 C 396.48045,191.61525 396.30858,192.34571 395.96484,192.93164 C 395.62108,193.51759 395.10545,193.97071 394.41797,194.29102 C 395.30858,194.6504 395.97264,195.16993 396.41016,195.84961 C 396.85545,196.52149 397.07811,197.36133 397.07813,198.36914 C 397.07811,200.04883 396.53123,201.34571 395.4375,202.25977 C 394.34374,203.17383 392.79296,203.63086 390.78516,203.63086 L 382.92188,203.63086"
+ id="text5695" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 442.88672,203.63086 L 442.88672,186.36914 L 446.60156,186.36914 L 453.60938,198.22852 L 453.60938,186.36914 L 457.11328,186.36914 L 457.11328,203.63086 L 453.44531,203.63086 L 446.39063,191.77148 L 446.39063,203.63086 L 442.88672,203.63086"
+ id="text5699" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 501.32813,203.63086 L 501.32813,186.36914 L 506.57813,186.36914 L 510.01172,199.50586 L 513.39844,186.36914 L 518.67188,186.36914 L 518.67188,203.63086 L 515.34375,203.63086 L 515.34375,189.70898 L 511.83984,203.63086 L 508.20703,203.63086 L 504.65625,189.70898 L 504.65625,203.63086 L 501.32813,203.63086"
+ id="text5703" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 658.22461,134.6543 L 658.22461,131.10352 L 661.77539,131.10352 L 661.77539,134.6543 L 658.22461,134.6543 M 658.22461,143.63086 L 658.22461,140.10352 L 661.77539,140.10352 L 661.77539,143.63086 L 658.22461,143.63086 M 658.24805,164.6543 L 658.24805,161.10352 L 661.77539,161.10352 L 661.77539,164.6543 L 658.24805,164.6543 M 658.24805,177.68555 L 658.24805,176.31445 C 658.90429,176.12695 659.38867,175.83789 659.70117,175.44727 C 660.01367,175.05664 660.16992,174.54883 660.16992,173.92383 L 660.16992,173.63086 L 658.22461,173.63086 L 658.22461,170.10352 L 661.77539,170.10352 L 661.77539,173.49023 C 661.77539,174.66211 661.47851,175.59961 660.88477,176.30273 C 660.29101,177.01367 659.41211,177.47461 658.24805,177.68555"
+ id="text5725" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 720.78516,126.7793 L 723.03516,126.7793 L 723.03516,133.33008 L 720.78516,133.33008 L 720.78516,126.7793 M 716.96484,126.7793 L 719.21484,126.7793 L 719.21484,133.33008 L 716.96484,133.33008 L 716.96484,126.7793 M 718.88672,156.7793 L 721.13672,156.7793 L 721.13672,163.33008 L 718.88672,163.33008 L 718.88672,156.7793"
+ id="text5731" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 772.5,140.60938 L 772.5,129.10156 L 780.85156,129.10156 L 780.85156,131.10156 L 774.83594,131.10156 L 774.83594,133.55469 L 780.33594,133.55469 L 780.33594,135.52344 L 774.83594,135.52344 L 774.83594,138.48438 L 781.13281,138.48438 L 781.13281,140.60938 L 772.5,140.60938 M 782.74219,140.60938 L 782.74219,132.11719 L 784.96875,132.11719 L 784.96875,133.125 C 785.28645,132.71355 785.66145,132.40626 786.09375,132.20313 C 786.52604,131.9948 787.00781,131.89063 787.53906,131.89063 C 788.47656,131.89063 789.17708,132.13543 789.64063,132.625 C 790.10937,133.10938 790.34374,133.84115 790.34375,134.82031 L 790.34375,140.60938 L 788.07031,140.60938 L 788.07031,135.47656 C 788.07031,134.86719 787.96614,134.4323 787.75781,134.17188 C 787.55468,133.91147 787.22135,133.78126 786.75781,133.78125 C 786.22135,133.78126 785.79687,133.94271 785.48438,134.26563 C 785.17187,134.58334 785.01562,135.01823 785.01563,135.57031 L 785.01563,140.60938 L 782.74219,140.60938 M 796.07813,140.67188 C 795.86979,140.67708 795.61979,140.6849 795.32813,140.69531 C 795.04166,140.71094 794.85937,140.71875 794.78125,140.71875 C 793.91146,140.71875 793.3151,140.55729 792.99219,140.23438 C 792.67448,139.90625 792.51562,139.26302 792.51563,138.30469 L 792.51563,133.71094 L 791.39063,133.71094 L 791.39063,132.11719 L 792.51563,132.11719 L 792.51563,129.79688 L 794.76563,129.79688 L 794.76563,132.11719 L 796.07813,132.11719 L 796.07813,133.71094 L 794.76563,133.71094 L 794.76563,138.41406 C 794.76562,138.63802 794.8151,138.78646 794.91406,138.85938 C 795.01302,138.92709 795.21614,138.96094 795.52344,138.96094 L 796.07813,138.96094 L 796.07813,140.67188 M 802.63281,138.03125 L 804.89844,138.03125 C 804.66926,138.92709 804.20572,139.63021 803.50781,140.14063 C 802.8151,140.64583 801.96874,140.89844 800.96875,140.89844 C 799.73958,140.89844 798.76562,140.48698 798.04688,139.66406 C 797.32812,138.83594 796.96875,137.71615 796.96875,136.30469 C 796.96875,134.91407 797.32292,133.81772 798.03125,133.01563 C 798.73958,132.21355 799.70833,131.81251 800.9375,131.8125 C 802.23958,131.81251 803.24478,132.20834 803.95313,133 C 804.66145,133.78647 805.01562,134.90886 805.01563,136.36719 C 805.01562,136.52865 805.01301,136.65105 805.00781,136.73438 C 805.0078,136.8125 805.0026,136.88802 804.99219,136.96094 L 799.32031,136.96094 C 799.35156,137.62761 799.51302,138.13021 799.80469,138.46875 C 800.10156,138.80729 800.52604,138.97656 801.07813,138.97656 C 801.46874,138.97656 801.78906,138.90104 802.03906,138.75 C 802.28906,138.59375 802.48697,138.35417 802.63281,138.03125 M 799.32031,135.46875 L 802.66406,135.46875 C 802.64322,134.89584 802.48958,134.46094 802.20313,134.16406 C 801.92187,133.86199 801.51562,133.71094 800.98438,133.71094 C 800.48958,133.71094 800.09895,133.86199 799.8125,134.16406 C 799.53125,134.46615 799.36718,134.90105 799.32031,135.46875 M 806.52344,140.60938 L 806.52344,132.11719 L 808.63281,132.11719 L 808.63281,133.57031 C 808.92968,132.98699 809.27604,132.5599 809.67188,132.28906 C 810.0677,132.01303 810.53906,131.87501 811.08594,131.875 C 811.17447,131.87501 811.24218,131.87761 811.28906,131.88281 C 811.34114,131.88282 811.38281,131.88543 811.41406,131.89063 L 811.42188,134.19531 L 810.66406,134.19531 C 810.04427,134.19532 809.57812,134.35678 809.26563,134.67969 C 808.95312,135.00261 808.79687,135.48178 808.79688,136.11719 L 808.79688,140.60938 L 806.52344,140.60938"
+ id="text5737" />
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 787.5,172.5 L 787.5,157.5 L 772.5,165 L 787.5,172.5 z "
+ id="path5745" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 810,150 L 810,165 L 780,165"
+ id="path5747" />
+ <g
+ id="g3601">
+ <path
+ id="text5753"
+ d="M 12.496094,197.64063 L 14.832032,197.64063 C 14.92057,198.27084 15.178382,198.73828 15.605469,199.04297 C 16.032548,199.34766 16.649735,199.5 17.457032,199.5 C 18.144525,199.5 18.662754,199.37761 19.011719,199.13281 C 19.36067,198.88802 19.535149,198.52604 19.535157,198.04688 C 19.535149,197.34896 18.532546,196.77084 16.527344,196.3125 C 16.501298,196.3073 16.47786,196.30209 16.457032,196.29688 C 16.404944,196.28646 16.324215,196.26823 16.214844,196.24219 C 15.141924,196.00782 14.3763,195.7448 13.917969,195.45313 C 13.511717,195.19271 13.201822,194.84245 12.988282,194.40234 C 12.774739,193.96225 12.667968,193.44272 12.667969,192.84375 C 12.667968,191.72397 13.048176,190.8659 13.808594,190.26953 C 14.569008,189.67319 15.667965,189.37501 17.105469,189.375 C 18.449212,189.37501 19.499993,189.69272 20.257813,190.32813 C 21.015616,190.96355 21.415355,191.85938 21.457032,193.01563 L 19.183594,193.01563 C 19.14192,192.45834 18.928379,192.03386 18.542969,191.74219 C 18.157546,191.45053 17.608067,191.3047 16.894532,191.30469 C 16.274735,191.3047 15.796871,191.42579 15.460938,191.66797 C 15.124997,191.91017 14.957028,192.25522 14.957032,192.70313 C 14.957028,193.31251 15.610674,193.76824 16.917969,194.07031 C 17.27213,194.15365 17.548172,194.21876 17.746094,194.26563 C 18.584629,194.47917 19.17968,194.64584 19.53125,194.76563 C 19.882805,194.88542 20.188794,195.01824 20.449219,195.16406 C 20.91796,195.42448 21.269522,195.76954 21.503907,196.19922 C 21.738272,196.62891 21.855459,197.14323 21.855469,197.74219 C 21.855459,198.94011 21.451814,199.86849 20.644532,200.52734 C 19.837232,201.1862 18.699212,201.51562 17.230469,201.51563 C 15.782548,201.51562 14.647133,201.17969 13.824219,200.50781 C 13.001301,199.83594 12.558593,198.88021 12.496094,197.64063 L 12.496094,197.64063 z M 23.566407,201.19531 L 23.566407,189.6875 L 25.824219,189.6875 L 25.824219,193.64063 C 26.131507,193.25522 26.497392,192.96485 26.921875,192.76953 C 27.34635,192.57423 27.82161,192.47657 28.347657,192.47656 C 28.84765,192.47657 29.299473,192.56251 29.703125,192.73438 C 30.106764,192.90626 30.433586,193.15105 30.683594,193.46875 C 30.855461,193.6823 30.976554,193.92709 31.046875,194.20313 C 31.117179,194.47917 31.152335,194.92188 31.152344,195.53125 L 31.152344,195.6875 L 31.152344,201.19531 L 28.894532,201.19531 L 28.894532,196.75 C 28.894525,195.69792 28.798171,195.03777 28.605469,194.76953 C 28.412755,194.50131 28.066401,194.36719 27.566407,194.36719 C 27.029944,194.36719 26.605465,194.52735 26.292969,194.84766 C 25.980466,195.16797 25.824216,195.60417 25.824219,196.15625 L 25.824219,201.19531 L 23.566407,201.19531 z M 33.191407,191.75781 L 33.191407,189.6875 L 35.464844,189.6875 L 35.464844,191.75781 L 33.191407,191.75781 z M 33.191407,201.19531 L 33.191407,192.70313 L 35.464844,192.70313 L 35.464844,201.19531 L 33.191407,201.19531 z M 37.886719,201.19531 L 37.886719,194.29688 L 36.675782,194.29688 L 36.675782,192.70313 L 37.886719,192.70313 L 37.886719,191.91406 C 37.886718,191.12241 38.091144,190.54038 38.5,190.16797 C 38.908852,189.79558 39.553383,189.60939 40.433594,189.60938 C 40.595048,189.60939 40.765621,189.61329 40.945313,189.62109 C 41.124996,189.62892 41.316402,189.64324 41.519532,189.66406 L 41.519532,191.46875 L 40.925782,191.46875 C 40.587236,191.46876 40.36458,191.51303 40.257813,191.60156 C 40.151038,191.69011 40.097653,191.85938 40.097657,192.10938 L 40.097657,192.70313 L 41.519532,192.70313 L 41.519532,194.29688 L 40.113282,194.29688 L 40.113282,201.19531 L 37.886719,201.19531 z M 46.449219,201.25781 C 46.240881,201.26302 45.992183,201.27214 45.703125,201.28516 C 45.414059,201.29818 45.230465,201.30469 45.152344,201.30469 C 44.28255,201.30469 43.687498,201.14193 43.367188,200.81641 C 43.046874,200.49089 42.886718,199.84896 42.886719,198.89063 L 42.886719,194.29688 L 41.761719,194.29688 L 41.761719,192.70313 L 42.886719,192.70313 L 42.886719,190.38281 L 45.136719,190.38281 L 45.136719,192.70313 L 46.449219,192.70313 L 46.449219,194.29688 L 45.136719,194.29688 L 45.136719,199 C 45.136716,199.22396 45.186195,199.3711 45.285157,199.44141 C 45.384111,199.51172 45.587236,199.54688 45.894532,199.54688 L 46.449219,199.54688 L 46.449219,201.25781 z "
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 24.746094,207.125 L 13.496094,222.125 L 20.996094,222.125 L 20.996094,229.625 L 28.496094,229.625 L 28.496094,222.125 L 35.996094,222.125 L 24.746094,207.125 z "
+ id="path5757" />
+ </g>
+ <g
+ id="g5795"
+ transform="translate(727.5,0)">
+ <text
+ sodipodi:linespacing="125%"
+ id="text5797"
+ y="201.19531"
+ x="31.8125"
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ xml:space="preserve"><tspan
+ y="201.19531"
+ x="31.8125"
+ id="tspan5799"
+ sodipodi:role="line">Shift</tspan></text>
+ <path
+ id="path5801"
+ d="M 27.25,207.125 L 16,222.125 L 23.5,222.125 L 23.5,229.625 L 31,229.625 L 31,222.125 L 38.5,222.125 L 27.25,207.125 z "
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 576.90234,189.63867 L 576.90234,192.20508 L 566.4375,196.48242 L 576.90234,200.74805 L 576.90234,203.31445 L 563.09766,197.63086 L 563.09766,195.29883 L 576.90234,189.63867 M 568.21875,237.68555 L 568.21875,236.31445 C 568.875,236.12695 569.35937,235.83789 569.67188,235.44727 C 569.98437,235.05664 570.14062,234.54883 570.14063,233.92383 L 570.14063,233.63086 L 568.21875,233.63086 L 568.21875,230.10352 L 571.76953,230.10352 L 571.76953,233.49023 C 571.76953,234.6543 571.46875,235.59179 570.86719,236.30273 C 570.27343,237.01367 569.39062,237.47461 568.21875,237.68555"
+ id="text5803" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 623.09766,189.63867 L 636.90234,195.29883 L 636.90234,197.63086 L 623.09766,203.31445 L 623.09766,200.74805 L 633.58594,196.48242 L 623.09766,192.20508 L 623.09766,189.63867 M 628.21875,233.63086 L 628.21875,230.10352 L 631.74609,230.10352 L 631.74609,233.63086 L 628.21875,233.63086"
+ id="text5813" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 688.44727,198.61523 C 688.44726,198.5293 688.44335,198.41602 688.43555,198.27539 C 688.42773,198.12696 688.42382,198.01758 688.42383,197.94727 C 688.42382,197.25977 688.49804,196.68946 688.64648,196.23633 C 688.79492,195.7754 689.0332,195.34571 689.36133,194.94727 C 689.61132,194.6504 689.98242,194.31056 690.47461,193.92773 C 690.9746,193.54493 691.29882,193.26759 691.44727,193.0957 C 691.75976,192.74415 691.9746,192.42775 692.0918,192.14648 C 692.20898,191.86525 692.26757,191.55665 692.26758,191.2207 C 692.26757,190.47853 692.06054,189.9004 691.64648,189.48633 C 691.23241,189.07228 690.65429,188.86525 689.91211,188.86523 C 689.16992,188.86525 688.58398,189.11525 688.1543,189.61523 C 687.73242,190.10744 687.50195,190.80275 687.46289,191.70117 L 684.1582,191.70117 L 684.1582,191.33789 C 684.1582,189.68947 684.67773,188.37697 685.7168,187.40039 C 686.76367,186.41603 688.16992,185.92385 689.93555,185.92383 C 691.74023,185.92385 693.17382,186.38869 694.23633,187.31836 C 695.30663,188.24025 695.84178,189.47853 695.8418,191.0332 C 695.84178,191.58009 695.77928,192.07228 695.6543,192.50977 C 695.5371,192.93946 695.3535,193.33399 695.10352,193.69336 C 694.78319,194.14649 694.2871,194.63868 693.61523,195.16992 C 692.95116,195.69337 692.54882,196.01759 692.4082,196.14258 C 692.11132,196.43165 691.89648,196.73634 691.76367,197.05664 C 691.63866,197.37696 691.57616,197.75977 691.57617,198.20508 C 691.57616,198.24415 691.58007,198.31055 691.58789,198.4043 C 691.59569,198.49805 691.5996,198.56836 691.59961,198.61523 L 688.44727,198.61523 M 688.2832,203.63086 L 688.2832,200.19727 L 691.74023,200.19727 L 691.74023,203.63086 L 688.2832,203.63086 M 686.31445,235.85742 L 692.12695,215.92383 L 693.73242,215.92383 L 687.89648,235.85742 L 686.31445,235.85742"
+ id="text5819" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 18,271.78906 C 17.911447,273.09636 17.406239,274.13542 16.484375,274.90625 C 15.5677,275.67708 14.369784,276.0625 12.890625,276.0625 C 11.187496,276.0625 9.8619761,275.53125 8.9140625,274.46875 C 7.971353,273.40625 7.4999993,271.91667 7.5,270 C 7.4999993,268.04167 7.9817696,266.54168 8.9453125,265.5 C 9.9088511,264.45834 11.294266,263.93751 13.101563,263.9375 C 14.570305,263.93751 15.729158,264.29689 16.578125,265.01563 C 17.432281,265.72918 17.901031,266.73959 17.984375,268.04688 L 15.648438,268.04688 C 15.54947,267.39584 15.283846,266.90105 14.851563,266.5625 C 14.419263,266.21876 13.83593,266.04688 13.101563,266.04688 C 12.059891,266.04688 11.268225,266.38282 10.726563,267.05469 C 10.184892,267.72657 9.9140594,268.70834 9.9140625,270 C 9.9140594,271.25 10.182288,272.21615 10.71875,272.89844 C 11.260412,273.58073 12.028641,273.92188 13.023438,273.92188 C 13.742181,273.92188 14.330722,273.73959 14.789063,273.375 C 15.247387,273.00521 15.544262,272.47657 15.679688,271.78906 L 18,271.78906 M 23.46875,275.80469 C 23.260412,275.8099 23.010412,275.81771 22.71875,275.82813 C 22.432288,275.84375 22.249996,275.85156 22.171875,275.85156 C 21.302081,275.85156 20.705727,275.6901 20.382813,275.36719 C 20.065103,275.03906 19.906249,274.39583 19.90625,273.4375 L 19.90625,268.84375 L 18.78125,268.84375 L 18.78125,267.25 L 19.90625,267.25 L 19.90625,264.92969 L 22.15625,264.92969 L 22.15625,267.25 L 23.46875,267.25 L 23.46875,268.84375 L 22.15625,268.84375 L 22.15625,273.54688 C 22.156247,273.77084 22.205726,273.91927 22.304688,273.99219 C 22.403642,274.0599 22.606767,274.09375 22.914063,274.09375 L 23.46875,274.09375 L 23.46875,275.80469 M 24.789063,275.74219 L 24.789063,267.25 L 26.898438,267.25 L 26.898438,268.70313 C 27.195309,268.1198 27.541663,267.69272 27.9375,267.42188 C 28.333329,267.14584 28.804682,267.00782 29.351563,267.00781 C 29.440099,267.00782 29.507807,267.01043 29.554688,267.01563 C 29.606765,267.01563 29.648432,267.01824 29.679688,267.02344 L 29.6875,269.32813 L 28.929688,269.32813 C 28.309891,269.32813 27.843746,269.48959 27.53125,269.8125 C 27.218747,270.13542 27.062497,270.61459 27.0625,271.25 L 27.0625,275.74219 L 24.789063,275.74219 M 31.023438,275.74219 L 31.023438,264.23438 L 33.296875,264.23438 L 33.296875,275.74219 L 31.023438,275.74219"
+ id="text5827" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 162.96875,266.49609 L 161.375,271.39453 L 164.57031,271.39453 L 162.96875,266.49609 M 161.59375,264.19141 L 164.32813,264.19141 L 168.47656,275.69922 L 165.99219,275.69922 L 165.21094,273.33203 L 160.75,273.33203 L 159.99219,275.69922 L 157.5,275.69922 L 161.59375,264.19141 M 169.53906,275.69922 L 169.53906,264.19141 L 171.8125,264.19141 L 171.8125,275.69922 L 169.53906,275.69922 M 177.64063,275.76172 C 177.43229,275.76693 177.18229,275.77474 176.89063,275.78516 C 176.60416,275.80078 176.42187,275.80859 176.34375,275.80859 C 175.47396,275.80859 174.8776,275.64714 174.55469,275.32422 C 174.23698,274.99609 174.07812,274.35287 174.07813,273.39453 L 174.07813,268.80078 L 172.95313,268.80078 L 172.95313,267.20703 L 174.07813,267.20703 L 174.07813,264.88672 L 176.32813,264.88672 L 176.32813,267.20703 L 177.64063,267.20703 L 177.64063,268.80078 L 176.32813,268.80078 L 176.32813,273.50391 C 176.32812,273.72787 176.3776,273.8763 176.47656,273.94922 C 176.57552,274.01693 176.77864,274.05078 177.08594,274.05078 L 177.64063,274.05078 L 177.64063,275.76172"
+ id="text5831" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 612.96875,266.53906 L 611.375,271.4375 L 614.57031,271.4375 L 612.96875,266.53906 M 611.59375,264.23438 L 614.32813,264.23438 L 618.47656,275.74219 L 615.99219,275.74219 L 615.21094,273.375 L 610.75,273.375 L 609.99219,275.74219 L 607.5,275.74219 L 611.59375,264.23438 M 619.53906,275.74219 L 619.53906,264.23438 L 621.8125,264.23438 L 621.8125,275.74219 L 619.53906,275.74219 M 627.64063,275.80469 C 627.43229,275.8099 627.18229,275.81771 626.89063,275.82813 C 626.60416,275.84375 626.42187,275.85156 626.34375,275.85156 C 625.47396,275.85156 624.8776,275.6901 624.55469,275.36719 C 624.23698,275.03906 624.07812,274.39583 624.07813,273.4375 L 624.07813,268.84375 L 622.95313,268.84375 L 622.95313,267.25 L 624.07813,267.25 L 624.07813,264.92969 L 626.32813,264.92969 L 626.32813,267.25 L 627.64063,267.25 L 627.64063,268.84375 L 626.32813,268.84375 L 626.32813,273.54688 C 626.32812,273.77084 626.3776,273.91927 626.47656,273.99219 C 626.57552,274.0599 626.77864,274.09375 627.08594,274.09375 L 627.64063,274.09375 L 627.64063,275.80469 M 642,274.38281 C 641.57291,274.96094 641.08593,275.38542 640.53906,275.65625 C 639.99739,275.92708 639.35937,276.0625 638.625,276.0625 C 637.01562,276.0625 635.71093,275.50521 634.71094,274.39063 C 633.71614,273.27084 633.21875,271.80209 633.21875,269.98438 C 633.21875,268.15105 633.71614,266.6849 634.71094,265.58594 C 635.70573,264.48699 637.03125,263.93751 638.6875,263.9375 C 640.1302,263.93751 641.30728,264.28387 642.21875,264.97656 C 643.1302,265.66407 643.67186,266.61199 643.84375,267.82031 L 641.42969,267.82031 C 641.28385,267.22136 640.98437,266.76563 640.53125,266.45313 C 640.08333,266.14063 639.49739,265.98438 638.77344,265.98438 C 637.80989,265.98438 637.05208,266.33855 636.5,267.04688 C 635.95312,267.75001 635.67968,268.72397 635.67969,269.96875 C 635.67968,271.21875 635.96614,272.19792 636.53906,272.90625 C 637.11197,273.61459 637.89843,273.96875 638.89844,273.96875 C 639.64843,273.96875 640.27603,273.7474 640.78125,273.30469 C 641.28645,272.86198 641.59895,272.25521 641.71875,271.48438 L 639.10938,271.48438 L 639.10938,269.51563 L 643.875,269.51563 L 643.875,275.74219 L 642.28906,275.74219 L 642,274.38281 M 645.96094,275.74219 L 645.96094,267.25 L 648.07031,267.25 L 648.07031,268.70313 C 648.36718,268.1198 648.71354,267.69272 649.10938,267.42188 C 649.5052,267.14584 649.97656,267.00782 650.52344,267.00781 C 650.61197,267.00782 650.67968,267.01043 650.72656,267.01563 C 650.77864,267.01563 650.82031,267.01824 650.85156,267.02344 L 650.85938,269.32813 L 650.10156,269.32813 C 649.48177,269.32813 649.01562,269.48959 648.70313,269.8125 C 648.39062,270.13542 648.23437,270.61459 648.23438,271.25 L 648.23438,275.74219 L 645.96094,275.74219"
+ id="text5835" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 828,271.78906 C 827.91145,273.09636 827.40624,274.13542 826.48438,274.90625 C 825.5677,275.67708 824.36978,276.0625 822.89063,276.0625 C 821.1875,276.0625 819.86198,275.53125 818.91406,274.46875 C 817.97135,273.40625 817.5,271.91667 817.5,270 C 817.5,268.04167 817.98177,266.54168 818.94531,265.5 C 819.90885,264.45834 821.29427,263.93751 823.10156,263.9375 C 824.5703,263.93751 825.72916,264.29689 826.57813,265.01563 C 827.43228,265.72918 827.90103,266.73959 827.98438,268.04688 L 825.64844,268.04688 C 825.54947,267.39584 825.28385,266.90105 824.85156,266.5625 C 824.41926,266.21876 823.83593,266.04688 823.10156,266.04688 C 822.05989,266.04688 821.26822,266.38282 820.72656,267.05469 C 820.18489,267.72657 819.91406,268.70834 819.91406,270 C 819.91406,271.25 820.18229,272.21615 820.71875,272.89844 C 821.26041,273.58073 822.02864,273.92188 823.02344,273.92188 C 823.74218,273.92188 824.33072,273.73959 824.78906,273.375 C 825.24739,273.00521 825.54426,272.47657 825.67969,271.78906 L 828,271.78906 M 833.46875,275.80469 C 833.26041,275.8099 833.01041,275.81771 832.71875,275.82813 C 832.43229,275.84375 832.25,275.85156 832.17188,275.85156 C 831.30208,275.85156 830.70573,275.6901 830.38281,275.36719 C 830.0651,275.03906 829.90625,274.39583 829.90625,273.4375 L 829.90625,268.84375 L 828.78125,268.84375 L 828.78125,267.25 L 829.90625,267.25 L 829.90625,264.92969 L 832.15625,264.92969 L 832.15625,267.25 L 833.46875,267.25 L 833.46875,268.84375 L 832.15625,268.84375 L 832.15625,273.54688 C 832.15625,273.77084 832.20573,273.91927 832.30469,273.99219 C 832.40364,274.0599 832.60677,274.09375 832.91406,274.09375 L 833.46875,274.09375 L 833.46875,275.80469 M 834.78906,275.74219 L 834.78906,267.25 L 836.89844,267.25 L 836.89844,268.70313 C 837.19531,268.1198 837.54166,267.69272 837.9375,267.42188 C 838.33333,267.14584 838.80468,267.00782 839.35156,267.00781 C 839.4401,267.00782 839.50781,267.01043 839.55469,267.01563 C 839.60677,267.01563 839.64843,267.01824 839.67969,267.02344 L 839.6875,269.32813 L 838.92969,269.32813 C 838.30989,269.32813 837.84375,269.48959 837.53125,269.8125 C 837.21875,270.13542 837.0625,270.61459 837.0625,271.25 L 837.0625,275.74219 L 834.78906,275.74219 M 841.02344,275.74219 L 841.02344,264.23438 L 843.29688,264.23438 L 843.29688,275.74219 L 841.02344,275.74219"
+ id="text5839" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 108.94531,264.01953 L 105.64844,252.51172 L 108.10156,252.51172 L 110.07031,260.62891 L 111.73438,252.51172 L 114.25781,252.51172 L 115.92188,260.62891 L 117.89063,252.51172 L 120.32031,252.51172 L 117.03125,264.01953 L 114.77344,264.01953 L 112.99219,255.20703 L 111.20313,264.01953 L 108.94531,264.01953 M 121.5,254.58203 L 121.5,252.51172 L 123.77344,252.51172 L 123.77344,254.58203 L 121.5,254.58203 M 121.5,264.01953 L 121.5,255.52734 L 123.77344,255.52734 L 123.77344,264.01953 L 121.5,264.01953 M 125.79688,264.01953 L 125.79688,255.52734 L 128.02344,255.52734 L 128.02344,256.53516 C 128.34114,256.12371 128.71614,255.81641 129.14844,255.61328 C 129.58072,255.40496 130.06249,255.30079 130.59375,255.30078 C 131.53124,255.30079 132.23176,255.54558 132.69531,256.03516 C 133.16405,256.51954 133.39843,257.25131 133.39844,258.23047 L 133.39844,264.01953 L 131.125,264.01953 L 131.125,258.88672 C 131.12499,258.27735 131.02083,257.84245 130.8125,257.58203 C 130.60937,257.32162 130.27604,257.19141 129.8125,257.19141 C 129.27604,257.19141 128.85156,257.35287 128.53906,257.67578 C 128.22656,257.9935 128.07031,258.42839 128.07031,258.98047 L 128.07031,264.01953 L 125.79688,264.01953 M 106.64844,284.01953 L 106.64844,272.51172 L 109.01563,272.51172 L 109.01563,277.23828 L 113.50781,272.51172 L 116.46875,272.51172 L 111.875,277.16797 L 116.88281,284.01953 L 113.99219,284.01953 L 110.24219,278.75391 L 109.01563,279.97266 L 109.01563,284.01953 L 106.64844,284.01953 M 122.9375,281.44141 L 125.20313,281.44141 C 124.97395,282.33724 124.51041,283.04037 123.8125,283.55078 C 123.11979,284.05599 122.27343,284.30859 121.27344,284.30859 C 120.04427,284.30859 119.07031,283.89714 118.35156,283.07422 C 117.63281,282.2461 117.27344,281.1263 117.27344,279.71484 C 117.27344,278.32422 117.6276,277.22787 118.33594,276.42578 C 119.04427,275.62371 120.01302,275.22267 121.24219,275.22266 C 122.54427,275.22267 123.54947,275.6185 124.25781,276.41016 C 124.96614,277.19662 125.3203,278.31902 125.32031,279.77734 C 125.3203,279.93881 125.3177,280.0612 125.3125,280.14453 C 125.31249,280.22266 125.30728,280.29818 125.29688,280.37109 L 119.625,280.37109 C 119.65625,281.03776 119.81771,281.54037 120.10938,281.87891 C 120.40625,282.21745 120.83073,282.38672 121.38281,282.38672 C 121.77343,282.38672 122.09374,282.3112 122.34375,282.16016 C 122.59374,282.00391 122.79166,281.76433 122.9375,281.44141 M 119.625,278.87891 L 122.96875,278.87891 C 122.94791,278.306 122.79426,277.8711 122.50781,277.57422 C 122.22656,277.27214 121.82031,277.1211 121.28906,277.12109 C 120.79427,277.1211 120.40364,277.27214 120.11719,277.57422 C 119.83593,277.87631 119.67187,278.3112 119.625,278.87891 M 127.16406,287.42578 L 127.16406,285.58984 C 127.23698,285.60026 127.3125,285.60807 127.39063,285.61328 C 127.46875,285.61849 127.57031,285.62109 127.69531,285.62109 C 128.14323,285.62109 128.47916,285.51432 128.70313,285.30078 C 128.92708,285.09245 129.03906,284.77734 129.03906,284.35547 C 129.03906,284.32422 129.03385,284.28516 129.02344,284.23828 C 129.01302,284.19141 129.0026,284.15234 128.99219,284.12109 L 125.92969,275.52734 L 128.42969,275.52734 L 130.21875,281.65234 L 131.96094,275.52734 L 134.35156,275.52734 L 130.85938,285.54297 C 130.59895,286.29297 130.27343,286.80338 129.88281,287.07422 C 129.49218,287.35026 128.90625,287.48828 128.125,287.48828 C 127.98437,287.48828 127.83333,287.48307 127.67188,287.47266 C 127.51041,287.46224 127.34114,287.44661 127.16406,287.42578"
+ id="text5872" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 708.94531,264.01953 L 705.64844,252.51172 L 708.10156,252.51172 L 710.07031,260.62891 L 711.73438,252.51172 L 714.25781,252.51172 L 715.92188,260.62891 L 717.89063,252.51172 L 720.32031,252.51172 L 717.03125,264.01953 L 714.77344,264.01953 L 712.99219,255.20703 L 711.20313,264.01953 L 708.94531,264.01953 M 721.5,254.58203 L 721.5,252.51172 L 723.77344,252.51172 L 723.77344,254.58203 L 721.5,254.58203 M 721.5,264.01953 L 721.5,255.52734 L 723.77344,255.52734 L 723.77344,264.01953 L 721.5,264.01953 M 725.79688,264.01953 L 725.79688,255.52734 L 728.02344,255.52734 L 728.02344,256.53516 C 728.34114,256.12371 728.71614,255.81641 729.14844,255.61328 C 729.58072,255.40496 730.06249,255.30079 730.59375,255.30078 C 731.53124,255.30079 732.23176,255.54558 732.69531,256.03516 C 733.16405,256.51954 733.39843,257.25131 733.39844,258.23047 L 733.39844,264.01953 L 731.125,264.01953 L 731.125,258.88672 C 731.12499,258.27735 731.02083,257.84245 730.8125,257.58203 C 730.60937,257.32162 730.27604,257.19141 729.8125,257.19141 C 729.27604,257.19141 728.85156,257.35287 728.53906,257.67578 C 728.22656,257.9935 728.07031,258.42839 728.07031,258.98047 L 728.07031,264.01953 L 725.79688,264.01953 M 706.64844,284.01953 L 706.64844,272.51172 L 709.01563,272.51172 L 709.01563,277.23828 L 713.50781,272.51172 L 716.46875,272.51172 L 711.875,277.16797 L 716.88281,284.01953 L 713.99219,284.01953 L 710.24219,278.75391 L 709.01563,279.97266 L 709.01563,284.01953 L 706.64844,284.01953 M 722.9375,281.44141 L 725.20313,281.44141 C 724.97395,282.33724 724.51041,283.04037 723.8125,283.55078 C 723.11979,284.05599 722.27343,284.30859 721.27344,284.30859 C 720.04427,284.30859 719.07031,283.89714 718.35156,283.07422 C 717.63281,282.2461 717.27344,281.1263 717.27344,279.71484 C 717.27344,278.32422 717.6276,277.22787 718.33594,276.42578 C 719.04427,275.62371 720.01302,275.22267 721.24219,275.22266 C 722.54427,275.22267 723.54947,275.6185 724.25781,276.41016 C 724.96614,277.19662 725.3203,278.31902 725.32031,279.77734 C 725.3203,279.93881 725.3177,280.0612 725.3125,280.14453 C 725.31249,280.22266 725.30728,280.29818 725.29688,280.37109 L 719.625,280.37109 C 719.65625,281.03776 719.81771,281.54037 720.10938,281.87891 C 720.40625,282.21745 720.83073,282.38672 721.38281,282.38672 C 721.77343,282.38672 722.09374,282.3112 722.34375,282.16016 C 722.59374,282.00391 722.79166,281.76433 722.9375,281.44141 M 719.625,278.87891 L 722.96875,278.87891 C 722.94791,278.306 722.79426,277.8711 722.50781,277.57422 C 722.22656,277.27214 721.82031,277.1211 721.28906,277.12109 C 720.79427,277.1211 720.40364,277.27214 720.11719,277.57422 C 719.83593,277.87631 719.67187,278.3112 719.625,278.87891 M 727.16406,287.42578 L 727.16406,285.58984 C 727.23698,285.60026 727.3125,285.60807 727.39063,285.61328 C 727.46875,285.61849 727.57031,285.62109 727.69531,285.62109 C 728.14323,285.62109 728.47916,285.51432 728.70313,285.30078 C 728.92708,285.09245 729.03906,284.77734 729.03906,284.35547 C 729.03906,284.32422 729.03385,284.28516 729.02344,284.23828 C 729.01302,284.19141 729.0026,284.15234 728.99219,284.12109 L 725.92969,275.52734 L 728.42969,275.52734 L 730.21875,281.65234 L 731.96094,275.52734 L 734.35156,275.52734 L 730.85938,285.54297 C 730.59895,286.29297 730.27343,286.80338 729.88281,287.07422 C 729.49218,287.35026 728.90625,287.48828 728.125,287.48828 C 727.98437,287.48828 727.83333,287.48307 727.67188,287.47266 C 727.51041,287.46224 727.34114,287.44661 727.16406,287.42578"
+ id="text5878" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 759.98438,275.60938 L 759.98438,264.10156 L 763.48438,264.10156 L 765.77344,272.85938 L 768.03125,264.10156 L 771.54688,264.10156 L 771.54688,275.60938 L 769.32813,275.60938 L 769.32813,266.32813 L 766.99219,275.60938 L 764.57031,275.60938 L 762.20313,266.32813 L 762.20313,275.60938 L 759.98438,275.60938 M 778.99219,273.03125 L 781.25781,273.03125 C 781.02864,273.92709 780.5651,274.63021 779.86719,275.14063 C 779.17447,275.64583 778.32812,275.89844 777.32813,275.89844 C 776.09896,275.89844 775.125,275.48698 774.40625,274.66406 C 773.6875,273.83594 773.32812,272.71615 773.32813,271.30469 C 773.32812,269.91407 773.68229,268.81772 774.39063,268.01563 C 775.09896,267.21355 776.06771,266.81251 777.29688,266.8125 C 778.59895,266.81251 779.60416,267.20834 780.3125,268 C 781.02083,268.78647 781.37499,269.90886 781.375,271.36719 C 781.37499,271.52865 781.37239,271.65105 781.36719,271.73438 C 781.36718,271.8125 781.36197,271.88802 781.35156,271.96094 L 775.67969,271.96094 C 775.71093,272.62761 775.87239,273.13021 776.16406,273.46875 C 776.46093,273.80729 776.88541,273.97656 777.4375,273.97656 C 777.82812,273.97656 778.14843,273.90104 778.39844,273.75 C 778.64843,273.59375 778.84635,273.35417 778.99219,273.03125 M 775.67969,270.46875 L 779.02344,270.46875 C 779.0026,269.89584 778.84895,269.46094 778.5625,269.16406 C 778.28124,268.86199 777.87499,268.71094 777.34375,268.71094 C 776.84895,268.71094 776.45833,268.86199 776.17188,269.16406 C 775.89062,269.46615 775.72656,269.90105 775.67969,270.46875 M 782.88281,275.60938 L 782.88281,267.11719 L 785.10938,267.11719 L 785.10938,268.125 C 785.42708,267.71355 785.80208,267.40626 786.23438,267.20313 C 786.66666,266.9948 787.14843,266.89063 787.67969,266.89063 C 788.61718,266.89063 789.3177,267.13543 789.78125,267.625 C 790.24999,268.10938 790.48437,268.84115 790.48438,269.82031 L 790.48438,275.60938 L 788.21094,275.60938 L 788.21094,270.47656 C 788.21093,269.86719 788.10676,269.4323 787.89844,269.17188 C 787.69531,268.91147 787.36197,268.78126 786.89844,268.78125 C 786.36197,268.78126 785.9375,268.94272 785.625,269.26563 C 785.3125,269.58334 785.15625,270.01823 785.15625,270.57031 L 785.15625,275.60938 L 782.88281,275.60938 M 800.01563,267.11719 L 800.01563,275.60938 L 797.78906,275.60938 L 797.78906,274.60156 C 797.46614,275.01302 797.08854,275.32292 796.65625,275.53125 C 796.22916,275.73437 795.74739,275.83594 795.21094,275.83594 C 794.27864,275.83594 793.57812,275.59115 793.10938,275.10156 C 792.64583,274.61198 792.41406,273.88021 792.41406,272.90625 L 792.41406,267.11719 L 794.6875,267.11719 L 794.6875,272.25 C 794.6875,272.85417 794.78906,273.28646 794.99219,273.54688 C 795.19531,273.80209 795.53125,273.92969 796,273.92969 C 796.53124,273.92969 796.95312,273.77084 797.26563,273.45313 C 797.58333,273.13021 797.74218,272.69271 797.74219,272.14063 L 797.74219,267.11719 L 800.01563,267.11719"
+ id="text5884" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 104.41406,17.103516 L 104.41406,10.212891 L 101.74219,10.212891 L 101.74219,8.7949219 L 101.94141,8.7949219 C 102.89453,8.7949367 103.58984,8.6621243 104.02734,8.3964844 C 104.47265,8.1308749 104.73828,7.6894691 104.82422,7.0722656 L 106.59375,7.0722656 L 106.59375,17.103516 L 104.41406,17.103516 M 106.72266,36.369141 L 106.72266,39.826172 L 103.24219,39.826172 L 103.24219,36.369141 L 106.72266,36.369141 M 105.89063,41.173828 L 106.80469,48.978516 L 106.80469,53.630859 L 103.19531,53.630859 L 103.19531,48.978516 L 104.10938,41.173828 L 105.89063,41.173828"
+ id="text5890" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 160.85156,47.103516 C 160.875,46.197273 161.08984,45.431649 161.49609,44.806641 C 161.91015,44.18165 162.63672,43.548838 163.67578,42.908203 C 163.82422,42.822276 164.03125,42.701183 164.29688,42.544922 C 165.74218,41.724621 166.46484,40.931653 166.46484,40.166016 C 166.46484,39.720717 166.32031,39.369155 166.03125,39.111328 C 165.74218,38.85353 165.34375,38.724624 164.83594,38.724609 C 164.27343,38.724624 163.83984,38.88478 163.53516,39.205078 C 163.23047,39.517592 163.07812,39.966811 163.07813,40.552734 L 163.07813,40.646484 L 161.03906,40.646484 C 161.03906,39.498061 161.37891,38.615249 162.05859,37.998047 C 162.73828,37.380876 163.71093,37.072282 164.97656,37.072266 C 166.11718,37.072282 167.02343,37.353532 167.69531,37.916016 C 168.37499,38.470718 168.71484,39.212905 168.71484,40.142578 C 168.71484,40.814466 168.53905,41.39259 168.1875,41.876953 C 167.83593,42.361339 167.14843,42.919933 166.125,43.552734 C 165.89843,43.701182 165.57812,43.896494 165.16406,44.138672 C 164.22656,44.685556 163.69922,45.115243 163.58203,45.427734 L 168.62109,45.427734 L 168.62109,47.103516 L 160.85156,47.103516"
+ id="text5910" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 220.92188,44.033203 L 223.05469,44.033203 C 223.07031,44.603525 223.22265,45.029305 223.51172,45.310547 C 223.80078,45.591805 224.23437,45.73243 224.8125,45.732422 C 225.36718,45.73243 225.79687,45.599617 226.10156,45.333984 C 226.40624,45.068368 226.55859,44.689462 226.55859,44.197266 C 226.55859,43.697276 226.38281,43.322276 226.03125,43.072266 C 225.67968,42.814464 225.15234,42.685558 224.44922,42.685547 L 224.10938,42.685547 L 224.10938,41.291016 L 224.35547,41.291016 C 225.0039,41.291028 225.48046,41.181653 225.78516,40.962891 C 226.09765,40.736341 226.2539,40.392591 226.25391,39.931641 C 226.2539,39.54103 226.12109,39.232436 225.85547,39.005859 C 225.58984,38.771499 225.23437,38.654312 224.78906,38.654297 C 224.29687,38.654312 223.91797,38.787124 223.65234,39.052734 C 223.38672,39.310561 223.2539,39.681655 223.25391,40.166016 L 223.25391,40.236328 L 221.16797,40.236328 C 221.19141,39.212905 221.51953,38.431656 222.15234,37.892578 C 222.79297,37.345719 223.70312,37.072282 224.88281,37.072266 C 225.99218,37.072282 226.86718,37.314469 227.50781,37.798828 C 228.15624,38.283218 228.48046,38.943374 228.48047,39.779297 C 228.48046,40.21681 228.36718,40.603529 228.14063,40.939453 C 227.92187,41.26759 227.59374,41.537121 227.15625,41.748047 C 227.72656,41.974621 228.15624,42.291027 228.44531,42.697266 C 228.74218,43.095714 228.89062,43.564463 228.89063,44.103516 C 228.89062,45.119149 228.52343,45.923836 227.78906,46.517578 C 227.06249,47.103522 226.07031,47.396491 224.8125,47.396484 C 223.57031,47.396491 222.60937,47.107428 221.92969,46.529297 C 221.25781,45.95118 220.92187,45.134774 220.92188,44.080078 L 220.92188,44.033203"
+ id="text5922" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 278.92969,21.685547 C 279.86719,21.037112 280.53125,20.439456 280.92188,19.892578 C 281.32031,19.345707 281.51953,18.75977 281.51953,18.134766 C 281.51953,17.837896 281.47265,17.525397 281.37891,17.197266 C 281.28515,16.861335 281.14843,16.509773 280.96875,16.142578 L 278.90625,16.142578 L 278.90625,14.841797 L 280.17188,14.841797 C 279.82812,14.162119 279.57812,13.556651 279.42188,13.025391 C 279.26562,12.494152 279.1875,11.998059 279.1875,11.537109 C 279.1875,10.146498 279.69531,9.021499 280.71094,8.1621094 C 281.73437,7.3027507 283.08203,6.8730636 284.75391,6.8730469 C 286.5664,6.8730636 287.98827,7.3379069 289.01953,8.2675781 C 290.05077,9.1972801 290.61327,10.517591 290.70703,12.228516 L 287.47266,12.228516 C 287.41015,11.345715 287.15624,10.669935 286.71094,10.201172 C 286.26562,9.7324358 285.65624,9.498061 284.88281,9.4980469 C 284.14843,9.498061 283.58203,9.6894671 283.18359,10.072266 C 282.79296,10.455091 282.59765,11.005872 282.59766,11.724609 C 282.59765,12.138683 282.84375,12.888683 283.33594,13.974609 C 283.50781,14.349619 283.63671,14.638681 283.72266,14.841797 L 287.0625,14.841797 L 287.0625,16.142578 L 284.20313,16.142578 C 284.27343,16.43946 284.32421,16.712898 284.35547,16.962891 C 284.38671,17.212897 284.40234,17.443366 284.40234,17.654297 C 284.40234,18.216802 284.22656,18.779302 283.875,19.341797 C 283.53124,19.896488 282.94531,20.548831 282.11719,21.298828 C 282.625,21.064456 283.08203,20.892581 283.48828,20.783203 C 283.90234,20.666019 284.27734,20.607425 284.61328,20.607422 C 285.01952,20.607425 285.57421,20.701175 286.27734,20.888672 C 286.98046,21.068362 287.48046,21.158206 287.77734,21.158203 C 288.16796,21.158206 288.55077,21.095706 288.92578,20.970703 C 289.30858,20.845706 289.68749,20.6543 290.0625,20.396484 L 291.09375,22.939453 C 290.4453,23.322266 289.82421,23.611328 289.23047,23.806641 C 288.63671,24.009765 288.08202,24.111328 287.56641,24.111328 C 286.97265,24.111328 286.16796,23.955078 285.15234,23.642578 C 284.14453,23.330078 283.41406,23.173829 282.96094,23.173828 C 282.48437,23.173829 282.01953,23.251954 281.56641,23.408203 C 281.12109,23.564453 280.6875,23.798828 280.26563,24.111328 L 278.92969,21.685547 M 284.94141,40.025391 C 284.05859,40.025404 283.29687,40.345716 282.65625,40.986328 C 282.01562,41.626965 281.69531,42.384777 281.69531,43.259766 C 281.69531,44.1504 282.01171,44.912118 282.64453,45.544922 C 283.27734,46.169929 284.04296,46.482429 284.94141,46.482422 C 285.82421,46.482429 286.58202,46.169929 287.21484,45.544922 C 287.85546,44.912118 288.17577,44.1504 288.17578,43.259766 C 288.17577,42.384777 287.85546,41.626965 287.21484,40.986328 C 286.58202,40.345716 285.82421,40.025404 284.94141,40.025391 M 279.65625,36.779297 L 282.05859,39.158203 C 282.48046,38.85353 282.92578,38.626968 283.39453,38.478516 C 283.86328,38.322281 284.37109,38.244156 284.91797,38.244141 C 285.46484,38.244156 285.97655,38.322281 286.45313,38.478516 C 286.93749,38.626968 287.39062,38.85353 287.8125,39.158203 L 290.19141,36.779297 L 291.42188,38.033203 L 289.04297,40.435547 C 289.33983,40.849622 289.56249,41.294934 289.71094,41.771484 C 289.85936,42.240246 289.93358,42.736339 289.93359,43.259766 C 289.93358,43.783213 289.85936,44.279306 289.71094,44.748047 C 289.56249,45.216805 289.33983,45.666024 289.04297,46.095703 L 291.42188,48.498047 L 290.19141,49.716797 L 287.8125,47.337891 C 287.39062,47.650397 286.9414,47.880865 286.46484,48.029297 C 285.98827,48.17774 285.48046,48.251959 284.94141,48.251953 C 284.3789,48.251959 283.85937,48.17774 283.38281,48.029297 C 282.91406,47.880865 282.47265,47.650397 282.05859,47.337891 L 279.65625,49.716797 L 278.4375,48.498047 L 280.80469,46.095703 C 280.50781,45.673836 280.28515,45.23243 280.13672,44.771484 C 279.99609,44.302744 279.92578,43.798838 279.92578,43.259766 C 279.92578,42.736339 279.99609,42.240246 280.13672,41.771484 C 280.28515,41.294934 280.50781,40.849622 280.80469,40.435547 L 278.4375,38.033203 L 279.65625,36.779297"
+ id="text5928" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 352.875,47.701172 C 352.74217,49.662113 351.98436,51.220706 350.60156,52.376953 C 349.22655,53.533203 347.42968,54.111328 345.21094,54.111328 C 342.65624,54.111328 340.66796,53.314453 339.24609,51.720703 C 337.83203,50.126957 337.125,47.892584 337.125,45.017578 C 337.125,42.08009 337.84765,39.830092 339.29297,38.267578 C 340.73828,36.705095 342.8164,35.923846 345.52734,35.923828 C 347.73046,35.923846 349.46874,36.462908 350.74219,37.541016 C 352.02342,38.611343 352.72655,40.126967 352.85156,42.087891 L 349.34766,42.087891 C 349.19921,41.111341 348.80077,40.369154 348.15234,39.861328 C 347.50389,39.345717 346.6289,39.087905 345.52734,39.087891 C 343.96484,39.087905 342.77734,39.591811 341.96484,40.599609 C 341.15234,41.607434 340.74609,43.080089 340.74609,45.017578 C 340.74609,46.892585 341.14843,48.341802 341.95313,49.365234 C 342.76562,50.388675 343.91796,50.900393 345.41016,50.900391 C 346.48827,50.900393 347.37108,50.626956 348.05859,50.080078 C 348.74608,49.525395 349.19139,48.732427 349.39453,47.701172 L 352.875,47.701172"
+ id="text5946" />
+ <path
+ transform="matrix(1.16233,0,-0.444745,0.860341,0,0)"
+ style="font-size:16.72912407px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 307.52845,53.268758 L 317.31434,53.268758 L 317.31434,54.894293 L 307.52845,54.894293 L 307.52845,53.268758 M 307.52845,49.756296 L 317.31434,49.756296 L 317.31434,51.381831 L 307.52845,51.381831 L 307.52845,49.756296"
+ id="text5956" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 411.45117,50.150391 L 411.45117,46.142578 L 408.63867,50.150391 L 411.45117,50.150391 M 411.45117,53.630859 L 411.45117,51.591797 L 406.98633,51.591797 L 406.98633,49.962891 L 410.90039,44.513672 L 413.51367,44.513672 L 413.51367,50.103516 L 414.73242,50.103516 L 414.73242,51.591797 L 413.51367,51.591797 L 413.51367,53.630859 L 411.45117,53.630859 M 398.58398,54.111328 L 408.7793,36.615234 L 410.70117,36.615234 L 400.48242,54.111328 L 398.58398,54.111328 M 397.78711,46.458984 L 397.78711,40.025391 L 395.26758,40.025391 L 395.26758,38.701172 L 395.44336,38.701172 C 396.36523,38.701187 397.0332,38.576187 397.44727,38.326172 C 397.86914,38.076187 398.11914,37.658219 398.19727,37.072266 L 399.88477,37.072266 L 399.88477,46.458984 L 397.78711,46.458984"
+ id="text5960" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 467.0918,53.630859 C 467.11522,52.779298 467.32225,52.064455 467.71289,51.486328 C 468.11131,50.900393 468.80663,50.31055 469.79883,49.716797 C 469.95506,49.630863 470.16991,49.50977 470.44336,49.353516 C 471.7949,48.595708 472.47068,47.861334 472.4707,47.150391 C 472.47068,46.736335 472.33006,46.40821 472.04883,46.166016 C 471.76756,45.923836 471.38475,45.802742 470.90039,45.802734 C 470.36912,45.802742 469.95506,45.95118 469.6582,46.248047 C 469.36913,46.544929 469.22459,46.966804 469.22461,47.513672 L 469.22461,47.607422 L 467.2793,47.607422 C 467.27928,46.529304 467.6035,45.70118 468.25195,45.123047 C 468.90038,44.537118 469.82616,44.24415 471.0293,44.244141 C 472.12303,44.24415 472.99412,44.505868 473.64258,45.029297 C 474.29881,45.552742 474.62693,46.251961 474.62695,47.126953 C 474.62693,47.751959 474.45506,48.294927 474.11133,48.755859 C 473.77537,49.208989 473.11522,49.72852 472.13086,50.314453 C 471.9199,50.439456 471.63084,50.607425 471.26367,50.818359 C 470.34959,51.341799 469.83397,51.744143 469.7168,52.025391 L 474.50977,52.025391 L 474.50977,53.630859 L 467.0918,53.630859 M 458.68945,54.111328 L 468.88477,36.615234 L 470.80664,36.615234 L 460.58789,54.111328 L 458.68945,54.111328 M 457.89258,46.458984 L 457.89258,40.025391 L 455.37305,40.025391 L 455.37305,38.701172 L 455.54883,38.701172 C 456.4707,38.701187 457.13867,38.576187 457.55273,38.326172 C 457.97461,38.076187 458.22461,37.658219 458.30273,37.072266 L 459.99023,37.072266 L 459.99023,46.458984 L 457.89258,46.458984"
+ id="text5967" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 531.83203,50.150391 L 531.83203,46.142578 L 529.01953,50.150391 L 531.83203,50.150391 M 531.83203,53.630859 L 531.83203,51.591797 L 527.36719,51.591797 L 527.36719,49.962891 L 531.28125,44.513672 L 533.89453,44.513672 L 533.89453,50.103516 L 535.11328,50.103516 L 535.11328,51.591797 L 533.89453,51.591797 L 533.89453,53.630859 L 531.83203,53.630859 M 518.96484,54.111328 L 529.16016,36.615234 L 531.08203,36.615234 L 520.86328,54.111328 L 518.96484,54.111328 M 514.88672,43.599609 L 516.89063,43.599609 C 516.91406,44.130869 517.0625,44.529306 517.33594,44.794922 C 517.61718,45.052743 518.03125,45.181649 518.57813,45.181641 C 519.10937,45.181649 519.51953,45.060555 519.80859,44.818359 C 520.09765,44.568368 520.24218,44.208994 520.24219,43.740234 C 520.24218,43.271495 520.07421,42.919933 519.73828,42.685547 C 519.40234,42.443371 518.90625,42.322277 518.25,42.322266 C 518.20312,42.322277 518.14453,42.326183 518.07422,42.333984 C 518.0039,42.341808 517.94922,42.345714 517.91016,42.345703 L 517.91016,41.033203 L 518.14453,41.033203 C 518.76171,41.033216 519.21484,40.931653 519.50391,40.728516 C 519.80078,40.517591 519.94921,40.193373 519.94922,39.755859 C 519.94921,39.388686 519.82421,39.099624 519.57422,38.888672 C 519.32421,38.669937 518.98437,38.560562 518.55469,38.560547 C 518.08593,38.560562 517.72265,38.685562 517.46484,38.935547 C 517.21484,39.177749 517.08984,39.525405 517.08984,39.978516 L 517.08984,40.048828 L 515.08594,40.048828 C 515.10156,39.087905 515.41797,38.353531 516.03516,37.845703 C 516.65234,37.330094 517.52343,37.072282 518.64844,37.072266 C 519.70312,37.072282 520.53906,37.302751 521.15625,37.763672 C 521.77343,38.216812 522.08202,38.833999 522.08203,39.615234 C 522.08202,40.02931 521.97655,40.392591 521.76563,40.705078 C 521.55468,41.009778 521.23827,41.263684 520.81641,41.466797 C 521.36327,41.677746 521.77343,41.970715 522.04688,42.345703 C 522.32812,42.712902 522.46874,43.154307 522.46875,43.669922 C 522.46874,44.607431 522.11718,45.349618 521.41406,45.896484 C 520.71874,46.443367 519.77343,46.716804 518.57813,46.716797 C 517.39062,46.716804 516.47656,46.451179 515.83594,45.919922 C 515.20312,45.380868 514.88672,44.615243 514.88672,43.623047 L 514.88672,43.599609"
+ id="text5973" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 586.63477,39.404297 L 586.63477,42.498047 L 583.36523,42.498047 L 583.36523,39.474609 C 583.36523,38.482437 583.66992,37.654313 584.2793,36.990234 C 584.88867,36.326189 585.67382,35.970721 586.63477,35.923828 L 586.63477,37.119141 C 586.04101,37.259782 585.59961,37.509782 585.31055,37.869141 C 585.02148,38.220719 584.87695,38.681656 584.87695,39.251953 L 584.87695,39.404297 L 586.63477,39.404297"
+ id="text5979" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 643.36523,39.474609 L 643.36523,36.369141 L 646.63477,36.369141 L 646.63477,39.427734 C 646.63476,40.412123 646.33007,41.240247 645.7207,41.912109 C 645.11132,42.576183 644.32617,42.931651 643.36523,42.978516 L 643.36523,41.771484 C 643.95898,41.630871 644.39648,41.384778 644.67773,41.033203 C 644.96679,40.673841 645.11132,40.201185 645.11133,39.615234 L 645.11133,39.474609 L 643.36523,39.474609"
+ id="text5985" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 706.89258,53.630859 L 703.50586,53.630859 L 703.50586,47.560547 L 703.27148,47.150391 L 698.00977,47.150391 L 698.00977,45.826172 L 702.49805,45.826172 L 701.64258,44.337891 L 698.00977,44.337891 L 698.00977,43.025391 L 700.86914,43.025391 L 697.61133,37.330078 L 701.41992,37.330078 L 705.19336,44.724609 L 708.69727,37.330078 L 712.27148,37.330078 L 709.27148,43.025391 L 712.00195,43.025391 L 712.00195,44.337891 L 708.58008,44.337891 L 707.7832,45.826172 L 712.00195,45.826172 L 712.00195,47.150391 L 707.0918,47.150391 L 706.89258,47.560547 L 706.89258,53.630859"
+ id="text5991" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 764.97656,19.306641 C 765.46093,19.306645 765.8789,19.482426 766.23047,19.833984 C 766.58202,20.18555 766.7578,20.603519 766.75781,21.087891 C 766.7578,21.564455 766.58202,21.974611 766.23047,22.318359 C 765.8789,22.66211 765.46093,22.833985 764.97656,22.833984 C 764.48437,22.833985 764.06249,22.666017 763.71094,22.330078 C 763.36718,21.994142 763.1953,21.58008 763.19531,21.087891 C 763.1953,20.595706 763.36718,20.177738 763.71094,19.833984 C 764.06249,19.482426 764.48437,19.306645 764.97656,19.306641 M 757.94531,15.298828 L 771.98438,15.298828 L 771.98438,17.630859 L 757.94531,17.630859 L 757.94531,15.298828 M 764.97656,10.095703 C 765.46093,10.095717 765.8789,10.271498 766.23047,10.623047 C 766.58202,10.96681 766.7578,11.380872 766.75781,11.865234 C 766.7578,12.357433 766.58202,12.779308 766.23047,13.130859 C 765.88671,13.47462 765.46874,13.646494 764.97656,13.646484 C 764.48437,13.646494 764.06249,13.47462 763.71094,13.130859 C 763.36718,12.779308 763.1953,12.357433 763.19531,11.865234 C 763.1953,11.373059 763.36718,10.955091 763.71094,10.611328 C 764.06249,10.267591 764.48437,10.095717 764.97656,10.095703 M 759.84375,39.544922 L 765.11719,44.818359 L 770.40234,39.544922 L 772.05469,41.173828 L 766.78125,46.482422 L 772.05469,51.755859 L 770.40234,53.396484 L 765.11719,48.111328 L 759.84375,53.396484 L 758.20313,51.755859 L 763.48828,46.482422 L 758.20313,41.173828 L 759.84375,39.544922"
+ id="text5997" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 134.9707,69.826172 L 132.58008,77.173828 L 137.37305,77.173828 L 134.9707,69.826172 M 132.9082,66.369141 L 137.00977,66.369141 L 143.23242,83.630859 L 139.50586,83.630859 L 138.33398,80.080078 L 131.64258,80.080078 L 130.50586,83.630859 L 126.76758,83.630859 L 132.9082,66.369141 M 135.70898,64.166016 L 135.70898,61.283203 L 138.35742,61.283203 L 138.35742,64.166016 L 135.70898,64.166016 M 131.63086,64.166016 L 131.63086,61.283203 L 134.2793,61.283203 L 134.2793,64.166016 L 131.63086,64.166016"
+ id="text6003" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 194.9707,62.126953 C 194.5957,62.126975 194.27538,62.267599 194.00977,62.548828 C 193.74413,62.822286 193.61132,63.154317 193.61133,63.544922 C 193.61132,63.927754 193.74023,64.251973 193.99805,64.517578 C 194.26366,64.783222 194.58788,64.916034 194.9707,64.916016 C 195.36132,64.916034 195.69335,64.783222 195.9668,64.517578 C 196.24804,64.24416 196.38866,63.919942 196.38867,63.544922 C 196.38866,63.16213 196.24804,62.830099 195.9668,62.548828 C 195.69335,62.267599 195.36132,62.126975 194.9707,62.126953 M 194.9707,60.521484 C 195.81444,60.521507 196.52929,60.814476 197.11523,61.400391 C 197.70116,61.978537 197.99413,62.685568 197.99414,63.521484 C 197.99413,64.357441 197.70116,65.068378 197.11523,65.654297 C 196.52929,66.232439 195.81444,66.521501 194.9707,66.521484 C 194.13476,66.521501 193.42773,66.232439 192.84961,65.654297 C 192.27929,65.07619 191.99414,64.365254 191.99414,63.521484 C 191.99414,62.677755 192.27929,61.966819 192.84961,61.388672 C 193.42773,60.81057 194.13476,60.521507 194.9707,60.521484 M 192.7207,67.072266 L 197.23242,67.072266 L 203.23242,83.630859 L 199.50586,83.630859 L 198.33398,80.080078 L 191.64258,80.080078 L 190.50586,83.630859 L 186.76758,83.630859 L 192.7207,67.072266 M 194.9707,69.826172 L 192.58008,77.173828 L 197.37305,77.173828 L 194.9707,69.826172"
+ id="text6007" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 248.52539,83.630859 L 248.52539,66.369141 L 261.05273,66.369141 L 261.05273,69.369141 L 252.0293,69.369141 L 252.0293,73.048828 L 260.2793,73.048828 L 260.2793,76.001953 L 252.0293,76.001953 L 252.0293,80.443359 L 261.47461,80.443359 L 261.47461,83.630859 L 248.52539,83.630859 M 258.24023,60.521484 L 254.57227,64.857422 L 252.9082,64.857422 L 255.2168,60.521484 L 258.24023,60.521484"
+ id="text6011" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 313.72266,101.49056 L 313.72266,104.29134 L 314.88281,104.29134 C 315.5703,104.29135 316.07421,104.18198 316.39453,103.96322 C 316.71483,103.74448 316.87499,103.40073 316.875,102.93197 C 316.87499,102.43979 316.70311,102.07651 316.35938,101.84212 C 316.01561,101.60776 315.48436,101.49057 314.76563,101.49056 L 313.72266,101.49056 M 311.37891,100.00228 L 315.16406,100.00228 C 316.53905,100.00229 317.5703,100.23667 318.25781,100.70541 C 318.95311,101.16636 319.30077,101.85776 319.30078,102.77962 C 319.30077,103.42026 319.11327,103.96713 318.73828,104.42025 C 318.36327,104.87338 317.84374,105.18198 317.17969,105.34603 L 319.34766,109.67025 L 316.72266,109.67025 L 314.88281,105.70931 L 313.72266,105.70931 L 313.72266,109.67025 L 311.37891,109.67025 L 311.37891,100.00228 M 315,97.717125 C 314.0078,97.717141 313.08593,97.892922 312.23438,98.244469 C 311.38281,98.588234 310.61718,99.099952 309.9375,99.779625 C 309.22656,100.49058 308.67968,101.29917 308.29688,102.20541 C 307.91406,103.10385 307.72265,104.03354 307.72266,104.99447 C 307.72265,105.96323 307.90234,106.8851 308.26172,107.76009 C 308.62109,108.62729 309.14062,109.40072 309.82031,110.08041 C 310.51562,110.79135 311.30859,111.33822 312.19922,111.72103 C 313.08984,112.09603 314.01562,112.28353 314.97656,112.28353 C 315.91405,112.28353 316.82421,112.09994 317.70703,111.73275 C 318.59764,111.36556 319.40624,110.83822 320.13281,110.15072 C 320.81248,109.49447 321.33983,108.72885 321.71484,107.85384 C 322.08983,106.97885 322.27733,106.0726 322.27734,105.13509 C 322.27733,104.09604 322.10155,103.13901 321.75,102.264 C 321.40623,101.38901 320.89061,100.60386 320.20313,99.908531 C 319.49999,99.181983 318.70702,98.635109 317.82422,98.267906 C 316.94921,97.900734 316.0078,97.717141 315,97.717125 M 314.97656,96.275719 C 316.17968,96.275736 317.31249,96.502298 318.375,96.955406 C 319.4453,97.400735 320.39842,98.049172 321.23438,98.900719 C 322.03905,99.713233 322.65233,100.64292 323.07422,101.68978 C 323.49608,102.73667 323.70701,103.84604 323.70703,105.01791 C 323.70701,106.20541 323.48826,107.33041 323.05078,108.39291 C 322.61326,109.4476 321.97655,110.37728 321.14063,111.18197 C 320.30467,112.00228 319.35155,112.63119 318.28125,113.06869 C 317.21874,113.50619 316.11718,113.72494 314.97656,113.72494 C 313.81249,113.72494 312.69921,113.49838 311.63672,113.04525 C 310.57421,112.59213 309.625,111.93978 308.78906,111.08822 C 307.97656,110.26791 307.35547,109.33822 306.92578,108.29916 C 306.5039,107.25229 306.29297,106.15854 306.29297,105.01791 C 306.29297,104.22104 306.39844,103.4476 306.60938,102.69759 C 306.82031,101.93979 307.13672,101.20151 307.55859,100.48275 C 308.34765,99.154639 309.39062,98.12339 310.6875,97.389 C 311.98437,96.646829 313.41405,96.275736 314.97656,96.275719"
+ id="text6015" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 372.0293,69.064453 L 376.06055,69.064453 C 377.84179,69.064468 379.18944,69.505874 380.10352,70.388672 C 381.01756,71.263684 381.47459,72.556652 381.47461,74.267578 C 381.47459,75.939461 381.02538,77.228522 380.12695,78.134766 C 379.23632,79.033208 377.95897,79.482426 376.29492,79.482422 L 372.0293,79.482422 L 372.0293,83.630859 L 368.52539,83.630859 L 368.52539,66.369141 L 372.0293,66.369141 L 372.0293,69.064453 M 372.05273,76.599609 L 375.47461,76.599609 C 376.4121,76.599616 377.09179,76.416023 377.51367,76.048828 C 377.93554,75.673836 378.14647,75.080087 378.14648,74.267578 C 378.14647,73.509776 377.93554,72.939464 377.51367,72.556641 C 377.09179,72.166027 376.47069,71.970715 375.65039,71.970703 L 372.05273,71.970703 L 372.05273,76.599609"
+ id="text6019" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 428.08594,66.322266 L 431.67188,66.322266 L 431.67188,77.150391 C 431.67187,78.486333 431.93749,79.462895 432.46875,80.080078 C 432.99999,80.689456 433.84374,80.994143 435,80.994141 C 436.17187,80.994143 437.02343,80.689456 437.55469,80.080078 C 438.09374,79.470707 438.36327,78.494146 438.36328,77.150391 L 438.36328,66.322266 L 441.91406,66.322266 L 441.91406,77.537109 C 441.91405,79.654301 441.3203,81.279299 440.13281,82.412109 C 438.95311,83.544922 437.24999,84.111328 435.02344,84.111328 C 432.78124,84.111328 431.0625,83.548828 429.86719,82.423828 C 428.67969,81.291018 428.08594,79.662113 428.08594,77.537109 L 428.08594,66.322266 M 435.73828,64.166016 L 435.73828,61.283203 L 438.38672,61.283203 L 438.38672,64.166016 L 435.73828,64.166016 M 431.66016,64.166016 L 431.66016,61.283203 L 434.30859,61.283203 L 434.30859,64.166016 L 431.66016,64.166016"
+ id="text6023" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 488.08594,66.105469 L 491.67188,66.105469 L 491.67188,76.933594 C 491.67187,78.269536 491.93749,79.246098 492.46875,79.863281 C 492.99999,80.472659 493.84374,80.777346 495,80.777344 C 496.17187,80.777346 497.02343,80.472659 497.55469,79.863281 C 498.09374,79.25391 498.36327,78.277349 498.36328,76.933594 L 498.36328,66.105469 L 501.91406,66.105469 L 501.91406,77.320313 C 501.91405,79.437504 501.3203,81.062502 500.13281,82.195313 C 498.95311,83.328125 497.24999,83.894531 495.02344,83.894531 C 492.78124,83.894531 491.0625,83.332031 489.86719,82.207031 C 488.67969,81.074221 488.08594,79.445316 488.08594,77.320313 L 488.08594,66.105469 M 498.45703,60.304688 L 494.78906,64.640625 L 493.125,64.640625 L 495.43359,60.304688 L 498.45703,60.304688"
+ id="text6029" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 552.43945,83.630859 L 552.43945,66.369141 L 555.99023,66.369141 L 555.99023,83.630859 L 552.43945,83.630859 M 557.66602,60.521484 L 553.99805,64.857422 L 552.33398,64.857422 L 554.64258,60.521484 L 557.66602,60.521484"
+ id="text6033" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 610.18359,75 C 610.18359,76.898444 610.60546,78.375005 611.44922,79.429688 C 612.29296,80.476566 613.47265,81.000003 614.98828,81 C 616.51952,81.000003 617.71093,80.476566 618.5625,79.429688 C 619.41405,78.375005 619.83983,76.898444 619.83984,75 C 619.83983,73.101573 619.41405,71.628918 618.5625,70.582031 C 617.71093,69.527358 616.51952,69.000015 614.98828,69 C 613.47265,69.000015 612.29296,69.523452 611.44922,70.570313 C 610.60546,71.617199 610.18359,73.093761 610.18359,75 M 606.5625,75 C 606.5625,72.210949 607.32031,70.000014 608.83594,68.367188 C 610.35937,66.726579 612.41015,65.906268 614.98828,65.90625 C 617.56639,65.906268 619.61717,66.726579 621.14063,68.367188 C 622.67186,70.007826 623.43748,72.218761 623.4375,75 C 623.43748,77.781256 622.67186,79.992191 621.14063,81.632813 C 619.61717,83.273438 617.56639,84.09375 614.98828,84.09375 C 612.41015,84.09375 610.35937,83.273438 608.83594,81.632813 C 607.32031,79.992191 606.5625,77.781256 606.5625,75 M 618.44531,60.503906 L 614.77734,64.839844 L 613.11328,64.839844 L 615.42188,60.503906 L 618.44531,60.503906"
+ id="text6037" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 670.18359,75.017578 C 670.18359,76.916022 670.60546,78.392583 671.44922,79.447266 C 672.29296,80.494144 673.47265,81.017581 674.98828,81.017578 C 676.51952,81.017581 677.71093,80.494144 678.5625,79.447266 C 679.41405,78.392583 679.83983,76.916022 679.83984,75.017578 C 679.83983,73.119151 679.41405,71.646496 678.5625,70.599609 C 677.71093,69.544936 676.51952,69.017593 674.98828,69.017578 C 673.47265,69.017593 672.29296,69.54103 671.44922,70.587891 C 670.60546,71.634778 670.18359,73.111339 670.18359,75.017578 M 666.5625,75.017578 C 666.5625,72.228527 667.32031,70.017592 668.83594,68.384766 C 670.35937,66.744158 672.41015,65.923846 674.98828,65.923828 C 677.56639,65.923846 679.61717,66.744158 681.14063,68.384766 C 682.67186,70.025404 683.43748,72.23634 683.4375,75.017578 C 683.43748,77.798834 682.67186,80.009769 681.14063,81.650391 C 679.61717,83.291016 677.56639,84.111328 674.98828,84.111328 C 672.41015,84.111328 670.35937,83.291016 668.83594,81.650391 C 667.32031,80.009769 666.5625,77.798834 666.5625,75.017578 M 675.72656,64.166016 L 675.72656,61.283203 L 678.375,61.283203 L 678.375,64.166016 L 675.72656,64.166016 M 671.64844,64.166016 L 671.64844,61.283203 L 674.29688,61.283203 L 674.29688,64.166016 L 671.64844,64.166016"
+ id="text6041" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 735.5332,106.35352 L 735.5332,103.35352 L 739.44727,99.966797 L 739.44727,102.75586 L 737.04492,104.8418 L 739.44727,106.92773 L 739.44727,109.74023 L 735.5332,106.35352 M 730.4707,106.35352 L 730.4707,103.35352 L 734.4082,99.966797 L 734.4082,102.75586 L 732.00586,104.8418 L 734.4082,106.92773 L 734.4082,109.74023 L 730.4707,106.35352"
+ id="text6045" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 799.44727,103.3418 L 799.44727,106.3418 L 795.5332,109.72852 L 795.5332,106.93945 L 797.93555,104.83008 L 795.5332,102.76758 L 795.5332,99.955078 L 799.44727,103.3418 M 794.4082,103.3418 L 794.4082,106.3418 L 790.4707,109.72852 L 790.4707,106.93945 L 792.86133,104.83008 L 790.4707,102.76758 L 790.4707,99.955078 L 794.4082,103.3418"
+ id="text6051" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 883.81641,76.535881 L 886.23047,76.535881 L 886.23047,85.418694 L 883.81641,85.418694 L 883.81641,76.535881 M 883.81641,64.535881 L 886.23047,64.535881 L 886.23047,73.418694 L 883.81641,73.418694 L 883.81641,64.535881 M 877.98047,101.19213 L 892.01953,101.19213 L 892.01953,107.07494 L 889.6875,107.07494 L 889.6875,103.48901 L 877.98047,103.48901 L 877.98047,101.19213"
+ id="text6057" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 149.9707,129.82617 L 147.58008,137.17383 L 152.37305,137.17383 L 149.9707,129.82617 M 147.9082,126.36914 L 152.00977,126.36914 L 158.23242,143.63086 L 154.50586,143.63086 L 153.33398,140.08008 L 146.64258,140.08008 L 145.50586,143.63086 L 141.76758,143.63086 L 147.9082,126.36914 M 153.42773,120.52148 L 149.75977,124.85742 L 148.0957,124.85742 L 150.4043,120.52148 L 153.42773,120.52148"
+ id="text6065" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 211.40625,137.91797 C 211.71874,137.73829 211.95312,137.53907 212.10938,137.32031 C 212.26562,137.10157 212.34374,136.86719 212.34375,136.61719 C 212.34374,136.31251 212.2539,136.0547 212.07422,135.84375 C 211.89452,135.62501 211.52343,135.3711 210.96094,135.08203 L 207.85547,133.47656 C 207.55078,133.65626 207.3164,133.85938 207.15234,134.08594 C 206.99609,134.31251 206.91797,134.5547 206.91797,134.8125 C 206.91797,135.1172 207.03125,135.38673 207.25781,135.62109 C 207.49218,135.84766 208.0039,136.16407 208.79297,136.57031 L 211.40625,137.91797 M 205.03125,141.75 L 207.92578,141.75 C 207.98828,142.35938 208.16796,142.8125 208.46484,143.10938 C 208.76953,143.40625 209.19921,143.55469 209.75391,143.55469 C 210.26952,143.55469 210.67968,143.43359 210.98438,143.19141 C 211.28905,142.94141 211.4414,142.60547 211.44141,142.18359 C 211.4414,141.83985 211.32812,141.54297 211.10156,141.29297 C 210.87499,141.03516 210.42577,140.74219 209.75391,140.41406 L 206.95313,138.99609 C 206.0625,138.55079 205.39844,138.03907 204.96094,137.46094 C 204.52344,136.88282 204.30469,136.23438 204.30469,135.51563 C 204.30469,134.82032 204.47266,134.21095 204.80859,133.6875 C 205.15234,133.15626 205.65625,132.71485 206.32031,132.36328 C 205.92969,132.01173 205.64062,131.62892 205.45313,131.21484 C 205.26562,130.79298 205.17187,130.32814 205.17188,129.82031 C 205.17187,128.64845 205.57422,127.70705 206.37891,126.99609 C 207.18359,126.27736 208.2539,125.91799 209.58984,125.91797 C 210.96484,125.91799 212.04296,126.26955 212.82422,126.97266 C 213.60546,127.6758 214.0078,128.64845 214.03125,129.89063 L 211.26563,129.89063 C 211.24999,129.3672 211.09374,128.96876 210.79688,128.69531 C 210.50781,128.42189 210.08984,128.28517 209.54297,128.28516 C 209.05859,128.28517 208.68359,128.39064 208.41797,128.60156 C 208.16015,128.81251 208.03125,129.10939 208.03125,129.49219 C 208.03125,129.8047 208.18359,130.09767 208.48828,130.37109 C 208.80078,130.63673 209.35937,130.95704 210.16406,131.33203 L 212.13281,132.24609 C 213.1328,132.72267 213.87108,133.25392 214.34766,133.83984 C 214.82421,134.41798 215.06249,135.08595 215.0625,135.84375 C 215.06249,136.55469 214.8828,137.17579 214.52344,137.70703 C 214.17186,138.23047 213.66405,138.63672 213,138.92578 C 213.45312,139.32422 213.79296,139.76563 214.01953,140.25 C 214.24608,140.73438 214.35936,141.26563 214.35938,141.84375 C 214.35936,143.04688 213.92968,144.03906 213.07031,144.82031 C 212.21093,145.60937 211.10546,146.0039 209.75391,146.00391 C 208.26953,146.0039 207.1289,145.64453 206.33203,144.92578 C 205.53515,144.20703 205.10156,143.14844 205.03125,141.75 M 203.97656,173.625 L 203.97656,160.59375 C 203.97656,159.29689 204.48047,158.25002 205.48828,157.45313 C 206.49609,156.64845 207.83984,156.24611 209.51953,156.24609 C 211.23046,156.24611 212.5703,156.63674 213.53906,157.41797 C 214.5078,158.19923 214.99217,159.27345 214.99219,160.64063 C 214.99217,161.48439 214.84764,162.17579 214.55859,162.71484 C 214.27733,163.25392 213.83983,163.66798 213.24609,163.95703 C 214.16796,164.32423 214.85936,164.86329 215.32031,165.57422 C 215.78905,166.28516 216.02342,167.16016 216.02344,168.19922 C 216.02342,169.94922 215.51952,171.36328 214.51172,172.44141 C 213.5039,173.51953 212.18358,174.05859 210.55078,174.05859 C 210.32421,174.05859 210.0703,174.04687 209.78906,174.02344 C 209.51562,174 209.21874,173.96484 208.89844,173.91797 L 208.89844,171.17578 C 208.99999,171.19141 209.10156,171.20313 209.20313,171.21094 C 209.31249,171.21875 209.47265,171.22266 209.68359,171.22266 C 210.60546,171.22266 211.3164,170.96875 211.81641,170.46094 C 212.3164,169.94532 212.5664,169.21485 212.56641,168.26953 C 212.5664,167.35548 212.29296,166.66016 211.74609,166.18359 C 211.20702,165.70704 210.41796,165.46876 209.37891,165.46875 L 209.0625,165.46875 L 209.07422,163.06641 C 209.12109,163.07423 209.17187,163.08204 209.22656,163.08984 C 209.28124,163.08985 209.36327,163.08985 209.47266,163.08984 C 210.16796,163.08985 210.6953,162.91798 211.05469,162.57422 C 211.42187,162.22267 211.60546,161.71486 211.60547,161.05078 C 211.60546,160.38673 211.41405,159.88283 211.03125,159.53906 C 210.65624,159.18751 210.10546,159.01173 209.37891,159.01172 C 208.70703,159.01173 208.19531,159.20705 207.84375,159.59766 C 207.49218,159.98048 207.3164,160.54298 207.31641,161.28516 L 207.31641,173.625 L 203.97656,173.625"
+ id="text6073" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 267.09961,140.51367 L 269.94727,140.51367 C 271.60351,140.51367 272.80272,140.08008 273.54492,139.21289 C 274.2871,138.34571 274.65819,136.94727 274.6582,135.01758 C 274.65819,133.09571 274.31053,131.68165 273.61523,130.77539 C 272.92772,129.86134 271.8496,129.40431 270.38086,129.4043 L 267.09961,129.4043 L 267.09961,133.23633 L 270.88477,133.23633 L 270.88477,135.47461 L 267.09961,135.47461 L 267.09961,140.51367 M 263.61914,143.63086 L 263.61914,135.47461 L 261.74414,135.47461 L 261.74414,133.23633 L 263.61914,133.23633 L 263.61914,126.36914 L 270.4043,126.36914 C 273.04491,126.36916 275.01366,127.084 276.31055,128.51367 C 277.60741,129.93556 278.25584,132.10353 278.25586,135.01758 C 278.25584,136.60352 278.01756,137.99805 277.54102,139.20117 C 277.07225,140.4043 276.38084,141.36914 275.4668,142.0957 C 274.77928,142.64258 273.99413,143.03711 273.11133,143.2793 C 272.23632,143.51367 271.00585,143.63086 269.41992,143.63086 L 263.61914,143.63086"
+ id="text6077" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 626.72461,139.55273 C 627.17773,140.04493 627.68945,140.41211 628.25977,140.6543 C 628.83007,140.89649 629.47069,141.01758 630.18164,141.01758 C 631.71288,141.01758 632.90428,140.49414 633.75586,139.44727 C 634.60741,138.39258 635.03319,136.91602 635.0332,135.01758 C 635.03319,134.24415 634.96288,133.54493 634.82227,132.91992 C 634.68163,132.28712 634.4785,131.73634 634.21289,131.26758 L 626.72461,139.55273 M 625.98633,138.36914 L 633.39258,130.21289 C 632.9785,129.81447 632.50585,129.51759 631.97461,129.32227 C 631.44335,129.11916 630.84569,129.01759 630.18164,129.01758 C 628.66601,129.01759 627.48632,129.54103 626.64258,130.58789 C 625.79882,131.63478 625.37695,133.11134 625.37695,135.01758 C 625.37695,135.72071 625.42382,136.34571 625.51758,136.89258 C 625.61914,137.43946 625.77539,137.93165 625.98633,138.36914 M 621.36914,143.36133 L 623.51367,140.9707 C 622.91992,140.16602 622.47851,139.27149 622.18945,138.28711 C 621.90039,137.29493 621.75586,136.20509 621.75586,135.01758 C 621.75586,132.22853 622.51367,130.01759 624.0293,128.38477 C 625.55273,126.74416 627.60351,125.92385 630.18164,125.92383 C 631.28319,125.92385 632.27147,126.06447 633.14648,126.3457 C 634.02928,126.62697 634.84178,127.06056 635.58398,127.64648 L 637.30664,125.70117 L 638.45508,126.73242 L 636.63867,128.70117 C 637.30272,129.5215 637.79881,130.45509 638.12695,131.50195 C 638.46287,132.54884 638.63084,133.72071 638.63086,135.01758 C 638.63084,137.79883 637.86912,140.00977 636.3457,141.65039 C 634.82225,143.29102 632.76757,144.11133 630.18164,144.11133 C 629.01757,144.11133 627.96679,143.94727 627.0293,143.61914 C 626.0996,143.29102 625.26367,142.79102 624.52148,142.11914 L 622.50586,144.4043 L 621.36914,143.36133"
+ id="text6081" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 690,127.98633 C 689.42968,127.98634 688.9414,128.18556 688.53516,128.58398 C 688.13672,128.98244 687.9375,129.4629 687.9375,130.02539 C 687.9375,130.60353 688.13672,131.09181 688.53516,131.49023 C 688.93359,131.88868 689.42187,132.0879 690,132.08789 C 690.5625,132.0879 691.04296,131.88478 691.44141,131.47852 C 691.83984,131.07228 692.03906,130.5879 692.03906,130.02539 C 692.03906,129.4629 691.83984,128.98244 691.44141,128.58398 C 691.04296,128.18556 690.5625,127.98634 690,127.98633 M 690,126.47461 C 690.98437,126.47463 691.82031,126.82619 692.50781,127.5293 C 693.20312,128.22462 693.55077,129.06447 693.55078,130.04883 C 693.55077,131.0254 693.20312,131.86134 692.50781,132.55664 C 691.81249,133.25196 690.96875,133.59962 689.97656,133.59961 C 688.99218,133.59962 688.15625,133.25587 687.46875,132.56836 C 686.78906,131.88087 686.44922,131.04103 686.44922,130.04883 C 686.44922,129.05666 686.79297,128.21291 687.48047,127.51758 C 688.17578,126.82228 689.01562,126.47463 690,126.47461 M 695.51953,156.29883 L 695.51953,157.59961 L 694.19531,157.59961 L 694.19531,173.63086 L 692.42578,173.63086 L 692.42578,157.59961 L 690.57422,157.59961 L 690.57422,173.63086 L 688.78125,173.63086 L 688.78125,164.44336 C 687.47656,164.39649 686.43359,164.00196 685.65234,163.25977 C 684.87109,162.51759 684.48047,161.56056 684.48047,160.38867 C 684.48047,159.15431 684.89844,158.16603 685.73438,157.42383 C 686.57031,156.67385 687.67968,156.29885 689.0625,156.29883 L 695.51953,156.29883"
+ id="text6085" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 373.13672,6.5214844 L 376.08984,6.5214844 L 381.72656,13.095703 L 378.97266,13.095703 L 374.625,8.7480469 L 370.25391,13.095703 L 367.5,13.095703 L 373.13672,6.5214844"
+ id="text6091" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 750.67969,128.67773 L 750.67969,125.79492 L 753.32813,125.79492 L 753.32813,128.67773 L 750.67969,128.67773 M 746.60156,128.67773 L 746.60156,125.79492 L 749.25,125.79492 L 749.25,128.67773 L 746.60156,128.67773 M 753.39844,155.0332 L 749.73047,159.36914 L 748.06641,159.36914 L 750.375,155.0332 L 753.39844,155.0332"
+ id="text6099" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 171.07031,197.29102 L 175.92188,197.29102 L 175.92188,189.29883 L 173.97656,189.29883 L 171.07031,197.29102 M 165,203.63086 L 171.80859,186.36914 L 187.81641,186.36914 L 187.81641,189.36914 L 179.34375,189.36914 L 179.34375,193.04883 L 187.05469,193.04883 L 187.05469,196.00195 L 179.34375,196.00195 L 179.34375,200.44336 L 188.25,200.44336 L 188.25,203.63086 L 175.92188,203.63086 L 175.92188,200.08008 L 170.0625,200.08008 L 168.76172,203.63086 L 165,203.63086"
+ id="text6105" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 300.46875,193.23633 C 300.32031,193.22071 300.20312,193.20899 300.11719,193.20117 C 300.03906,193.19337 299.96484,193.18946 299.89453,193.18945 C 299.05859,193.18946 298.42578,193.53321 297.99609,194.2207 C 297.5664,194.90821 297.35156,195.92384 297.35156,197.26758 C 297.35156,198.04102 297.4375,198.70899 297.60938,199.27148 C 297.78906,199.83399 298.04687,200.28711 298.38281,200.63086 L 300.46875,193.23633 M 296.68359,206.49023 L 297.48047,203.63086 C 296.30859,203.13867 295.42187,202.35352 294.82031,201.27539 C 294.21875,200.19727 293.91797,198.85352 293.91797,197.24414 C 293.91797,195.11134 294.45312,193.43946 295.52344,192.22852 C 296.60156,191.01759 298.07421,190.41212 299.94141,190.41211 C 300.15234,190.41212 300.35937,190.41994 300.5625,190.43555 C 300.76562,190.45119 300.96874,190.47462 301.17188,190.50586 L 301.69922,188.56055 L 302.97656,188.56055 L 302.34375,190.78711 C 303.32811,191.09181 304.09765,191.63478 304.65234,192.41602 C 305.20702,193.18946 305.52733,194.17774 305.61328,195.38086 L 302.32031,195.36914 C 302.28124,194.98634 302.1914,194.65821 302.05078,194.38477 C 301.91796,194.10353 301.72265,193.85743 301.46484,193.64648 L 299.36719,201.13477 C 299.38281,201.13477 299.40624,201.13867 299.4375,201.14648 C 299.67187,201.16992 299.85156,201.18164 299.97656,201.18164 C 300.66406,201.18164 301.19921,200.99024 301.58203,200.60742 C 301.97265,200.22461 302.23437,199.62305 302.36719,198.80273 L 305.66016,198.80273 C 305.54296,200.41993 304.96874,201.70117 303.9375,202.64648 C 302.91405,203.5918 301.59374,204.06445 299.97656,204.06445 C 299.76562,204.06445 299.55077,204.05664 299.33203,204.04102 C 299.11328,204.02539 298.88671,204.00195 298.65234,203.9707 L 297.96094,206.49023 L 296.68359,206.49023 M 304.19531,223.0957 L 301.99219,223.0957 C 301.92968,222.54884 301.72264,222.12696 301.37109,221.83008 C 301.01952,221.5254 300.55468,221.37306 299.97656,221.37305 C 299.26562,221.37306 298.70702,221.69337 298.30078,222.33398 C 297.89452,222.96681 297.6914,223.85353 297.69141,224.99414 C 297.6914,226.14259 297.89452,227.01758 298.30078,227.61914 C 298.70702,228.22071 299.29687,228.52149 300.07031,228.52148 C 300.64061,228.52149 301.09765,228.35743 301.44141,228.0293 C 301.78514,227.70118 301.99218,227.23633 302.0625,226.63477 L 304.32422,226.62305 C 304.2617,227.70899 303.83592,228.58008 303.04688,229.23633 C 302.2578,229.89258 301.24218,230.22071 300,230.2207 C 298.54687,230.22071 297.39843,229.75977 296.55469,228.83789 C 295.71874,227.91602 295.30078,226.65821 295.30078,225.06445 C 295.30078,223.45509 295.72656,222.17384 296.57813,221.2207 C 297.43749,220.25978 298.58593,219.77931 300.02344,219.7793 C 301.21093,219.77931 302.18749,220.084 302.95313,220.69336 C 303.72655,221.30275 304.14061,222.10353 304.19531,223.0957 M 300,217.7168 C 298.99999,217.71681 298.06249,217.8965 297.1875,218.25586 C 296.32031,218.61525 295.54687,219.13869 294.86719,219.82617 C 294.17187,220.52931 293.64062,221.32618 293.27344,222.2168 C 292.90625,223.09962 292.72265,224.0254 292.72266,224.99414 C 292.72265,225.97071 292.90625,226.89649 293.27344,227.77148 C 293.64062,228.64649 294.17187,229.43164 294.86719,230.12695 C 295.55468,230.81446 296.33984,231.3418 297.22266,231.70898 C 298.10546,232.07617 299.03124,232.25977 300,232.25977 C 300.96874,232.25977 301.89452,232.07617 302.77734,231.70898 C 303.66796,231.3418 304.46874,230.80664 305.17969,230.10352 C 305.86717,229.43164 306.3867,228.66211 306.73828,227.79492 C 307.09764,226.92774 307.27733,225.99415 307.27734,224.99414 C 307.27733,224.00978 307.09373,223.08009 306.72656,222.20508 C 306.36717,221.32228 305.84373,220.53712 305.15625,219.84961 C 304.46092,219.15431 303.67577,218.62697 302.80078,218.26758 C 301.92577,217.90041 300.99218,217.71681 300,217.7168 M 299.97656,216.27539 C 301.16405,216.27541 302.28514,216.49416 303.33984,216.93164 C 304.40233,217.36916 305.35155,218.00587 306.1875,218.8418 C 307.0078,219.66212 307.63279,220.60353 308.0625,221.66602 C 308.49217,222.72071 308.70701,223.8379 308.70703,225.01758 C 308.70701,226.20509 308.49217,227.31446 308.0625,228.3457 C 307.64061,229.37696 307.01561,230.29883 306.1875,231.11133 C 305.3203,231.95508 304.35155,232.60352 303.28125,233.05664 C 302.21093,233.50195 301.10936,233.72461 299.97656,233.72461 C 298.82812,233.72461 297.73046,233.50586 296.68359,233.06836 C 295.64453,232.62305 294.70312,231.97852 293.85938,231.13477 C 293.02343,230.30664 292.38672,229.36914 291.94922,228.32227 C 291.51172,227.26758 291.29297,226.16602 291.29297,225.01758 C 291.29297,223.85353 291.51172,222.74415 291.94922,221.68945 C 292.38672,220.62697 293.02343,219.66994 293.85938,218.81836 C 294.67968,217.99025 295.60937,217.36134 296.64844,216.93164 C 297.68749,216.49416 298.79687,216.27541 299.97656,216.27539"
+ id="text6109" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 472.88672,203.63086 L 472.88672,186.36914 L 476.60156,186.36914 L 483.60938,198.22852 L 483.60938,186.36914 L 487.11328,186.36914 L 487.11328,203.63086 L 483.44531,203.63086 L 476.39063,191.77148 L 476.39063,203.63086 L 472.88672,203.63086 M 483.82031,181.0957 C 483.61717,182.07229 483.31639,182.79494 482.91797,183.26367 C 482.51952,183.72463 482.0078,183.9551 481.38281,183.95508 C 481.21874,183.9551 481.0664,183.94729 480.92578,183.93164 C 480.78515,183.90822 480.64452,183.87307 480.50391,183.82617 L 479.48438,183.52148 C 479.33593,183.48244 479.19921,183.4551 479.07422,183.43945 C 478.94921,183.41604 478.82812,183.40432 478.71094,183.4043 C 478.44531,183.40432 478.23046,183.47463 478.06641,183.61523 C 477.90234,183.75588 477.77343,183.98635 477.67969,184.30664 L 476.39063,184.30664 C 476.57812,183.36135 476.86718,182.66604 477.25781,182.2207 C 477.64843,181.77541 478.15624,181.55276 478.78125,181.55273 C 478.9453,181.55276 479.10937,181.56838 479.27344,181.59961 C 479.43749,181.62307 479.60937,181.66213 479.78906,181.7168 L 480.87891,182.00977 C 480.97265,182.04104 481.0703,182.06447 481.17188,182.08008 C 481.28124,182.09572 481.39843,182.10354 481.52344,182.10352 C 481.77343,182.10354 481.98046,182.02151 482.14453,181.85742 C 482.3164,181.68557 482.4453,181.43166 482.53125,181.0957 L 483.82031,181.0957"
+ id="text6113" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 535.83398,220.83432 L 539.2207,220.83432 L 538.33008,225.93198 C 538.21289,226.55698 538.12304,227.15073 538.06055,227.71323 C 537.99804,228.26792 537.96679,228.72104 537.9668,229.0726 C 537.96679,229.79917 538.13085,230.34214 538.45898,230.70151 C 538.7871,231.05307 539.2871,231.22885 539.95898,231.22885 C 540.74023,231.22885 541.3457,230.90854 541.77539,230.26791 C 542.21288,229.62729 542.57616,228.49058 542.86523,226.85776 L 543.91992,220.83432 L 547.30664,220.83432 L 545.04492,233.6312 L 541.9043,233.6312 L 542.11523,232.2601 C 541.7871,232.86948 541.41991,233.31479 541.01367,233.59604 C 540.61523,233.87729 540.14257,234.01791 539.5957,234.01791 C 539.07226,234.01791 538.60742,233.90073 538.20117,233.66635 C 537.79492,233.43979 537.42773,233.08432 537.09961,232.59995 L 536.04492,238.76401 L 532.69336,238.76401 L 535.83398,220.83432"
+ id="text6117" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 607.875,197.70117 C 607.74217,199.66211 606.98436,201.22071 605.60156,202.37695 C 604.22655,203.5332 602.42968,204.11133 600.21094,204.11133 C 597.65624,204.11133 595.66796,203.31445 594.24609,201.7207 C 592.83203,200.12696 592.125,197.89258 592.125,195.01758 C 592.125,192.08009 592.84765,189.83009 594.29297,188.26758 C 595.73828,186.7051 597.8164,185.92385 600.52734,185.92383 C 602.73046,185.92385 604.46874,186.46291 605.74219,187.54102 C 607.02342,188.61134 607.72655,190.12697 607.85156,192.08789 L 604.34766,192.08789 C 604.19921,191.11134 603.80077,190.36915 603.15234,189.86133 C 602.50389,189.34572 601.6289,189.08791 600.52734,189.08789 C 598.96484,189.08791 597.77734,189.59181 596.96484,190.59961 C 596.15234,191.60743 595.74609,193.08009 595.74609,195.01758 C 595.74609,196.89258 596.14843,198.3418 596.95313,199.36523 C 597.76562,200.38868 598.91796,200.90039 600.41016,200.90039 C 601.48827,200.90039 602.37108,200.62696 603.05859,200.08008 C 603.74608,199.52539 604.19139,198.73243 604.39453,197.70117 L 607.875,197.70117 M 597.62109,208.76367 L 597.62109,207.25195 C 598.24609,207.41601 598.81249,207.54101 599.32031,207.62695 C 599.82812,207.71289 600.26171,207.75586 600.62109,207.75586 C 601.02733,207.75586 601.32421,207.68554 601.51172,207.54492 C 601.69921,207.41211 601.79296,207.19726 601.79297,206.90039 C 601.79296,206.60351 601.68358,206.39258 601.46484,206.26758 C 601.24608,206.14258 600.8828,206.08008 600.375,206.08008 C 600.1953,206.08008 600.05858,206.08008 599.96484,206.08008 C 599.87108,206.08789 599.78515,206.0957 599.70703,206.10352 L 599.70703,203.63086 L 600.90234,203.63086 L 600.90234,204.68555 L 601.07813,204.68555 C 601.99218,204.68555 602.67968,204.87305 603.14063,205.24805 C 603.60155,205.62304 603.83202,206.18164 603.83203,206.92383 C 603.83202,207.70507 603.57421,208.29101 603.05859,208.68164 C 602.54296,209.07226 601.76952,209.26757 600.73828,209.26758 C 600.33983,209.26757 599.87108,209.2246 599.33203,209.13867 C 598.80077,209.05273 598.23046,208.92773 597.62109,208.76367"
+ id="text6121" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 721.7168,216.36914 L 721.7168,219.82617 L 718.23633,219.82617 L 718.23633,216.36914 L 721.7168,216.36914 M 721.55273,221.39648 C 721.55273,221.47462 721.55663,221.5879 721.56445,221.73633 C 721.57226,221.88478 721.57616,221.99415 721.57617,222.06445 C 721.57616,222.74415 721.50194,223.31446 721.35352,223.77539 C 721.20507,224.23634 720.96679,224.66602 720.63867,225.06445 C 720.38085,225.36134 720.00195,225.70118 719.50195,226.08398 C 719.00976,226.4668 718.69335,226.74415 718.55273,226.91602 C 718.24804,227.25977 718.0332,227.57618 717.9082,227.86523 C 717.79101,228.1543 717.73242,228.4668 717.73242,228.80273 C 717.73242,229.55274 717.93554,230.13477 718.3418,230.54883 C 718.74804,230.95508 719.32226,231.15821 720.06445,231.1582 C 720.79882,231.15821 721.38085,230.91211 721.81055,230.41992 C 722.24023,229.91993 722.4746,229.22071 722.51367,228.32227 L 725.8418,228.32227 L 725.8418,228.68555 C 725.84178,230.3418 725.31835,231.66211 724.27148,232.64648 C 723.23241,233.62305 721.83007,234.11133 720.06445,234.11133 C 718.25976,234.11133 716.82226,233.64648 715.75195,232.7168 C 714.68945,231.7793 714.1582,230.53321 714.1582,228.97852 C 714.1582,228.40821 714.2168,227.90821 714.33398,227.47852 C 714.45117,227.04883 714.63086,226.65821 714.87305,226.30664 C 715.18554,225.86915 715.67773,225.39259 716.34961,224.87695 C 717.02148,224.36134 717.43554,224.03321 717.5918,223.89258 C 717.88867,223.60353 718.0996,223.29884 718.22461,222.97852 C 718.35742,222.6504 718.42382,222.25587 718.42383,221.79492 C 718.42382,221.75587 718.41992,221.69337 718.41211,221.60742 C 718.40429,221.51368 718.40039,221.44337 718.40039,221.39648 L 721.55273,221.39648"
+ id="text6131" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Matrix Unicode"
+ d=""
+ id="text6955" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="137.05411"
+ y="23.149496"
+ id="text4346"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4348"
+ x="137.05411"
+ y="23.149496"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"> Ë </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="186.05411"
+ y="27.3995"
+ id="text4346-3"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4348-1"
+ x="186.05411"
+ y="27.3995"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"> ¯ </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="482.80411"
+ y="24.6495"
+ id="text4346-1"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4348-7"
+ x="482.80411"
+ y="24.6495"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"> Ë› </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="558.30408"
+ y="24.399498"
+ id="text4346-6"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4348-0"
+ x="558.30408"
+ y="24.399498"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"> ˘ </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="626.55408"
+ y="11.1495"
+ id="text4346-0"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4348-09"
+ x="626.55408"
+ y="11.1495"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12.5px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start"
+ id="tspan4483"> o</tspan></tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="667.80408"
+ y="28.899498"
+ id="text4346-31"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4348-15"
+ x="667.80408"
+ y="28.899498"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"> . </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="619.55408"
+ y="203.14951"
+ id="text4346-38"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4348-8"
+ x="619.55408"
+ y="203.14951"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"> ˇ </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="620.30408"
+ y="232.14951"
+ id="text4346-9"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan4348-6"
+ x="620.30408"
+ y="232.14951"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:23.75px;line-height:125%;font-family:'Arial Nova';-inkscape-font-specification:'Arial Nova, Bold';text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#ff0000;fill-opacity:1"> Ë™ </tspan></text>
+ <path
+ inkscape:connector-curvature="0"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:24px;line-height:125%;font-family:'Swis721 BT';text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 402.88672,6.52148 2.95312,0 5.63672,6.574219 -2.7539,0 -4.34766,-4.3476565 -4.37109,4.3476565 -2.75391,0 5.63672,-6.574219"
+ id="text6091-3" />
+ </g>
+</svg>
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.png b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.png
new file mode 100644
index 000000000..875eb3652
--- /dev/null
+++ b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.png
Binary files differ
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.svg b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.svg
new file mode 100644
index 000000000..1ca6a9c87
--- /dev/null
+++ b/keyboards/s60-x/keymaps/ansi_qwertz/docs/KB_US-International.svg
@@ -0,0 +1,935 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="900"
+ height="300"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ version="1.0"
+ sodipodi:docbase="C:\Documents and Settings\David Nelson\Archives\Svg"
+ sodipodi:docname="KB_US-International.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lend"
+ style="overflow:visible;">
+ <path
+ id="path5387"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.8) rotate(180)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lstart"
+ style="overflow:visible">
+ <path
+ id="path5390"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+ transform="scale(0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="Tail"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Tail"
+ style="overflow:visible">
+ <g
+ id="g5342"
+ transform="scale(-1.2)">
+ <path
+ id="path5344"
+ d="M -3.8048674,-3.9585227 L 0.54352094,-0.00068114835"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+ <path
+ id="path5346"
+ d="M -1.2866832,-3.9585227 L 3.0617053,-0.00068114835"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+ <path
+ id="path5348"
+ d="M 1.3053582,-3.9585227 L 5.6537466,-0.00068114835"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+ <path
+ id="path5350"
+ d="M -3.8048674,4.1775838 L 0.54352094,0.21974226"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+ <path
+ id="path5352"
+ d="M -1.2866832,4.1775838 L 3.0617053,0.21974226"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+ <path
+ id="path5354"
+ d="M 1.3053582,4.1775838 L 5.6537466,0.21974226"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.8;marker-start:none;marker-end:none;stroke-linecap:round" />
+ </g>
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Mend"
+ style="overflow:visible;">
+ <path
+ id="path5363"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.6) rotate(180) translate(-5,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Lend"
+ style="overflow:visible;">
+ <path
+ id="path5369"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(1.1) rotate(180) translate(-5,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Send"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Send"
+ style="overflow:visible;">
+ <path
+ id="path5375"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.2) rotate(180)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Send"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Send"
+ style="overflow:visible;">
+ <path
+ id="path5357"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(0.3) rotate(180) translate(-5,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Mend"
+ style="overflow:visible;">
+ <path
+ id="path5381"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.4) rotate(180)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow2Lstart"
+ style="overflow:visible">
+ <path
+ id="path5372"
+ style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+ transform="scale(1.1) translate(-5,0)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.74472808"
+ inkscape:cx="450"
+ inkscape:cy="150"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:grid-points="true"
+ showgrid="true"
+ gridtolerance="15px"
+ gridcolor="#0000ff"
+ gridopacity="0.12156863"
+ gridempcolor="#0000ff"
+ gridempopacity="0.25098039"
+ gridspacingx="7.5px"
+ gridspacingy="7.5px"
+ gridempspacing="4"
+ showborder="false"
+ inkscape:window-width="756"
+ inkscape:window-height="569"
+ inkscape:window-x="28"
+ inkscape:window-y="218"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:grid-bbox="true" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0,0 L 60,0 L 60,60 L 0,60 L 0,0 z "
+ id="rect2186" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 60,0 L 120,0 L 120,60 L 60,60 L 60,0 z "
+ id="rect2218" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 120,0 L 180,0 L 180,60 L 120,60 L 120,0 z "
+ id="rect2222" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 180,0 L 240,0 L 240,60 L 180,60 L 180,0 z "
+ id="rect2228" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 240,0 L 300,0 L 300,60 L 240,60 L 240,0 z "
+ id="rect2230" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 300,0 L 360,0 L 360,60 L 300,60 L 300,0 z "
+ id="rect2232" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 360,0 L 420,0 L 420,60 L 360,60 L 360,0 z "
+ id="rect2234" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 420,0 L 480,0 L 480,60 L 420,60 L 420,0 z "
+ id="rect2236" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 480,0 L 540,0 L 540,60 L 480,60 L 480,0 z "
+ id="rect2238" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 540,0 L 600,0 L 600,60 L 540,60 L 540,0 z "
+ id="rect2240" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 600,0 L 660,0 L 660,60 L 600,60 L 600,0 z "
+ id="rect2242" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 660,0 L 720,0 L 720,60 L 660,60 L 660,0 z "
+ id="rect2244" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 720,0 L 780,0 L 780,60 L 720,60 L 720,0 z "
+ id="rect2246" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 780,0 L 900,0 L 900,60 L 780,60 L 780,0 z "
+ id="rect2248" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0,60 L 90,60 L 90,120 L 0,120 L 0,60 z "
+ id="rect2250" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 90,60 L 150,60 L 150,120 L 90,120 L 90,60 z "
+ id="rect2252" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 150,60 L 210,60 L 210,120 L 150,120 L 150,60 z "
+ id="rect2254" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 210,60 L 270,60 L 270,120 L 210,120 L 210,60 z "
+ id="rect2256" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 270,60 L 330,60 L 330,120 L 270,120 L 270,60 z "
+ id="rect2258" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 330,60 L 390,60 L 390,120 L 330,120 L 330,60 z "
+ id="rect2262" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 390,60 L 450,60 L 450,120 L 390,120 L 390,60 z "
+ id="rect2264" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 450,60 L 510,60 L 510,120 L 450,120 L 450,60 z "
+ id="rect2266" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 510,60 L 570,60 L 570,120 L 510,120 L 510,60 z "
+ id="rect2270" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 570,60 L 630,60 L 630,120 L 570,120 L 570,60 z "
+ id="rect2272" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 630,60 L 690,60 L 690,120 L 630,120 L 630,60 z "
+ id="rect2274" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 690,60 L 750,60 L 750,120 L 690,120 L 690,60 z "
+ id="rect2278" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 750,60 L 810,60 L 810,120 L 750,120 L 750,60 z "
+ id="rect2280" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 810,60 L 900,60 L 900,120 L 810,120 L 810,60 z "
+ id="rect2284" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0,120 L 105,120 L 105,180 L 0,180 L 0,120 z "
+ id="rect2286" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 105,120 L 165,120 L 165,180 L 105,180 L 105,120 z "
+ id="rect2292" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 165,120 L 225,120 L 225,180 L 165,180 L 165,120 z "
+ id="rect2296" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 225,120 L 285,120 L 285,180 L 225,180 L 225,120 z "
+ id="rect2298" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 285,120 L 345,120 L 345,180 L 285,180 L 285,120 z "
+ id="rect2300" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 345,120 L 405,120 L 405,180 L 345,180 L 345,120 z "
+ id="rect2302" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 405,120 L 465,120 L 465,180 L 405,180 L 405,120 z "
+ id="rect2306" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 465,120 L 525,120 L 525,180 L 465,180 L 465,120 z "
+ id="rect2308" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 525,120 L 585,120 L 585,180 L 525,180 L 525,120 z "
+ id="rect2312" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 585,120 L 645,120 L 645,180 L 585,180 L 585,120 z "
+ id="rect2314" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 645,120 L 705,120 L 705,180 L 645,180 L 645,120 z "
+ id="rect2316" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 705,120 L 765,120 L 765,180 L 705,180 L 705,120 z "
+ id="rect2318" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 765,120 L 900,120 L 900,180 L 765,180 L 765,120 z "
+ id="rect2320" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0,180 L 135,180 L 135,240 L 0,240 L 0,180 z "
+ id="rect2322" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 135,180 L 195,180 L 195,240 L 135,240 L 135,180 z "
+ id="rect2324" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 195,180 L 255,180 L 255,240 L 195,240 L 195,180 z "
+ id="rect2326" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 255,180 L 315,180 L 315,240 L 255,240 L 255,180 z "
+ id="rect2330" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 315,180 L 375,180 L 375,240 L 315,240 L 315,180 z "
+ id="rect2334" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 375,180 L 435,180 L 435,240 L 375,240 L 375,180 z "
+ id="rect2336" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 435,180 L 495,180 L 495,240 L 435,240 L 435,180 z "
+ id="rect2338" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 495,180 L 555,180 L 555,240 L 495,240 L 495,180 z "
+ id="rect2340" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 555,180 L 615,180 L 615,240 L 555,240 L 555,180 z "
+ id="rect2342" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 615,180 L 675,180 L 675,240 L 615,240 L 615,180 z "
+ id="rect2344" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 675,180 L 735,180 L 735,240 L 675,240 L 675,180 z "
+ id="rect2346" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 735,180 L 900,180 L 900,240 L 735,240 L 735,180 z "
+ id="rect2348" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 0,240 L 90,240 L 90,300 L 0,300 L 0,240 z "
+ id="rect2350" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 810,240 L 900,240 L 900,300 L 810,300 L 810,240 z "
+ id="rect2352" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 150,240 L 240,240 L 240,300 L 150,300 L 150,240 z "
+ id="rect2354" />
+ <path
+ style="fill:#dfdfdf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 600,240 L 690,240 L 690,300 L 600,300 L 600,240 z "
+ id="rect2360" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 240,240 L 600,240 L 600,300 L 240,300 L 240,240 z "
+ id="rect2362" />
+ <path
+ style="fill:#efefef;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 90,240 L 150,240 L 150,300 L 90,300 L 90,240 z "
+ id="rect2364" />
+ <path
+ style="fill:#efefef;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 690,240 L 750,240 L 750,300 L 690,300 L 690,240 z "
+ id="rect2366" />
+ <path
+ style="fill:#efefef;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 750,240 L 810,240 L 810,300 L 750,300 L 750,240 z "
+ id="rect2368" />
+ <path
+ style=""
+ d=""
+ id="flowRoot4146" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 75.351563,18.826172 L 74.4375,11.056641 L 74.4375,6.3691406 L 78.046875,6.3691406 L 78.046875,11.056641 L 77.132813,18.826172 L 75.351563,18.826172 M 74.484375,23.630859 L 74.484375,20.173828 L 77.964844,20.173828 L 77.964844,23.630859 L 74.484375,23.630859 M 75.351563,53.630859 L 75.351563,42.158203 L 71.34375,42.158203 L 71.34375,39.802734 L 71.601563,39.802734 C 73.062496,39.802748 74.124995,39.576186 74.789063,39.123047 C 75.460931,38.669937 75.855462,37.912125 75.972656,36.849609 L 78.65625,36.849609 L 78.65625,53.630859 L 75.351563,53.630859"
+ id="text5091" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 23.34375,14.220703 L 23.34375,16.810547 C 22.531233,17.365241 21.761702,17.775396 21.035156,18.041016 C 20.316391,18.298833 19.605455,18.42774 18.902344,18.427734 C 18.542956,18.42774 18.183581,18.39649 17.824219,18.333984 C 17.464832,18.27149 17.105457,18.181646 16.746094,18.064453 C 16.558583,18.001959 16.281239,17.904303 15.914063,17.771484 C 14.203116,17.185553 12.902336,16.892585 12.011719,16.892578 C 11.34765,16.892585 10.652339,17.041022 9.9257813,17.337891 C 9.2070275,17.626959 8.3984345,18.091802 7.5,18.732422 L 7.5,16.142578 C 8.3359346,15.580086 9.1328088,15.162118 9.890625,14.888672 C 10.648432,14.607431 11.363275,14.466806 12.035156,14.466797 C 12.949211,14.466806 14.085929,14.693368 15.445313,15.146484 C 15.46874,15.154305 15.484365,15.158212 15.492188,15.158203 C 15.632802,15.205087 15.847646,15.279305 16.136719,15.380859 C 17.347644,15.810555 18.285143,16.025398 18.949219,16.025391 C 19.613267,16.025398 20.29686,15.880867 21,15.591797 C 21.703109,15.302743 22.484358,14.845712 23.34375,14.220703 M 11.988281,35.033203 L 15.011719,35.033203 L 17.320313,39.369141 L 15.65625,39.369141 L 11.988281,35.033203"
+ id="text5103" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 136.47578,20.443359 C 136.04608,21.099612 135.54999,21.583986 134.9875,21.896484 C 134.42499,22.201173 133.76093,22.353517 132.99532,22.353516 C 131.76093,22.353517 130.81953,22.01758 130.1711,21.345703 C 129.53047,20.673831 129.21015,19.681645 129.21016,18.369141 C 129.21015,16.50196 129.75312,14.935556 130.83907,13.669922 C 131.93281,12.404308 133.27656,11.771496 134.87032,11.771484 C 135.4953,11.771496 136.03827,11.900402 136.49922,12.158203 C 136.96015,12.416027 137.33905,12.798839 137.63594,13.306641 L 138.25703,12.158203 L 140.34297,12.158203 L 138.62032,19.166016 C 138.59686,19.251958 138.57733,19.341801 138.56172,19.435547 C 138.54608,19.521488 138.53827,19.591801 138.53828,19.646484 C 138.53827,19.919926 138.63202,20.126957 138.81953,20.267578 C 139.00702,20.400394 139.28436,20.4668 139.65157,20.466797 C 139.95624,20.4668 140.27264,20.388675 140.60078,20.232422 C 140.9367,20.076175 141.2492,19.857426 141.53828,19.576172 C 142.21014,18.951177 142.71795,18.220709 143.06172,17.384766 C 143.41326,16.548835 143.58904,15.630867 143.58907,14.630859 C 143.58904,12.75587 142.86248,11.216809 141.40938,10.013672 C 139.96405,8.8027492 138.09686,8.1972811 135.80782,8.1972656 C 134.70624,8.1972811 133.6789,8.3300934 132.72578,8.5957031 C 131.78046,8.8613429 130.92109,9.2558737 130.14766,9.7792969 C 128.81953,10.669935 127.79609,11.783215 127.07735,13.119141 C 126.36641,14.455087 126.01094,15.91993 126.01094,17.513672 C 126.01094,19.912113 126.81953,21.83008 128.43672,23.267578 C 130.0539,24.697265 132.21406,25.412108 134.91719,25.412109 C 136.1828,25.412108 137.41718,25.220702 138.62032,24.837891 C 139.83124,24.455077 140.95623,23.90039 141.99532,23.173828 L 142.95625,24.544922 C 141.76092,25.443358 140.49139,26.119138 139.14766,26.572266 C 137.81171,27.025387 136.41718,27.25195 134.96407,27.251953 C 133.46405,27.25195 132.08515,27.060543 130.82735,26.677734 C 129.56953,26.302732 128.45234,25.744139 127.47578,25.001953 C 126.26484,24.05664 125.35859,22.966798 124.75703,21.732422 C 124.15547,20.49805 123.85469,19.099614 123.85469,17.537109 C 123.85469,16.232429 124.05781,14.990243 124.46407,13.810547 C 124.87813,12.623058 125.48359,11.544934 126.28047,10.576172 C 127.43672,9.1621238 128.82734,8.0918124 130.45235,7.3652344 C 132.07734,6.6386889 133.88593,6.275408 135.87813,6.2753906 C 137.19843,6.275408 138.43671,6.4550953 139.59297,6.8144531 C 140.75702,7.1660321 141.76873,7.6660316 142.62813,8.3144531 C 143.68279,9.1347801 144.46795,10.072279 144.9836,11.126953 C 145.50701,12.17384 145.76873,13.357432 145.76875,14.677734 C 145.76873,15.966805 145.51092,17.15821 144.99532,18.251953 C 144.48748,19.337895 143.75311,20.267581 142.79219,21.041016 C 142.2453,21.478518 141.64764,21.814455 140.99922,22.048828 C 140.35858,22.275392 139.69061,22.388673 138.99532,22.388672 C 138.16718,22.388673 137.54218,22.224611 137.12032,21.896484 C 136.70624,21.568361 136.4914,21.083987 136.47578,20.443359 M 137.06172,15.427734 C 136.96015,14.794931 136.73358,14.314462 136.38203,13.986328 C 136.03827,13.650401 135.58124,13.482432 135.01094,13.482422 C 134.1203,13.482432 133.34687,13.966807 132.69063,14.935547 C 132.03437,15.904305 131.70624,17.068366 131.70625,18.427734 C 131.70624,19.146489 131.86249,19.693363 132.175,20.068359 C 132.49531,20.443363 132.95624,20.630862 133.55782,20.630859 C 134.20624,20.630862 134.79608,20.384769 135.32735,19.892578 C 135.8664,19.400395 136.23358,18.75977 136.42891,17.970703 L 137.06172,15.427734 M 128.56563,53.630859 C 128.58125,52.130861 128.90156,50.861331 129.52657,49.822266 C 130.15156,48.775395 131.26094,47.716803 132.85469,46.646484 C 133.09687,46.482429 133.44844,46.255867 133.90938,45.966797 C 136.01875,44.615243 137.07343,43.314463 137.07344,42.064453 C 137.07343,41.322278 136.85078,40.736341 136.40547,40.306641 C 135.96015,39.876967 135.35078,39.662123 134.57735,39.662109 C 133.73359,39.662123 133.08125,39.927748 132.62032,40.458984 C 132.16719,40.982435 131.94062,41.732434 131.94063,42.708984 L 131.94063,42.849609 L 128.84688,42.849609 C 128.84688,40.927747 129.3625,39.44728 130.39375,38.408203 C 131.425,37.369157 132.89375,36.849626 134.8,36.849609 C 136.52656,36.849626 137.90546,37.322282 138.93672,38.267578 C 139.96796,39.205093 140.48358,40.455091 140.4836,42.017578 C 140.48358,43.134776 140.21405,44.103525 139.675,44.923828 C 139.13593,45.744149 138.09296,46.677741 136.5461,47.724609 C 136.21796,47.951178 135.76484,48.248052 135.18672,48.615234 C 133.71797,49.560551 132.88984,50.2793 132.70235,50.771484 L 140.31953,50.771484 L 140.31953,53.630859 L 128.56563,53.630859"
+ id="text5127" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 195.28125,13.693359 L 194.25,16.552734 L 197.19141,16.552734 L 198.19922,13.693359 L 195.28125,13.693359 M 195.28125,6.4746094 L 197.87109,6.4746094 L 196.16016,11.337891 L 198.99609,11.337891 L 200.73047,6.4746094 L 203.32031,6.4746094 L 201.58594,11.337891 L 204.90234,11.337891 L 204.03516,13.693359 L 200.75391,13.693359 L 199.76953,16.529297 L 203.16797,16.529297 L 202.33594,18.873047 L 198.92578,18.873047 L 197.19141,23.748047 L 194.60156,23.748047 L 196.33594,18.873047 L 193.47656,18.873047 L 191.73047,23.748047 L 189.15234,23.748047 L 190.86328,18.873047 L 187.5,18.873047 L 188.39063,16.529297 L 191.69531,16.529297 L 192.70313,13.693359 L 189.19922,13.693359 L 190.06641,11.337891 L 193.54688,11.337891 L 195.28125,6.4746094 M 190.07813,48.521484 L 193.30078,48.521484 C 193.30859,49.458989 193.53515,50.166019 193.98047,50.642578 C 194.42578,51.111331 195.08593,51.345705 195.96094,51.345703 C 196.80468,51.345705 197.45312,51.126956 197.90625,50.689453 C 198.36718,50.244144 198.59765,49.607426 198.59766,48.779297 C 198.59765,47.951178 198.32812,47.326178 197.78906,46.904297 C 197.2578,46.474617 196.46484,46.259773 195.41016,46.259766 C 195.35546,46.259773 195.26953,46.263679 195.15234,46.271484 C 195.04296,46.279304 194.96093,46.28321 194.90625,46.283203 L 194.90625,43.962891 L 195.26953,43.962891 C 196.23827,43.9629 196.95312,43.7754 197.41406,43.400391 C 197.8828,43.017589 198.11718,42.435558 198.11719,41.654297 C 198.11718,41.005872 197.91796,40.494154 197.51953,40.119141 C 197.1289,39.736342 196.59374,39.544936 195.91406,39.544922 C 195.17187,39.544936 194.59765,39.763686 194.19141,40.201172 C 193.78515,40.638685 193.58203,41.259778 193.58203,42.064453 L 193.58203,42.205078 L 190.41797,42.205078 C 190.45703,40.486341 190.96094,39.169936 191.92969,38.255859 C 192.90625,37.334001 194.28125,36.873064 196.05469,36.873047 C 197.73437,36.873064 199.0664,37.283219 200.05078,38.103516 C 201.03514,38.923843 201.52733,40.02931 201.52734,41.419922 C 201.52733,42.154308 201.35936,42.798839 201.02344,43.353516 C 200.68749,43.908213 200.18358,44.365244 199.51172,44.724609 C 200.37108,45.099618 201.01952,45.619149 201.45703,46.283203 C 201.90233,46.93946 202.12499,47.724615 202.125,48.638672 C 202.12499,50.318363 201.57421,51.650393 200.47266,52.634766 C 199.37108,53.619141 197.86718,54.111328 195.96094,54.111328 C 194.07812,54.111328 192.625,53.634766 191.60156,52.681641 C 190.58594,51.720705 190.07812,50.357425 190.07813,48.591797 L 190.07813,48.521484"
+ id="text5139" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 254.46094,21.451172 C 255.10155,21.365237 255.58984,21.134768 255.92578,20.759766 C 256.26171,20.384769 256.42968,19.884769 256.42969,19.259766 C 256.42968,18.705083 256.26952,18.248052 255.94922,17.888672 C 255.63671,17.52149 255.14062,17.236335 254.46094,17.033203 L 254.46094,21.451172 M 253.06641,13.435547 L 253.06641,9.4511719 C 252.45703,9.529311 251.99218,9.7402483 251.67188,10.083984 C 251.35156,10.419935 251.1914,10.87306 251.19141,11.443359 C 251.1914,11.919934 251.33984,12.318371 251.63672,12.638672 C 251.9414,12.958995 252.41796,13.22462 253.06641,13.435547 M 253.06641,26.267578 L 253.06641,24.017578 C 251.30078,23.908203 249.98047,23.396485 249.10547,22.482422 C 248.23047,21.568361 247.79297,20.24805 247.79297,18.521484 L 250.93359,18.521484 C 250.97265,19.365239 251.16796,20.033207 251.51953,20.525391 C 251.8789,21.009768 252.39453,21.318362 253.06641,21.451172 L 253.06641,16.599609 C 251.2539,16.138679 249.96484,15.537117 249.19922,14.794922 C 248.43359,14.052744 248.05078,13.03712 248.05078,11.748047 C 248.05078,10.318373 248.5039,9.1660301 249.41016,8.2910156 C 250.32422,7.4160318 251.54296,6.959001 253.06641,6.9199219 L 253.06641,5.4199219 L 254.46094,5.4199219 L 254.46094,6.9199219 C 255.98437,6.9980635 257.17186,7.4590005 258.02344,8.3027344 C 258.87499,9.1386864 259.34374,10.318373 259.42969,11.841797 L 256.24219,11.841797 C 256.18749,11.115247 256.01171,10.56056 255.71484,10.177734 C 255.42577,9.7871232 255.0078,9.5683734 254.46094,9.5214844 L 254.46094,13.787109 C 256.39062,14.388681 257.74999,15.07618 258.53906,15.849609 C 259.32811,16.623054 259.72264,17.642584 259.72266,18.908203 C 259.72264,20.400394 259.26171,21.591799 258.33984,22.482422 C 257.42577,23.373047 256.1328,23.892578 254.46094,24.041016 L 254.46094,26.267578 L 253.06641,26.267578 M 254.64844,47.419922 L 254.64844,40.236328 L 250.08984,47.419922 L 254.64844,47.419922 M 254.57813,53.630859 L 254.57813,50.009766 L 247.5,50.009766 L 247.5,47.056641 L 253.6875,37.330078 L 257.84766,37.330078 L 257.84766,47.337891 L 259.79297,47.337891 L 259.79297,50.009766 L 257.84766,50.009766 L 257.84766,53.630859 L 254.57813,53.630859"
+ id="text5145" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 320.42578,19.740234 C 320.42577,20.263675 320.60155,20.705081 320.95313,21.064453 C 321.30467,21.416018 321.73827,21.591799 322.25391,21.591797 C 322.75389,21.591799 323.18358,21.412112 323.54297,21.052734 C 323.90233,20.68555 324.08201,20.24805 324.08203,19.740234 C 324.08201,19.240239 323.90233,18.814458 323.54297,18.462891 C 323.19139,18.103521 322.7617,17.923834 322.25391,17.923828 C 321.73827,17.923834 321.30467,18.099615 320.95313,18.451172 C 320.60155,18.794927 320.42577,19.224614 320.42578,19.740234 M 317.88281,19.740234 C 317.8828,18.521489 318.30468,17.494147 319.14844,16.658203 C 319.99217,15.822273 321.02733,15.404305 322.25391,15.404297 C 323.45701,15.404305 324.48045,15.830086 325.32422,16.681641 C 326.17576,17.525397 326.60154,18.544927 326.60156,19.740234 C 326.60154,20.943362 326.17576,21.974611 325.32422,22.833984 C 324.47264,23.685547 323.4492,24.111328 322.25391,24.111328 C 321.02733,24.111328 319.99217,23.689453 319.14844,22.845703 C 318.30468,22.001955 317.8828,20.9668 317.88281,19.740234 M 311.07422,24.111328 L 321.08203,6.8496094 L 322.96875,6.8496094 L 312.96094,24.111328 L 311.07422,24.111328 M 310.04297,11.220703 C 310.04297,11.73634 310.21484,12.169933 310.55859,12.521484 C 310.91015,12.873058 311.34375,13.048839 311.85938,13.048828 C 312.36718,13.048839 312.79687,12.873058 313.14844,12.521484 C 313.50781,12.162121 313.68749,11.728528 313.6875,11.220703 C 313.68749,10.720716 313.50781,10.294935 313.14844,9.9433594 C 312.79687,9.5839984 312.36718,9.4043111 311.85938,9.4042969 C 311.34375,9.4043111 310.91015,9.5800922 310.55859,9.9316406 C 310.21484,10.275404 310.04297,10.705091 310.04297,11.220703 M 307.5,11.220703 C 307.5,10.001967 307.92187,8.9707178 308.76563,8.1269531 C 309.60937,7.275407 310.64062,6.8496262 311.85938,6.8496094 C 313.06249,6.8496262 314.08593,7.2793132 314.92969,8.1386719 C 315.78124,8.990249 316.20702,10.017592 316.20703,11.220703 C 316.20702,12.423839 315.78124,13.451182 314.92969,14.302734 C 314.08593,15.146493 313.06249,15.568367 311.85938,15.568359 C 310.63281,15.568367 309.59765,15.150399 308.75391,14.314453 C 307.91797,13.478526 307.5,12.447277 307.5,11.220703 M 310.85156,49.119141 L 314.13281,49.119141 C 314.1875,49.853519 314.43359,50.423831 314.87109,50.830078 C 315.30859,51.228518 315.89453,51.427737 316.62891,51.427734 C 317.53515,51.427737 318.22655,51.162112 318.70313,50.630859 C 319.18749,50.099613 319.42968,49.337895 319.42969,48.345703 C 319.42968,47.416022 319.18358,46.685554 318.69141,46.154297 C 318.19921,45.615242 317.51952,45.345711 316.65234,45.345703 C 316.16796,45.345711 315.74218,45.443368 315.375,45.638672 C 315.00781,45.833992 314.69531,46.123054 314.4375,46.505859 L 311.41406,46.330078 L 312.50391,37.330078 L 322.14844,37.330078 L 322.14844,40.166016 L 314.87109,40.166016 L 314.4375,43.529297 C 314.80468,43.240245 315.22656,43.025401 315.70313,42.884766 C 316.17968,42.736339 316.71093,42.66212 317.29688,42.662109 C 318.96874,42.66212 320.3164,43.169932 321.33984,44.185547 C 322.37108,45.20118 322.88671,46.53321 322.88672,48.181641 C 322.88671,49.986332 322.3203,51.427737 321.1875,52.505859 C 320.05468,53.576172 318.53515,54.111328 316.62891,54.111328 C 314.89453,54.111328 313.51172,53.669922 312.48047,52.787109 C 311.45703,51.896486 310.91406,50.673831 310.85156,49.119141"
+ id="text5151" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 372.15234,48.298828 C 372.15234,49.25977 372.39062,50.021488 372.86719,50.583984 C 373.35156,51.146487 374.00781,51.427737 374.83594,51.427734 C 375.60937,51.427737 376.21484,51.154299 376.65234,50.607422 C 377.08983,50.06055 377.30858,49.298832 377.30859,48.322266 C 377.30858,47.423834 377.08202,46.724616 376.62891,46.224609 C 376.17577,45.724617 375.53905,45.474618 374.71875,45.474609 C 373.91406,45.474618 373.28515,45.724617 372.83203,46.224609 C 372.3789,46.724616 372.15234,47.416022 372.15234,48.298828 M 372.10547,43.916016 C 372.48828,43.525401 372.94921,43.232432 373.48828,43.037109 C 374.02734,42.833995 374.6289,42.732433 375.29297,42.732422 C 376.93358,42.732433 378.24608,43.232432 379.23047,44.232422 C 380.22264,45.23243 380.71874,46.56446 380.71875,48.228516 C 380.71874,49.994144 380.17968,51.419924 379.10156,52.505859 C 378.02343,53.591797 376.60155,54.134765 374.83594,54.134766 C 372.79687,54.134765 371.24609,53.431641 370.18359,52.025391 C 369.1289,50.619144 368.60156,48.560552 368.60156,45.849609 C 368.60156,42.935558 369.16797,40.708997 370.30078,39.169922 C 371.43359,37.623063 373.0664,36.849626 375.19922,36.849609 C 376.68358,36.849626 377.8789,37.236345 378.78516,38.009766 C 379.69921,38.783218 380.19921,39.830092 380.28516,41.150391 L 376.88672,41.150391 C 376.80858,40.611341 376.59765,40.205092 376.25391,39.931641 C 375.91015,39.658217 375.42968,39.521498 374.8125,39.521484 C 373.96874,39.521498 373.32031,39.888686 372.86719,40.623047 C 372.41406,41.349622 372.16015,42.447277 372.10547,43.916016"
+ id="text5157" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 432.85547,16.095703 L 431.96484,16.740234 C 431.60546,16.990241 431.33593,17.291022 431.15625,17.642578 C 430.97656,17.994146 430.88671,18.388677 430.88672,18.826172 C 430.88671,19.490239 431.11328,20.048832 431.56641,20.501953 C 432.01953,20.955081 432.58593,21.181643 433.26563,21.181641 C 433.76562,21.181643 434.24218,21.080081 434.69531,20.876953 C 435.15624,20.666019 435.58202,20.361331 435.97266,19.962891 L 432.85547,16.095703 M 433.79297,12.404297 L 434.20313,12.111328 C 434.57812,11.853527 434.85546,11.564465 435.03516,11.244141 C 435.21483,10.923841 435.30468,10.556654 435.30469,10.142578 C 435.30468,9.7441545 435.17968,9.4277486 434.92969,9.1933594 C 434.68749,8.958999 434.35546,8.8418117 433.93359,8.8417969 C 433.5039,8.8418117 433.16406,8.9629053 432.91406,9.2050781 C 432.66406,9.4394673 432.53906,9.7597795 432.53906,10.166016 C 432.53906,10.384779 432.59765,10.62306 432.71484,10.880859 C 432.83984,11.138684 433.01562,11.412122 433.24219,11.701172 L 433.79297,12.404297 M 431.15625,13.962891 L 430.47656,13.072266 C 430.125,12.603527 429.87109,12.166027 429.71484,11.759766 C 429.5664,11.345715 429.49218,10.912122 429.49219,10.458984 C 429.49218,9.2089988 429.89062,8.2168123 430.6875,7.4824219 C 431.49218,6.7402513 432.58203,6.3691579 433.95703,6.3691406 C 435.27733,6.3691579 436.3203,6.7090013 437.08594,7.3886719 C 437.85155,8.0683749 438.23436,8.9863428 438.23438,10.142578 C 438.23436,11.017591 438.0078,11.802746 437.55469,12.498047 C 437.10936,13.185557 436.40624,13.833994 435.44531,14.443359 L 437.91797,17.490234 C 438.15233,17.107428 438.33593,16.677741 438.46875,16.201172 C 438.60936,15.724617 438.70702,15.193368 438.76172,14.607422 L 441.80859,14.607422 C 441.72264,15.623055 441.5117,16.56446 441.17578,17.431641 C 440.83983,18.298833 440.37889,19.091801 439.79297,19.810547 L 442.93359,23.630859 L 438.94922,23.630859 L 437.77734,22.189453 C 437.08983,22.822266 436.33202,23.302735 435.50391,23.630859 C 434.68359,23.951172 433.82421,24.111328 432.92578,24.111328 C 431.33203,24.111328 430.02734,23.638672 429.01172,22.693359 C 428.0039,21.748049 427.5,20.541019 427.5,19.072266 C 427.5,17.978521 427.78125,17.037116 428.34375,16.248047 C 428.90625,15.458993 429.84375,14.697275 431.15625,13.962891 M 434.66016,53.630859 L 431.15625,53.630859 C 431.28125,51.341799 431.83203,49.07227 432.80859,46.822266 C 433.79296,44.572275 435.19531,42.361339 437.01563,40.189453 L 428.76563,40.189453 L 428.76563,37.330078 L 440.66016,37.330078 L 440.66016,39.849609 C 438.8164,41.880871 437.39843,44.029306 436.40625,46.294922 C 435.42187,48.560552 434.83984,51.005862 434.66016,53.630859"
+ id="text5163" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 493.5,13.212891 L 491.4375,16.119141 L 489.44531,14.724609 L 491.69531,11.900391 L 488.41406,10.986328 L 489.17578,8.6074219 L 492.32813,9.7324219 L 492.32813,6.3691406 L 494.64844,6.3691406 L 494.64844,9.7324219 L 497.80078,8.6308594 L 498.58594,11.009766 L 495.30469,11.900391 L 497.53125,14.701172 L 495.49219,16.166016 L 493.5,13.212891 M 490.875,48.755859 C 490.875,49.576176 491.10156,50.208988 491.55469,50.654297 C 492.01562,51.099612 492.67187,51.322268 493.52344,51.322266 C 494.33593,51.322268 494.97265,51.095706 495.43359,50.642578 C 495.90233,50.189457 496.13671,49.560551 496.13672,48.755859 C 496.13671,47.982428 495.89843,47.361334 495.42188,46.892578 C 494.9453,46.423835 494.31249,46.189461 493.52344,46.189453 C 492.73437,46.189461 492.09374,46.427742 491.60156,46.904297 C 491.11718,47.380866 490.875,47.998053 490.875,48.755859 M 491.14453,41.560547 C 491.14453,42.208996 491.34765,42.708995 491.75391,43.060547 C 492.16015,43.404307 492.74218,43.576182 493.5,43.576172 C 494.2578,43.576182 494.83984,43.400401 495.24609,43.048828 C 495.66015,42.697277 495.86718,42.201183 495.86719,41.560547 C 495.86718,40.93556 495.65624,40.443373 495.23438,40.083984 C 494.81249,39.724623 494.23437,39.544936 493.5,39.544922 C 492.78124,39.544936 492.20703,39.72853 491.77734,40.095703 C 491.35546,40.462904 491.14453,40.951185 491.14453,41.560547 M 489.9375,44.818359 C 489.23437,44.427744 488.72656,43.970713 488.41406,43.447266 C 488.10156,42.923839 487.94531,42.255871 487.94531,41.443359 C 487.94531,40.005873 488.4375,38.876968 489.42188,38.056641 C 490.40625,37.236345 491.76562,36.826189 493.5,36.826172 C 495.24999,36.826189 496.61718,37.236345 497.60156,38.056641 C 498.59374,38.869155 499.08983,39.998061 499.08984,41.443359 C 499.08983,42.216808 498.92186,42.888683 498.58594,43.458984 C 498.24999,44.021494 497.74608,44.474619 497.07422,44.818359 C 497.89452,45.20118 498.51171,45.73243 498.92578,46.412109 C 499.33983,47.083991 499.54686,47.904303 499.54688,48.873047 C 499.54686,50.505862 499.0078,51.787111 497.92969,52.716797 C 496.85936,53.646484 495.3828,54.111328 493.5,54.111328 C 491.59375,54.111328 490.11328,53.650391 489.05859,52.728516 C 488.0039,51.806642 487.47656,50.521487 487.47656,48.873047 C 487.47656,47.912115 487.67187,47.107428 488.0625,46.458984 C 488.46094,45.802742 489.08594,45.255868 489.9375,44.818359"
+ id="text5169" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 557.85938,6.3691406 C 556.78124,8.1347811 555.98046,9.9316543 555.45703,11.759766 C 554.93359,13.587901 554.67187,15.505868 554.67188,17.513672 C 554.67187,19.513676 554.93359,21.427737 555.45703,23.255859 C 555.98046,25.083983 556.78124,26.880856 557.85938,28.646484 L 555.38672,28.646484 C 554.01953,26.779294 552.98046,24.904296 552.26953,23.021484 C 551.5664,21.130862 551.21484,19.294926 551.21484,17.513672 C 551.21484,15.73243 551.5664,13.896494 552.26953,12.005859 C 552.98046,10.115248 554.01953,8.2363435 555.38672,6.3691406 L 557.85938,6.3691406 M 556.06641,42.685547 C 556.0664,41.724621 555.82421,40.96681 555.33984,40.412109 C 554.86327,39.849623 554.21093,39.568373 553.38281,39.568359 C 552.60156,39.568373 551.99218,39.837904 551.55469,40.376953 C 551.125,40.916028 550.91015,41.669934 550.91016,42.638672 C 550.91015,43.544932 551.13671,44.251963 551.58984,44.759766 C 552.04296,45.267586 552.67968,45.521492 553.5,45.521484 C 554.30468,45.521492 554.93359,45.271493 555.38672,44.771484 C 555.83983,44.271494 556.0664,43.576182 556.06641,42.685547 M 556.125,47.056641 C 555.73437,47.447272 555.27343,47.74024 554.74219,47.935547 C 554.21093,48.130865 553.61327,48.228521 552.94922,48.228516 C 551.30078,48.228521 549.98047,47.732428 548.98828,46.740234 C 547.99609,45.748055 547.5,44.419931 547.5,42.755859 C 547.5,40.990247 548.03906,39.564467 549.11719,38.478516 C 550.19531,37.392594 551.61718,36.849626 553.38281,36.849609 C 555.42968,36.849626 556.98436,37.556657 558.04688,38.970703 C 559.11718,40.376966 559.65233,42.431652 559.65234,45.134766 C 559.65233,48.041021 559.08202,50.267581 557.94141,51.814453 C 556.80077,53.361328 555.16015,54.134765 553.01953,54.134766 C 551.54296,54.134765 550.35156,53.751953 549.44531,52.986328 C 548.53906,52.212892 548.04297,51.162112 547.95703,49.833984 L 551.34375,49.845703 C 551.42187,50.384769 551.63281,50.787112 551.97656,51.052734 C 552.32031,51.318362 552.80468,51.451174 553.42969,51.451172 C 554.27343,51.451174 554.91796,51.083987 555.36328,50.349609 C 555.80858,49.615238 556.06249,48.517583 556.125,47.056641"
+ id="text5175" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 609.375,6.3691406 L 611.87109,6.3691406 C 613.23046,8.228531 614.26171,10.103529 614.96484,11.994141 C 615.66796,13.876963 616.01952,15.716805 616.01953,17.513672 C 616.01952,19.302739 615.66796,21.142581 614.96484,23.033203 C 614.26171,24.923827 613.23046,26.794919 611.87109,28.646484 L 609.375,28.646484 C 610.46094,26.873044 611.26562,25.072264 611.78906,23.244141 C 612.32031,21.408205 612.58593,19.498051 612.58594,17.513672 C 612.58593,15.521492 612.32031,13.611338 611.78906,11.783203 C 611.26562,9.9550918 610.46094,8.1504061 609.375,6.3691406 M 610.98047,45.474609 C 610.98046,47.513678 611.18359,48.994145 611.58984,49.916016 C 612.0039,50.837893 612.66015,51.29883 613.55859,51.298828 C 614.45702,51.29883 615.11327,50.833987 615.52734,49.904297 C 615.9414,48.974614 616.14843,47.498053 616.14844,45.474609 C 616.14843,43.44337 615.9414,41.966809 615.52734,41.044922 C 615.11327,40.12306 614.45702,39.662123 613.55859,39.662109 C 612.66015,39.662123 612.0039,40.12306 611.58984,41.044922 C 611.18359,41.958996 610.98046,43.435557 610.98047,45.474609 M 607.5,45.474609 C 607.5,42.591808 608,40.43556 609,39.005859 C 610.00781,37.568375 611.52734,36.849626 613.55859,36.849609 C 615.58202,36.849626 617.09765,37.572282 618.10547,39.017578 C 619.12108,40.455091 619.62889,42.615245 619.62891,45.498047 C 619.62889,48.380865 619.12499,50.533206 618.11719,51.955078 C 617.11718,53.376953 615.59765,54.08789 613.55859,54.087891 C 611.52734,54.08789 610.00781,53.373047 609,51.943359 C 608,50.513675 607.5,48.357427 607.5,45.474609"
+ id="text5181" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 667.5,26.900391 L 679.5,26.900391 L 679.5,29.291016 L 667.5,29.291016 L 667.5,26.900391 M 670.20703,48.849609 L 670.20703,45.638672 L 676.79297,45.638672 L 676.79297,48.849609 L 670.20703,48.849609"
+ id="text5187" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 733.33594,9.3222656 L 735.70313,9.3222656 L 735.70313,15.298828 L 741.53906,15.298828 L 741.53906,17.630859 L 735.70313,17.630859 L 735.70313,23.630859 L 733.33594,23.630859 L 733.33594,17.630859 L 727.5,17.630859 L 727.5,15.298828 L 733.33594,15.298828 L 733.33594,9.3222656 M 727.5,47.818359 L 741.53906,47.818359 L 741.53906,50.150391 L 727.5,50.150391 L 727.5,47.818359 M 727.5,42.779297 L 741.53906,42.779297 L 741.53906,45.111328 L 727.5,45.111328 L 727.5,42.779297"
+ id="text5201" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 11.070313,95.601563 L 11.070313,86.148438 L 7.65625,86.148438 L 7.65625,84.09375 L 16.828125,84.09375 L 16.828125,86.148438 L 13.4375,86.148438 L 13.4375,95.601563 L 11.070313,95.601563 M 22.859375,94.546875 C 22.572911,94.989584 22.197911,95.328125 21.734375,95.5625 C 21.270829,95.791666 20.731767,95.90625 20.117188,95.90625 C 19.294269,95.90625 18.658853,95.671875 18.210938,95.203125 C 17.768228,94.734376 17.546874,94.06771 17.546875,93.203125 C 17.546874,92.401045 17.768228,91.789066 18.210938,91.367188 C 18.658853,90.945317 19.395831,90.656255 20.421875,90.5 C 20.656246,90.463547 20.963538,90.42188 21.34375,90.375 C 22.307286,90.250005 22.789057,89.97136 22.789063,89.539063 C 22.789057,89.195319 22.682286,88.950527 22.46875,88.804688 C 22.255203,88.653653 21.898433,88.578132 21.398438,88.578125 C 20.9401,88.578132 20.588538,88.669278 20.34375,88.851563 C 20.098955,89.033861 19.97656,89.294277 19.976563,89.632813 L 19.976563,89.757813 L 17.851563,89.757813 L 17.851563,89.601563 C 17.851562,88.731778 18.158853,88.049487 18.773438,87.554688 C 19.388018,87.054696 20.236976,86.804696 21.320313,86.804688 C 22.507807,86.804696 23.41666,87.010425 24.046875,87.421875 C 24.682284,87.833341 24.999992,88.427091 25,89.203125 L 25,94.03125 C 24.999992,94.385418 25.03645,94.651043 25.109375,94.828125 C 25.182283,95.000001 25.304679,95.130209 25.476563,95.21875 L 25.476563,95.601563 L 23.109375,95.601563 C 23.031244,95.455729 22.971348,95.294271 22.929688,95.117188 C 22.888015,94.940105 22.864577,94.750001 22.859375,94.546875 M 22.820313,91.421875 C 22.450515,91.593754 22.023432,91.731775 21.539063,91.835938 C 21.059892,91.940108 20.812496,91.994795 20.796875,92 C 20.39583,92.114587 20.11458,92.257816 19.953125,92.429688 C 19.796872,92.601566 19.718747,92.838544 19.71875,93.140625 C 19.718747,93.453127 19.82031,93.703127 20.023438,93.890625 C 20.226559,94.072918 20.499997,94.164064 20.84375,94.164063 C 21.458329,94.164064 21.940099,93.992189 22.289063,93.648438 C 22.643224,93.299481 22.820307,92.825524 22.820313,92.226563 L 22.820313,91.421875 M 27.039063,84.09375 L 29.25,84.09375 L 29.25,88.164063 C 29.531246,87.721362 29.882809,87.388029 30.304688,87.164063 C 30.731766,86.934905 31.216141,86.820321 31.757813,86.820313 C 32.783847,86.820321 33.622388,87.2448 34.273438,88.09375 C 34.92447,88.937507 35.249991,90.036464 35.25,91.390625 C 35.249991,92.734378 34.92447,93.820314 34.273438,94.648438 C 33.622388,95.476563 32.773431,95.890625 31.726563,95.890625 C 31.179682,95.890625 30.70312,95.776041 30.296875,95.546875 C 29.895829,95.317709 29.531246,94.953126 29.203125,94.453125 L 29.203125,95.601563 L 27.039063,95.601563 L 27.039063,84.09375 M 32.992188,91.296875 C 32.992181,90.51563 32.828118,89.903652 32.5,89.460938 C 32.171869,89.013027 31.721348,88.789069 31.148438,88.789063 C 30.544266,88.789069 30.075517,89.007819 29.742188,89.445313 C 29.414059,89.87761 29.249997,90.494797 29.25,91.296875 C 29.249997,92.161462 29.406247,92.817711 29.71875,93.265625 C 30.036454,93.713544 30.497391,93.937502 31.101563,93.9375 C 31.71614,93.937502 32.18489,93.713544 32.507813,93.265625 C 32.830722,92.812503 32.992181,92.156253 32.992188,91.296875"
+ id="text5427" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 789.76563,44.369141 L 792.57031,44.369141 C 793.23176,44.369143 793.71353,44.249351 794.01563,44.009766 C 794.3177,43.770185 794.46874,43.392581 794.46875,42.876953 C 794.46874,42.340499 794.3203,41.955083 794.02344,41.720703 C 793.72656,41.481125 793.23697,41.361333 792.55469,41.361328 L 789.76563,41.361328 L 789.76563,44.369141 M 789.76563,39.392578 L 792.46875,39.392578 C 793.05208,39.392585 793.47916,39.293627 793.75,39.095703 C 794.02083,38.892586 794.15624,38.574878 794.15625,38.142578 C 794.15624,37.720712 794.02343,37.416025 793.75781,37.228516 C 793.49739,37.035817 793.06249,36.939463 792.45313,36.939453 L 789.76563,36.939453 L 789.76563,39.392578 M 787.5,46.447266 L 787.5,34.939453 L 792.92188,34.939453 C 794.09895,34.939465 794.99478,35.189464 795.60938,35.689453 C 796.22916,36.184255 796.53905,36.905609 796.53906,37.853516 C 796.53905,38.436857 796.42447,38.923836 796.19531,39.314453 C 795.96614,39.705085 795.62239,40.007168 795.16406,40.220703 C 795.7578,40.460292 796.20051,40.806646 796.49219,41.259766 C 796.78905,41.707687 796.93749,42.267582 796.9375,42.939453 C 796.93749,44.059247 796.57291,44.92383 795.84375,45.533203 C 795.11457,46.142578 794.08072,46.447266 792.74219,46.447266 L 787.5,46.447266 M 803.45313,45.392578 C 803.16666,45.835287 802.79166,46.173828 802.32813,46.408203 C 801.86458,46.63737 801.32552,46.751953 800.71094,46.751953 C 799.88802,46.751953 799.2526,46.517578 798.80469,46.048828 C 798.36198,45.580079 798.14062,44.913413 798.14063,44.048828 C 798.14062,43.246748 798.36198,42.634769 798.80469,42.212891 C 799.2526,41.79102 799.98958,41.501958 801.01563,41.345703 C 801.25,41.30925 801.55729,41.267583 801.9375,41.220703 C 802.90104,41.095708 803.38281,40.817063 803.38281,40.384766 C 803.38281,40.041022 803.27604,39.796231 803.0625,39.650391 C 802.84895,39.499356 802.49218,39.423835 801.99219,39.423828 C 801.53385,39.423835 801.18229,39.514981 800.9375,39.697266 C 800.69271,39.879564 800.57031,40.13998 800.57031,40.478516 L 800.57031,40.603516 L 798.44531,40.603516 L 798.44531,40.447266 C 798.44531,39.577481 798.7526,38.89519 799.36719,38.400391 C 799.98177,37.900399 800.83073,37.650399 801.91406,37.650391 C 803.10156,37.650399 804.01041,37.856128 804.64063,38.267578 C 805.27603,38.679044 805.59374,39.272794 805.59375,40.048828 L 805.59375,44.876953 C 805.59374,45.231121 805.6302,45.496746 805.70313,45.673828 C 805.77603,45.845704 805.89843,45.975912 806.07031,46.064453 L 806.07031,46.447266 L 803.70313,46.447266 C 803.62499,46.301432 803.5651,46.139974 803.52344,45.962891 C 803.48176,45.785808 803.45833,45.595704 803.45313,45.392578 M 803.41406,42.267578 C 803.04427,42.439457 802.61718,42.577478 802.13281,42.681641 C 801.65364,42.785811 801.40625,42.840498 801.39063,42.845703 C 800.98958,42.96029 800.70833,43.103519 800.54688,43.275391 C 800.39062,43.447269 800.3125,43.684248 800.3125,43.986328 C 800.3125,44.29883 800.41406,44.54883 800.61719,44.736328 C 800.82031,44.918621 801.09375,45.009767 801.4375,45.009766 C 802.05208,45.009767 802.53385,44.837892 802.88281,44.494141 C 803.23697,44.145185 803.41406,43.671227 803.41406,43.072266 L 803.41406,42.267578 M 812.71875,43.244141 L 814.96094,43.244141 C 814.86718,44.322268 814.47395,45.173829 813.78125,45.798828 C 813.08854,46.423828 812.19791,46.736328 811.10938,46.736328 C 809.875,46.736328 808.90625,46.335287 808.20313,45.533203 C 807.50521,44.725913 807.15625,43.611331 807.15625,42.189453 C 807.15625,40.772792 807.51302,39.663418 808.22656,38.861328 C 808.94531,38.054045 809.93229,37.650399 811.1875,37.650391 C 812.28645,37.650399 813.16666,37.942066 813.82813,38.525391 C 814.49478,39.108731 814.86718,39.92123 814.94531,40.962891 L 812.6875,40.962891 C 812.62499,40.509772 812.46614,40.163418 812.21094,39.923828 C 811.95572,39.684252 811.61979,39.56446 811.20313,39.564453 C 810.64062,39.56446 810.21875,39.785814 809.9375,40.228516 C 809.66146,40.67123 809.52343,41.335292 809.52344,42.220703 C 809.52343,43.038415 809.66666,43.668623 809.95313,44.111328 C 810.24479,44.54883 810.66145,44.76758 811.20313,44.767578 C 811.62499,44.76758 811.96354,44.639976 812.21875,44.384766 C 812.47395,44.12956 812.64062,43.749352 812.71875,43.244141 M 816.44531,46.447266 L 816.44531,34.939453 L 818.65625,34.939453 L 818.65625,40.978516 L 821.35938,37.955078 L 824.09375,37.955078 L 821.13281,41.103516 L 824.27344,46.447266 L 821.54688,46.447266 L 819.51563,42.830078 L 818.65625,43.759766 L 818.65625,46.447266 L 816.44531,46.447266 M 824.79688,43.681641 L 827.0625,43.681641 C 827.08333,44.113935 827.23958,44.436851 827.53125,44.650391 C 827.82291,44.858726 828.26041,44.962892 828.84375,44.962891 C 829.28645,44.962892 829.6276,44.889976 829.86719,44.744141 C 830.11197,44.593101 830.23437,44.382164 830.23438,44.111328 C 830.23437,43.725914 829.78124,43.436852 828.875,43.244141 C 828.5052,43.166019 828.21093,43.098311 827.99219,43.041016 C 826.88802,42.759769 826.11979,42.426436 825.6875,42.041016 C 825.26042,41.655604 825.04687,41.134771 825.04688,40.478516 C 825.04687,39.608731 825.35937,38.921231 825.98438,38.416016 C 826.61458,37.905608 827.46614,37.650399 828.53906,37.650391 C 829.67447,37.650399 830.5651,37.903003 831.21094,38.408203 C 831.86197,38.913419 832.20833,39.624356 832.25,40.541016 L 830.03906,40.541016 C 830.02343,40.181647 829.88541,39.903001 829.625,39.705078 C 829.36979,39.507168 829.01302,39.40821 828.55469,39.408203 C 828.12239,39.40821 827.79948,39.473314 827.58594,39.603516 C 827.3776,39.733731 827.27343,39.929043 827.27344,40.189453 C 827.27343,40.528001 827.83854,40.82748 828.96875,41.087891 C 829.22916,41.145188 829.43489,41.192063 829.58594,41.228516 C 830.71614,41.494146 831.48697,41.814458 831.89844,42.189453 C 832.3151,42.564457 832.52343,43.093102 832.52344,43.775391 C 832.52343,44.738934 832.18228,45.473308 831.5,45.978516 C 830.82291,46.483724 829.83593,46.736328 828.53906,46.736328 C 827.36718,46.736328 826.45052,46.473307 825.78906,45.947266 C 825.1276,45.421225 824.79687,44.697267 824.79688,43.775391 L 824.79688,43.681641 M 840.02344,42.251953 C 840.02343,41.397792 839.86197,40.74675 839.53906,40.298828 C 839.21614,39.84571 838.74739,39.619147 838.13281,39.619141 C 837.52864,39.619147 837.0677,39.843106 836.75,40.291016 C 836.4375,40.738938 836.28125,41.392583 836.28125,42.251953 C 836.28125,43.05404 836.44531,43.673831 836.77344,44.111328 C 837.10677,44.54883 837.57552,44.76758 838.17969,44.767578 C 838.7526,44.76758 839.20312,44.543622 839.53125,44.095703 C 839.85937,43.647789 840.02343,43.033207 840.02344,42.251953 M 834.07031,49.853516 L 834.07031,37.955078 L 836.23438,37.955078 L 836.23438,39.103516 C 836.5625,38.603523 836.92708,38.23894 837.32813,38.009766 C 837.73437,37.780608 838.21093,37.666024 838.75781,37.666016 C 839.80468,37.666024 840.65364,38.080086 841.30469,38.908203 C 841.95572,39.731127 842.28124,40.814459 842.28125,42.158203 C 842.28124,43.517581 841.95572,44.621747 841.30469,45.470703 C 840.65364,46.314453 839.8151,46.736328 838.78906,46.736328 C 838.24739,46.736328 837.76302,46.621745 837.33594,46.392578 C 836.91406,46.163412 836.5625,45.830079 836.28125,45.392578 L 836.28125,49.853516 L 834.07031,49.853516 M 848.70313,45.392578 C 848.41666,45.835287 848.04166,46.173828 847.57813,46.408203 C 847.11458,46.63737 846.57552,46.751953 845.96094,46.751953 C 845.13802,46.751953 844.5026,46.517578 844.05469,46.048828 C 843.61198,45.580079 843.39062,44.913413 843.39063,44.048828 C 843.39062,43.246748 843.61198,42.634769 844.05469,42.212891 C 844.5026,41.79102 845.23958,41.501958 846.26563,41.345703 C 846.5,41.30925 846.80729,41.267583 847.1875,41.220703 C 848.15104,41.095708 848.63281,40.817063 848.63281,40.384766 C 848.63281,40.041022 848.52604,39.796231 848.3125,39.650391 C 848.09895,39.499356 847.74218,39.423835 847.24219,39.423828 C 846.78385,39.423835 846.43229,39.514981 846.1875,39.697266 C 845.94271,39.879564 845.82031,40.13998 845.82031,40.478516 L 845.82031,40.603516 L 843.69531,40.603516 L 843.69531,40.447266 C 843.69531,39.577481 844.0026,38.89519 844.61719,38.400391 C 845.23177,37.900399 846.08073,37.650399 847.16406,37.650391 C 848.35156,37.650399 849.26041,37.856128 849.89063,38.267578 C 850.52603,38.679044 850.84374,39.272794 850.84375,40.048828 L 850.84375,44.876953 C 850.84374,45.231121 850.8802,45.496746 850.95313,45.673828 C 851.02603,45.845704 851.14843,45.975912 851.32031,46.064453 L 851.32031,46.447266 L 848.95313,46.447266 C 848.87499,46.301432 848.8151,46.139974 848.77344,45.962891 C 848.73176,45.785808 848.70833,45.595704 848.70313,45.392578 M 848.66406,42.267578 C 848.29427,42.439457 847.86718,42.577478 847.38281,42.681641 C 846.90364,42.785811 846.65625,42.840498 846.64063,42.845703 C 846.23958,42.96029 845.95833,43.103519 845.79688,43.275391 C 845.64062,43.447269 845.5625,43.684248 845.5625,43.986328 C 845.5625,44.29883 845.66406,44.54883 845.86719,44.736328 C 846.07031,44.918621 846.34375,45.009767 846.6875,45.009766 C 847.30208,45.009767 847.78385,44.837892 848.13281,44.494141 C 848.48697,44.145185 848.66406,43.671227 848.66406,43.072266 L 848.66406,42.267578 M 857.96875,43.244141 L 860.21094,43.244141 C 860.11718,44.322268 859.72395,45.173829 859.03125,45.798828 C 858.33854,46.423828 857.44791,46.736328 856.35938,46.736328 C 855.125,46.736328 854.15625,46.335287 853.45313,45.533203 C 852.75521,44.725913 852.40625,43.611331 852.40625,42.189453 C 852.40625,40.772792 852.76302,39.663418 853.47656,38.861328 C 854.19531,38.054045 855.18229,37.650399 856.4375,37.650391 C 857.53645,37.650399 858.41666,37.942066 859.07813,38.525391 C 859.74478,39.108731 860.11718,39.92123 860.19531,40.962891 L 857.9375,40.962891 C 857.87499,40.509772 857.71614,40.163418 857.46094,39.923828 C 857.20572,39.684252 856.86979,39.56446 856.45313,39.564453 C 855.89062,39.56446 855.46875,39.785814 855.1875,40.228516 C 854.91146,40.67123 854.77343,41.335292 854.77344,42.220703 C 854.77343,43.038415 854.91666,43.668623 855.20313,44.111328 C 855.49479,44.54883 855.91145,44.76758 856.45313,44.767578 C 856.87499,44.76758 857.21354,44.639976 857.46875,44.384766 C 857.72395,44.12956 857.89062,43.749352 857.96875,43.244141 M 866.88281,43.869141 L 869.14844,43.869141 C 868.91926,44.764976 868.45572,45.4681 867.75781,45.978516 C 867.0651,46.483724 866.21874,46.736328 865.21875,46.736328 C 863.98958,46.736328 863.01562,46.32487 862.29688,45.501953 C 861.57812,44.67383 861.21875,43.554039 861.21875,42.142578 C 861.21875,40.751959 861.57292,39.655606 862.28125,38.853516 C 862.98958,38.051441 863.95833,37.650399 865.1875,37.650391 C 866.48958,37.650399 867.49478,38.046232 868.20313,38.837891 C 868.91145,39.624356 869.26562,40.74675 869.26563,42.205078 C 869.26562,42.366541 869.26301,42.488936 869.25781,42.572266 C 869.2578,42.650394 869.2526,42.725915 869.24219,42.798828 L 863.57031,42.798828 C 863.60156,43.465498 863.76302,43.968101 864.05469,44.306641 C 864.35156,44.645184 864.77604,44.814455 865.32813,44.814453 C 865.71874,44.814455 866.03906,44.738934 866.28906,44.587891 C 866.53906,44.431643 866.73697,44.19206 866.88281,43.869141 M 863.57031,41.306641 L 866.91406,41.306641 C 866.89322,40.73373 866.73958,40.298834 866.45313,40.001953 C 866.17187,39.699877 865.76562,39.548835 865.23438,39.548828 C 864.73958,39.548835 864.34895,39.699877 864.0625,40.001953 C 863.78125,40.304043 863.61718,40.738938 863.57031,41.306641"
+ id="text5207" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 840,17.646484 L 797.02608,17.646484"
+ id="path5439" />
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 802.5,25.146484 L 802.5,10.146484 L 787.5,17.646484 L 802.5,25.146484 z "
+ id="path5441" />
+ <g
+ id="g5459"
+ transform="translate(0,7.5)">
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 82.50003,75 L 54.020182,75"
+ id="path5453" />
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 60,82.5 L 60,67.5 L 45,75 L 60,82.5 z "
+ id="path5455" />
+ <path
+ id="path5457"
+ d="M 45,67.5 C 45,82.5 45,82.5 45,82.5"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <g
+ id="g5464"
+ transform="matrix(-1,9.581637e-17,-9.581637e-17,-1,127.5,172.5)">
+ <path
+ id="path5466"
+ d="M 82.50003,75 L 54.020182,75"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3.00000024;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path5468"
+ d="M 60,82.5 L 60,67.5 L 45,75 L 60,82.5 z "
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 45,67.5 C 45,82.5 45,82.5 45,82.5"
+ id="path5470" />
+ </g>
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 107.0625,80.560547 L 105.23438,78.779297 L 107.17969,76.763672 L 109.05469,78.591797 C 109.30467,78.123052 109.49608,77.587897 109.62891,76.986328 C 109.7617,76.384773 109.82811,75.728524 109.82813,75.017578 C 109.82811,73.119151 109.40233,71.646496 108.55078,70.599609 C 107.69921,69.544936 106.5078,69.017593 104.97656,69.017578 C 103.46093,69.017593 102.28124,69.54103 101.4375,70.587891 C 100.59374,71.634778 100.17187,73.111339 100.17188,75.017578 C 100.17187,76.916022 100.59374,78.392583 101.4375,79.447266 C 102.28124,80.494144 103.46093,81.017581 104.97656,81.017578 C 105.36718,81.017581 105.73436,80.978518 106.07813,80.900391 C 106.42968,80.822268 106.7578,80.708987 107.0625,80.560547 M 109.55859,82.916016 C 108.97264,83.306641 108.28905,83.603516 107.50781,83.806641 C 106.73436,84.009765 105.89061,84.111328 104.97656,84.111328 C 102.39843,84.111328 100.34765,83.291016 98.824219,81.650391 C 97.308592,80.009769 96.55078,77.798834 96.550781,75.017578 C 96.55078,72.228527 97.308592,70.017592 98.824219,68.384766 C 100.34765,66.744158 102.39843,65.923846 104.97656,65.923828 C 107.55468,65.923846 109.60545,66.744158 111.12891,68.384766 C 112.66014,70.025404 113.42576,72.23634 113.42578,75.017578 C 113.42576,76.236336 113.26951,77.353522 112.95703,78.369141 C 112.64451,79.376957 112.18358,80.259769 111.57422,81.017578 L 113.44922,82.810547 L 111.52734,84.826172 L 109.55859,82.916016"
+ id="text5474" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 158.94141,83.630859 L 153.99609,66.369141 L 157.67578,66.369141 L 160.62891,78.544922 L 163.125,66.369141 L 166.91016,66.369141 L 169.40625,78.544922 L 172.35938,66.369141 L 176.00391,66.369141 L 171.07031,83.630859 L 167.68359,83.630859 L 165.01172,70.412109 L 162.32813,83.630859 L 158.94141,83.630859"
+ id="text5482" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 218.52539,83.630859 L 218.52539,66.369141 L 231.05273,66.369141 L 231.05273,69.369141 L 222.0293,69.369141 L 222.0293,73.048828 L 230.2793,73.048828 L 230.2793,76.001953 L 222.0293,76.001953 L 222.0293,80.443359 L 231.47461,80.443359 L 231.47461,83.630859 L 218.52539,83.630859"
+ id="text5492" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 281.4375,73.916016 L 285.60938,73.916016 C 286.51561,73.916025 287.17968,73.732432 287.60156,73.365234 C 288.03124,72.998058 288.24608,72.419933 288.24609,71.630859 C 288.24608,70.880872 288.03905,70.314466 287.625,69.931641 C 287.21093,69.54103 286.59374,69.345717 285.77344,69.345703 L 281.4375,69.345703 L 281.4375,73.916016 M 277.88672,83.630859 L 277.88672,66.369141 L 286.25391,66.369141 C 288.13671,66.369158 289.53124,66.771501 290.4375,67.576172 C 291.34373,68.380875 291.79686,69.611342 291.79688,71.267578 C 291.79686,72.322277 291.5742,73.201182 291.12891,73.904297 C 290.69139,74.607431 290.05858,75.087899 289.23047,75.345703 C 289.98045,75.611336 290.5117,76.017586 290.82422,76.564453 C 291.14452,77.111335 291.32811,77.962896 291.375,79.119141 L 291.44531,81.158203 C 291.4453,81.173831 291.4453,81.197268 291.44531,81.228516 C 291.46873,82.259767 291.69139,82.884766 292.11328,83.103516 L 292.11328,83.630859 L 288.22266,83.630859 C 288.09764,83.388672 287.99999,83.091797 287.92969,82.740234 C 287.86718,82.380861 287.82811,81.95508 287.8125,81.462891 L 287.76563,79.646484 C 287.72655,78.576177 287.52343,77.853521 287.15625,77.478516 C 286.79686,77.103522 286.14452,76.916022 285.19922,76.916016 L 281.4375,76.916016 L 281.4375,83.630859 L 277.88672,83.630859"
+ id="text5500" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 343.24219,83.630859 L 343.24219,69.451172 L 338.12109,69.451172 L 338.12109,66.369141 L 351.87891,66.369141 L 351.87891,69.451172 L 346.79297,69.451172 L 346.79297,83.630859 L 343.24219,83.630859"
+ id="text5504" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 407.06836,83.630859 L 403.51758,83.630859 L 403.51758,77.197266 L 397.24805,66.369141 L 401.5957,66.369141 L 405.28711,73.810547 L 408.69727,66.369141 L 412.75195,66.369141 L 407.06836,77.197266 L 407.06836,83.630859"
+ id="text5518" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 458.08594,66.105469 L 461.67188,66.105469 L 461.67188,76.933594 C 461.67187,78.269536 461.93749,79.246098 462.46875,79.863281 C 462.99999,80.472659 463.84374,80.777346 465,80.777344 C 466.17187,80.777346 467.02343,80.472659 467.55469,79.863281 C 468.09374,79.25391 468.36327,78.277349 468.36328,76.933594 L 468.36328,66.105469 L 471.91406,66.105469 L 471.91406,77.320313 C 471.91405,79.437504 471.3203,81.062502 470.13281,82.195313 C 468.95311,83.328125 467.24999,83.894531 465.02344,83.894531 C 462.78124,83.894531 461.0625,83.332031 459.86719,82.207031 C 458.67969,81.074221 458.08594,79.445316 458.08594,77.320313 L 458.08594,66.105469"
+ id="text5522" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 523.22461,83.630859 L 523.22461,66.369141 L 526.77539,66.369141 L 526.77539,83.630859 L 523.22461,83.630859"
+ id="text5526" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 580.18359,75 C 580.18359,76.898444 580.60546,78.375005 581.44922,79.429688 C 582.29296,80.476566 583.47265,81.000003 584.98828,81 C 586.51952,81.000003 587.71093,80.476566 588.5625,79.429688 C 589.41405,78.375005 589.83983,76.898444 589.83984,75 C 589.83983,73.101573 589.41405,71.628918 588.5625,70.582031 C 587.71093,69.527358 586.51952,69.000015 584.98828,69 C 583.47265,69.000015 582.29296,69.523452 581.44922,70.570313 C 580.60546,71.617199 580.18359,73.093761 580.18359,75 M 576.5625,75 C 576.5625,72.210949 577.32031,70.000014 578.83594,68.367188 C 580.35937,66.726579 582.41015,65.906268 584.98828,65.90625 C 587.56639,65.906268 589.61717,66.726579 591.14063,68.367188 C 592.67186,70.007826 593.43748,72.218761 593.4375,75 C 593.43748,77.781256 592.67186,79.992191 591.14063,81.632813 C 589.61717,83.273438 587.56639,84.09375 584.98828,84.09375 C 582.41015,84.09375 580.35937,83.273438 578.83594,81.632813 C 577.32031,79.992191 576.5625,77.781256 576.5625,75"
+ id="text5530" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 641.97656,74.361328 L 645.41016,74.361328 C 646.33983,74.361337 647.01561,74.166025 647.4375,73.775391 C 647.85936,73.376963 648.0703,72.740245 648.07031,71.865234 C 648.0703,71.044934 647.86327,70.423841 647.44922,70.001953 C 647.03515,69.580092 646.41796,69.369155 645.59766,69.369141 L 641.97656,69.369141 L 641.97656,74.361328 M 641.95313,77.490234 L 641.95313,83.630859 L 638.40234,83.630859 L 638.40234,66.369141 L 646.07813,66.369141 C 647.89061,66.369158 649.26171,66.841814 650.19141,67.787109 C 651.12889,68.724624 651.59764,70.103529 651.59766,71.923828 C 651.59764,73.705088 651.14061,75.080087 650.22656,76.048828 C 649.31249,77.009772 648.0078,77.490241 646.3125,77.490234 L 641.95313,77.490234"
+ id="text5534" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 709.24805,63.919922 L 709.24805,66.369141 C 709.17772,66.369155 709.08007,66.365249 708.95508,66.357422 C 708.83007,66.349624 708.74413,66.345718 708.69727,66.345703 C 707.90819,66.345718 707.37304,66.498062 707.0918,66.802734 C 706.81835,67.099624 706.68163,67.732435 706.68164,68.701172 L 706.68164,71.513672 C 706.68163,72.66993 706.50585,73.490242 706.1543,73.974609 C 705.80273,74.458991 705.16992,74.806647 704.25586,75.017578 C 705.16992,75.228522 705.80273,75.572271 706.1543,76.048828 C 706.50585,76.525395 706.68163,77.341801 706.68164,78.498047 L 706.68164,81.322266 C 706.68163,82.283202 706.81835,82.912108 707.0918,83.208984 C 707.36523,83.505857 707.90038,83.654294 708.69727,83.654297 C 708.74413,83.654294 708.83007,83.650388 708.95508,83.642578 C 709.08007,83.634763 709.17772,83.630857 709.24805,83.630859 L 709.24805,86.080078 C 709.13866,86.080073 708.98632,86.08398 708.79102,86.091797 C 708.59569,86.099605 708.45116,86.103511 708.35742,86.103516 C 707.57616,86.103511 706.92382,86.056636 706.40039,85.962891 C 705.87695,85.869136 705.43163,85.724605 705.06445,85.529297 C 704.61913,85.263668 704.30273,84.904293 704.11523,84.451172 C 703.93554,84.005857 703.8457,83.228514 703.8457,82.119141 L 703.8457,79.166016 C 703.8457,78.095706 703.64648,77.337895 703.24805,76.892578 C 702.84961,76.439458 702.17773,76.212896 701.23242,76.212891 C 701.18554,76.212896 701.10742,76.216802 700.99805,76.224609 C 700.88867,76.232427 700.80664,76.236333 700.75195,76.236328 L 700.75195,73.787109 C 700.80664,73.787117 700.88867,73.791023 700.99805,73.798828 C 701.10742,73.806648 701.18554,73.810554 701.23242,73.810547 C 702.16992,73.810554 702.83789,73.583992 703.23633,73.130859 C 703.64257,72.677743 703.8457,71.912119 703.8457,70.833984 L 703.8457,67.904297 C 703.8457,66.787124 703.93554,66.001968 704.11523,65.548828 C 704.30273,65.095719 704.61913,64.736345 705.06445,64.470703 C 705.43163,64.275408 705.87695,64.130876 706.40039,64.037109 C 706.92382,63.943377 707.57616,63.896502 708.35742,63.896484 C 708.45116,63.896502 708.59569,63.900408 708.79102,63.908203 C 708.98632,63.916033 709.13866,63.919939 709.24805,63.919922 M 703.0957,93.966797 L 709.01367,93.966797 L 709.01367,96.462891 L 706.25977,96.462891 L 706.25977,113.8418 L 709.01367,113.8418 L 709.01367,116.33789 L 703.0957,116.33789 L 703.0957,93.966797"
+ id="text5546" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 760.75195,63.908203 L 761.54883,63.908203 C 762.4082,63.90822 763.09961,63.955095 763.62305,64.048828 C 764.14648,64.142595 764.58398,64.291033 764.93555,64.494141 C 765.38085,64.744157 765.69335,65.103532 765.87305,65.572266 C 766.06054,66.033218 766.15429,66.806655 766.1543,67.892578 L 766.1543,70.845703 C 766.15429,71.916025 766.35351,72.677743 766.75195,73.130859 C 767.15038,73.57618 767.82226,73.798836 768.76758,73.798828 C 768.81444,73.798836 768.89257,73.794929 769.00195,73.787109 C 769.11132,73.779304 769.19335,73.775398 769.24805,73.775391 L 769.24805,76.224609 L 768.81445,76.224609 C 767.83788,76.224614 767.15038,76.443364 766.75195,76.880859 C 766.35351,77.318363 766.15429,78.076175 766.1543,79.154297 L 766.1543,82.107422 C 766.15429,83.224607 766.06054,84.009763 765.87305,84.462891 C 765.69335,84.916012 765.38085,85.267574 764.93555,85.517578 C 764.56835,85.712886 764.12304,85.857417 763.59961,85.951172 C 763.07617,86.044917 762.42382,86.091792 761.64258,86.091797 C 761.54883,86.091792 761.40429,86.087886 761.20898,86.080078 C 761.01367,86.072261 760.86133,86.068355 760.75195,86.068359 L 760.75195,83.619141 C 760.82226,83.619138 760.91992,83.623044 761.04492,83.630859 C 761.16992,83.638669 761.25586,83.642576 761.30273,83.642578 C 762.09179,83.642576 762.62304,83.490232 762.89648,83.185547 C 763.17773,82.88867 763.31836,82.263671 763.31836,81.310547 L 763.31836,78.509766 C 763.31836,77.337895 763.49414,76.513677 763.8457,76.037109 C 764.19726,75.55274 764.83007,75.20899 765.74414,75.005859 C 764.83007,74.794928 764.19726,74.447272 763.8457,73.962891 C 763.49414,73.478523 763.31836,72.658212 763.31836,71.501953 L 763.31836,68.666016 C 763.31836,67.712904 763.17773,67.087905 762.89648,66.791016 C 762.62304,66.486343 762.09179,66.333999 761.30273,66.333984 C 761.25586,66.333999 761.16992,66.337906 761.04492,66.345703 C 760.91992,66.35353 760.82226,66.357437 760.75195,66.357422 L 760.75195,63.908203 M 767.00977,93.955078 L 767.00977,116.32617 L 761.08008,116.32617 L 761.08008,113.83008 L 763.8457,113.83008 L 763.8457,96.451172 L 761.08008,96.451172 L 761.08008,93.955078 L 767.00977,93.955078"
+ id="text5554" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 823.79883,62.977287 L 826.21289,62.977287 L 826.21289,86.977287 L 823.79883,86.977287 L 823.79883,62.977287 M 827.10352,113.54369 L 821.29102,93.6101 L 822.87305,93.6101 L 828.70898,113.54369 L 827.10352,113.54369"
+ id="text5564" />
+ <g
+ id="g3597">
+ <path
+ id="text5570"
+ d="M 22.996094,139.10156 C 22.907541,140.40886 22.403635,141.44792 21.484375,142.21875 C 20.565095,142.98958 19.365878,143.375 17.886719,143.375 C 16.183589,143.375 14.859372,142.84375 13.914063,141.78125 C 12.968749,140.71875 12.496093,139.22917 12.496094,137.3125 C 12.496093,135.35417 12.977863,133.85418 13.941406,132.8125 C 14.904945,131.77084 16.29036,131.25001 18.097656,131.25 C 19.566398,131.25001 20.726554,131.60808 21.578125,132.32422 C 22.429677,133.04037 22.897124,134.05209 22.980469,135.35938 L 20.644531,135.35938 C 20.545564,134.70834 20.279939,134.21225 19.847656,133.87109 C 19.415357,133.52996 18.832024,133.35938 18.097656,133.35938 C 17.055984,133.35938 16.264318,133.69532 15.722656,134.36719 C 15.180986,135.03907 14.910153,136.02084 14.910156,137.3125 C 14.910153,138.5625 15.179684,139.52865 15.71875,140.21094 C 16.257808,140.89323 17.024734,141.23438 18.019531,141.23438 C 18.738274,141.23438 19.326815,141.05078 19.785156,140.68359 C 20.243481,140.31641 20.540356,139.78907 20.675781,139.10156 L 22.996094,139.10156 z M 29.558594,142 C 29.27213,142.44271 28.89713,142.77995 28.433594,143.01172 C 27.970048,143.24349 27.430986,143.35937 26.816406,143.35938 C 25.993487,143.35937 25.359373,143.125 24.914063,142.65625 C 24.468749,142.1875 24.246093,141.52083 24.246094,140.65625 C 24.246093,139.85417 24.468749,139.24219 24.914063,138.82031 C 25.359373,138.39844 26.09505,138.10938 27.121094,137.95313 C 27.355465,137.91667 27.662756,137.87501 28.042969,137.82813 C 29.006505,137.70313 29.488275,137.42448 29.488281,136.99219 C 29.488275,136.64844 29.381505,136.40235 29.167969,136.25391 C 28.954422,136.10548 28.597651,136.03126 28.097656,136.03125 C 27.639319,136.03126 27.287757,136.1224 27.042969,136.30469 C 26.798174,136.48699 26.675778,136.7474 26.675781,137.08594 L 26.675781,137.21094 L 24.550781,137.21094 L 24.550781,137.05469 C 24.55078,136.1849 24.858072,135.50131 25.472656,135.00391 C 26.087237,134.50652 26.936195,134.25782 28.019531,134.25781 C 29.207026,134.25782 30.117181,134.46355 30.75,134.875 C 31.382805,135.28647 31.699211,135.88022 31.699219,136.65625 L 31.699219,141.48438 C 31.699211,141.83854 31.735669,142.10287 31.808594,142.27734 C 31.881502,142.45182 32.003898,142.58333 32.175781,142.67188 L 32.175781,143.05469 L 29.808594,143.05469 C 29.730463,142.90885 29.670567,142.7474 29.628906,142.57031 C 29.587234,142.39323 29.563796,142.20313 29.558594,142 L 29.558594,142 z M 29.519531,138.875 C 29.149734,139.04688 28.723953,139.1849 28.242188,139.28906 C 27.760413,139.39323 27.511715,139.44792 27.496094,139.45313 C 27.095049,139.56771 26.815101,139.71094 26.65625,139.88281 C 26.497393,140.05469 26.417966,140.29167 26.417969,140.59375 C 26.417966,140.90625 26.519528,141.15495 26.722656,141.33984 C 26.925778,141.52474 27.199215,141.61719 27.542969,141.61719 C 28.157548,141.61719 28.64062,141.44401 28.992188,141.09766 C 29.343744,140.7513 29.519525,140.27865 29.519531,139.67969 L 29.519531,138.875 z M 39.691406,138.85938 C 39.691399,138.00521 39.529941,137.35287 39.207031,136.90234 C 38.884108,136.45183 38.415359,136.22657 37.800781,136.22656 C 37.19661,136.22657 36.736975,136.45053 36.421875,136.89844 C 36.106767,137.34636 35.949216,138.00001 35.949219,138.85938 C 35.949216,139.66146 36.11458,140.28125 36.445313,140.71875 C 36.776038,141.15625 37.243485,141.375 37.847656,141.375 C 38.420567,141.375 38.871088,141.15104 39.199219,140.70313 C 39.527337,140.25521 39.691399,139.64063 39.691406,138.85938 L 39.691406,138.85938 z M 33.738281,146.46094 L 33.738281,134.5625 L 35.902344,134.5625 L 35.902344,135.71094 C 36.230465,135.21095 36.59635,134.84636 37,134.61719 C 37.403641,134.38803 37.878901,134.27345 38.425781,134.27344 C 39.472649,134.27345 40.321607,134.68621 40.972656,135.51172 C 41.623689,136.33725 41.94921,137.42188 41.949219,138.76563 C 41.94921,140.125 41.623689,141.22787 40.972656,142.07422 C 40.321607,142.92057 39.483066,143.34375 38.457031,143.34375 C 37.915359,143.34375 37.432287,143.22917 37.007813,143 C 36.583329,142.77083 36.230465,142.4375 35.949219,142 L 35.949219,146.46094 L 33.738281,146.46094 z M 43.027344,140.28906 L 45.292969,140.28906 C 45.313799,140.72136 45.470049,141.04297 45.761719,141.25391 C 46.053382,141.46485 46.490881,141.57031 47.074219,141.57031 C 47.516922,141.57031 47.85937,141.4961 48.101563,141.34766 C 48.343744,141.19922 48.464838,140.98959 48.464844,140.71875 C 48.464838,140.33334 48.011713,140.04427 47.105469,139.85156 C 46.735673,139.77344 46.441402,139.70573 46.222656,139.64844 C 45.118487,139.36719 44.351561,139.03386 43.921875,138.64844 C 43.492187,138.26303 43.277343,137.74219 43.277344,137.08594 C 43.277343,136.21615 43.591145,135.52735 44.21875,135.01953 C 44.846352,134.51173 45.696611,134.25782 46.769531,134.25781 C 47.904943,134.25782 48.796869,134.51043 49.445313,135.01563 C 50.093742,135.52084 50.438794,136.23178 50.480469,137.14844 L 48.269531,137.14844 C 48.253901,136.78907 48.117182,136.51042 47.859375,136.3125 C 47.601557,136.11459 47.243485,136.01563 46.785156,136.01563 C 46.352861,136.01563 46.031246,136.08074 45.820313,136.21094 C 45.609372,136.34115 45.503903,136.53646 45.503906,136.79688 C 45.503903,137.13542 46.069007,137.4349 47.199219,137.69531 C 47.45963,137.75261 47.665359,137.79948 47.816406,137.83594 C 48.946608,138.10157 49.718743,138.42188 50.132813,138.79688 C 50.546867,139.17188 50.753898,139.70052 50.753906,140.38281 C 50.753898,141.34636 50.414055,142.08073 49.734375,142.58594 C 49.054681,143.09115 48.066401,143.34375 46.769531,143.34375 C 45.597653,143.34375 44.680987,143.08073 44.019531,142.55469 C 43.358072,142.02865 43.027343,141.30469 43.027344,140.38281 L 43.027344,140.28906 z M 57.011719,143.05469 L 57.011719,131.54688 L 59.378906,131.54688 L 59.378906,140.92969 L 64.996094,140.92969 L 64.996094,143.05469 L 57.011719,143.05469 z M 67.972656,138.79688 C 67.972653,139.64063 68.14583,140.29167 68.492188,140.75 C 68.838538,141.20834 69.332027,141.4375 69.972656,141.4375 C 70.602859,141.4375 71.09114,141.20834 71.4375,140.75 C 71.783847,140.29167 71.957024,139.64063 71.957031,138.79688 C 71.957024,137.95834 71.78515,137.3112 71.441406,136.85547 C 71.09765,136.39975 70.608067,136.17188 69.972656,136.17188 C 69.332027,136.17188 68.838538,136.39975 68.492188,136.85547 C 68.14583,137.3112 67.972653,137.95834 67.972656,138.79688 L 67.972656,138.79688 z M 65.667969,138.79688 C 65.667968,137.38542 66.05078,136.27605 66.816406,135.46875 C 67.582029,134.66147 68.634111,134.25782 69.972656,134.25781 C 71.305983,134.25782 72.356764,134.66147 73.125,135.46875 C 73.89322,136.27605 74.277335,137.38542 74.277344,138.79688 C 74.277335,140.21354 73.89322,141.32552 73.125,142.13281 C 72.356764,142.9401 71.305983,143.34375 69.972656,143.34375 C 68.634111,143.34375 67.582029,142.9401 66.816406,142.13281 C 66.05078,141.32552 65.667968,140.21354 65.667969,138.79688 L 65.667969,138.79688 z M 80.949219,139.85156 L 83.191406,139.85156 C 83.097648,140.92969 82.704419,141.78125 82.011719,142.40625 C 81.319004,143.03125 80.42838,143.34375 79.339844,143.34375 C 78.105465,143.34375 77.138019,142.94141 76.4375,142.13672 C 75.736978,141.33203 75.386718,140.21875 75.386719,138.79688 C 75.386718,137.38021 75.744791,136.26954 76.460938,135.46484 C 77.177081,134.66016 78.162757,134.25782 79.417969,134.25781 C 80.516921,134.25782 81.398431,134.54949 82.0625,135.13281 C 82.726555,135.71615 83.097648,136.52865 83.175781,137.57031 L 80.917969,137.57031 C 80.855463,137.11719 80.696609,136.77084 80.441406,136.53125 C 80.186193,136.29167 79.850255,136.17188 79.433594,136.17188 C 78.87109,136.17188 78.450517,136.39324 78.171875,136.83594 C 77.893226,137.27865 77.753903,137.94271 77.753906,138.82813 C 77.753903,139.64584 77.898434,140.27474 78.1875,140.71484 C 78.476559,141.15495 78.891923,141.375 79.433594,141.375 C 79.855464,141.375 80.194005,141.2474 80.449219,140.99219 C 80.704421,140.73698 80.871088,140.35677 80.949219,139.85156 L 80.949219,139.85156 z M 84.675781,143.05469 L 84.675781,131.54688 L 86.886719,131.54688 L 86.886719,137.58594 L 89.589844,134.5625 L 92.324219,134.5625 L 89.363281,137.71094 L 92.503906,143.05469 L 89.777344,143.05469 L 87.746094,139.4375 L 86.886719,140.36719 L 86.886719,143.05469 L 84.675781,143.05469 z "
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT" />
+ <path
+ id="path5584"
+ d="M 23.746094,146.25 L 12.496094,161.25 L 19.996094,161.25 L 19.996094,168.75 L 27.496094,168.75 L 27.496094,161.25 L 34.996094,161.25 L 23.746094,146.25 z M 22.714844,150.46875 L 24.746094,150.46875 L 27.871094,159.09375 L 25.996094,159.09375 L 25.402344,157.3125 L 22.058594,157.3125 L 21.496094,159.09375 L 19.621094,159.09375 L 22.714844,150.46875 z M 23.746094,152.1875 L 22.527344,155.84375 L 24.933594,155.84375 L 23.746094,152.1875 z "
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 119.9707,129.82617 L 117.58008,137.17383 L 122.37305,137.17383 L 119.9707,129.82617 M 117.9082,126.36914 L 122.00977,126.36914 L 128.23242,143.63086 L 124.50586,143.63086 L 123.33398,140.08008 L 116.64258,140.08008 L 115.50586,143.63086 L 111.76758,143.63086 L 117.9082,126.36914"
+ id="text5641" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 172.98047,138.29297 L 176.48438,138.29297 C 176.61718,139.23829 177.0039,139.94141 177.64453,140.40234 C 178.28515,140.85547 179.21093,141.08203 180.42188,141.08203 C 181.45312,141.08203 182.23046,140.89844 182.75391,140.53125 C 183.27733,140.16407 183.53905,139.6211 183.53906,138.90234 C 183.53905,137.85547 182.03515,136.98829 179.02734,136.30078 C 178.98827,136.29298 178.95312,136.28516 178.92188,136.27734 C 178.84374,136.26173 178.72265,136.23438 178.55859,136.19531 C 176.94921,135.84376 175.80078,135.44923 175.11328,135.01172 C 174.5039,134.6211 174.03906,134.09767 173.71875,133.44141 C 173.39844,132.77735 173.23828,131.99611 173.23828,131.09766 C 173.23828,129.41798 173.80859,128.13283 174.94922,127.24219 C 176.08984,126.34377 177.73828,125.89455 179.89453,125.89453 C 181.91015,125.89455 183.48436,126.37111 184.61719,127.32422 C 185.7578,128.27736 186.35936,129.62111 186.42188,131.35547 L 183.01172,131.35547 C 182.94921,130.51954 182.6289,129.88283 182.05078,129.44531 C 181.47265,129.00783 180.64843,128.78908 179.57813,128.78906 C 178.64843,128.78908 177.92968,128.97267 177.42188,129.33984 C 176.92187,129.69923 176.67187,130.21486 176.67188,130.88672 C 176.67187,131.80079 177.65234,132.48439 179.61328,132.9375 C 180.14452,133.06251 180.55859,133.16017 180.85547,133.23047 C 182.11327,133.55079 183.0039,133.80079 183.52734,133.98047 C 184.05858,134.16017 184.51952,134.35938 184.91016,134.57813 C 185.61327,134.96876 186.14061,135.48829 186.49219,136.13672 C 186.84374,136.77735 187.01952,137.54688 187.01953,138.44531 C 187.01952,140.24219 186.41405,141.63672 185.20313,142.62891 C 183.99218,143.61328 182.28515,144.10547 180.08203,144.10547 C 177.91015,144.10547 176.20703,143.60156 174.97266,142.59375 C 173.73828,141.58594 173.07422,140.15235 172.98047,138.29297"
+ id="text5645" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 236.16211,140.51367 L 239.00977,140.51367 C 240.65819,140.51367 241.8496,140.08399 242.58398,139.22461 C 243.32616,138.35743 243.69725,136.95508 243.69727,135.01758 C 243.69725,133.0879 243.3535,131.66993 242.66602,130.76367 C 241.9785,129.85744 240.90429,129.40431 239.44336,129.4043 L 236.16211,129.4043 L 236.16211,140.51367 M 232.68164,143.63086 L 232.68164,126.36914 L 239.44336,126.36914 C 242.09179,126.36916 244.06444,127.084 245.36133,128.51367 C 246.666,129.94337 247.31834,132.11134 247.31836,135.01758 C 247.31834,136.59571 247.07616,137.98633 246.5918,139.18945 C 246.11522,140.39258 245.41991,141.36133 244.50586,142.0957 C 243.81835,142.64258 243.0371,143.03711 242.16211,143.2793 C 241.2871,143.51367 240.06054,143.63086 238.48242,143.63086 L 232.68164,143.63086"
+ id="text5649" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 293.97656,143.63086 L 293.97656,126.36914 L 306.02344,126.36914 L 306.02344,129.36914 L 297.48047,129.36914 L 297.48047,133.2832 L 304.96875,133.2832 L 304.96875,136.2832 L 297.48047,136.2832 L 297.48047,143.63086 L 293.97656,143.63086"
+ id="text5653" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 365.17969,141.57422 C 364.53905,142.44141 363.80858,143.07813 362.98828,143.48438 C 362.17577,143.89062 361.21874,144.09375 360.11719,144.09375 C 357.70312,144.09375 355.74609,143.25781 354.24609,141.58594 C 352.7539,139.90625 352.00781,137.70313 352.00781,134.97656 C 352.00781,132.22657 352.7539,130.02736 354.24609,128.37891 C 355.73828,126.73049 357.72656,125.90627 360.21094,125.90625 C 362.37499,125.90627 364.14061,126.4258 365.50781,127.46484 C 366.87498,128.49611 367.68748,129.91798 367.94531,131.73047 L 364.32422,131.73047 C 364.10546,130.83204 363.65624,130.14845 362.97656,129.67969 C 362.30468,129.21095 361.42577,128.97658 360.33984,128.97656 C 358.89452,128.97658 357.75781,129.50783 356.92969,130.57031 C 356.10937,131.62501 355.69921,133.08595 355.69922,134.95313 C 355.69921,136.82813 356.1289,138.29688 356.98828,139.35938 C 357.84765,140.42188 359.02734,140.95313 360.52734,140.95313 C 361.65233,140.95313 362.59374,140.6211 363.35156,139.95703 C 364.10936,139.29297 364.57811,138.38282 364.75781,137.22656 L 360.84375,137.22656 L 360.84375,134.27344 L 367.99219,134.27344 L 367.99219,143.61328 L 365.61328,143.61328 L 365.17969,141.57422"
+ id="text5657" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 412.86328,143.63086 L 412.86328,126.36914 L 416.4375,126.36914 L 416.4375,132.80273 L 423.5625,132.80273 L 423.5625,126.36914 L 427.13672,126.36914 L 427.13672,143.63086 L 423.5625,143.63086 L 423.5625,135.97852 L 416.4375,135.97852 L 416.4375,143.63086 L 412.86328,143.63086"
+ id="text5661" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 474.48047,136.95703 L 477.91406,136.95703 L 477.91406,139.04297 C 477.91406,139.64453 478.09375,140.10547 478.45313,140.42578 C 478.8125,140.73828 479.32812,140.89453 480,140.89453 C 480.73437,140.89453 481.24609,140.70313 481.53516,140.32031 C 481.82421,139.9375 481.96874,139.21875 481.96875,138.16406 L 481.96875,126.12891 L 485.51953,126.12891 L 485.51953,138.32813 C 485.51952,139.42188 485.45311,140.22657 485.32031,140.74219 C 485.1953,141.25 484.98436,141.69922 484.6875,142.08984 C 484.23436,142.66797 483.61327,143.10938 482.82422,143.41406 C 482.03515,143.71875 481.10937,143.87109 480.04688,143.87109 C 479.07031,143.87109 478.20703,143.73828 477.45703,143.47266 C 476.70703,143.20703 476.08203,142.8125 475.58203,142.28906 C 475.18359,141.86719 474.89844,141.39844 474.72656,140.88281 C 474.5625,140.35938 474.48047,139.5 474.48047,138.30469 L 474.48047,136.95703"
+ id="text5665" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 532.32422,143.63086 L 532.32422,126.36914 L 535.875,126.36914 L 535.875,133.45898 L 542.61328,126.36914 L 547.05469,126.36914 L 540.16406,133.35352 L 547.67578,143.63086 L 543.33984,143.63086 L 537.71484,135.73242 L 535.875,137.56055 L 535.875,143.63086 L 532.32422,143.63086"
+ id="text5669" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 594.01172,143.63086 L 594.01172,126.36914 L 597.5625,126.36914 L 597.5625,140.44336 L 605.98828,140.44336 L 605.98828,143.63086 L 594.01172,143.63086"
+ id="text5673" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 143.15039,203.63086 L 143.15039,200.63086 L 152.53711,189.49805 L 143.33789,189.49805 L 143.33789,186.36914 L 156.84961,186.36914 L 156.84961,189.36914 L 147.43945,200.51367 L 156.63867,200.51367 L 156.63867,203.63086 L 143.15039,203.63086"
+ id="text5679" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 202.37109,203.63086 L 207.79688,194.81836 L 202.37109,186.36914 L 206.47266,186.36914 L 210,192.4043 L 213.50391,186.36914 L 217.62891,186.36914 L 212.20313,194.79492 L 217.62891,203.63086 L 213.52734,203.63086 L 210,197.6543 L 206.47266,203.63086 L 202.37109,203.63086"
+ id="text5683" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 277.875,197.68359 C 277.74217,199.64454 276.98436,201.20313 275.60156,202.35938 C 274.22655,203.51563 272.42968,204.09375 270.21094,204.09375 C 267.65624,204.09375 265.66796,203.29688 264.24609,201.70313 C 262.83203,200.10938 262.125,197.87501 262.125,195 C 262.125,192.06251 262.84765,189.81251 264.29297,188.25 C 265.73828,186.68752 267.8164,185.90627 270.52734,185.90625 C 272.73046,185.90627 274.46874,186.44533 275.74219,187.52344 C 277.02342,188.59377 277.72655,190.10939 277.85156,192.07031 L 274.34766,192.07031 C 274.19921,191.09376 273.80077,190.35158 273.15234,189.84375 C 272.50389,189.32814 271.6289,189.07033 270.52734,189.07031 C 268.96484,189.07033 267.77734,189.57423 266.96484,190.58203 C 266.15234,191.58986 265.74609,193.06251 265.74609,195 C 265.74609,196.87501 266.14843,198.32422 266.95313,199.34766 C 267.76562,200.3711 268.91796,200.88282 270.41016,200.88281 C 271.48827,200.88282 272.37108,200.60938 273.05859,200.0625 C 273.74608,199.50782 274.19139,198.71485 274.39453,197.68359 L 277.875,197.68359"
+ id="text5687" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 328.33594,203.63086 L 322.38281,186.36914 L 326.32031,186.36914 L 329.98828,199.2832 L 333.72656,186.36914 L 337.61719,186.36914 L 331.73438,203.63086 L 328.33594,203.63086"
+ id="text5691" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 386.32031,200.51367 L 390.52734,200.51367 C 391.51952,200.51367 392.24218,200.33399 392.69531,199.97461 C 393.14843,199.61524 393.37499,199.04883 393.375,198.27539 C 393.37499,197.47071 393.15233,196.89258 392.70703,196.54102 C 392.26171,196.18165 391.52733,196.00196 390.50391,196.00195 L 386.32031,196.00195 L 386.32031,200.51367 M 386.32031,193.04883 L 390.375,193.04883 C 391.24999,193.04884 391.89061,192.9004 392.29688,192.60352 C 392.70311,192.29884 392.90624,191.82228 392.90625,191.17383 C 392.90624,190.54103 392.70702,190.084 392.30859,189.80273 C 391.91796,189.51369 391.26561,189.36915 390.35156,189.36914 L 386.32031,189.36914 L 386.32031,193.04883 M 382.92188,203.63086 L 382.92188,186.36914 L 391.05469,186.36914 C 392.8203,186.36916 394.16405,186.74416 395.08594,187.49414 C 396.01561,188.23634 396.48045,189.31837 396.48047,190.74023 C 396.48045,191.61525 396.30858,192.34571 395.96484,192.93164 C 395.62108,193.51759 395.10545,193.97071 394.41797,194.29102 C 395.30858,194.6504 395.97264,195.16993 396.41016,195.84961 C 396.85545,196.52149 397.07811,197.36133 397.07813,198.36914 C 397.07811,200.04883 396.53123,201.34571 395.4375,202.25977 C 394.34374,203.17383 392.79296,203.63086 390.78516,203.63086 L 382.92188,203.63086"
+ id="text5695" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 442.88672,203.63086 L 442.88672,186.36914 L 446.60156,186.36914 L 453.60938,198.22852 L 453.60938,186.36914 L 457.11328,186.36914 L 457.11328,203.63086 L 453.44531,203.63086 L 446.39063,191.77148 L 446.39063,203.63086 L 442.88672,203.63086"
+ id="text5699" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 501.32813,203.63086 L 501.32813,186.36914 L 506.57813,186.36914 L 510.01172,199.50586 L 513.39844,186.36914 L 518.67188,186.36914 L 518.67188,203.63086 L 515.34375,203.63086 L 515.34375,189.70898 L 511.83984,203.63086 L 508.20703,203.63086 L 504.65625,189.70898 L 504.65625,203.63086 L 501.32813,203.63086"
+ id="text5703" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 658.22461,134.6543 L 658.22461,131.10352 L 661.77539,131.10352 L 661.77539,134.6543 L 658.22461,134.6543 M 658.22461,143.63086 L 658.22461,140.10352 L 661.77539,140.10352 L 661.77539,143.63086 L 658.22461,143.63086 M 658.24805,164.6543 L 658.24805,161.10352 L 661.77539,161.10352 L 661.77539,164.6543 L 658.24805,164.6543 M 658.24805,177.68555 L 658.24805,176.31445 C 658.90429,176.12695 659.38867,175.83789 659.70117,175.44727 C 660.01367,175.05664 660.16992,174.54883 660.16992,173.92383 L 660.16992,173.63086 L 658.22461,173.63086 L 658.22461,170.10352 L 661.77539,170.10352 L 661.77539,173.49023 C 661.77539,174.66211 661.47851,175.59961 660.88477,176.30273 C 660.29101,177.01367 659.41211,177.47461 658.24805,177.68555"
+ id="text5725" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 720.78516,126.7793 L 723.03516,126.7793 L 723.03516,133.33008 L 720.78516,133.33008 L 720.78516,126.7793 M 716.96484,126.7793 L 719.21484,126.7793 L 719.21484,133.33008 L 716.96484,133.33008 L 716.96484,126.7793 M 718.88672,156.7793 L 721.13672,156.7793 L 721.13672,163.33008 L 718.88672,163.33008 L 718.88672,156.7793"
+ id="text5731" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 772.5,140.60938 L 772.5,129.10156 L 780.85156,129.10156 L 780.85156,131.10156 L 774.83594,131.10156 L 774.83594,133.55469 L 780.33594,133.55469 L 780.33594,135.52344 L 774.83594,135.52344 L 774.83594,138.48438 L 781.13281,138.48438 L 781.13281,140.60938 L 772.5,140.60938 M 782.74219,140.60938 L 782.74219,132.11719 L 784.96875,132.11719 L 784.96875,133.125 C 785.28645,132.71355 785.66145,132.40626 786.09375,132.20313 C 786.52604,131.9948 787.00781,131.89063 787.53906,131.89063 C 788.47656,131.89063 789.17708,132.13543 789.64063,132.625 C 790.10937,133.10938 790.34374,133.84115 790.34375,134.82031 L 790.34375,140.60938 L 788.07031,140.60938 L 788.07031,135.47656 C 788.07031,134.86719 787.96614,134.4323 787.75781,134.17188 C 787.55468,133.91147 787.22135,133.78126 786.75781,133.78125 C 786.22135,133.78126 785.79687,133.94271 785.48438,134.26563 C 785.17187,134.58334 785.01562,135.01823 785.01563,135.57031 L 785.01563,140.60938 L 782.74219,140.60938 M 796.07813,140.67188 C 795.86979,140.67708 795.61979,140.6849 795.32813,140.69531 C 795.04166,140.71094 794.85937,140.71875 794.78125,140.71875 C 793.91146,140.71875 793.3151,140.55729 792.99219,140.23438 C 792.67448,139.90625 792.51562,139.26302 792.51563,138.30469 L 792.51563,133.71094 L 791.39063,133.71094 L 791.39063,132.11719 L 792.51563,132.11719 L 792.51563,129.79688 L 794.76563,129.79688 L 794.76563,132.11719 L 796.07813,132.11719 L 796.07813,133.71094 L 794.76563,133.71094 L 794.76563,138.41406 C 794.76562,138.63802 794.8151,138.78646 794.91406,138.85938 C 795.01302,138.92709 795.21614,138.96094 795.52344,138.96094 L 796.07813,138.96094 L 796.07813,140.67188 M 802.63281,138.03125 L 804.89844,138.03125 C 804.66926,138.92709 804.20572,139.63021 803.50781,140.14063 C 802.8151,140.64583 801.96874,140.89844 800.96875,140.89844 C 799.73958,140.89844 798.76562,140.48698 798.04688,139.66406 C 797.32812,138.83594 796.96875,137.71615 796.96875,136.30469 C 796.96875,134.91407 797.32292,133.81772 798.03125,133.01563 C 798.73958,132.21355 799.70833,131.81251 800.9375,131.8125 C 802.23958,131.81251 803.24478,132.20834 803.95313,133 C 804.66145,133.78647 805.01562,134.90886 805.01563,136.36719 C 805.01562,136.52865 805.01301,136.65105 805.00781,136.73438 C 805.0078,136.8125 805.0026,136.88802 804.99219,136.96094 L 799.32031,136.96094 C 799.35156,137.62761 799.51302,138.13021 799.80469,138.46875 C 800.10156,138.80729 800.52604,138.97656 801.07813,138.97656 C 801.46874,138.97656 801.78906,138.90104 802.03906,138.75 C 802.28906,138.59375 802.48697,138.35417 802.63281,138.03125 M 799.32031,135.46875 L 802.66406,135.46875 C 802.64322,134.89584 802.48958,134.46094 802.20313,134.16406 C 801.92187,133.86199 801.51562,133.71094 800.98438,133.71094 C 800.48958,133.71094 800.09895,133.86199 799.8125,134.16406 C 799.53125,134.46615 799.36718,134.90105 799.32031,135.46875 M 806.52344,140.60938 L 806.52344,132.11719 L 808.63281,132.11719 L 808.63281,133.57031 C 808.92968,132.98699 809.27604,132.5599 809.67188,132.28906 C 810.0677,132.01303 810.53906,131.87501 811.08594,131.875 C 811.17447,131.87501 811.24218,131.87761 811.28906,131.88281 C 811.34114,131.88282 811.38281,131.88543 811.41406,131.89063 L 811.42188,134.19531 L 810.66406,134.19531 C 810.04427,134.19532 809.57812,134.35678 809.26563,134.67969 C 808.95312,135.00261 808.79687,135.48178 808.79688,136.11719 L 808.79688,140.60938 L 806.52344,140.60938"
+ id="text5737" />
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 787.5,172.5 L 787.5,157.5 L 772.5,165 L 787.5,172.5 z "
+ id="path5745" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 810,150 L 810,165 L 780,165"
+ id="path5747" />
+ <g
+ id="g3601">
+ <path
+ id="text5753"
+ d="M 12.496094,197.64063 L 14.832032,197.64063 C 14.92057,198.27084 15.178382,198.73828 15.605469,199.04297 C 16.032548,199.34766 16.649735,199.5 17.457032,199.5 C 18.144525,199.5 18.662754,199.37761 19.011719,199.13281 C 19.36067,198.88802 19.535149,198.52604 19.535157,198.04688 C 19.535149,197.34896 18.532546,196.77084 16.527344,196.3125 C 16.501298,196.3073 16.47786,196.30209 16.457032,196.29688 C 16.404944,196.28646 16.324215,196.26823 16.214844,196.24219 C 15.141924,196.00782 14.3763,195.7448 13.917969,195.45313 C 13.511717,195.19271 13.201822,194.84245 12.988282,194.40234 C 12.774739,193.96225 12.667968,193.44272 12.667969,192.84375 C 12.667968,191.72397 13.048176,190.8659 13.808594,190.26953 C 14.569008,189.67319 15.667965,189.37501 17.105469,189.375 C 18.449212,189.37501 19.499993,189.69272 20.257813,190.32813 C 21.015616,190.96355 21.415355,191.85938 21.457032,193.01563 L 19.183594,193.01563 C 19.14192,192.45834 18.928379,192.03386 18.542969,191.74219 C 18.157546,191.45053 17.608067,191.3047 16.894532,191.30469 C 16.274735,191.3047 15.796871,191.42579 15.460938,191.66797 C 15.124997,191.91017 14.957028,192.25522 14.957032,192.70313 C 14.957028,193.31251 15.610674,193.76824 16.917969,194.07031 C 17.27213,194.15365 17.548172,194.21876 17.746094,194.26563 C 18.584629,194.47917 19.17968,194.64584 19.53125,194.76563 C 19.882805,194.88542 20.188794,195.01824 20.449219,195.16406 C 20.91796,195.42448 21.269522,195.76954 21.503907,196.19922 C 21.738272,196.62891 21.855459,197.14323 21.855469,197.74219 C 21.855459,198.94011 21.451814,199.86849 20.644532,200.52734 C 19.837232,201.1862 18.699212,201.51562 17.230469,201.51563 C 15.782548,201.51562 14.647133,201.17969 13.824219,200.50781 C 13.001301,199.83594 12.558593,198.88021 12.496094,197.64063 L 12.496094,197.64063 z M 23.566407,201.19531 L 23.566407,189.6875 L 25.824219,189.6875 L 25.824219,193.64063 C 26.131507,193.25522 26.497392,192.96485 26.921875,192.76953 C 27.34635,192.57423 27.82161,192.47657 28.347657,192.47656 C 28.84765,192.47657 29.299473,192.56251 29.703125,192.73438 C 30.106764,192.90626 30.433586,193.15105 30.683594,193.46875 C 30.855461,193.6823 30.976554,193.92709 31.046875,194.20313 C 31.117179,194.47917 31.152335,194.92188 31.152344,195.53125 L 31.152344,195.6875 L 31.152344,201.19531 L 28.894532,201.19531 L 28.894532,196.75 C 28.894525,195.69792 28.798171,195.03777 28.605469,194.76953 C 28.412755,194.50131 28.066401,194.36719 27.566407,194.36719 C 27.029944,194.36719 26.605465,194.52735 26.292969,194.84766 C 25.980466,195.16797 25.824216,195.60417 25.824219,196.15625 L 25.824219,201.19531 L 23.566407,201.19531 z M 33.191407,191.75781 L 33.191407,189.6875 L 35.464844,189.6875 L 35.464844,191.75781 L 33.191407,191.75781 z M 33.191407,201.19531 L 33.191407,192.70313 L 35.464844,192.70313 L 35.464844,201.19531 L 33.191407,201.19531 z M 37.886719,201.19531 L 37.886719,194.29688 L 36.675782,194.29688 L 36.675782,192.70313 L 37.886719,192.70313 L 37.886719,191.91406 C 37.886718,191.12241 38.091144,190.54038 38.5,190.16797 C 38.908852,189.79558 39.553383,189.60939 40.433594,189.60938 C 40.595048,189.60939 40.765621,189.61329 40.945313,189.62109 C 41.124996,189.62892 41.316402,189.64324 41.519532,189.66406 L 41.519532,191.46875 L 40.925782,191.46875 C 40.587236,191.46876 40.36458,191.51303 40.257813,191.60156 C 40.151038,191.69011 40.097653,191.85938 40.097657,192.10938 L 40.097657,192.70313 L 41.519532,192.70313 L 41.519532,194.29688 L 40.113282,194.29688 L 40.113282,201.19531 L 37.886719,201.19531 z M 46.449219,201.25781 C 46.240881,201.26302 45.992183,201.27214 45.703125,201.28516 C 45.414059,201.29818 45.230465,201.30469 45.152344,201.30469 C 44.28255,201.30469 43.687498,201.14193 43.367188,200.81641 C 43.046874,200.49089 42.886718,199.84896 42.886719,198.89063 L 42.886719,194.29688 L 41.761719,194.29688 L 41.761719,192.70313 L 42.886719,192.70313 L 42.886719,190.38281 L 45.136719,190.38281 L 45.136719,192.70313 L 46.449219,192.70313 L 46.449219,194.29688 L 45.136719,194.29688 L 45.136719,199 C 45.136716,199.22396 45.186195,199.3711 45.285157,199.44141 C 45.384111,199.51172 45.587236,199.54688 45.894532,199.54688 L 46.449219,199.54688 L 46.449219,201.25781 z "
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 24.746094,207.125 L 13.496094,222.125 L 20.996094,222.125 L 20.996094,229.625 L 28.496094,229.625 L 28.496094,222.125 L 35.996094,222.125 L 24.746094,207.125 z "
+ id="path5757" />
+ </g>
+ <g
+ id="g5795"
+ transform="translate(727.5,0)">
+ <text
+ sodipodi:linespacing="125%"
+ id="text5797"
+ y="201.19531"
+ x="31.8125"
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ xml:space="preserve"><tspan
+ y="201.19531"
+ x="31.8125"
+ id="tspan5799"
+ sodipodi:role="line">Shift</tspan></text>
+ <path
+ id="path5801"
+ d="M 27.25,207.125 L 16,222.125 L 23.5,222.125 L 23.5,229.625 L 31,229.625 L 31,222.125 L 38.5,222.125 L 27.25,207.125 z "
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 576.90234,189.63867 L 576.90234,192.20508 L 566.4375,196.48242 L 576.90234,200.74805 L 576.90234,203.31445 L 563.09766,197.63086 L 563.09766,195.29883 L 576.90234,189.63867 M 568.21875,237.68555 L 568.21875,236.31445 C 568.875,236.12695 569.35937,235.83789 569.67188,235.44727 C 569.98437,235.05664 570.14062,234.54883 570.14063,233.92383 L 570.14063,233.63086 L 568.21875,233.63086 L 568.21875,230.10352 L 571.76953,230.10352 L 571.76953,233.49023 C 571.76953,234.6543 571.46875,235.59179 570.86719,236.30273 C 570.27343,237.01367 569.39062,237.47461 568.21875,237.68555"
+ id="text5803" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 623.09766,189.63867 L 636.90234,195.29883 L 636.90234,197.63086 L 623.09766,203.31445 L 623.09766,200.74805 L 633.58594,196.48242 L 623.09766,192.20508 L 623.09766,189.63867 M 628.21875,233.63086 L 628.21875,230.10352 L 631.74609,230.10352 L 631.74609,233.63086 L 628.21875,233.63086"
+ id="text5813" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 688.44727,198.61523 C 688.44726,198.5293 688.44335,198.41602 688.43555,198.27539 C 688.42773,198.12696 688.42382,198.01758 688.42383,197.94727 C 688.42382,197.25977 688.49804,196.68946 688.64648,196.23633 C 688.79492,195.7754 689.0332,195.34571 689.36133,194.94727 C 689.61132,194.6504 689.98242,194.31056 690.47461,193.92773 C 690.9746,193.54493 691.29882,193.26759 691.44727,193.0957 C 691.75976,192.74415 691.9746,192.42775 692.0918,192.14648 C 692.20898,191.86525 692.26757,191.55665 692.26758,191.2207 C 692.26757,190.47853 692.06054,189.9004 691.64648,189.48633 C 691.23241,189.07228 690.65429,188.86525 689.91211,188.86523 C 689.16992,188.86525 688.58398,189.11525 688.1543,189.61523 C 687.73242,190.10744 687.50195,190.80275 687.46289,191.70117 L 684.1582,191.70117 L 684.1582,191.33789 C 684.1582,189.68947 684.67773,188.37697 685.7168,187.40039 C 686.76367,186.41603 688.16992,185.92385 689.93555,185.92383 C 691.74023,185.92385 693.17382,186.38869 694.23633,187.31836 C 695.30663,188.24025 695.84178,189.47853 695.8418,191.0332 C 695.84178,191.58009 695.77928,192.07228 695.6543,192.50977 C 695.5371,192.93946 695.3535,193.33399 695.10352,193.69336 C 694.78319,194.14649 694.2871,194.63868 693.61523,195.16992 C 692.95116,195.69337 692.54882,196.01759 692.4082,196.14258 C 692.11132,196.43165 691.89648,196.73634 691.76367,197.05664 C 691.63866,197.37696 691.57616,197.75977 691.57617,198.20508 C 691.57616,198.24415 691.58007,198.31055 691.58789,198.4043 C 691.59569,198.49805 691.5996,198.56836 691.59961,198.61523 L 688.44727,198.61523 M 688.2832,203.63086 L 688.2832,200.19727 L 691.74023,200.19727 L 691.74023,203.63086 L 688.2832,203.63086 M 686.31445,235.85742 L 692.12695,215.92383 L 693.73242,215.92383 L 687.89648,235.85742 L 686.31445,235.85742"
+ id="text5819" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 18,271.78906 C 17.911447,273.09636 17.406239,274.13542 16.484375,274.90625 C 15.5677,275.67708 14.369784,276.0625 12.890625,276.0625 C 11.187496,276.0625 9.8619761,275.53125 8.9140625,274.46875 C 7.971353,273.40625 7.4999993,271.91667 7.5,270 C 7.4999993,268.04167 7.9817696,266.54168 8.9453125,265.5 C 9.9088511,264.45834 11.294266,263.93751 13.101563,263.9375 C 14.570305,263.93751 15.729158,264.29689 16.578125,265.01563 C 17.432281,265.72918 17.901031,266.73959 17.984375,268.04688 L 15.648438,268.04688 C 15.54947,267.39584 15.283846,266.90105 14.851563,266.5625 C 14.419263,266.21876 13.83593,266.04688 13.101563,266.04688 C 12.059891,266.04688 11.268225,266.38282 10.726563,267.05469 C 10.184892,267.72657 9.9140594,268.70834 9.9140625,270 C 9.9140594,271.25 10.182288,272.21615 10.71875,272.89844 C 11.260412,273.58073 12.028641,273.92188 13.023438,273.92188 C 13.742181,273.92188 14.330722,273.73959 14.789063,273.375 C 15.247387,273.00521 15.544262,272.47657 15.679688,271.78906 L 18,271.78906 M 23.46875,275.80469 C 23.260412,275.8099 23.010412,275.81771 22.71875,275.82813 C 22.432288,275.84375 22.249996,275.85156 22.171875,275.85156 C 21.302081,275.85156 20.705727,275.6901 20.382813,275.36719 C 20.065103,275.03906 19.906249,274.39583 19.90625,273.4375 L 19.90625,268.84375 L 18.78125,268.84375 L 18.78125,267.25 L 19.90625,267.25 L 19.90625,264.92969 L 22.15625,264.92969 L 22.15625,267.25 L 23.46875,267.25 L 23.46875,268.84375 L 22.15625,268.84375 L 22.15625,273.54688 C 22.156247,273.77084 22.205726,273.91927 22.304688,273.99219 C 22.403642,274.0599 22.606767,274.09375 22.914063,274.09375 L 23.46875,274.09375 L 23.46875,275.80469 M 24.789063,275.74219 L 24.789063,267.25 L 26.898438,267.25 L 26.898438,268.70313 C 27.195309,268.1198 27.541663,267.69272 27.9375,267.42188 C 28.333329,267.14584 28.804682,267.00782 29.351563,267.00781 C 29.440099,267.00782 29.507807,267.01043 29.554688,267.01563 C 29.606765,267.01563 29.648432,267.01824 29.679688,267.02344 L 29.6875,269.32813 L 28.929688,269.32813 C 28.309891,269.32813 27.843746,269.48959 27.53125,269.8125 C 27.218747,270.13542 27.062497,270.61459 27.0625,271.25 L 27.0625,275.74219 L 24.789063,275.74219 M 31.023438,275.74219 L 31.023438,264.23438 L 33.296875,264.23438 L 33.296875,275.74219 L 31.023438,275.74219"
+ id="text5827" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 162.96875,266.49609 L 161.375,271.39453 L 164.57031,271.39453 L 162.96875,266.49609 M 161.59375,264.19141 L 164.32813,264.19141 L 168.47656,275.69922 L 165.99219,275.69922 L 165.21094,273.33203 L 160.75,273.33203 L 159.99219,275.69922 L 157.5,275.69922 L 161.59375,264.19141 M 169.53906,275.69922 L 169.53906,264.19141 L 171.8125,264.19141 L 171.8125,275.69922 L 169.53906,275.69922 M 177.64063,275.76172 C 177.43229,275.76693 177.18229,275.77474 176.89063,275.78516 C 176.60416,275.80078 176.42187,275.80859 176.34375,275.80859 C 175.47396,275.80859 174.8776,275.64714 174.55469,275.32422 C 174.23698,274.99609 174.07812,274.35287 174.07813,273.39453 L 174.07813,268.80078 L 172.95313,268.80078 L 172.95313,267.20703 L 174.07813,267.20703 L 174.07813,264.88672 L 176.32813,264.88672 L 176.32813,267.20703 L 177.64063,267.20703 L 177.64063,268.80078 L 176.32813,268.80078 L 176.32813,273.50391 C 176.32812,273.72787 176.3776,273.8763 176.47656,273.94922 C 176.57552,274.01693 176.77864,274.05078 177.08594,274.05078 L 177.64063,274.05078 L 177.64063,275.76172"
+ id="text5831" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 612.96875,266.53906 L 611.375,271.4375 L 614.57031,271.4375 L 612.96875,266.53906 M 611.59375,264.23438 L 614.32813,264.23438 L 618.47656,275.74219 L 615.99219,275.74219 L 615.21094,273.375 L 610.75,273.375 L 609.99219,275.74219 L 607.5,275.74219 L 611.59375,264.23438 M 619.53906,275.74219 L 619.53906,264.23438 L 621.8125,264.23438 L 621.8125,275.74219 L 619.53906,275.74219 M 627.64063,275.80469 C 627.43229,275.8099 627.18229,275.81771 626.89063,275.82813 C 626.60416,275.84375 626.42187,275.85156 626.34375,275.85156 C 625.47396,275.85156 624.8776,275.6901 624.55469,275.36719 C 624.23698,275.03906 624.07812,274.39583 624.07813,273.4375 L 624.07813,268.84375 L 622.95313,268.84375 L 622.95313,267.25 L 624.07813,267.25 L 624.07813,264.92969 L 626.32813,264.92969 L 626.32813,267.25 L 627.64063,267.25 L 627.64063,268.84375 L 626.32813,268.84375 L 626.32813,273.54688 C 626.32812,273.77084 626.3776,273.91927 626.47656,273.99219 C 626.57552,274.0599 626.77864,274.09375 627.08594,274.09375 L 627.64063,274.09375 L 627.64063,275.80469 M 642,274.38281 C 641.57291,274.96094 641.08593,275.38542 640.53906,275.65625 C 639.99739,275.92708 639.35937,276.0625 638.625,276.0625 C 637.01562,276.0625 635.71093,275.50521 634.71094,274.39063 C 633.71614,273.27084 633.21875,271.80209 633.21875,269.98438 C 633.21875,268.15105 633.71614,266.6849 634.71094,265.58594 C 635.70573,264.48699 637.03125,263.93751 638.6875,263.9375 C 640.1302,263.93751 641.30728,264.28387 642.21875,264.97656 C 643.1302,265.66407 643.67186,266.61199 643.84375,267.82031 L 641.42969,267.82031 C 641.28385,267.22136 640.98437,266.76563 640.53125,266.45313 C 640.08333,266.14063 639.49739,265.98438 638.77344,265.98438 C 637.80989,265.98438 637.05208,266.33855 636.5,267.04688 C 635.95312,267.75001 635.67968,268.72397 635.67969,269.96875 C 635.67968,271.21875 635.96614,272.19792 636.53906,272.90625 C 637.11197,273.61459 637.89843,273.96875 638.89844,273.96875 C 639.64843,273.96875 640.27603,273.7474 640.78125,273.30469 C 641.28645,272.86198 641.59895,272.25521 641.71875,271.48438 L 639.10938,271.48438 L 639.10938,269.51563 L 643.875,269.51563 L 643.875,275.74219 L 642.28906,275.74219 L 642,274.38281 M 645.96094,275.74219 L 645.96094,267.25 L 648.07031,267.25 L 648.07031,268.70313 C 648.36718,268.1198 648.71354,267.69272 649.10938,267.42188 C 649.5052,267.14584 649.97656,267.00782 650.52344,267.00781 C 650.61197,267.00782 650.67968,267.01043 650.72656,267.01563 C 650.77864,267.01563 650.82031,267.01824 650.85156,267.02344 L 650.85938,269.32813 L 650.10156,269.32813 C 649.48177,269.32813 649.01562,269.48959 648.70313,269.8125 C 648.39062,270.13542 648.23437,270.61459 648.23438,271.25 L 648.23438,275.74219 L 645.96094,275.74219"
+ id="text5835" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 828,271.78906 C 827.91145,273.09636 827.40624,274.13542 826.48438,274.90625 C 825.5677,275.67708 824.36978,276.0625 822.89063,276.0625 C 821.1875,276.0625 819.86198,275.53125 818.91406,274.46875 C 817.97135,273.40625 817.5,271.91667 817.5,270 C 817.5,268.04167 817.98177,266.54168 818.94531,265.5 C 819.90885,264.45834 821.29427,263.93751 823.10156,263.9375 C 824.5703,263.93751 825.72916,264.29689 826.57813,265.01563 C 827.43228,265.72918 827.90103,266.73959 827.98438,268.04688 L 825.64844,268.04688 C 825.54947,267.39584 825.28385,266.90105 824.85156,266.5625 C 824.41926,266.21876 823.83593,266.04688 823.10156,266.04688 C 822.05989,266.04688 821.26822,266.38282 820.72656,267.05469 C 820.18489,267.72657 819.91406,268.70834 819.91406,270 C 819.91406,271.25 820.18229,272.21615 820.71875,272.89844 C 821.26041,273.58073 822.02864,273.92188 823.02344,273.92188 C 823.74218,273.92188 824.33072,273.73959 824.78906,273.375 C 825.24739,273.00521 825.54426,272.47657 825.67969,271.78906 L 828,271.78906 M 833.46875,275.80469 C 833.26041,275.8099 833.01041,275.81771 832.71875,275.82813 C 832.43229,275.84375 832.25,275.85156 832.17188,275.85156 C 831.30208,275.85156 830.70573,275.6901 830.38281,275.36719 C 830.0651,275.03906 829.90625,274.39583 829.90625,273.4375 L 829.90625,268.84375 L 828.78125,268.84375 L 828.78125,267.25 L 829.90625,267.25 L 829.90625,264.92969 L 832.15625,264.92969 L 832.15625,267.25 L 833.46875,267.25 L 833.46875,268.84375 L 832.15625,268.84375 L 832.15625,273.54688 C 832.15625,273.77084 832.20573,273.91927 832.30469,273.99219 C 832.40364,274.0599 832.60677,274.09375 832.91406,274.09375 L 833.46875,274.09375 L 833.46875,275.80469 M 834.78906,275.74219 L 834.78906,267.25 L 836.89844,267.25 L 836.89844,268.70313 C 837.19531,268.1198 837.54166,267.69272 837.9375,267.42188 C 838.33333,267.14584 838.80468,267.00782 839.35156,267.00781 C 839.4401,267.00782 839.50781,267.01043 839.55469,267.01563 C 839.60677,267.01563 839.64843,267.01824 839.67969,267.02344 L 839.6875,269.32813 L 838.92969,269.32813 C 838.30989,269.32813 837.84375,269.48959 837.53125,269.8125 C 837.21875,270.13542 837.0625,270.61459 837.0625,271.25 L 837.0625,275.74219 L 834.78906,275.74219 M 841.02344,275.74219 L 841.02344,264.23438 L 843.29688,264.23438 L 843.29688,275.74219 L 841.02344,275.74219"
+ id="text5839" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 108.94531,264.01953 L 105.64844,252.51172 L 108.10156,252.51172 L 110.07031,260.62891 L 111.73438,252.51172 L 114.25781,252.51172 L 115.92188,260.62891 L 117.89063,252.51172 L 120.32031,252.51172 L 117.03125,264.01953 L 114.77344,264.01953 L 112.99219,255.20703 L 111.20313,264.01953 L 108.94531,264.01953 M 121.5,254.58203 L 121.5,252.51172 L 123.77344,252.51172 L 123.77344,254.58203 L 121.5,254.58203 M 121.5,264.01953 L 121.5,255.52734 L 123.77344,255.52734 L 123.77344,264.01953 L 121.5,264.01953 M 125.79688,264.01953 L 125.79688,255.52734 L 128.02344,255.52734 L 128.02344,256.53516 C 128.34114,256.12371 128.71614,255.81641 129.14844,255.61328 C 129.58072,255.40496 130.06249,255.30079 130.59375,255.30078 C 131.53124,255.30079 132.23176,255.54558 132.69531,256.03516 C 133.16405,256.51954 133.39843,257.25131 133.39844,258.23047 L 133.39844,264.01953 L 131.125,264.01953 L 131.125,258.88672 C 131.12499,258.27735 131.02083,257.84245 130.8125,257.58203 C 130.60937,257.32162 130.27604,257.19141 129.8125,257.19141 C 129.27604,257.19141 128.85156,257.35287 128.53906,257.67578 C 128.22656,257.9935 128.07031,258.42839 128.07031,258.98047 L 128.07031,264.01953 L 125.79688,264.01953 M 106.64844,284.01953 L 106.64844,272.51172 L 109.01563,272.51172 L 109.01563,277.23828 L 113.50781,272.51172 L 116.46875,272.51172 L 111.875,277.16797 L 116.88281,284.01953 L 113.99219,284.01953 L 110.24219,278.75391 L 109.01563,279.97266 L 109.01563,284.01953 L 106.64844,284.01953 M 122.9375,281.44141 L 125.20313,281.44141 C 124.97395,282.33724 124.51041,283.04037 123.8125,283.55078 C 123.11979,284.05599 122.27343,284.30859 121.27344,284.30859 C 120.04427,284.30859 119.07031,283.89714 118.35156,283.07422 C 117.63281,282.2461 117.27344,281.1263 117.27344,279.71484 C 117.27344,278.32422 117.6276,277.22787 118.33594,276.42578 C 119.04427,275.62371 120.01302,275.22267 121.24219,275.22266 C 122.54427,275.22267 123.54947,275.6185 124.25781,276.41016 C 124.96614,277.19662 125.3203,278.31902 125.32031,279.77734 C 125.3203,279.93881 125.3177,280.0612 125.3125,280.14453 C 125.31249,280.22266 125.30728,280.29818 125.29688,280.37109 L 119.625,280.37109 C 119.65625,281.03776 119.81771,281.54037 120.10938,281.87891 C 120.40625,282.21745 120.83073,282.38672 121.38281,282.38672 C 121.77343,282.38672 122.09374,282.3112 122.34375,282.16016 C 122.59374,282.00391 122.79166,281.76433 122.9375,281.44141 M 119.625,278.87891 L 122.96875,278.87891 C 122.94791,278.306 122.79426,277.8711 122.50781,277.57422 C 122.22656,277.27214 121.82031,277.1211 121.28906,277.12109 C 120.79427,277.1211 120.40364,277.27214 120.11719,277.57422 C 119.83593,277.87631 119.67187,278.3112 119.625,278.87891 M 127.16406,287.42578 L 127.16406,285.58984 C 127.23698,285.60026 127.3125,285.60807 127.39063,285.61328 C 127.46875,285.61849 127.57031,285.62109 127.69531,285.62109 C 128.14323,285.62109 128.47916,285.51432 128.70313,285.30078 C 128.92708,285.09245 129.03906,284.77734 129.03906,284.35547 C 129.03906,284.32422 129.03385,284.28516 129.02344,284.23828 C 129.01302,284.19141 129.0026,284.15234 128.99219,284.12109 L 125.92969,275.52734 L 128.42969,275.52734 L 130.21875,281.65234 L 131.96094,275.52734 L 134.35156,275.52734 L 130.85938,285.54297 C 130.59895,286.29297 130.27343,286.80338 129.88281,287.07422 C 129.49218,287.35026 128.90625,287.48828 128.125,287.48828 C 127.98437,287.48828 127.83333,287.48307 127.67188,287.47266 C 127.51041,287.46224 127.34114,287.44661 127.16406,287.42578"
+ id="text5872" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 708.94531,264.01953 L 705.64844,252.51172 L 708.10156,252.51172 L 710.07031,260.62891 L 711.73438,252.51172 L 714.25781,252.51172 L 715.92188,260.62891 L 717.89063,252.51172 L 720.32031,252.51172 L 717.03125,264.01953 L 714.77344,264.01953 L 712.99219,255.20703 L 711.20313,264.01953 L 708.94531,264.01953 M 721.5,254.58203 L 721.5,252.51172 L 723.77344,252.51172 L 723.77344,254.58203 L 721.5,254.58203 M 721.5,264.01953 L 721.5,255.52734 L 723.77344,255.52734 L 723.77344,264.01953 L 721.5,264.01953 M 725.79688,264.01953 L 725.79688,255.52734 L 728.02344,255.52734 L 728.02344,256.53516 C 728.34114,256.12371 728.71614,255.81641 729.14844,255.61328 C 729.58072,255.40496 730.06249,255.30079 730.59375,255.30078 C 731.53124,255.30079 732.23176,255.54558 732.69531,256.03516 C 733.16405,256.51954 733.39843,257.25131 733.39844,258.23047 L 733.39844,264.01953 L 731.125,264.01953 L 731.125,258.88672 C 731.12499,258.27735 731.02083,257.84245 730.8125,257.58203 C 730.60937,257.32162 730.27604,257.19141 729.8125,257.19141 C 729.27604,257.19141 728.85156,257.35287 728.53906,257.67578 C 728.22656,257.9935 728.07031,258.42839 728.07031,258.98047 L 728.07031,264.01953 L 725.79688,264.01953 M 706.64844,284.01953 L 706.64844,272.51172 L 709.01563,272.51172 L 709.01563,277.23828 L 713.50781,272.51172 L 716.46875,272.51172 L 711.875,277.16797 L 716.88281,284.01953 L 713.99219,284.01953 L 710.24219,278.75391 L 709.01563,279.97266 L 709.01563,284.01953 L 706.64844,284.01953 M 722.9375,281.44141 L 725.20313,281.44141 C 724.97395,282.33724 724.51041,283.04037 723.8125,283.55078 C 723.11979,284.05599 722.27343,284.30859 721.27344,284.30859 C 720.04427,284.30859 719.07031,283.89714 718.35156,283.07422 C 717.63281,282.2461 717.27344,281.1263 717.27344,279.71484 C 717.27344,278.32422 717.6276,277.22787 718.33594,276.42578 C 719.04427,275.62371 720.01302,275.22267 721.24219,275.22266 C 722.54427,275.22267 723.54947,275.6185 724.25781,276.41016 C 724.96614,277.19662 725.3203,278.31902 725.32031,279.77734 C 725.3203,279.93881 725.3177,280.0612 725.3125,280.14453 C 725.31249,280.22266 725.30728,280.29818 725.29688,280.37109 L 719.625,280.37109 C 719.65625,281.03776 719.81771,281.54037 720.10938,281.87891 C 720.40625,282.21745 720.83073,282.38672 721.38281,282.38672 C 721.77343,282.38672 722.09374,282.3112 722.34375,282.16016 C 722.59374,282.00391 722.79166,281.76433 722.9375,281.44141 M 719.625,278.87891 L 722.96875,278.87891 C 722.94791,278.306 722.79426,277.8711 722.50781,277.57422 C 722.22656,277.27214 721.82031,277.1211 721.28906,277.12109 C 720.79427,277.1211 720.40364,277.27214 720.11719,277.57422 C 719.83593,277.87631 719.67187,278.3112 719.625,278.87891 M 727.16406,287.42578 L 727.16406,285.58984 C 727.23698,285.60026 727.3125,285.60807 727.39063,285.61328 C 727.46875,285.61849 727.57031,285.62109 727.69531,285.62109 C 728.14323,285.62109 728.47916,285.51432 728.70313,285.30078 C 728.92708,285.09245 729.03906,284.77734 729.03906,284.35547 C 729.03906,284.32422 729.03385,284.28516 729.02344,284.23828 C 729.01302,284.19141 729.0026,284.15234 728.99219,284.12109 L 725.92969,275.52734 L 728.42969,275.52734 L 730.21875,281.65234 L 731.96094,275.52734 L 734.35156,275.52734 L 730.85938,285.54297 C 730.59895,286.29297 730.27343,286.80338 729.88281,287.07422 C 729.49218,287.35026 728.90625,287.48828 728.125,287.48828 C 727.98437,287.48828 727.83333,287.48307 727.67188,287.47266 C 727.51041,287.46224 727.34114,287.44661 727.16406,287.42578"
+ id="text5878" />
+ <path
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 759.98438,275.60938 L 759.98438,264.10156 L 763.48438,264.10156 L 765.77344,272.85938 L 768.03125,264.10156 L 771.54688,264.10156 L 771.54688,275.60938 L 769.32813,275.60938 L 769.32813,266.32813 L 766.99219,275.60938 L 764.57031,275.60938 L 762.20313,266.32813 L 762.20313,275.60938 L 759.98438,275.60938 M 778.99219,273.03125 L 781.25781,273.03125 C 781.02864,273.92709 780.5651,274.63021 779.86719,275.14063 C 779.17447,275.64583 778.32812,275.89844 777.32813,275.89844 C 776.09896,275.89844 775.125,275.48698 774.40625,274.66406 C 773.6875,273.83594 773.32812,272.71615 773.32813,271.30469 C 773.32812,269.91407 773.68229,268.81772 774.39063,268.01563 C 775.09896,267.21355 776.06771,266.81251 777.29688,266.8125 C 778.59895,266.81251 779.60416,267.20834 780.3125,268 C 781.02083,268.78647 781.37499,269.90886 781.375,271.36719 C 781.37499,271.52865 781.37239,271.65105 781.36719,271.73438 C 781.36718,271.8125 781.36197,271.88802 781.35156,271.96094 L 775.67969,271.96094 C 775.71093,272.62761 775.87239,273.13021 776.16406,273.46875 C 776.46093,273.80729 776.88541,273.97656 777.4375,273.97656 C 777.82812,273.97656 778.14843,273.90104 778.39844,273.75 C 778.64843,273.59375 778.84635,273.35417 778.99219,273.03125 M 775.67969,270.46875 L 779.02344,270.46875 C 779.0026,269.89584 778.84895,269.46094 778.5625,269.16406 C 778.28124,268.86199 777.87499,268.71094 777.34375,268.71094 C 776.84895,268.71094 776.45833,268.86199 776.17188,269.16406 C 775.89062,269.46615 775.72656,269.90105 775.67969,270.46875 M 782.88281,275.60938 L 782.88281,267.11719 L 785.10938,267.11719 L 785.10938,268.125 C 785.42708,267.71355 785.80208,267.40626 786.23438,267.20313 C 786.66666,266.9948 787.14843,266.89063 787.67969,266.89063 C 788.61718,266.89063 789.3177,267.13543 789.78125,267.625 C 790.24999,268.10938 790.48437,268.84115 790.48438,269.82031 L 790.48438,275.60938 L 788.21094,275.60938 L 788.21094,270.47656 C 788.21093,269.86719 788.10676,269.4323 787.89844,269.17188 C 787.69531,268.91147 787.36197,268.78126 786.89844,268.78125 C 786.36197,268.78126 785.9375,268.94272 785.625,269.26563 C 785.3125,269.58334 785.15625,270.01823 785.15625,270.57031 L 785.15625,275.60938 L 782.88281,275.60938 M 800.01563,267.11719 L 800.01563,275.60938 L 797.78906,275.60938 L 797.78906,274.60156 C 797.46614,275.01302 797.08854,275.32292 796.65625,275.53125 C 796.22916,275.73437 795.74739,275.83594 795.21094,275.83594 C 794.27864,275.83594 793.57812,275.59115 793.10938,275.10156 C 792.64583,274.61198 792.41406,273.88021 792.41406,272.90625 L 792.41406,267.11719 L 794.6875,267.11719 L 794.6875,272.25 C 794.6875,272.85417 794.78906,273.28646 794.99219,273.54688 C 795.19531,273.80209 795.53125,273.92969 796,273.92969 C 796.53124,273.92969 796.95312,273.77084 797.26563,273.45313 C 797.58333,273.13021 797.74218,272.69271 797.74219,272.14063 L 797.74219,267.11719 L 800.01563,267.11719"
+ id="text5884" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 104.41406,17.103516 L 104.41406,10.212891 L 101.74219,10.212891 L 101.74219,8.7949219 L 101.94141,8.7949219 C 102.89453,8.7949367 103.58984,8.6621243 104.02734,8.3964844 C 104.47265,8.1308749 104.73828,7.6894691 104.82422,7.0722656 L 106.59375,7.0722656 L 106.59375,17.103516 L 104.41406,17.103516 M 106.72266,36.369141 L 106.72266,39.826172 L 103.24219,39.826172 L 103.24219,36.369141 L 106.72266,36.369141 M 105.89063,41.173828 L 106.80469,48.978516 L 106.80469,53.630859 L 103.19531,53.630859 L 103.19531,48.978516 L 104.10938,41.173828 L 105.89063,41.173828"
+ id="text5890" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 160.85156,47.103516 C 160.875,46.197273 161.08984,45.431649 161.49609,44.806641 C 161.91015,44.18165 162.63672,43.548838 163.67578,42.908203 C 163.82422,42.822276 164.03125,42.701183 164.29688,42.544922 C 165.74218,41.724621 166.46484,40.931653 166.46484,40.166016 C 166.46484,39.720717 166.32031,39.369155 166.03125,39.111328 C 165.74218,38.85353 165.34375,38.724624 164.83594,38.724609 C 164.27343,38.724624 163.83984,38.88478 163.53516,39.205078 C 163.23047,39.517592 163.07812,39.966811 163.07813,40.552734 L 163.07813,40.646484 L 161.03906,40.646484 C 161.03906,39.498061 161.37891,38.615249 162.05859,37.998047 C 162.73828,37.380876 163.71093,37.072282 164.97656,37.072266 C 166.11718,37.072282 167.02343,37.353532 167.69531,37.916016 C 168.37499,38.470718 168.71484,39.212905 168.71484,40.142578 C 168.71484,40.814466 168.53905,41.39259 168.1875,41.876953 C 167.83593,42.361339 167.14843,42.919933 166.125,43.552734 C 165.89843,43.701182 165.57812,43.896494 165.16406,44.138672 C 164.22656,44.685556 163.69922,45.115243 163.58203,45.427734 L 168.62109,45.427734 L 168.62109,47.103516 L 160.85156,47.103516"
+ id="text5910" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 220.92188,44.033203 L 223.05469,44.033203 C 223.07031,44.603525 223.22265,45.029305 223.51172,45.310547 C 223.80078,45.591805 224.23437,45.73243 224.8125,45.732422 C 225.36718,45.73243 225.79687,45.599617 226.10156,45.333984 C 226.40624,45.068368 226.55859,44.689462 226.55859,44.197266 C 226.55859,43.697276 226.38281,43.322276 226.03125,43.072266 C 225.67968,42.814464 225.15234,42.685558 224.44922,42.685547 L 224.10938,42.685547 L 224.10938,41.291016 L 224.35547,41.291016 C 225.0039,41.291028 225.48046,41.181653 225.78516,40.962891 C 226.09765,40.736341 226.2539,40.392591 226.25391,39.931641 C 226.2539,39.54103 226.12109,39.232436 225.85547,39.005859 C 225.58984,38.771499 225.23437,38.654312 224.78906,38.654297 C 224.29687,38.654312 223.91797,38.787124 223.65234,39.052734 C 223.38672,39.310561 223.2539,39.681655 223.25391,40.166016 L 223.25391,40.236328 L 221.16797,40.236328 C 221.19141,39.212905 221.51953,38.431656 222.15234,37.892578 C 222.79297,37.345719 223.70312,37.072282 224.88281,37.072266 C 225.99218,37.072282 226.86718,37.314469 227.50781,37.798828 C 228.15624,38.283218 228.48046,38.943374 228.48047,39.779297 C 228.48046,40.21681 228.36718,40.603529 228.14063,40.939453 C 227.92187,41.26759 227.59374,41.537121 227.15625,41.748047 C 227.72656,41.974621 228.15624,42.291027 228.44531,42.697266 C 228.74218,43.095714 228.89062,43.564463 228.89063,44.103516 C 228.89062,45.119149 228.52343,45.923836 227.78906,46.517578 C 227.06249,47.103522 226.07031,47.396491 224.8125,47.396484 C 223.57031,47.396491 222.60937,47.107428 221.92969,46.529297 C 221.25781,45.95118 220.92187,45.134774 220.92188,44.080078 L 220.92188,44.033203"
+ id="text5922" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 278.92969,21.685547 C 279.86719,21.037112 280.53125,20.439456 280.92188,19.892578 C 281.32031,19.345707 281.51953,18.75977 281.51953,18.134766 C 281.51953,17.837896 281.47265,17.525397 281.37891,17.197266 C 281.28515,16.861335 281.14843,16.509773 280.96875,16.142578 L 278.90625,16.142578 L 278.90625,14.841797 L 280.17188,14.841797 C 279.82812,14.162119 279.57812,13.556651 279.42188,13.025391 C 279.26562,12.494152 279.1875,11.998059 279.1875,11.537109 C 279.1875,10.146498 279.69531,9.021499 280.71094,8.1621094 C 281.73437,7.3027507 283.08203,6.8730636 284.75391,6.8730469 C 286.5664,6.8730636 287.98827,7.3379069 289.01953,8.2675781 C 290.05077,9.1972801 290.61327,10.517591 290.70703,12.228516 L 287.47266,12.228516 C 287.41015,11.345715 287.15624,10.669935 286.71094,10.201172 C 286.26562,9.7324358 285.65624,9.498061 284.88281,9.4980469 C 284.14843,9.498061 283.58203,9.6894671 283.18359,10.072266 C 282.79296,10.455091 282.59765,11.005872 282.59766,11.724609 C 282.59765,12.138683 282.84375,12.888683 283.33594,13.974609 C 283.50781,14.349619 283.63671,14.638681 283.72266,14.841797 L 287.0625,14.841797 L 287.0625,16.142578 L 284.20313,16.142578 C 284.27343,16.43946 284.32421,16.712898 284.35547,16.962891 C 284.38671,17.212897 284.40234,17.443366 284.40234,17.654297 C 284.40234,18.216802 284.22656,18.779302 283.875,19.341797 C 283.53124,19.896488 282.94531,20.548831 282.11719,21.298828 C 282.625,21.064456 283.08203,20.892581 283.48828,20.783203 C 283.90234,20.666019 284.27734,20.607425 284.61328,20.607422 C 285.01952,20.607425 285.57421,20.701175 286.27734,20.888672 C 286.98046,21.068362 287.48046,21.158206 287.77734,21.158203 C 288.16796,21.158206 288.55077,21.095706 288.92578,20.970703 C 289.30858,20.845706 289.68749,20.6543 290.0625,20.396484 L 291.09375,22.939453 C 290.4453,23.322266 289.82421,23.611328 289.23047,23.806641 C 288.63671,24.009765 288.08202,24.111328 287.56641,24.111328 C 286.97265,24.111328 286.16796,23.955078 285.15234,23.642578 C 284.14453,23.330078 283.41406,23.173829 282.96094,23.173828 C 282.48437,23.173829 282.01953,23.251954 281.56641,23.408203 C 281.12109,23.564453 280.6875,23.798828 280.26563,24.111328 L 278.92969,21.685547 M 284.94141,40.025391 C 284.05859,40.025404 283.29687,40.345716 282.65625,40.986328 C 282.01562,41.626965 281.69531,42.384777 281.69531,43.259766 C 281.69531,44.1504 282.01171,44.912118 282.64453,45.544922 C 283.27734,46.169929 284.04296,46.482429 284.94141,46.482422 C 285.82421,46.482429 286.58202,46.169929 287.21484,45.544922 C 287.85546,44.912118 288.17577,44.1504 288.17578,43.259766 C 288.17577,42.384777 287.85546,41.626965 287.21484,40.986328 C 286.58202,40.345716 285.82421,40.025404 284.94141,40.025391 M 279.65625,36.779297 L 282.05859,39.158203 C 282.48046,38.85353 282.92578,38.626968 283.39453,38.478516 C 283.86328,38.322281 284.37109,38.244156 284.91797,38.244141 C 285.46484,38.244156 285.97655,38.322281 286.45313,38.478516 C 286.93749,38.626968 287.39062,38.85353 287.8125,39.158203 L 290.19141,36.779297 L 291.42188,38.033203 L 289.04297,40.435547 C 289.33983,40.849622 289.56249,41.294934 289.71094,41.771484 C 289.85936,42.240246 289.93358,42.736339 289.93359,43.259766 C 289.93358,43.783213 289.85936,44.279306 289.71094,44.748047 C 289.56249,45.216805 289.33983,45.666024 289.04297,46.095703 L 291.42188,48.498047 L 290.19141,49.716797 L 287.8125,47.337891 C 287.39062,47.650397 286.9414,47.880865 286.46484,48.029297 C 285.98827,48.17774 285.48046,48.251959 284.94141,48.251953 C 284.3789,48.251959 283.85937,48.17774 283.38281,48.029297 C 282.91406,47.880865 282.47265,47.650397 282.05859,47.337891 L 279.65625,49.716797 L 278.4375,48.498047 L 280.80469,46.095703 C 280.50781,45.673836 280.28515,45.23243 280.13672,44.771484 C 279.99609,44.302744 279.92578,43.798838 279.92578,43.259766 C 279.92578,42.736339 279.99609,42.240246 280.13672,41.771484 C 280.28515,41.294934 280.50781,40.849622 280.80469,40.435547 L 278.4375,38.033203 L 279.65625,36.779297"
+ id="text5928" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 352.875,47.701172 C 352.74217,49.662113 351.98436,51.220706 350.60156,52.376953 C 349.22655,53.533203 347.42968,54.111328 345.21094,54.111328 C 342.65624,54.111328 340.66796,53.314453 339.24609,51.720703 C 337.83203,50.126957 337.125,47.892584 337.125,45.017578 C 337.125,42.08009 337.84765,39.830092 339.29297,38.267578 C 340.73828,36.705095 342.8164,35.923846 345.52734,35.923828 C 347.73046,35.923846 349.46874,36.462908 350.74219,37.541016 C 352.02342,38.611343 352.72655,40.126967 352.85156,42.087891 L 349.34766,42.087891 C 349.19921,41.111341 348.80077,40.369154 348.15234,39.861328 C 347.50389,39.345717 346.6289,39.087905 345.52734,39.087891 C 343.96484,39.087905 342.77734,39.591811 341.96484,40.599609 C 341.15234,41.607434 340.74609,43.080089 340.74609,45.017578 C 340.74609,46.892585 341.14843,48.341802 341.95313,49.365234 C 342.76562,50.388675 343.91796,50.900393 345.41016,50.900391 C 346.48827,50.900393 347.37108,50.626956 348.05859,50.080078 C 348.74608,49.525395 349.19139,48.732427 349.39453,47.701172 L 352.875,47.701172"
+ id="text5946" />
+ <path
+ transform="matrix(1.16233,0,-0.444745,0.860341,0,0)"
+ style="font-size:16.72912407px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 307.52845,53.268758 L 317.31434,53.268758 L 317.31434,54.894293 L 307.52845,54.894293 L 307.52845,53.268758 M 307.52845,49.756296 L 317.31434,49.756296 L 317.31434,51.381831 L 307.52845,51.381831 L 307.52845,49.756296"
+ id="text5956" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 411.45117,50.150391 L 411.45117,46.142578 L 408.63867,50.150391 L 411.45117,50.150391 M 411.45117,53.630859 L 411.45117,51.591797 L 406.98633,51.591797 L 406.98633,49.962891 L 410.90039,44.513672 L 413.51367,44.513672 L 413.51367,50.103516 L 414.73242,50.103516 L 414.73242,51.591797 L 413.51367,51.591797 L 413.51367,53.630859 L 411.45117,53.630859 M 398.58398,54.111328 L 408.7793,36.615234 L 410.70117,36.615234 L 400.48242,54.111328 L 398.58398,54.111328 M 397.78711,46.458984 L 397.78711,40.025391 L 395.26758,40.025391 L 395.26758,38.701172 L 395.44336,38.701172 C 396.36523,38.701187 397.0332,38.576187 397.44727,38.326172 C 397.86914,38.076187 398.11914,37.658219 398.19727,37.072266 L 399.88477,37.072266 L 399.88477,46.458984 L 397.78711,46.458984"
+ id="text5960" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 467.0918,53.630859 C 467.11522,52.779298 467.32225,52.064455 467.71289,51.486328 C 468.11131,50.900393 468.80663,50.31055 469.79883,49.716797 C 469.95506,49.630863 470.16991,49.50977 470.44336,49.353516 C 471.7949,48.595708 472.47068,47.861334 472.4707,47.150391 C 472.47068,46.736335 472.33006,46.40821 472.04883,46.166016 C 471.76756,45.923836 471.38475,45.802742 470.90039,45.802734 C 470.36912,45.802742 469.95506,45.95118 469.6582,46.248047 C 469.36913,46.544929 469.22459,46.966804 469.22461,47.513672 L 469.22461,47.607422 L 467.2793,47.607422 C 467.27928,46.529304 467.6035,45.70118 468.25195,45.123047 C 468.90038,44.537118 469.82616,44.24415 471.0293,44.244141 C 472.12303,44.24415 472.99412,44.505868 473.64258,45.029297 C 474.29881,45.552742 474.62693,46.251961 474.62695,47.126953 C 474.62693,47.751959 474.45506,48.294927 474.11133,48.755859 C 473.77537,49.208989 473.11522,49.72852 472.13086,50.314453 C 471.9199,50.439456 471.63084,50.607425 471.26367,50.818359 C 470.34959,51.341799 469.83397,51.744143 469.7168,52.025391 L 474.50977,52.025391 L 474.50977,53.630859 L 467.0918,53.630859 M 458.68945,54.111328 L 468.88477,36.615234 L 470.80664,36.615234 L 460.58789,54.111328 L 458.68945,54.111328 M 457.89258,46.458984 L 457.89258,40.025391 L 455.37305,40.025391 L 455.37305,38.701172 L 455.54883,38.701172 C 456.4707,38.701187 457.13867,38.576187 457.55273,38.326172 C 457.97461,38.076187 458.22461,37.658219 458.30273,37.072266 L 459.99023,37.072266 L 459.99023,46.458984 L 457.89258,46.458984"
+ id="text5967" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 531.83203,50.150391 L 531.83203,46.142578 L 529.01953,50.150391 L 531.83203,50.150391 M 531.83203,53.630859 L 531.83203,51.591797 L 527.36719,51.591797 L 527.36719,49.962891 L 531.28125,44.513672 L 533.89453,44.513672 L 533.89453,50.103516 L 535.11328,50.103516 L 535.11328,51.591797 L 533.89453,51.591797 L 533.89453,53.630859 L 531.83203,53.630859 M 518.96484,54.111328 L 529.16016,36.615234 L 531.08203,36.615234 L 520.86328,54.111328 L 518.96484,54.111328 M 514.88672,43.599609 L 516.89063,43.599609 C 516.91406,44.130869 517.0625,44.529306 517.33594,44.794922 C 517.61718,45.052743 518.03125,45.181649 518.57813,45.181641 C 519.10937,45.181649 519.51953,45.060555 519.80859,44.818359 C 520.09765,44.568368 520.24218,44.208994 520.24219,43.740234 C 520.24218,43.271495 520.07421,42.919933 519.73828,42.685547 C 519.40234,42.443371 518.90625,42.322277 518.25,42.322266 C 518.20312,42.322277 518.14453,42.326183 518.07422,42.333984 C 518.0039,42.341808 517.94922,42.345714 517.91016,42.345703 L 517.91016,41.033203 L 518.14453,41.033203 C 518.76171,41.033216 519.21484,40.931653 519.50391,40.728516 C 519.80078,40.517591 519.94921,40.193373 519.94922,39.755859 C 519.94921,39.388686 519.82421,39.099624 519.57422,38.888672 C 519.32421,38.669937 518.98437,38.560562 518.55469,38.560547 C 518.08593,38.560562 517.72265,38.685562 517.46484,38.935547 C 517.21484,39.177749 517.08984,39.525405 517.08984,39.978516 L 517.08984,40.048828 L 515.08594,40.048828 C 515.10156,39.087905 515.41797,38.353531 516.03516,37.845703 C 516.65234,37.330094 517.52343,37.072282 518.64844,37.072266 C 519.70312,37.072282 520.53906,37.302751 521.15625,37.763672 C 521.77343,38.216812 522.08202,38.833999 522.08203,39.615234 C 522.08202,40.02931 521.97655,40.392591 521.76563,40.705078 C 521.55468,41.009778 521.23827,41.263684 520.81641,41.466797 C 521.36327,41.677746 521.77343,41.970715 522.04688,42.345703 C 522.32812,42.712902 522.46874,43.154307 522.46875,43.669922 C 522.46874,44.607431 522.11718,45.349618 521.41406,45.896484 C 520.71874,46.443367 519.77343,46.716804 518.57813,46.716797 C 517.39062,46.716804 516.47656,46.451179 515.83594,45.919922 C 515.20312,45.380868 514.88672,44.615243 514.88672,43.623047 L 514.88672,43.599609"
+ id="text5973" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 586.63477,39.404297 L 586.63477,42.498047 L 583.36523,42.498047 L 583.36523,39.474609 C 583.36523,38.482437 583.66992,37.654313 584.2793,36.990234 C 584.88867,36.326189 585.67382,35.970721 586.63477,35.923828 L 586.63477,37.119141 C 586.04101,37.259782 585.59961,37.509782 585.31055,37.869141 C 585.02148,38.220719 584.87695,38.681656 584.87695,39.251953 L 584.87695,39.404297 L 586.63477,39.404297"
+ id="text5979" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 643.36523,39.474609 L 643.36523,36.369141 L 646.63477,36.369141 L 646.63477,39.427734 C 646.63476,40.412123 646.33007,41.240247 645.7207,41.912109 C 645.11132,42.576183 644.32617,42.931651 643.36523,42.978516 L 643.36523,41.771484 C 643.95898,41.630871 644.39648,41.384778 644.67773,41.033203 C 644.96679,40.673841 645.11132,40.201185 645.11133,39.615234 L 645.11133,39.474609 L 643.36523,39.474609"
+ id="text5985" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 706.89258,53.630859 L 703.50586,53.630859 L 703.50586,47.560547 L 703.27148,47.150391 L 698.00977,47.150391 L 698.00977,45.826172 L 702.49805,45.826172 L 701.64258,44.337891 L 698.00977,44.337891 L 698.00977,43.025391 L 700.86914,43.025391 L 697.61133,37.330078 L 701.41992,37.330078 L 705.19336,44.724609 L 708.69727,37.330078 L 712.27148,37.330078 L 709.27148,43.025391 L 712.00195,43.025391 L 712.00195,44.337891 L 708.58008,44.337891 L 707.7832,45.826172 L 712.00195,45.826172 L 712.00195,47.150391 L 707.0918,47.150391 L 706.89258,47.560547 L 706.89258,53.630859"
+ id="text5991" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 764.97656,19.306641 C 765.46093,19.306645 765.8789,19.482426 766.23047,19.833984 C 766.58202,20.18555 766.7578,20.603519 766.75781,21.087891 C 766.7578,21.564455 766.58202,21.974611 766.23047,22.318359 C 765.8789,22.66211 765.46093,22.833985 764.97656,22.833984 C 764.48437,22.833985 764.06249,22.666017 763.71094,22.330078 C 763.36718,21.994142 763.1953,21.58008 763.19531,21.087891 C 763.1953,20.595706 763.36718,20.177738 763.71094,19.833984 C 764.06249,19.482426 764.48437,19.306645 764.97656,19.306641 M 757.94531,15.298828 L 771.98438,15.298828 L 771.98438,17.630859 L 757.94531,17.630859 L 757.94531,15.298828 M 764.97656,10.095703 C 765.46093,10.095717 765.8789,10.271498 766.23047,10.623047 C 766.58202,10.96681 766.7578,11.380872 766.75781,11.865234 C 766.7578,12.357433 766.58202,12.779308 766.23047,13.130859 C 765.88671,13.47462 765.46874,13.646494 764.97656,13.646484 C 764.48437,13.646494 764.06249,13.47462 763.71094,13.130859 C 763.36718,12.779308 763.1953,12.357433 763.19531,11.865234 C 763.1953,11.373059 763.36718,10.955091 763.71094,10.611328 C 764.06249,10.267591 764.48437,10.095717 764.97656,10.095703 M 759.84375,39.544922 L 765.11719,44.818359 L 770.40234,39.544922 L 772.05469,41.173828 L 766.78125,46.482422 L 772.05469,51.755859 L 770.40234,53.396484 L 765.11719,48.111328 L 759.84375,53.396484 L 758.20313,51.755859 L 763.48828,46.482422 L 758.20313,41.173828 L 759.84375,39.544922"
+ id="text5997" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 134.9707,69.826172 L 132.58008,77.173828 L 137.37305,77.173828 L 134.9707,69.826172 M 132.9082,66.369141 L 137.00977,66.369141 L 143.23242,83.630859 L 139.50586,83.630859 L 138.33398,80.080078 L 131.64258,80.080078 L 130.50586,83.630859 L 126.76758,83.630859 L 132.9082,66.369141 M 135.70898,64.166016 L 135.70898,61.283203 L 138.35742,61.283203 L 138.35742,64.166016 L 135.70898,64.166016 M 131.63086,64.166016 L 131.63086,61.283203 L 134.2793,61.283203 L 134.2793,64.166016 L 131.63086,64.166016"
+ id="text6003" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 194.9707,62.126953 C 194.5957,62.126975 194.27538,62.267599 194.00977,62.548828 C 193.74413,62.822286 193.61132,63.154317 193.61133,63.544922 C 193.61132,63.927754 193.74023,64.251973 193.99805,64.517578 C 194.26366,64.783222 194.58788,64.916034 194.9707,64.916016 C 195.36132,64.916034 195.69335,64.783222 195.9668,64.517578 C 196.24804,64.24416 196.38866,63.919942 196.38867,63.544922 C 196.38866,63.16213 196.24804,62.830099 195.9668,62.548828 C 195.69335,62.267599 195.36132,62.126975 194.9707,62.126953 M 194.9707,60.521484 C 195.81444,60.521507 196.52929,60.814476 197.11523,61.400391 C 197.70116,61.978537 197.99413,62.685568 197.99414,63.521484 C 197.99413,64.357441 197.70116,65.068378 197.11523,65.654297 C 196.52929,66.232439 195.81444,66.521501 194.9707,66.521484 C 194.13476,66.521501 193.42773,66.232439 192.84961,65.654297 C 192.27929,65.07619 191.99414,64.365254 191.99414,63.521484 C 191.99414,62.677755 192.27929,61.966819 192.84961,61.388672 C 193.42773,60.81057 194.13476,60.521507 194.9707,60.521484 M 192.7207,67.072266 L 197.23242,67.072266 L 203.23242,83.630859 L 199.50586,83.630859 L 198.33398,80.080078 L 191.64258,80.080078 L 190.50586,83.630859 L 186.76758,83.630859 L 192.7207,67.072266 M 194.9707,69.826172 L 192.58008,77.173828 L 197.37305,77.173828 L 194.9707,69.826172"
+ id="text6007" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 248.52539,83.630859 L 248.52539,66.369141 L 261.05273,66.369141 L 261.05273,69.369141 L 252.0293,69.369141 L 252.0293,73.048828 L 260.2793,73.048828 L 260.2793,76.001953 L 252.0293,76.001953 L 252.0293,80.443359 L 261.47461,80.443359 L 261.47461,83.630859 L 248.52539,83.630859 M 258.24023,60.521484 L 254.57227,64.857422 L 252.9082,64.857422 L 255.2168,60.521484 L 258.24023,60.521484"
+ id="text6011" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 313.72266,101.49056 L 313.72266,104.29134 L 314.88281,104.29134 C 315.5703,104.29135 316.07421,104.18198 316.39453,103.96322 C 316.71483,103.74448 316.87499,103.40073 316.875,102.93197 C 316.87499,102.43979 316.70311,102.07651 316.35938,101.84212 C 316.01561,101.60776 315.48436,101.49057 314.76563,101.49056 L 313.72266,101.49056 M 311.37891,100.00228 L 315.16406,100.00228 C 316.53905,100.00229 317.5703,100.23667 318.25781,100.70541 C 318.95311,101.16636 319.30077,101.85776 319.30078,102.77962 C 319.30077,103.42026 319.11327,103.96713 318.73828,104.42025 C 318.36327,104.87338 317.84374,105.18198 317.17969,105.34603 L 319.34766,109.67025 L 316.72266,109.67025 L 314.88281,105.70931 L 313.72266,105.70931 L 313.72266,109.67025 L 311.37891,109.67025 L 311.37891,100.00228 M 315,97.717125 C 314.0078,97.717141 313.08593,97.892922 312.23438,98.244469 C 311.38281,98.588234 310.61718,99.099952 309.9375,99.779625 C 309.22656,100.49058 308.67968,101.29917 308.29688,102.20541 C 307.91406,103.10385 307.72265,104.03354 307.72266,104.99447 C 307.72265,105.96323 307.90234,106.8851 308.26172,107.76009 C 308.62109,108.62729 309.14062,109.40072 309.82031,110.08041 C 310.51562,110.79135 311.30859,111.33822 312.19922,111.72103 C 313.08984,112.09603 314.01562,112.28353 314.97656,112.28353 C 315.91405,112.28353 316.82421,112.09994 317.70703,111.73275 C 318.59764,111.36556 319.40624,110.83822 320.13281,110.15072 C 320.81248,109.49447 321.33983,108.72885 321.71484,107.85384 C 322.08983,106.97885 322.27733,106.0726 322.27734,105.13509 C 322.27733,104.09604 322.10155,103.13901 321.75,102.264 C 321.40623,101.38901 320.89061,100.60386 320.20313,99.908531 C 319.49999,99.181983 318.70702,98.635109 317.82422,98.267906 C 316.94921,97.900734 316.0078,97.717141 315,97.717125 M 314.97656,96.275719 C 316.17968,96.275736 317.31249,96.502298 318.375,96.955406 C 319.4453,97.400735 320.39842,98.049172 321.23438,98.900719 C 322.03905,99.713233 322.65233,100.64292 323.07422,101.68978 C 323.49608,102.73667 323.70701,103.84604 323.70703,105.01791 C 323.70701,106.20541 323.48826,107.33041 323.05078,108.39291 C 322.61326,109.4476 321.97655,110.37728 321.14063,111.18197 C 320.30467,112.00228 319.35155,112.63119 318.28125,113.06869 C 317.21874,113.50619 316.11718,113.72494 314.97656,113.72494 C 313.81249,113.72494 312.69921,113.49838 311.63672,113.04525 C 310.57421,112.59213 309.625,111.93978 308.78906,111.08822 C 307.97656,110.26791 307.35547,109.33822 306.92578,108.29916 C 306.5039,107.25229 306.29297,106.15854 306.29297,105.01791 C 306.29297,104.22104 306.39844,103.4476 306.60938,102.69759 C 306.82031,101.93979 307.13672,101.20151 307.55859,100.48275 C 308.34765,99.154639 309.39062,98.12339 310.6875,97.389 C 311.98437,96.646829 313.41405,96.275736 314.97656,96.275719"
+ id="text6015" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 372.0293,69.064453 L 376.06055,69.064453 C 377.84179,69.064468 379.18944,69.505874 380.10352,70.388672 C 381.01756,71.263684 381.47459,72.556652 381.47461,74.267578 C 381.47459,75.939461 381.02538,77.228522 380.12695,78.134766 C 379.23632,79.033208 377.95897,79.482426 376.29492,79.482422 L 372.0293,79.482422 L 372.0293,83.630859 L 368.52539,83.630859 L 368.52539,66.369141 L 372.0293,66.369141 L 372.0293,69.064453 M 372.05273,76.599609 L 375.47461,76.599609 C 376.4121,76.599616 377.09179,76.416023 377.51367,76.048828 C 377.93554,75.673836 378.14647,75.080087 378.14648,74.267578 C 378.14647,73.509776 377.93554,72.939464 377.51367,72.556641 C 377.09179,72.166027 376.47069,71.970715 375.65039,71.970703 L 372.05273,71.970703 L 372.05273,76.599609"
+ id="text6019" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 428.08594,66.322266 L 431.67188,66.322266 L 431.67188,77.150391 C 431.67187,78.486333 431.93749,79.462895 432.46875,80.080078 C 432.99999,80.689456 433.84374,80.994143 435,80.994141 C 436.17187,80.994143 437.02343,80.689456 437.55469,80.080078 C 438.09374,79.470707 438.36327,78.494146 438.36328,77.150391 L 438.36328,66.322266 L 441.91406,66.322266 L 441.91406,77.537109 C 441.91405,79.654301 441.3203,81.279299 440.13281,82.412109 C 438.95311,83.544922 437.24999,84.111328 435.02344,84.111328 C 432.78124,84.111328 431.0625,83.548828 429.86719,82.423828 C 428.67969,81.291018 428.08594,79.662113 428.08594,77.537109 L 428.08594,66.322266 M 435.73828,64.166016 L 435.73828,61.283203 L 438.38672,61.283203 L 438.38672,64.166016 L 435.73828,64.166016 M 431.66016,64.166016 L 431.66016,61.283203 L 434.30859,61.283203 L 434.30859,64.166016 L 431.66016,64.166016"
+ id="text6023" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 488.08594,66.105469 L 491.67188,66.105469 L 491.67188,76.933594 C 491.67187,78.269536 491.93749,79.246098 492.46875,79.863281 C 492.99999,80.472659 493.84374,80.777346 495,80.777344 C 496.17187,80.777346 497.02343,80.472659 497.55469,79.863281 C 498.09374,79.25391 498.36327,78.277349 498.36328,76.933594 L 498.36328,66.105469 L 501.91406,66.105469 L 501.91406,77.320313 C 501.91405,79.437504 501.3203,81.062502 500.13281,82.195313 C 498.95311,83.328125 497.24999,83.894531 495.02344,83.894531 C 492.78124,83.894531 491.0625,83.332031 489.86719,82.207031 C 488.67969,81.074221 488.08594,79.445316 488.08594,77.320313 L 488.08594,66.105469 M 498.45703,60.304688 L 494.78906,64.640625 L 493.125,64.640625 L 495.43359,60.304688 L 498.45703,60.304688"
+ id="text6029" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 552.43945,83.630859 L 552.43945,66.369141 L 555.99023,66.369141 L 555.99023,83.630859 L 552.43945,83.630859 M 557.66602,60.521484 L 553.99805,64.857422 L 552.33398,64.857422 L 554.64258,60.521484 L 557.66602,60.521484"
+ id="text6033" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 610.18359,75 C 610.18359,76.898444 610.60546,78.375005 611.44922,79.429688 C 612.29296,80.476566 613.47265,81.000003 614.98828,81 C 616.51952,81.000003 617.71093,80.476566 618.5625,79.429688 C 619.41405,78.375005 619.83983,76.898444 619.83984,75 C 619.83983,73.101573 619.41405,71.628918 618.5625,70.582031 C 617.71093,69.527358 616.51952,69.000015 614.98828,69 C 613.47265,69.000015 612.29296,69.523452 611.44922,70.570313 C 610.60546,71.617199 610.18359,73.093761 610.18359,75 M 606.5625,75 C 606.5625,72.210949 607.32031,70.000014 608.83594,68.367188 C 610.35937,66.726579 612.41015,65.906268 614.98828,65.90625 C 617.56639,65.906268 619.61717,66.726579 621.14063,68.367188 C 622.67186,70.007826 623.43748,72.218761 623.4375,75 C 623.43748,77.781256 622.67186,79.992191 621.14063,81.632813 C 619.61717,83.273438 617.56639,84.09375 614.98828,84.09375 C 612.41015,84.09375 610.35937,83.273438 608.83594,81.632813 C 607.32031,79.992191 606.5625,77.781256 606.5625,75 M 618.44531,60.503906 L 614.77734,64.839844 L 613.11328,64.839844 L 615.42188,60.503906 L 618.44531,60.503906"
+ id="text6037" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 670.18359,75.017578 C 670.18359,76.916022 670.60546,78.392583 671.44922,79.447266 C 672.29296,80.494144 673.47265,81.017581 674.98828,81.017578 C 676.51952,81.017581 677.71093,80.494144 678.5625,79.447266 C 679.41405,78.392583 679.83983,76.916022 679.83984,75.017578 C 679.83983,73.119151 679.41405,71.646496 678.5625,70.599609 C 677.71093,69.544936 676.51952,69.017593 674.98828,69.017578 C 673.47265,69.017593 672.29296,69.54103 671.44922,70.587891 C 670.60546,71.634778 670.18359,73.111339 670.18359,75.017578 M 666.5625,75.017578 C 666.5625,72.228527 667.32031,70.017592 668.83594,68.384766 C 670.35937,66.744158 672.41015,65.923846 674.98828,65.923828 C 677.56639,65.923846 679.61717,66.744158 681.14063,68.384766 C 682.67186,70.025404 683.43748,72.23634 683.4375,75.017578 C 683.43748,77.798834 682.67186,80.009769 681.14063,81.650391 C 679.61717,83.291016 677.56639,84.111328 674.98828,84.111328 C 672.41015,84.111328 670.35937,83.291016 668.83594,81.650391 C 667.32031,80.009769 666.5625,77.798834 666.5625,75.017578 M 675.72656,64.166016 L 675.72656,61.283203 L 678.375,61.283203 L 678.375,64.166016 L 675.72656,64.166016 M 671.64844,64.166016 L 671.64844,61.283203 L 674.29688,61.283203 L 674.29688,64.166016 L 671.64844,64.166016"
+ id="text6041" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 735.5332,106.35352 L 735.5332,103.35352 L 739.44727,99.966797 L 739.44727,102.75586 L 737.04492,104.8418 L 739.44727,106.92773 L 739.44727,109.74023 L 735.5332,106.35352 M 730.4707,106.35352 L 730.4707,103.35352 L 734.4082,99.966797 L 734.4082,102.75586 L 732.00586,104.8418 L 734.4082,106.92773 L 734.4082,109.74023 L 730.4707,106.35352"
+ id="text6045" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 799.44727,103.3418 L 799.44727,106.3418 L 795.5332,109.72852 L 795.5332,106.93945 L 797.93555,104.83008 L 795.5332,102.76758 L 795.5332,99.955078 L 799.44727,103.3418 M 794.4082,103.3418 L 794.4082,106.3418 L 790.4707,109.72852 L 790.4707,106.93945 L 792.86133,104.83008 L 790.4707,102.76758 L 790.4707,99.955078 L 794.4082,103.3418"
+ id="text6051" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 883.81641,76.535881 L 886.23047,76.535881 L 886.23047,85.418694 L 883.81641,85.418694 L 883.81641,76.535881 M 883.81641,64.535881 L 886.23047,64.535881 L 886.23047,73.418694 L 883.81641,73.418694 L 883.81641,64.535881 M 877.98047,101.19213 L 892.01953,101.19213 L 892.01953,107.07494 L 889.6875,107.07494 L 889.6875,103.48901 L 877.98047,103.48901 L 877.98047,101.19213"
+ id="text6057" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 149.9707,129.82617 L 147.58008,137.17383 L 152.37305,137.17383 L 149.9707,129.82617 M 147.9082,126.36914 L 152.00977,126.36914 L 158.23242,143.63086 L 154.50586,143.63086 L 153.33398,140.08008 L 146.64258,140.08008 L 145.50586,143.63086 L 141.76758,143.63086 L 147.9082,126.36914 M 153.42773,120.52148 L 149.75977,124.85742 L 148.0957,124.85742 L 150.4043,120.52148 L 153.42773,120.52148"
+ id="text6065" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 211.40625,137.91797 C 211.71874,137.73829 211.95312,137.53907 212.10938,137.32031 C 212.26562,137.10157 212.34374,136.86719 212.34375,136.61719 C 212.34374,136.31251 212.2539,136.0547 212.07422,135.84375 C 211.89452,135.62501 211.52343,135.3711 210.96094,135.08203 L 207.85547,133.47656 C 207.55078,133.65626 207.3164,133.85938 207.15234,134.08594 C 206.99609,134.31251 206.91797,134.5547 206.91797,134.8125 C 206.91797,135.1172 207.03125,135.38673 207.25781,135.62109 C 207.49218,135.84766 208.0039,136.16407 208.79297,136.57031 L 211.40625,137.91797 M 205.03125,141.75 L 207.92578,141.75 C 207.98828,142.35938 208.16796,142.8125 208.46484,143.10938 C 208.76953,143.40625 209.19921,143.55469 209.75391,143.55469 C 210.26952,143.55469 210.67968,143.43359 210.98438,143.19141 C 211.28905,142.94141 211.4414,142.60547 211.44141,142.18359 C 211.4414,141.83985 211.32812,141.54297 211.10156,141.29297 C 210.87499,141.03516 210.42577,140.74219 209.75391,140.41406 L 206.95313,138.99609 C 206.0625,138.55079 205.39844,138.03907 204.96094,137.46094 C 204.52344,136.88282 204.30469,136.23438 204.30469,135.51563 C 204.30469,134.82032 204.47266,134.21095 204.80859,133.6875 C 205.15234,133.15626 205.65625,132.71485 206.32031,132.36328 C 205.92969,132.01173 205.64062,131.62892 205.45313,131.21484 C 205.26562,130.79298 205.17187,130.32814 205.17188,129.82031 C 205.17187,128.64845 205.57422,127.70705 206.37891,126.99609 C 207.18359,126.27736 208.2539,125.91799 209.58984,125.91797 C 210.96484,125.91799 212.04296,126.26955 212.82422,126.97266 C 213.60546,127.6758 214.0078,128.64845 214.03125,129.89063 L 211.26563,129.89063 C 211.24999,129.3672 211.09374,128.96876 210.79688,128.69531 C 210.50781,128.42189 210.08984,128.28517 209.54297,128.28516 C 209.05859,128.28517 208.68359,128.39064 208.41797,128.60156 C 208.16015,128.81251 208.03125,129.10939 208.03125,129.49219 C 208.03125,129.8047 208.18359,130.09767 208.48828,130.37109 C 208.80078,130.63673 209.35937,130.95704 210.16406,131.33203 L 212.13281,132.24609 C 213.1328,132.72267 213.87108,133.25392 214.34766,133.83984 C 214.82421,134.41798 215.06249,135.08595 215.0625,135.84375 C 215.06249,136.55469 214.8828,137.17579 214.52344,137.70703 C 214.17186,138.23047 213.66405,138.63672 213,138.92578 C 213.45312,139.32422 213.79296,139.76563 214.01953,140.25 C 214.24608,140.73438 214.35936,141.26563 214.35938,141.84375 C 214.35936,143.04688 213.92968,144.03906 213.07031,144.82031 C 212.21093,145.60937 211.10546,146.0039 209.75391,146.00391 C 208.26953,146.0039 207.1289,145.64453 206.33203,144.92578 C 205.53515,144.20703 205.10156,143.14844 205.03125,141.75 M 203.97656,173.625 L 203.97656,160.59375 C 203.97656,159.29689 204.48047,158.25002 205.48828,157.45313 C 206.49609,156.64845 207.83984,156.24611 209.51953,156.24609 C 211.23046,156.24611 212.5703,156.63674 213.53906,157.41797 C 214.5078,158.19923 214.99217,159.27345 214.99219,160.64063 C 214.99217,161.48439 214.84764,162.17579 214.55859,162.71484 C 214.27733,163.25392 213.83983,163.66798 213.24609,163.95703 C 214.16796,164.32423 214.85936,164.86329 215.32031,165.57422 C 215.78905,166.28516 216.02342,167.16016 216.02344,168.19922 C 216.02342,169.94922 215.51952,171.36328 214.51172,172.44141 C 213.5039,173.51953 212.18358,174.05859 210.55078,174.05859 C 210.32421,174.05859 210.0703,174.04687 209.78906,174.02344 C 209.51562,174 209.21874,173.96484 208.89844,173.91797 L 208.89844,171.17578 C 208.99999,171.19141 209.10156,171.20313 209.20313,171.21094 C 209.31249,171.21875 209.47265,171.22266 209.68359,171.22266 C 210.60546,171.22266 211.3164,170.96875 211.81641,170.46094 C 212.3164,169.94532 212.5664,169.21485 212.56641,168.26953 C 212.5664,167.35548 212.29296,166.66016 211.74609,166.18359 C 211.20702,165.70704 210.41796,165.46876 209.37891,165.46875 L 209.0625,165.46875 L 209.07422,163.06641 C 209.12109,163.07423 209.17187,163.08204 209.22656,163.08984 C 209.28124,163.08985 209.36327,163.08985 209.47266,163.08984 C 210.16796,163.08985 210.6953,162.91798 211.05469,162.57422 C 211.42187,162.22267 211.60546,161.71486 211.60547,161.05078 C 211.60546,160.38673 211.41405,159.88283 211.03125,159.53906 C 210.65624,159.18751 210.10546,159.01173 209.37891,159.01172 C 208.70703,159.01173 208.19531,159.20705 207.84375,159.59766 C 207.49218,159.98048 207.3164,160.54298 207.31641,161.28516 L 207.31641,173.625 L 203.97656,173.625"
+ id="text6073" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 267.09961,140.51367 L 269.94727,140.51367 C 271.60351,140.51367 272.80272,140.08008 273.54492,139.21289 C 274.2871,138.34571 274.65819,136.94727 274.6582,135.01758 C 274.65819,133.09571 274.31053,131.68165 273.61523,130.77539 C 272.92772,129.86134 271.8496,129.40431 270.38086,129.4043 L 267.09961,129.4043 L 267.09961,133.23633 L 270.88477,133.23633 L 270.88477,135.47461 L 267.09961,135.47461 L 267.09961,140.51367 M 263.61914,143.63086 L 263.61914,135.47461 L 261.74414,135.47461 L 261.74414,133.23633 L 263.61914,133.23633 L 263.61914,126.36914 L 270.4043,126.36914 C 273.04491,126.36916 275.01366,127.084 276.31055,128.51367 C 277.60741,129.93556 278.25584,132.10353 278.25586,135.01758 C 278.25584,136.60352 278.01756,137.99805 277.54102,139.20117 C 277.07225,140.4043 276.38084,141.36914 275.4668,142.0957 C 274.77928,142.64258 273.99413,143.03711 273.11133,143.2793 C 272.23632,143.51367 271.00585,143.63086 269.41992,143.63086 L 263.61914,143.63086"
+ id="text6077" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 626.72461,139.55273 C 627.17773,140.04493 627.68945,140.41211 628.25977,140.6543 C 628.83007,140.89649 629.47069,141.01758 630.18164,141.01758 C 631.71288,141.01758 632.90428,140.49414 633.75586,139.44727 C 634.60741,138.39258 635.03319,136.91602 635.0332,135.01758 C 635.03319,134.24415 634.96288,133.54493 634.82227,132.91992 C 634.68163,132.28712 634.4785,131.73634 634.21289,131.26758 L 626.72461,139.55273 M 625.98633,138.36914 L 633.39258,130.21289 C 632.9785,129.81447 632.50585,129.51759 631.97461,129.32227 C 631.44335,129.11916 630.84569,129.01759 630.18164,129.01758 C 628.66601,129.01759 627.48632,129.54103 626.64258,130.58789 C 625.79882,131.63478 625.37695,133.11134 625.37695,135.01758 C 625.37695,135.72071 625.42382,136.34571 625.51758,136.89258 C 625.61914,137.43946 625.77539,137.93165 625.98633,138.36914 M 621.36914,143.36133 L 623.51367,140.9707 C 622.91992,140.16602 622.47851,139.27149 622.18945,138.28711 C 621.90039,137.29493 621.75586,136.20509 621.75586,135.01758 C 621.75586,132.22853 622.51367,130.01759 624.0293,128.38477 C 625.55273,126.74416 627.60351,125.92385 630.18164,125.92383 C 631.28319,125.92385 632.27147,126.06447 633.14648,126.3457 C 634.02928,126.62697 634.84178,127.06056 635.58398,127.64648 L 637.30664,125.70117 L 638.45508,126.73242 L 636.63867,128.70117 C 637.30272,129.5215 637.79881,130.45509 638.12695,131.50195 C 638.46287,132.54884 638.63084,133.72071 638.63086,135.01758 C 638.63084,137.79883 637.86912,140.00977 636.3457,141.65039 C 634.82225,143.29102 632.76757,144.11133 630.18164,144.11133 C 629.01757,144.11133 627.96679,143.94727 627.0293,143.61914 C 626.0996,143.29102 625.26367,142.79102 624.52148,142.11914 L 622.50586,144.4043 L 621.36914,143.36133"
+ id="text6081" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 690,127.98633 C 689.42968,127.98634 688.9414,128.18556 688.53516,128.58398 C 688.13672,128.98244 687.9375,129.4629 687.9375,130.02539 C 687.9375,130.60353 688.13672,131.09181 688.53516,131.49023 C 688.93359,131.88868 689.42187,132.0879 690,132.08789 C 690.5625,132.0879 691.04296,131.88478 691.44141,131.47852 C 691.83984,131.07228 692.03906,130.5879 692.03906,130.02539 C 692.03906,129.4629 691.83984,128.98244 691.44141,128.58398 C 691.04296,128.18556 690.5625,127.98634 690,127.98633 M 690,126.47461 C 690.98437,126.47463 691.82031,126.82619 692.50781,127.5293 C 693.20312,128.22462 693.55077,129.06447 693.55078,130.04883 C 693.55077,131.0254 693.20312,131.86134 692.50781,132.55664 C 691.81249,133.25196 690.96875,133.59962 689.97656,133.59961 C 688.99218,133.59962 688.15625,133.25587 687.46875,132.56836 C 686.78906,131.88087 686.44922,131.04103 686.44922,130.04883 C 686.44922,129.05666 686.79297,128.21291 687.48047,127.51758 C 688.17578,126.82228 689.01562,126.47463 690,126.47461 M 695.51953,156.29883 L 695.51953,157.59961 L 694.19531,157.59961 L 694.19531,173.63086 L 692.42578,173.63086 L 692.42578,157.59961 L 690.57422,157.59961 L 690.57422,173.63086 L 688.78125,173.63086 L 688.78125,164.44336 C 687.47656,164.39649 686.43359,164.00196 685.65234,163.25977 C 684.87109,162.51759 684.48047,161.56056 684.48047,160.38867 C 684.48047,159.15431 684.89844,158.16603 685.73438,157.42383 C 686.57031,156.67385 687.67968,156.29885 689.0625,156.29883 L 695.51953,156.29883"
+ id="text6085" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 373.13672,6.5214844 L 376.08984,6.5214844 L 381.72656,13.095703 L 378.97266,13.095703 L 374.625,8.7480469 L 370.25391,13.095703 L 367.5,13.095703 L 373.13672,6.5214844"
+ id="text6091" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 750.67969,128.67773 L 750.67969,125.79492 L 753.32813,125.79492 L 753.32813,128.67773 L 750.67969,128.67773 M 746.60156,128.67773 L 746.60156,125.79492 L 749.25,125.79492 L 749.25,128.67773 L 746.60156,128.67773 M 753.39844,155.0332 L 749.73047,159.36914 L 748.06641,159.36914 L 750.375,155.0332 L 753.39844,155.0332"
+ id="text6099" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 171.07031,197.29102 L 175.92188,197.29102 L 175.92188,189.29883 L 173.97656,189.29883 L 171.07031,197.29102 M 165,203.63086 L 171.80859,186.36914 L 187.81641,186.36914 L 187.81641,189.36914 L 179.34375,189.36914 L 179.34375,193.04883 L 187.05469,193.04883 L 187.05469,196.00195 L 179.34375,196.00195 L 179.34375,200.44336 L 188.25,200.44336 L 188.25,203.63086 L 175.92188,203.63086 L 175.92188,200.08008 L 170.0625,200.08008 L 168.76172,203.63086 L 165,203.63086"
+ id="text6105" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 300.46875,193.23633 C 300.32031,193.22071 300.20312,193.20899 300.11719,193.20117 C 300.03906,193.19337 299.96484,193.18946 299.89453,193.18945 C 299.05859,193.18946 298.42578,193.53321 297.99609,194.2207 C 297.5664,194.90821 297.35156,195.92384 297.35156,197.26758 C 297.35156,198.04102 297.4375,198.70899 297.60938,199.27148 C 297.78906,199.83399 298.04687,200.28711 298.38281,200.63086 L 300.46875,193.23633 M 296.68359,206.49023 L 297.48047,203.63086 C 296.30859,203.13867 295.42187,202.35352 294.82031,201.27539 C 294.21875,200.19727 293.91797,198.85352 293.91797,197.24414 C 293.91797,195.11134 294.45312,193.43946 295.52344,192.22852 C 296.60156,191.01759 298.07421,190.41212 299.94141,190.41211 C 300.15234,190.41212 300.35937,190.41994 300.5625,190.43555 C 300.76562,190.45119 300.96874,190.47462 301.17188,190.50586 L 301.69922,188.56055 L 302.97656,188.56055 L 302.34375,190.78711 C 303.32811,191.09181 304.09765,191.63478 304.65234,192.41602 C 305.20702,193.18946 305.52733,194.17774 305.61328,195.38086 L 302.32031,195.36914 C 302.28124,194.98634 302.1914,194.65821 302.05078,194.38477 C 301.91796,194.10353 301.72265,193.85743 301.46484,193.64648 L 299.36719,201.13477 C 299.38281,201.13477 299.40624,201.13867 299.4375,201.14648 C 299.67187,201.16992 299.85156,201.18164 299.97656,201.18164 C 300.66406,201.18164 301.19921,200.99024 301.58203,200.60742 C 301.97265,200.22461 302.23437,199.62305 302.36719,198.80273 L 305.66016,198.80273 C 305.54296,200.41993 304.96874,201.70117 303.9375,202.64648 C 302.91405,203.5918 301.59374,204.06445 299.97656,204.06445 C 299.76562,204.06445 299.55077,204.05664 299.33203,204.04102 C 299.11328,204.02539 298.88671,204.00195 298.65234,203.9707 L 297.96094,206.49023 L 296.68359,206.49023 M 304.19531,223.0957 L 301.99219,223.0957 C 301.92968,222.54884 301.72264,222.12696 301.37109,221.83008 C 301.01952,221.5254 300.55468,221.37306 299.97656,221.37305 C 299.26562,221.37306 298.70702,221.69337 298.30078,222.33398 C 297.89452,222.96681 297.6914,223.85353 297.69141,224.99414 C 297.6914,226.14259 297.89452,227.01758 298.30078,227.61914 C 298.70702,228.22071 299.29687,228.52149 300.07031,228.52148 C 300.64061,228.52149 301.09765,228.35743 301.44141,228.0293 C 301.78514,227.70118 301.99218,227.23633 302.0625,226.63477 L 304.32422,226.62305 C 304.2617,227.70899 303.83592,228.58008 303.04688,229.23633 C 302.2578,229.89258 301.24218,230.22071 300,230.2207 C 298.54687,230.22071 297.39843,229.75977 296.55469,228.83789 C 295.71874,227.91602 295.30078,226.65821 295.30078,225.06445 C 295.30078,223.45509 295.72656,222.17384 296.57813,221.2207 C 297.43749,220.25978 298.58593,219.77931 300.02344,219.7793 C 301.21093,219.77931 302.18749,220.084 302.95313,220.69336 C 303.72655,221.30275 304.14061,222.10353 304.19531,223.0957 M 300,217.7168 C 298.99999,217.71681 298.06249,217.8965 297.1875,218.25586 C 296.32031,218.61525 295.54687,219.13869 294.86719,219.82617 C 294.17187,220.52931 293.64062,221.32618 293.27344,222.2168 C 292.90625,223.09962 292.72265,224.0254 292.72266,224.99414 C 292.72265,225.97071 292.90625,226.89649 293.27344,227.77148 C 293.64062,228.64649 294.17187,229.43164 294.86719,230.12695 C 295.55468,230.81446 296.33984,231.3418 297.22266,231.70898 C 298.10546,232.07617 299.03124,232.25977 300,232.25977 C 300.96874,232.25977 301.89452,232.07617 302.77734,231.70898 C 303.66796,231.3418 304.46874,230.80664 305.17969,230.10352 C 305.86717,229.43164 306.3867,228.66211 306.73828,227.79492 C 307.09764,226.92774 307.27733,225.99415 307.27734,224.99414 C 307.27733,224.00978 307.09373,223.08009 306.72656,222.20508 C 306.36717,221.32228 305.84373,220.53712 305.15625,219.84961 C 304.46092,219.15431 303.67577,218.62697 302.80078,218.26758 C 301.92577,217.90041 300.99218,217.71681 300,217.7168 M 299.97656,216.27539 C 301.16405,216.27541 302.28514,216.49416 303.33984,216.93164 C 304.40233,217.36916 305.35155,218.00587 306.1875,218.8418 C 307.0078,219.66212 307.63279,220.60353 308.0625,221.66602 C 308.49217,222.72071 308.70701,223.8379 308.70703,225.01758 C 308.70701,226.20509 308.49217,227.31446 308.0625,228.3457 C 307.64061,229.37696 307.01561,230.29883 306.1875,231.11133 C 305.3203,231.95508 304.35155,232.60352 303.28125,233.05664 C 302.21093,233.50195 301.10936,233.72461 299.97656,233.72461 C 298.82812,233.72461 297.73046,233.50586 296.68359,233.06836 C 295.64453,232.62305 294.70312,231.97852 293.85938,231.13477 C 293.02343,230.30664 292.38672,229.36914 291.94922,228.32227 C 291.51172,227.26758 291.29297,226.16602 291.29297,225.01758 C 291.29297,223.85353 291.51172,222.74415 291.94922,221.68945 C 292.38672,220.62697 293.02343,219.66994 293.85938,218.81836 C 294.67968,217.99025 295.60937,217.36134 296.64844,216.93164 C 297.68749,216.49416 298.79687,216.27541 299.97656,216.27539"
+ id="text6109" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 472.88672,203.63086 L 472.88672,186.36914 L 476.60156,186.36914 L 483.60938,198.22852 L 483.60938,186.36914 L 487.11328,186.36914 L 487.11328,203.63086 L 483.44531,203.63086 L 476.39063,191.77148 L 476.39063,203.63086 L 472.88672,203.63086 M 483.82031,181.0957 C 483.61717,182.07229 483.31639,182.79494 482.91797,183.26367 C 482.51952,183.72463 482.0078,183.9551 481.38281,183.95508 C 481.21874,183.9551 481.0664,183.94729 480.92578,183.93164 C 480.78515,183.90822 480.64452,183.87307 480.50391,183.82617 L 479.48438,183.52148 C 479.33593,183.48244 479.19921,183.4551 479.07422,183.43945 C 478.94921,183.41604 478.82812,183.40432 478.71094,183.4043 C 478.44531,183.40432 478.23046,183.47463 478.06641,183.61523 C 477.90234,183.75588 477.77343,183.98635 477.67969,184.30664 L 476.39063,184.30664 C 476.57812,183.36135 476.86718,182.66604 477.25781,182.2207 C 477.64843,181.77541 478.15624,181.55276 478.78125,181.55273 C 478.9453,181.55276 479.10937,181.56838 479.27344,181.59961 C 479.43749,181.62307 479.60937,181.66213 479.78906,181.7168 L 480.87891,182.00977 C 480.97265,182.04104 481.0703,182.06447 481.17188,182.08008 C 481.28124,182.09572 481.39843,182.10354 481.52344,182.10352 C 481.77343,182.10354 481.98046,182.02151 482.14453,181.85742 C 482.3164,181.68557 482.4453,181.43166 482.53125,181.0957 L 483.82031,181.0957"
+ id="text6113" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 535.83398,220.83432 L 539.2207,220.83432 L 538.33008,225.93198 C 538.21289,226.55698 538.12304,227.15073 538.06055,227.71323 C 537.99804,228.26792 537.96679,228.72104 537.9668,229.0726 C 537.96679,229.79917 538.13085,230.34214 538.45898,230.70151 C 538.7871,231.05307 539.2871,231.22885 539.95898,231.22885 C 540.74023,231.22885 541.3457,230.90854 541.77539,230.26791 C 542.21288,229.62729 542.57616,228.49058 542.86523,226.85776 L 543.91992,220.83432 L 547.30664,220.83432 L 545.04492,233.6312 L 541.9043,233.6312 L 542.11523,232.2601 C 541.7871,232.86948 541.41991,233.31479 541.01367,233.59604 C 540.61523,233.87729 540.14257,234.01791 539.5957,234.01791 C 539.07226,234.01791 538.60742,233.90073 538.20117,233.66635 C 537.79492,233.43979 537.42773,233.08432 537.09961,232.59995 L 536.04492,238.76401 L 532.69336,238.76401 L 535.83398,220.83432"
+ id="text6117" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 607.875,197.70117 C 607.74217,199.66211 606.98436,201.22071 605.60156,202.37695 C 604.22655,203.5332 602.42968,204.11133 600.21094,204.11133 C 597.65624,204.11133 595.66796,203.31445 594.24609,201.7207 C 592.83203,200.12696 592.125,197.89258 592.125,195.01758 C 592.125,192.08009 592.84765,189.83009 594.29297,188.26758 C 595.73828,186.7051 597.8164,185.92385 600.52734,185.92383 C 602.73046,185.92385 604.46874,186.46291 605.74219,187.54102 C 607.02342,188.61134 607.72655,190.12697 607.85156,192.08789 L 604.34766,192.08789 C 604.19921,191.11134 603.80077,190.36915 603.15234,189.86133 C 602.50389,189.34572 601.6289,189.08791 600.52734,189.08789 C 598.96484,189.08791 597.77734,189.59181 596.96484,190.59961 C 596.15234,191.60743 595.74609,193.08009 595.74609,195.01758 C 595.74609,196.89258 596.14843,198.3418 596.95313,199.36523 C 597.76562,200.38868 598.91796,200.90039 600.41016,200.90039 C 601.48827,200.90039 602.37108,200.62696 603.05859,200.08008 C 603.74608,199.52539 604.19139,198.73243 604.39453,197.70117 L 607.875,197.70117 M 597.62109,208.76367 L 597.62109,207.25195 C 598.24609,207.41601 598.81249,207.54101 599.32031,207.62695 C 599.82812,207.71289 600.26171,207.75586 600.62109,207.75586 C 601.02733,207.75586 601.32421,207.68554 601.51172,207.54492 C 601.69921,207.41211 601.79296,207.19726 601.79297,206.90039 C 601.79296,206.60351 601.68358,206.39258 601.46484,206.26758 C 601.24608,206.14258 600.8828,206.08008 600.375,206.08008 C 600.1953,206.08008 600.05858,206.08008 599.96484,206.08008 C 599.87108,206.08789 599.78515,206.0957 599.70703,206.10352 L 599.70703,203.63086 L 600.90234,203.63086 L 600.90234,204.68555 L 601.07813,204.68555 C 601.99218,204.68555 602.67968,204.87305 603.14063,205.24805 C 603.60155,205.62304 603.83202,206.18164 603.83203,206.92383 C 603.83202,207.70507 603.57421,208.29101 603.05859,208.68164 C 602.54296,209.07226 601.76952,209.26757 600.73828,209.26758 C 600.33983,209.26757 599.87108,209.2246 599.33203,209.13867 C 598.80077,209.05273 598.23046,208.92773 597.62109,208.76367"
+ id="text6121" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#0000ff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Swis721 BT"
+ d="M 721.7168,216.36914 L 721.7168,219.82617 L 718.23633,219.82617 L 718.23633,216.36914 L 721.7168,216.36914 M 721.55273,221.39648 C 721.55273,221.47462 721.55663,221.5879 721.56445,221.73633 C 721.57226,221.88478 721.57616,221.99415 721.57617,222.06445 C 721.57616,222.74415 721.50194,223.31446 721.35352,223.77539 C 721.20507,224.23634 720.96679,224.66602 720.63867,225.06445 C 720.38085,225.36134 720.00195,225.70118 719.50195,226.08398 C 719.00976,226.4668 718.69335,226.74415 718.55273,226.91602 C 718.24804,227.25977 718.0332,227.57618 717.9082,227.86523 C 717.79101,228.1543 717.73242,228.4668 717.73242,228.80273 C 717.73242,229.55274 717.93554,230.13477 718.3418,230.54883 C 718.74804,230.95508 719.32226,231.15821 720.06445,231.1582 C 720.79882,231.15821 721.38085,230.91211 721.81055,230.41992 C 722.24023,229.91993 722.4746,229.22071 722.51367,228.32227 L 725.8418,228.32227 L 725.8418,228.68555 C 725.84178,230.3418 725.31835,231.66211 724.27148,232.64648 C 723.23241,233.62305 721.83007,234.11133 720.06445,234.11133 C 718.25976,234.11133 716.82226,233.64648 715.75195,232.7168 C 714.68945,231.7793 714.1582,230.53321 714.1582,228.97852 C 714.1582,228.40821 714.2168,227.90821 714.33398,227.47852 C 714.45117,227.04883 714.63086,226.65821 714.87305,226.30664 C 715.18554,225.86915 715.67773,225.39259 716.34961,224.87695 C 717.02148,224.36134 717.43554,224.03321 717.5918,223.89258 C 717.88867,223.60353 718.0996,223.29884 718.22461,222.97852 C 718.35742,222.6504 718.42382,222.25587 718.42383,221.79492 C 718.42382,221.75587 718.41992,221.69337 718.41211,221.60742 C 718.40429,221.51368 718.40039,221.44337 718.40039,221.39648 L 721.55273,221.39648"
+ id="text6131" />
+ <path
+ style="font-size:24px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Matrix Unicode"
+ d=""
+ id="text6955" />
+ </g>
+</svg>
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/base_layer.PNG b/keyboards/s60-x/keymaps/ansi_qwertz/docs/base_layer.PNG
new file mode 100644
index 000000000..c730c2d65
--- /dev/null
+++ b/keyboards/s60-x/keymaps/ansi_qwertz/docs/base_layer.PNG
Binary files differ
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/function_layer.PNG b/keyboards/s60-x/keymaps/ansi_qwertz/docs/function_layer.PNG
new file mode 100644
index 000000000..fae2439ca
--- /dev/null
+++ b/keyboards/s60-x/keymaps/ansi_qwertz/docs/function_layer.PNG
Binary files differ
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/docs/gaming_layer.PNG b/keyboards/s60-x/keymaps/ansi_qwertz/docs/gaming_layer.PNG
new file mode 100644
index 000000000..59b202be2
--- /dev/null
+++ b/keyboards/s60-x/keymaps/ansi_qwertz/docs/gaming_layer.PNG
Binary files differ
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/keymap.c b/keyboards/s60-x/keymaps/ansi_qwertz/keymap.c
new file mode 100644
index 000000000..317a245be
--- /dev/null
+++ b/keyboards/s60-x/keymaps/ansi_qwertz/keymap.c
@@ -0,0 +1,237 @@
+/*
+Copyright 2016 Julien Pecqueur <julien@peclu.net>
+Copyright 2016 Felix Uhl <ifreilicht@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 "s60-x.h"
+
+//make keymap a little easier to read
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+#define ONESHOT_TAP_TOGGLE 2
+#define ONESHOT_TIMEOUT 1
+
+//uncomment to activate dead keys
+//#define DONT_REVIVE_DEADKEYS 1
+
+//Function keycodes for better readability
+//SpaceFN
+//OneShot LeftShift
+//GamingMode Lock (disables SpaceFn and OneShot LShift)
+//Function
+//Mute microphone
+#define KC_SPACEFN KC_FN0
+#define KC_OSLS KC_FN3
+#define KC_GMLK KC_FN1
+#define KC_FUNC KC_FN2
+#define MICMUTE RCTL(KC_LCTL)
+
+enum function_codes {
+ F_SPACEFN = 0,
+ F_OSLS = 3,
+ F_GMLK = 1,
+ F_FUNC = 2
+};
+
+enum layer_names {
+ DEFAULT,
+ GAMING,
+ FUNCTION
+};
+
+enum languages {
+ GERMAN
+};
+
+#define LANGUAGE GERMAN
+
+enum custom_keycodes {
+ KC_CM_A = SAFE_RANGE,
+// KC_CM_B,
+ KC_CM_C,
+// KC_CM_D,
+ KC_CM_E,
+// KC_CM_F,
+ KC_CM_G,
+// KC_CM_H,
+ KC_CM_I,
+// KC_CM_J,
+ KC_CM_K,
+ KC_CM_L,
+ KC_CM_M,
+ KC_CM_N,
+ KC_CM_O,
+ KC_CM_P,
+// KC_CM_Q,
+ KC_CM_R,
+ KC_CM_S,
+// KC_CM_T,
+ KC_CM_U,
+// KC_CM_V,
+ KC_CM_W,
+// KC_CM_X,
+ KC_CM_Y,
+ KC_CM_Z
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Layout 0: Default Layer
+ * ,-----------------------------------------------------------.
+ * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \|Del|
+ * |-----------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Z| U| I| O| P| [| ]|BckSp|
+ * |-----------------------------------------------------------|
+ * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return |
+ * |-----------------------------------------------------------|
+ * |Shift | Y| X| C| V| B| N| M| ,| .| /| Up |RSft|
+ * |-----------------------------------------------------------|
+ * |Fn2 |Gui |Alt | SpaceFn |Alt |Left|Down|Right|
+ * `-----------------------------------------------------------'
+ */
+ [DEFAULT] = KEYMAP(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Z, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
+ KC_LSFT, KC_NUBS, KC_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_UP, KC_RSFT, \
+ KC_FUNC, KC_LGUI, KC_LALT, KC_SPACEFN, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* Layout 1: Gaming Layer, SpaceFn disabled
+ * ,-----------------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | | | | |Fn1 |
+ * |-----------------------------------------------------------|
+ * | |RSft| | Space | | | | |
+ * `-----------------------------------------------------------'
+ */
+ [GAMING] = KEYMAP(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GMLK, \
+ _______, KC_RSFT, _______, KC_SPC, _______, _______, _______, _______
+ ),
+
+ /* Layout 2: Function Layer
+ * MicMute requires special software to be installed. Check readme.md for more information
+ * ,-----------------------------------------------------------.
+ * |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|RES|
+ * |-----------------------------------------------------------|
+ * | | | | |Prv|Ply|Nxt| Ü | | Ö | |Prt|Slk|Pau |
+ * |-----------------------------------------------------------|
+ * | | Ä | ß | |Vl-|Mut|Vl+| | | | | |PEnt |
+ * |-----------------------------------------------------------|
+ * | | | | |MicMut|Cal| | | | |Pau |PUp |Fn1 |
+ * |-----------------------------------------------------------|
+ * | | | | | |Home|PDn |End |
+ * `-----------------------------------------------------------'
+ */
+ [FUNCTION] = KEYMAP(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, RESET, \
+ _______, _______, KC_CM_W, KC_CM_E, KC_MPRV, KC_MPLY, KC_MNXT, KC_CM_U, KC_CM_I, KC_CM_O, KC_CM_P, KC_PSCR, KC_SLCK, KC_PAUS, \
+ _______, KC_CM_A, KC_CM_S, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, KC_CM_K, KC_CM_L, _______, _______, _______, KC_PENT, \
+ _______, _______, KC_CM_Y, _______, KC_CM_C, MICMUTE, KC_CALC, KC_CM_N, KC_CM_M, _______, _______, _______, _______, KC_PGUP, KC_GMLK, \
+ _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+ ),
+};
+
+/*
+* Fn action definition
+*/
+const uint16_t PROGMEM fn_actions[] = {
+ [F_SPACEFN] = ACTION_LAYER_TAP_KEY(2, KC_SPACE), // SpaceFn layout 1
+ [F_GMLK] = ACTION_LAYER_TOGGLE(1), // Disable SpaceFn and Oneshot Shift
+ [F_FUNC] = ACTION_LAYER_MOMENTARY(2), // SpaceFn layout 1
+ [F_OSLS] = ACTION_MODS_ONESHOT(MOD_LSFT) // Oneshot Leftshift
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ return MACRO_NONE;
+};
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_german(uint16_t keycode, keyrecord_t *record) {
+ uint16_t send_code = 0;
+ if (record->event.pressed) {
+ switch (keycode) {
+ case KC_CM_A:
+ send_code = KC_Q;
+ break;
+ case KC_CM_O:
+ send_code = KC_P;
+ break;
+ case KC_CM_U:
+ send_code = KC_Y;
+ break;
+ case KC_CM_S:
+ send_code = KC_S;
+ break;
+ }
+
+ if (send_code == 0) {
+ return true;
+ }
+ else {
+ register_code(KC_RALT);
+ register_code(send_code);
+ unregister_code(send_code);
+ unregister_code(KC_RALT);
+ return false;
+ }
+ }
+ return true;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ //revive dead keys
+#ifndef DONT_REVIVE_DEADKEYS
+ bool shift_active = keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_LSFT));
+ bool altgr_active = keyboard_report->mods & (MOD_BIT(KC_RALT));
+ if ((keycode == KC_QUOT && !altgr_active) ||
+ keycode == KC_GRV ||
+ (keycode == KC_6 && shift_active))
+ {
+ if (record->event.pressed) {
+ register_code(keycode);
+ unregister_code(keycode);
+ register_code(KC_SPACE);
+ unregister_code(KC_SPACE);
+ }
+ return false;
+ }
+#endif
+#if LANGUAGE == GERMAN
+ return process_german(keycode, record);
+#else
+ return true;
+#endif
+}
+
+void led_set_user(uint8_t usb_led) {
+
+} \ No newline at end of file
diff --git a/keyboards/s60-x/keymaps/ansi_qwertz/readme.md b/keyboards/s60-x/keymaps/ansi_qwertz/readme.md
new file mode 100644
index 000000000..b22010612
--- /dev/null
+++ b/keyboards/s60-x/keymaps/ansi_qwertz/readme.md
@@ -0,0 +1,94 @@
+# ANSI_QWERTZ
+
+[Click here to go to the layers directly.](readme.md#1-layers)
+
+This keymap was specifically designed to support keycaps with ANSI layout and legends, while retaining the possibility of inputting characters
+with diacritics that are normally not used in the english language.
+
+It currently relies on the US-International keyboard layout, which can be installed in any current operating system without the use of third party hardware.
+
+##0 Features
+* Input of letters with diacritics on familiar QWERTZ layout
+* Support for ANSI-legend keycaps
+* Option to "revive" all dead keys
+* Dedicated arrow cluster
+* SpaceFN for easy access to Function keys and diacritic input
+* Locking "Gaming Mode" that disables SpaceFN and allows to bind GUI key in Games
+* Reset key binding, no need to press hardware reset button to program
+* Microphone Mute key (requires 3rd-party software, see below)
+
+###0.0 Languages
+The US-International Layout is currently required for the support of non-english languages. This keymap swaps Y and Z to provide the familiar QWERTZ position for characters when using that layout.
+All diacritic characters are input by either holding `Space` or `Fn` and pressing the corresponding key. For languages that aren't yet supported explicitly,
+one can also use AltGr to input the characters as intended by the US-Intl layout or the dead keys, if they're kept from being [revived](readme.md#04-revive-dead-keys).
+
+The illustration below shows the "US International" layout available in the Language settings of Windows, Linux and Mac OS.
+
+![KB_US-International](docs/KB_US-International.png)
+
+Not all languages are supported by this layout. Linux also offers the "US International Alternative" layout,
+which contains more dead keys to input pretty much every diacritic character in a language using latin letters. More information can be found [here](http://web.archive.org/web/20160818101234/http://dry.sailingissues.com/us-international-keyboard-layout.html).
+
+![KB_US-International-Alternative](docs/KB_US-International-Alternative.png)
+
+####0.0.0 Explicitly Supported Languages
+* German
+
+####0.0.1 Implicitly Supported Languages
+This list only applies to Windows. Linux systems support all languages, see above. This list might be incomplete! Please add your language if you find it's supported.
+
+* French
+
+###0.1 SpaceFN
+SpaceFN basically means that `Space` acts as a normal spacebar when tapped, but acts as a layer-key when held down.
+This means that you can't hold space to output multiple spaces consecutively and that space only registers once released.
+The advantage is that the spacebar is easier to reach than any other `Fn`-key could be.
+
+###0.2 "Gaming Mode"
+To alleviate the problems SpaceFN would cause when gaming, the Gaming Mode is pretty much a layer that can be turned on by pressing Fn+RShift.
+This will turn the double-role Spacebar into a normal one, so the Fn-layer (and thus function and media keys) can only be accessed with the Fn-key.
+It also turns the GUI-key (aka Win-key aka Super-key) into Right Shift, so it can be bound in Games. This is especially useful when playing with ESDF instead of WASD.
+
+###0.3 Mute Microphone
+The function layer has a "Mute Microphone"-key. As this is not an existing media key and you can't normally set a shortcut to this function,
+you need to set this up in software before using it, see below. This key is bound to `RCtrl+LCtrl`, a keycombination that
+no other program in existence uses for anything, at least to my knowledge. It also can't be pressed with this keymap in any other way.
+
+####0.3.0 Linux
+Follow [these instructions](http://askubuntu.com/a/13364).
+
+#####0.3.1 Windows (Requires 3rd Party Software)
+*DISCLAIMER: I take no responsibility for any potential harm caused by third party applications!*
+
+You'll need a utility called "MicMute". It is available on [Sourceforge](https://sourceforge.net/projects/micmute/).
+After installing and running the tool, you only need to use the "Setup Shortcut" option to bind the key to muting the microphone
+and check whether your microphone is selected under "Devices".
+
+###0.4 Revive Dead Keys
+Some diacritics that are commonly used are dead keys on the international layouts, for example `` ` ``, `'`, or `"`.
+The dead keys on the regular international layout (shown in red [here](readme.md#00-languages)) are revived with this keymap by automatically inserting a space if one of those characters is typed.
+If you don't want this to be the case, uncomment the following line in `keymap.c` prior to compiling:
+```
+//#define DONT_REVIVE_DEADKEYS 1
+```
+
+##1 Layers
+###1.0 Base Layer
+The base layer is shown here for ANSI keysm, HHKB-style right shift and split backspace. If you use a 2U backspace key there, `Del` will not be available.
+Again, the Y and Z keys are swapped, so you get the QWERTZ-positions of Y and Z when using the US-International layout.
+
+![base_layer](docs/base_layer.PNG)
+
+###1.1 Gaming layer
+To turn this layer on, please use the combination `Fn+RShift`, not `Space+RShift`. If you do the latter, the Function layer will become stuck. You can press `Fn` once to unstick it if this happens to you. A solution is being worked on.
+
+![gaming_layer](docs/gaming_layer.PNG)
+
+###1.2 Function Layer
+This is the function layer for German diacritics. It can be accessed via the `Fn` or by holding `Space` on the base layer.
+
+![function_layer](docs/function_layer.PNG)
+
+
+
+
diff --git a/keyboards/s60-x/keymaps/custom/keymap.c b/keyboards/s60-x/keymaps/custom/keymap.c
new file mode 100644
index 000000000..fb2a40b85
--- /dev/null
+++ b/keyboards/s60-x/keymaps/custom/keymap.c
@@ -0,0 +1,28 @@
+#include "s60-x.h"
+
+/* Main layer: Test layout, using all keys.
+
+ 0 1 2 3 4 5 6 7 8 9 A B C D E
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ 0 │GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │PGUP │BKSPC│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ 1 │ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ 2 │CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │PGDN │ENTER│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ 3 │LSHFT│HOME │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ END │RSHFT│ UP │
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ 4 │LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│R_GUI│ APP │RCTRL│█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+*/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: ANSI qwerty */
+ LEGACY_KEYMAP(GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, PGUP, BSPC, \
+ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \
+ CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, PGDN, ENT , \
+ LSFT, HOME, Z, X, C, V, B, N, M, COMM, DOT, SLSH, END, RSFT, UP, \
+ LCTL, LGUI, LALT, SPC, RALT, RGUI, APP, RCTL),
+};
+const uint16_t PROGMEM fn_actions[] = {};
+
diff --git a/keyboards/s60-x/keymaps/custom/readme.md b/keyboards/s60-x/keymaps/custom/readme.md
new file mode 100644
index 000000000..cf87bd915
--- /dev/null
+++ b/keyboards/s60-x/keymaps/custom/readme.md
@@ -0,0 +1,15 @@
+### 8 Custom
+The custom keymap - [keymap_custom.c](keymap_custom.c) - is where I tested all the switches, not being concerned with a specific layout or layers. It's a plain layout option with the extra keys used on ISO & HHKB layouts being assigned some other keys.
+
+#### 8.0 Default layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │PgUp │BkSpc│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │PgDwn│Enter│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Shift│Home │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ End │Shift│ Up │
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Alt │ Gui │ App │Ctrl │█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
diff --git a/keyboards/s60-x/keymaps/default/keymap.c b/keyboards/s60-x/keymaps/default/keymap.c
new file mode 100644
index 000000000..eb0c6b056
--- /dev/null
+++ b/keyboards/s60-x/keymaps/default/keymap.c
@@ -0,0 +1,48 @@
+#include "s60-x.h"
+
+/* 0: Main layer
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+*/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: ANSI qwerty */
+ LEGACY_KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \
+ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \
+ CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT , \
+ LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \
+ LCTL, LGUI, LALT, SPC, RALT, FN0, APP, RCTL),
+
+/* 1: Fn layer
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│GRAVE│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ Up │ │ │ │ │ │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │Left │Down │Right│ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+*/
+ LEGACY_KEYMAP(
+ GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \
+ TRNS, TRNS, UP, TRNS, TRNS, TRNS, TRNS, TRNS, PGUP, PGDN, PSCR, SLCK, PAUS, TRNS, \
+ TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
+};
diff --git a/keyboards/s60-x/keymaps/default/readme.md b/keyboards/s60-x/keymaps/default/readme.md
new file mode 100644
index 000000000..01cda9df9
--- /dev/null
+++ b/keyboards/s60-x/keymaps/default/readme.md
@@ -0,0 +1,27 @@
+### 1 Standard - ANSI
+The standard keymap is the one that is pre-flashed on the S60-X.
+
+#### 1.0 Default layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│ENTER│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │RCTRL│█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 1.1 Fn layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │GRAVE│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ Up │ │ │ │ │ │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │Left │Down │Right│ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
diff --git a/keyboards/s60-x/keymaps/hasu/keymap.c b/keyboards/s60-x/keymaps/hasu/keymap.c
new file mode 100644
index 000000000..cbeaae028
--- /dev/null
+++ b/keyboards/s60-x/keymaps/hasu/keymap.c
@@ -0,0 +1,182 @@
+#include "s60-x.h"
+
+/*
+ * Hasu
+ */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap 0: Default Layer
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ Fn2 │ ' │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ Fn1 │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ Fn3 │ Fn3 │ Fn0 │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \
+ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \
+ CAPS, A, S, D, F, G, H, J, K, L, FN2, QUOT, NO, ENT, \
+ LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, FN1, NO, FN9, NO, \
+ LCTL, LGUI, LALT, SPC, RALT, FN3, FN3, FN0),
+ /* Keymap 1: colemak
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │ Q │ W │ F │ P │ G │ J │ L │ U │ Y │ ; │ [ │ ] │ \ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│BKSPC│ A │ R │ S │ T │ D │ H │ N │ E │ I │ O │ ' │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ K │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│R_WIN│ APP │ Fn0 │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \
+ TAB, Q, W, F, P, G, J, L, U, Y, SCLN, LBRC, RBRC, BSLS, \
+ BSPC, A, R, S, T, D, H, N, E, I, O, QUOT, NO, ENT, \
+ LSFT, NO, Z, X, C, V, B, K, M, COMM, DOT, SLSH, NO, RSFT, NO, \
+ LCTL, LGUI, LALT, SPC, RALT, RGUI, APP, FN0),
+ /* Keymap 2: dvorak
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ [ │ ] │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │ ' │ , │ . │ P │ Y │ F │ G │ C │ R │ L │ / │ = │ \ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│CAPSL│ A │ O │ E │ U │ I │ D │ H │ T │ N │ S │ - │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│ ; │ Q │ J │ K │ X │ B │ M │ W │ V │ Z │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│R_WIN│ APP │ FN0 │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC, RBRC, NO, BSPC, \
+ TAB, QUOT, COMM, DOT, P, Y, F, G, C, R, L, SLSH, EQL, BSLS, \
+ CAPS, A, O, E, U, I, D, H, T, N, S, MINS, NO, ENT, \
+ LSFT, NO, SCLN, Q, J, K, X, B, M, W, V, Z, NO, RSFT, NO, \
+ LCTL, LGUI, LALT, SPC, RALT, RGUI, APP, FN0),
+ /* Keymap 3: workman
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │ Q │ D │ E │ W │ B │ J │ F │ U │ P │ ; │ [ │ ] │ \ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│BKSPC│ A │ S │ H │ T │ G │ Y │ N │ E │ O │ I │ ' │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│ Z │ X │ M │ C │ V │ K │ L │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│R_WIN│ APP │ FN0 │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \
+ TAB, Q, D, R, W, B, J, F, U, P, SCLN, LBRC, RBRC, BSLS, \
+ BSPC, A, S, H, T, G, Y, N, E, O, I, QUOT, NO, ENT, \
+ LSFT, NO, Z, X, M, C, V, K, L, COMM, DOT, SLSH, NO, RSFT, NO, \
+ LCTL, LGUI, LALT, SPC, RALT, RGUI, APP, FN0),
+ /* Overlay 4: HHKB mode
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│Grave│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ Del │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│Caps │ │ │ │ │ │ │ │ Psc │ Slk │Pause│ Up │ │ Ins │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│ VoD │ VoU │Mute │ │ │NP_* │NP_/ │Home │PgUp │Left │Right│▒▒▒▒▒│Enter│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│ │ │ │ │ │NP_+ │NP_- │ End │PgDwn│Down │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_GUI│L_ALT│█████│█████│█████│Space│█████│█████│█████│R_ALT│R_GUI│ App │ │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, DEL, \
+ CAPS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PSCR, SLCK, PAUS, UP, TRNS, INS, \
+ LCTL, VOLD, VOLU, MUTE, TRNS, TRNS, PAST, PSLS, HOME, PGUP, LEFT, RGHT, TRNS, ENT, \
+ LSFT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PPLS, PMNS, END, PGDN, DOWN, TRNS, RSFT, TRNS, \
+ LCTL, LGUI, LALT, SPC, RALT, RGUI, FN4, TRNS),
+ /* Overlay 5: Vi mode (Slash)
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│Grave│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│BkSpc│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ Tab │Home │PgDwn│ Up │PgUp │ End │Home │PgDwn│PgUp │ End │ │ │ │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│ │Left │Down │Right│ │Left │Down │ Up │Right│ │ │▒▒▒▒▒│Enter│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│ │ │ │ │ │Home │PgDwn│PgUp │ End │ │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_GUI│L_ALT│█████│█████│█████│Space│█████│█████│█████│R_ALT│R_GUI│ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, BSPC, \
+ TAB, HOME, PGDN, UP, PGUP, END, HOME, PGDN, PGUP, END, TRNS, TRNS, TRNS, TRNS, \
+ LCTL, TRNS, LEFT, DOWN, RGHT, TRNS, LEFT, DOWN, UP, RGHT, TRNS, TRNS, TRNS, ENT, \
+ LSFT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, HOME, PGDN, PGUP, END, TRNS, TRNS, RSFT, TRNS, \
+ LCTL, LGUI, LALT, SPC, RALT, RGUI, APP, RCTL),
+ /* Overlay 6: Mouse mode (Semicolon/App)
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│Grave│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│BkSpc│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ Tab │ │ │ │ │ │ MwL │ MwD │ MwU │ MwR │ │ │ │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│ │ Ac0 │ Ac1 │ Ac2 │ │ McL │ McD │ McU │ McR │ │ │▒▒▒▒▒│Enter│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSFHT│▒▒▒▒▒│ │ │ │ │ Mb3 │ Mb2 │ Mb1 │ Mb4 │ Mb5 │ │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_GUI│L_ALT│█████│█████│█████│ Mb1 │█████│█████│█████│ │ │ │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ * Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
+ */
+ LEGACY_KEYMAP(
+ GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, BSPC, \
+ TAB, TRNS, TRNS, TRNS, TRNS, TRNS, WH_L, WH_D, WH_U, WH_R, TRNS, TRNS, TRNS, TRNS, \
+ LCTL, TRNS, ACL0, ACL1, ACL2, TRNS, MS_L, MS_D, MS_U, MS_R, TRNS, TRNS, TRNS, ENT, \
+ LSFT, TRNS, TRNS, TRNS, TRNS, TRNS, BTN3, BTN2, BTN1, BTN4, BTN5, TRNS, TRNS, RSFT, TRNS, \
+ LCTL, LGUI, LALT, BTN1, TRNS, TRNS, TRNS, RCTL),
+ /* Overlay 7: Layout selector
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ Lq │ Lc │ Ld │ Lw │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ Lq │ Lw │ │ │ │ │ │ │ │ │ │ │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ Ld │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │▒▒▒▒▒│ │ │ Lc │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+
+Lq: set Qwerty layout
+Lc: set Colemak layout
+Ld: set Dvorak layout
+Lw: set Workman layout
+
+ */
+ LEGACY_KEYMAP(
+ FN5, FN6, FN7, FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, FN5, FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, FN7, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, FN6, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
+};
+
+/*
+ * Fn action definition
+ */
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_MOMENTARY(4),
+ [1] = ACTION_LAYER_TAP_KEY(5, KC_SLASH),
+ [2] = ACTION_LAYER_TAP_KEY(6, KC_SCLN),
+ [3] = ACTION_LAYER_MOMENTARY(6),
+ [4] = ACTION_LAYER_MOMENTARY(7), // to Layout selector
+ [5] = ACTION_DEFAULT_LAYER_SET(0), // set qwerty layout
+ [6] = ACTION_DEFAULT_LAYER_SET(1), // set colemak layout
+ [7] = ACTION_DEFAULT_LAYER_SET(2), // set dvorak layout
+ [8] = ACTION_DEFAULT_LAYER_SET(3), // set workman layout
+ [9] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_GRV),
+};
diff --git a/keyboards/s60-x/keymaps/hasu/readme.md b/keyboards/s60-x/keymaps/hasu/readme.md
new file mode 100644
index 000000000..64969b616
--- /dev/null
+++ b/keyboards/s60-x/keymaps/hasu/readme.md
@@ -0,0 +1,4 @@
+### 5. Hasu
+This is Hasu's favorite keymap with HHKB Fn, Vi cursor and Mousekey layer. See [keymap_hasu.c](keymap_hasu.c) for detail.
+
+(Hasu is the initial creator of the TMK firmware, in case you weren't aware.) \ No newline at end of file
diff --git a/keyboards/s60-x/keymaps/hhkb/keymap.c b/keyboards/s60-x/keymaps/hhkb/keymap.c
new file mode 100644
index 000000000..9afd1247f
--- /dev/null
+++ b/keyboards/s60-x/keymaps/hhkb/keymap.c
@@ -0,0 +1,52 @@
+#include "s60-x.h"
+
+/*
+ * HHKB Layout
+ */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 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 │ [ │ ] │BkSpc│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Fn3 │ ' │▒▒▒▒▒│Enter│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│ Fn │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│▒▒▒▒▒│ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│▒▒▒▒▒│ Alt │ Gui │▒▒▒▒▒│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ 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, NO, ENT, \
+ LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, FN0, \
+ NO, LGUI, LALT, SPC, NO, RALT, RGUI, NO),
+ /* 1: HHKB Fn layer
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ Pwr │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ Ins │ Del │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│Caps │ │ │ │ │ │ │ │ Psc │ Slk │ Pus │ Up │ │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ VoD │ VoU │ Mut │ Ejc │ │NP_* │NP_/ │Home │PgUp │Left │Right│▒▒▒▒▒│NPEnt│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │▒▒▒▒▒│ │ │ │ │ │NP_+ │NP_- │ End │PgDwn│Down │▒▒▒▒▒│ │ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│▒▒▒▒▒│ │ │█████│█████│█████│ │█████│█████│█████│▒▒▒▒▒│ │ │▒▒▒▒▒│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ PWR, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, INS, DEL, \
+ CAPS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PSCR, SLCK, PAUS, UP, TRNS, TRNS, \
+ TRNS, VOLD, VOLU, MUTE, EJCT, TRNS, PAST, PSLS, HOME, PGUP, LEFT, RGHT, NO, PENT, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PPLS, PMNS, END, PGDN, DOWN, NO, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
+};
+
+/*
+ * Fn action definition
+ */
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_MOMENTARY(1),
+};
diff --git a/keyboards/s60-x/keymaps/hhkb/readme.md b/keyboards/s60-x/keymaps/hhkb/readme.md
new file mode 100644
index 000000000..2bceb26dd
--- /dev/null
+++ b/keyboards/s60-x/keymaps/hhkb/readme.md
@@ -0,0 +1,26 @@
+### 7. HHKB
+[keymap_hhkb.c](keymap_hhkb.c) emulates original HHKB layers.
+#### 7.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 │ [ │ ] │BkSpc│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Fn3 │ ' │▒▒▒▒▒│Enter│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│ Fn │
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │▒▒▒▒▒│ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│▒▒▒▒▒│ Alt │ Gui │▒▒▒▒▒│█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 7.1: HHKB Fn layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ Pwr │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ Ins │ Del │
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Caps │ │ │ │ │ │ │ │ Psc │ Slk │ Pus │ Up │ │ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ VoD │ VoU │ Mut │ Ejc │ │ * │ / │Home │PgUp │Left │Right│▒▒▒▒▒│Enter│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │▒▒▒▒▒│ │ │ │ │ │ + │ - │ End │PgDwn│Down │▒▒▒▒▒│ │ │
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │▒▒▒▒▒│ │ │█████│█████│█████│ │█████│█████│█████│▒▒▒▒▒│ │ │▒▒▒▒▒│█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
diff --git a/keyboards/s60-x/keymaps/iso/keymap.c b/keyboards/s60-x/keymaps/iso/keymap.c
new file mode 100644
index 000000000..43a9c48b0
--- /dev/null
+++ b/keyboards/s60-x/keymaps/iso/keymap.c
@@ -0,0 +1,48 @@
+#include "s60-x.h"
+
+/* 0: Main layer
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │▒▒▒▒▒│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │NUHS │ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+*/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: ANSI qwerty */
+ LEGACY_KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \
+ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, NO, \
+ CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NUHS, ENT , \
+ LSFT, BSLS, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \
+ LCTL, LGUI, LALT, SPC, RALT, FN0, APP, RCTL),
+
+/* 1: Fn layer
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│GRAVE│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ Up │ │ │ │ │ │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│▒▒▒▒▒│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │Left │Down │Right│ │ │ │ │ │ │ │ │ │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+*/
+ LEGACY_KEYMAP(
+ GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \
+ TRNS, TRNS, UP, TRNS, TRNS, TRNS, TRNS, TRNS, PGUP, PGDN, PSCR, SLCK, PAUS, TRNS, \
+ TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
+};
diff --git a/keyboards/s60-x/keymaps/iso/readme.md b/keyboards/s60-x/keymaps/iso/readme.md
new file mode 100644
index 000000000..2c06bf86f
--- /dev/null
+++ b/keyboards/s60-x/keymaps/iso/readme.md
@@ -0,0 +1,28 @@
+### 2 Standard - ISO
+The same as the standard keymap, but with additional ISO keys.
+
+
+#### 2.0 Default layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │▒▒▒▒▒│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │NUHS │ENTER│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │LSHFT│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │RCTRL│█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 2.1 Fn layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │GRAVE│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ Up │ │ │ │ │ │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│▒▒▒▒▒│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │Left │Down │Right│ │ │ │ │ │ │ │ │ │ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
diff --git a/keyboards/s60-x/keymaps/jpec/keymap.c b/keyboards/s60-x/keymaps/jpec/keymap.c
new file mode 100644
index 000000000..c8fc13328
--- /dev/null
+++ b/keyboards/s60-x/keymaps/jpec/keymap.c
@@ -0,0 +1,92 @@
+/*
+Copyright 2016 Julien Pecqueur <julien@peclu.net>
+Copyright 2016 Felix Uhl <ifreilicht@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 "s60-x.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Layout 0: Default Layer
+ * ,-----------------------------------------------------------.
+ * |` | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
+ * |-----------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
+ * |-----------------------------------------------------------|
+ * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return |
+ * |-----------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
+ * |-----------------------------------------------------------|
+ * |Fn1 |Gui |Alt | SpaceFn |Alt |Gui |App |Ctrl|
+ * `-----------------------------------------------------------'
+ */
+ LEGACY_KEYMAP(
+ GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BSPC, BSPC, \
+ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \
+ LCTL, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NUHS, ENT, \
+ LSFT, NUBS, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \
+ FN1, LGUI, LALT, FN0, RALT, RGUI, APP, RCTL),
+
+ /* Layout 1: Function Layer
+ * ,-----------------------------------------------------------.
+ * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
+ * |-----------------------------------------------------------|
+ * | |Prv|Ply|Nxt|Stp| | |PUp|Up |PDn| |Slk|Pau|Ins |
+ * |-----------------------------------------------------------|
+ * | |Vl-|Mut|Vl+| | |Hom|Lef|Dow|Rig|End| |PEnt |
+ * |-----------------------------------------------------------|
+ * | |Prt|Cut|Cop|Pst|Cal| | | | | |CapsLock |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | |
+ * `-----------------------------------------------------------'
+ */
+ LEGACY_KEYMAP(
+ ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, DEL, \
+ TRNS, MPRV, MPLY, MNXT, MSTP, TRNS, TRNS, PGUP, UP, PGDN, TRNS, SLCK, PAUS, INS, \
+ TRNS, VOLD, MUTE, VOLU, TRNS, TRNS, HOME, LEFT, DOWN, RGHT, END, TRNS, TRNS, PENT, \
+ TRNS, TRNS, PSCR, FN2, FN3, FN4, CALC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CAPS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
+};
+
+/*
+* Fn action definition
+*/
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE), /* SpaceFn layout 1 */
+ [1] = ACTION_LAYER_MOMENTARY(1), /* Momentary layout 1 */
+ [2] = ACTION_MODS_KEY(MOD_LSFT, KC_DEL), /* Cut */
+ [3] = ACTION_MODS_KEY(MOD_LCTL, KC_INS), /* Copy */
+ [4] = ACTION_MODS_KEY(MOD_LSFT, KC_INS), /* Paste */
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+} \ No newline at end of file
diff --git a/keyboards/s60-x/keymaps/jpec/readme.md b/keyboards/s60-x/keymaps/jpec/readme.md
new file mode 100644
index 000000000..73318dad7
--- /dev/null
+++ b/keyboards/s60-x/keymaps/jpec/readme.md
@@ -0,0 +1 @@
+# The default keymap for s60-x \ No newline at end of file
diff --git a/keyboards/s60-x/keymaps/plain/keymap.c b/keyboards/s60-x/keymaps/plain/keymap.c
new file mode 100644
index 000000000..790ac88e7
--- /dev/null
+++ b/keyboards/s60-x/keymaps/plain/keymap.c
@@ -0,0 +1,25 @@
+#include "s60-x.h"
+
+/* Main layer:
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│R_GUI│ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+*/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: qwerty */
+ LEGACY_KEYMAP(ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \
+ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \
+ CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT, \
+ LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \
+ LCTL, LGUI, LALT, SPC, RALT, RGUI, APP, RCTL),
+};
+const uint16_t PROGMEM fn_actions[] = {};
diff --git a/keyboards/s60-x/keymaps/plain/readme.md b/keyboards/s60-x/keymaps/plain/readme.md
new file mode 100644
index 000000000..ab13323e3
--- /dev/null
+++ b/keyboards/s60-x/keymaps/plain/readme.md
@@ -0,0 +1,16 @@
+### 4. Plain
+Without any Fn layer this will be useful if you want to use key remapping tool like AHK on host.
+See [keymap_plain.c](keymap_plain.c) for detail.
+
+#### 4.0 Plain Default layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BkSpc│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│Enter│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Alt │ Gui │ App │Ctrl │█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
diff --git a/keyboards/s60-x/keymaps/poker/keymap.c b/keyboards/s60-x/keymaps/poker/keymap.c
new file mode 100644
index 000000000..0a8691792
--- /dev/null
+++ b/keyboards/s60-x/keymaps/poker/keymap.c
@@ -0,0 +1,180 @@
+#include "s60-x.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: qwerty
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \
+ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \
+ CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT, \
+ LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \
+ LCTL, LGUI, LALT, SPC, FN0, RGUI, APP, RCTL),
+ /* 1: colemak
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │ Q │ W │ F │ P │ G │ J │ L │ U │ Y │ ; │ [ │ ] │ \ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│BKSPC│ A │ R │ S │ T │ D │ H │ N │ E │ I │ O │ ' │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ K │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \
+ TAB, Q, W, F, P, G, J, L, U, Y, SCLN, LBRC, RBRC, BSLS, \
+ BSPC, A, R, S, T, D, H, N, E, I, O, QUOT, NO, ENT, \
+ LSFT, NO, Z, X, C, V, B, K, M, COMM, DOT, SLSH, NO, RSFT, NO, \
+ LCTL, LGUI, LALT, SPC, FN0, RGUI, APP, RCTL),
+ /* 2: dvorak
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ [ │ ] │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │ ' │ , │ . │ P │ Y │ F │ G │ C │ R │ L │ / │ = │ \ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│CAPSL│ A │ O │ E │ U │ I │ D │ H │ T │ N │ S │ - │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│ ; │ Q │ J │ K │ X │ B │ M │ W │ V │ Z │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC, RBRC, NO, BSPC, \
+ TAB, QUOT, COMM, DOT, P, Y, F, G, C, R, L, SLSH, EQL, BSLS, \
+ CAPS, A, O, E, U, I, D, H, T, N, S, MINS, NO, ENT, \
+ LSFT, NO, SCLN, Q, J, K, X, B, M, W, V, Z, NO, RSFT, NO, \
+ LCTL, LGUI, LALT, SPC, FN0, RGUI, APP, RCTL),
+ /* 3: workman
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │ Q │ D │ E │ W │ B │ J │ F │ U │ P │ ; │ [ │ ] │ \ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│BKSPC│ A │ S │ H │ T │ G │ Y │ N │ E │ O │ I │ ' │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│ Z │ X │ M │ C │ V │ K │ L │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \
+ TAB, Q, D, R, W, B, J, F, U, P, SCLN, LBRC, RBRC, BSLS, \
+ BSPC, A, S, H, T, G, Y, N, E, O, I, QUOT, NO, ENT, \
+ LSFT, NO, Z, X, M, C, V, K, L, COMM, DOT, SLSH, NO, RSFT, NO, \
+ LCTL, LGUI, LALT, SPC, FN0, RGUI, APP, RCTL),
+ /* 4: Poker with Arrow
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ Up │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │█████│█████│█████│ │█████│█████│█████│ │Left │Down │Right│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_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, UP, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, LEFT, DOWN, RGHT),
+ /* 5: Poker with Esc
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ ESC │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ ESC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
+ /* 6: Poker Fn
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ FnQ │ Up │ │ │ │ │ │ │ Cal │ │Home │ Ins │ FnL │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │Left │Down │Right│ │ │ Psc │ Slk │Pause│ │ Tsk │ End │▒▒▒▒▒│ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │▒▒▒▒▒│ Del │ │ Web │Mute │ VoU │ VoD │ │PgUp │PgDwn│ Del │▒▒▒▒▒│ │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │█████│█████│█████│ FnS │█████│█████│█████│ │ │ │ │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+
+Fn: to Fn overlay
+FnL: to Layout selector overaly
+FnQ: toggle Esc overlay
+FnS: toggle Arrow overlay
+
+ */
+ LEGACY_KEYMAP(
+ ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \
+ TRNS, FN2, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME, INS, FN4, \
+ TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS, FN3, END, TRNS, TRNS, \
+ TRNS, TRNS, DEL, TRNS, WHOM, MUTE, VOLU, VOLD, TRNS, PGUP, PGDN, DEL, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, FN1, TRNS, TRNS, TRNS, TRNS),
+ /* 7: Layout selector
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ Lq │ Lc │ Ld │ Lw │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ Lq │ Lw │ │ │ │ │ │ │ │ │ │ │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ Ld │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │▒▒▒▒▒│ │ │ Lc │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+
+Lq: set Qwerty layout
+Lc: set Colemak layout
+Ld: set Dvorak layout
+Lw: set Workman layout
+
+ */
+ LEGACY_KEYMAP(
+ FN5, FN6, FN7, FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, FN5, FN8, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, FN7, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, FN6, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
+};
+const uint16_t PROGMEM fn_actions[] = {
+ /* Poker Layout */
+ [0] = ACTION_LAYER_MOMENTARY(6), // to Fn overlay
+ [1] = ACTION_LAYER_TOGGLE(4), // toggle arrow overlay
+ [2] = ACTION_LAYER_TOGGLE(5), // toggle Esc overlay
+ [3] = ACTION_MODS_KEY(MOD_RCTL|MOD_RSFT, KC_ESC), // Task(RControl,RShift+Esc)
+ [4] = ACTION_LAYER_MOMENTARY(7), // to Layout selector
+ [5] = ACTION_DEFAULT_LAYER_SET(0), // set qwerty layout
+ [6] = ACTION_DEFAULT_LAYER_SET(1), // set colemak layout
+ [7] = ACTION_DEFAULT_LAYER_SET(2), // set dvorak layout
+ [8] = ACTION_DEFAULT_LAYER_SET(3), // set workman layout
+};
diff --git a/keyboards/s60-x/keymaps/poker/readme.md b/keyboards/s60-x/keymaps/poker/readme.md
new file mode 100644
index 000000000..0d8be9d0f
--- /dev/null
+++ b/keyboards/s60-x/keymaps/poker/readme.md
@@ -0,0 +1,31 @@
+### 3 Poker
+[keymap_poker.c](keymap_poker.c) emulates original Poker layers
+while both [keymap_poker_bit.c](keymap_poker_bit.c) and [keymap_poker_set.c](keymap_poker_set.c) implements same layout in different way and they fix a minor issue of original Poker and enhance arrow keys.
+
+ Fn + Esc = `
+ Fn + {left, down, up, right} = {home, pgdown, pgup, end}
+
+#### 3.0 Default layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BkSpc│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│Enter│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Fn │ Gui │ App │Ctrl │█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 3.1 Poker Fn layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ FnQ │ Up │ │ │ │ │ │ │ Cal │ │Home │ Ins │ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │Left │Down │Right│ │ │ Psc │ Slk │Pause│ │ Tsk │ End │▒▒▒▒▒│ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │▒▒▒▒▒│ Del │ │ Web │Mute │ VoU │ VoD │ │PgUp │PgDwn│ Del │▒▒▒▒▒│ Up │▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ │█████│█████│█████│ FnS │█████│█████│█████│ Fn │Left │Down │Right│█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
diff --git a/keyboards/s60-x/keymaps/poker_bit/keymap.c b/keyboards/s60-x/keymaps/poker_bit/keymap.c
new file mode 100644
index 000000000..7626038f4
--- /dev/null
+++ b/keyboards/s60-x/keymaps/poker_bit/keymap.c
@@ -0,0 +1,110 @@
+#include "s60-x.h"
+
+// Poker fix with toggle and bit operation
+// Fn + Esc = `
+// Fn + {left, down, up, right} = {home, pgdown, pgup, end}
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: qwerty
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \
+ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \
+ LCTL, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT, \
+ LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \
+ LCTL, LGUI, LALT, SPC, FN0, RGUI, APP, RCTL),
+ /* 4: Poker Default + Fn'd
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│Caps │ Fn2 │ Up │ │ │ │ │ │ │ Cal │ │Home │ Ins │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │Left │Down │Right│ │ │ Psc │ Slk │Pause│ │ Fn4 │ End │▒▒▒▒▒│ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │▒▒▒▒▒│ Del │ │ Web │Mute │ VoU │ VoD │ │PgUp │PgDwn│ Del │▒▒▒▒▒│ │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │█████│█████│█████│ Fn1 │█████│█████│█████│ │ │ │ │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ [4] = LEGACY_KEYMAP(
+ TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \
+ CAPS, FN2, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME, INS, TRNS, \
+ TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS, FN4, END, TRNS, TRNS, \
+ TRNS, TRNS, DEL, TRNS, WHOM, MUTE, VOLU, VOLD, TRNS, PGUP, PGDN, DEL, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, FN1, TRNS, TRNS, TRNS, TRNS),
+ /* 5: Poker with Arrow
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│PgUp │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │█████│█████│█████│ │█████│█████│█████│ Fn3 │Home │PgDwn│ End │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_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, PGUP, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, FN3, HOME, PGDN, END),
+ /* 6: Poker with Esc
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ ESC │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ ESC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
+ /* 7: Poker with Arrow + Fn'd
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ Up │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │█████│█████│█████│ │█████│█████│█████│ │Left │Down │Right│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_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, UP, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, LEFT, DOWN, RGHT),
+};
+const uint16_t PROGMEM fn_actions[] = {
+ /* Poker Layout */
+ [0] = ACTION_LAYER_BIT_XOR(1, 0b0101, ON_BOTH), // Poker Fn(with fix for Esc)
+ [1] = ACTION_LAYER_TOGGLE(5), // Poker Arrow toggle
+ [2] = ACTION_LAYER_TOGGLE(6), // Poker Esc toggle
+ [3] = ACTION_LAYER_BIT_XOR(1, 0b1101, ON_BOTH), // Poker Fn(with fix for Arrow)
+ [4] = ACTION_MODS_KEY(MOD_RCTL|MOD_RSFT, KC_ESC), // FN3 Task(RControl,RShift+Esc)
+};
diff --git a/keyboards/s60-x/keymaps/poker_bit/readme.md b/keyboards/s60-x/keymaps/poker_bit/readme.md
new file mode 100644
index 000000000..0d8be9d0f
--- /dev/null
+++ b/keyboards/s60-x/keymaps/poker_bit/readme.md
@@ -0,0 +1,31 @@
+### 3 Poker
+[keymap_poker.c](keymap_poker.c) emulates original Poker layers
+while both [keymap_poker_bit.c](keymap_poker_bit.c) and [keymap_poker_set.c](keymap_poker_set.c) implements same layout in different way and they fix a minor issue of original Poker and enhance arrow keys.
+
+ Fn + Esc = `
+ Fn + {left, down, up, right} = {home, pgdown, pgup, end}
+
+#### 3.0 Default layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BkSpc│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│Enter│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Fn │ Gui │ App │Ctrl │█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 3.1 Poker Fn layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ FnQ │ Up │ │ │ │ │ │ │ Cal │ │Home │ Ins │ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │Left │Down │Right│ │ │ Psc │ Slk │Pause│ │ Tsk │ End │▒▒▒▒▒│ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │▒▒▒▒▒│ Del │ │ Web │Mute │ VoU │ VoD │ │PgUp │PgDwn│ Del │▒▒▒▒▒│ Up │▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ │█████│█████│█████│ FnS │█████│█████│█████│ Fn │Left │Down │Right│█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
diff --git a/keyboards/s60-x/keymaps/poker_set/keymap.c b/keyboards/s60-x/keymaps/poker_set/keymap.c
new file mode 100644
index 000000000..09423e75b
--- /dev/null
+++ b/keyboards/s60-x/keymaps/poker_set/keymap.c
@@ -0,0 +1,178 @@
+#include "s60-x.h"
+
+// Poker fix with set(state transition)
+// Fn + Esc = `
+// Fn + {left, down, up, right} = {home, pgdown, pgup, end}
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: qwerty
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│GRAVE│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_WIN│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│ Fn0 │R_WIN│ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \
+ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \
+ LCTL, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT, \
+ LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \
+ LCTL, LGUI, LALT, SPC, FN0, RGUI, APP, RCTL),
+ /* 1: Poker with Arrow
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ Up │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │█████│█████│█████│ │█████│█████│█████│ Fn1 │Left │Down │Right│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_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, UP, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, FN1, LEFT, DOWN, RGHT),
+ /* 2: Poker with Esc
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ ESC │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │█████│█████│█████│ │█████│█████│█████│ Fn2 │ │ │ │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ ESC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, FN2, TRNS, TRNS, TRNS),
+ /* 3: Poker with Arrow and Esc
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ Esc │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ Up │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │█████│█████│█████│ │█████│█████│█████│ Fn3 │Left │Down │Right│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ ESC, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, UP, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, FN3, LEFT, DOWN, RGHT),
+ /* 4: Poker Fn'd
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ Fn6 │ Up │ │ │ │ │ │ │ Cal │ │Home │ Ins │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │Left │Down │Right│ │ │ Psc │ Slk │Pause│ │ Fn8 │ End │▒▒▒▒▒│ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │▒▒▒▒▒│ Del │ │ Web │Mute │ VoU │ VoD │ │PgUp │PgDwn│ Del │▒▒▒▒▒│ │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │█████│█████│█████│ Fn5 │█████│█████│█████│ Fn4 │ │ │ │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \
+ TRNS, FN6, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME, INS, TRNS, \
+ TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS, FN8, END, TRNS, TRNS, \
+ TRNS, TRNS, DEL, TRNS, WHOM, MUTE, VOLU, VOLD, TRNS, PGUP, PGDN, DEL, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, FN5, FN4, TRNS, TRNS, TRNS),
+ /* 5: Poker Fn'd arrow
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ Fn7 │ Up │ │ │ │ │ │ │ Cal │ │Home │ Ins │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │Left │Down │Right│ │ │ Psc │ Slk │Pause│ │ Fn8 │ End │▒▒▒▒▒│ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │▒▒▒▒▒│ Del │ │ Web │Mute │ VoU │ VoD │ │PgUp │PgDwn│ Del │▒▒▒▒▒│PgUp │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │█████│█████│█████│ Fn4 │█████│█████│█████│ Fn5 │Home │PgDwn│ End │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \
+ TRNS, FN7, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME, INS, TRNS, \
+ TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS, FN8, END, TRNS, TRNS, \
+ TRNS, TRNS, DEL, TRNS, WHOM, MUTE, VOLU, VOLD, TRNS, PGUP, PGDN, DEL, TRNS, PGUP, TRNS, \
+ TRNS, TRNS, TRNS, FN4, FN5, HOME, PGDN, END),
+ /* 6: Poker Fn'd Esc
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│Grave│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ Fn4 │ Up │ │ │ │ │ │ │ Cal │ │Home │ Ins │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │Left │Down │Right│ │ │ Psc │ Slk │Pause│ │ Fn8 │ End │▒▒▒▒▒│ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │▒▒▒▒▒│ Del │ │ Web │Mute │ VoU │ VoD │ │PgUp │PgDwn│ Del │▒▒▒▒▒│ │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │█████│█████│█████│ Fn7 │█████│█████│█████│ Fn6 │ │ │ │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \
+ TRNS, FN4, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME, INS, TRNS, \
+ TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS, FN8, END, TRNS, TRNS, \
+ TRNS, TRNS, DEL, TRNS, WHOM, MUTE, VOLU, VOLD, TRNS, PGUP, PGDN, DEL, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, FN7, FN6, TRNS, TRNS, TRNS),
+ /* 7: Poker Fn'd Arrow + Esc
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│Grave│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ Fn5 │ Up │ │ │ │ │ │ │ Cal │ │Home │ Ins │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │Left │Down │Right│ │ │ Psc │ Slk │Pause│ │ Fn8 │ End │▒▒▒▒▒│ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │▒▒▒▒▒│ Del │ │ Web │Mute │ VoU │ VoD │ │PgUp │PgDwn│ Del │▒▒▒▒▒│PgUp │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │█████│█████│█████│ Fn6 │█████│█████│█████│ Fn7 │Home │PgDwn│ End │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, TRNS, \
+ TRNS, FN5, UP, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, CALC, TRNS, HOME, INS, TRNS, \
+ TRNS, LEFT, DOWN, RGHT, TRNS, TRNS, PSCR, SLCK, PAUS, TRNS, FN8, END, TRNS, TRNS, \
+ TRNS, TRNS, DEL, TRNS, WHOM, MUTE, VOLU, VOLD, TRNS, PGUP, PGDN, DEL, TRNS, PGUP, TRNS, \
+ TRNS, TRNS, TRNS, FN6, FN7, HOME, PGDN, END),
+};
+
+/*
+ * Fn action definition
+ */
+const uint16_t PROGMEM fn_actions[] = {
+ /* Poker Layout */
+ [0] = ACTION_LAYER_SET(4, ON_PRESS), // FN0 move to Fn'd when press
+ [1] = ACTION_LAYER_SET(5, ON_PRESS), // FN1 move to Fn'd arrow when press
+ [2] = ACTION_LAYER_SET(6, ON_PRESS), // FN2 move to Fn'd Esc when press
+ [3] = ACTION_LAYER_SET(7, ON_PRESS), // FN3 move to Fn'd arrow + Esc when press
+
+ //[4] = ACTION_LAYER_CLEAR(ON_RELEASE), // FN4 clear overlay when release
+ [4] = ACTION_LAYER_SET(0, ON_RELEASE), // FN4 clear overlay when release
+ [5] = ACTION_LAYER_SET(1, ON_RELEASE), // FN5 move to arrow when release
+ [6] = ACTION_LAYER_SET(2, ON_RELEASE), // FN6 move to Esc when release
+ [7] = ACTION_LAYER_SET(3, ON_RELEASE), // FN7 move to arrow + Esc when release
+
+ [8] = ACTION_MODS_KEY(MOD_RCTL|MOD_RSFT, KC_ESC), // FN8 Task(RControl,RShift+Esc)
+};
diff --git a/keyboards/s60-x/keymaps/poker_set/readme.md b/keyboards/s60-x/keymaps/poker_set/readme.md
new file mode 100644
index 000000000..0d8be9d0f
--- /dev/null
+++ b/keyboards/s60-x/keymaps/poker_set/readme.md
@@ -0,0 +1,31 @@
+### 3 Poker
+[keymap_poker.c](keymap_poker.c) emulates original Poker layers
+while both [keymap_poker_bit.c](keymap_poker_bit.c) and [keymap_poker_set.c](keymap_poker_set.c) implements same layout in different way and they fix a minor issue of original Poker and enhance arrow keys.
+
+ Fn + Esc = `
+ Fn + {left, down, up, right} = {home, pgdown, pgup, end}
+
+#### 3.0 Default layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BkSpc│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│Enter│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Fn │ Gui │ App │Ctrl │█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 3.1 Poker Fn layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ FnQ │ Up │ │ │ │ │ │ │ Cal │ │Home │ Ins │ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │Left │Down │Right│ │ │ Psc │ Slk │Pause│ │ Tsk │ End │▒▒▒▒▒│ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │▒▒▒▒▒│ Del │ │ Web │Mute │ VoU │ VoD │ │PgUp │PgDwn│ Del │▒▒▒▒▒│ Up │▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ │█████│█████│█████│ FnS │█████│█████│█████│ Fn │Left │Down │Right│█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
diff --git a/keyboards/s60-x/keymaps/spacefn/keymap.c b/keyboards/s60-x/keymaps/spacefn/keymap.c
new file mode 100644
index 000000000..b6dc7ca7e
--- /dev/null
+++ b/keyboards/s60-x/keymaps/spacefn/keymap.c
@@ -0,0 +1,55 @@
+#include "s60-x.h"
+
+/*
+ * SpaceFN
+ * http://geekhack.org/index.php?topic=51069.0
+ */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap 0: Default Layer
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│ENTER│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│LCTRL│L_GUI│L_ALT│█████│█████│█████Spc/Fn0█████│█████│█████│R_ALT│R_GUI│ APP │RCTRL│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, NO, BSPC, \
+ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, \
+ CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, NO, ENT, \
+ LSFT, NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, RSFT, NO, \
+ LCTL, LGUI, LALT, FN0, RALT, RGUI, APP, RCTL),
+
+ /* Overlay 1: SpaceFN
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+│ ` │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ Del │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ Esc │ │ │ │Home │ Up │ End │Pscr │Slck │Pause│ Ins │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │ │ │ │PgUp │Left │Down │Right│ │ │▒▒▒▒▒│ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │▒▒▒▒▒│ │ │ │Space│PgDwn│ ` │ ~ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ LEGACY_KEYMAP(
+ GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS, DEL, \
+ TRNS, TRNS, TRNS, ESC, TRNS, TRNS, TRNS, HOME, UP, END, PSCR, SLCK, PAUS, INS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, PGUP, LEFT, DOWN, RGHT, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, SPC, PGDN, GRV, FN1, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, \
+ TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
+};
+
+/*
+ * Fn action definition
+ */
+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/keyboards/s60-x/keymaps/spacefn/readme.md b/keyboards/s60-x/keymaps/spacefn/readme.md
new file mode 100644
index 000000000..d04bd9486
--- /dev/null
+++ b/keyboards/s60-x/keymaps/spacefn/readme.md
@@ -0,0 +1,27 @@
+### 6. SpaceFN
+This layout proposed by spiceBar uses space bar to change layer with using Dual role key technique. See [keymap_spacefn.c](keymap_spacefn.c) and [SpaceFN discussion](http://geekhack.org/index.php?topic=51069.0).
+
+#### 6.0 Default layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BkSpc│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│Enter│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Ctrl │ Gui │ Alt │█████│█████│████ Space/Fn ███│█████│█████│ Alt │ Gui │ App │Ctrl │█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 6.1 SpaceFN layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ ` │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ Del │
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ │ │ │ │ │Home │ Up │ End │ Psc │ Slk │Pause│ Ins │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ │ │ │ │PgUp │Left │Down │Right│ │ │▒▒▒▒▒│ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │▒▒▒▒▒│ │ │ │ │Space│PgDwn│ ` │ ~ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ │█████│█████│█████│ Fn │█████│█████│█████│ Alt │ Gui │ App │Ctrl │█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
diff --git a/keyboards/s60-x/readme.md b/keyboards/s60-x/readme.md
new file mode 100644
index 000000000..94ce82922
--- /dev/null
+++ b/keyboards/s60-x/readme.md
@@ -0,0 +1,260 @@
+S60-x keyboard firmware
+======================
+DIY compact keyboard designed by VinnyCordeiro for Sentraq. Most of the keymaps are based on GH60 code. This is a port from TMK to QMK based on the [original S60-X Repo](https://github.com/VinnyCordeiro/tmk_keyboard).
+
+## S60X Resources
+- [Massdrop page](https://www.massdrop.com/buy/sentraq-60-diy-keyboard-kit?mode=guest_open)
+
+## Quickstart
+
+If you just want to test a few layouts, the archive [s60-x_precompiled.zip](s60-x_precompiled.zip) contains pre-compiled .hex-files for all available keymaps. Not all of them are tested.
+You only need to flash them onto your keyboard, which is explained below, there's no need to setup a build environment. For a full list
+
+## Flashing your keyboard
+The recommended programs for flashing your keyboard are [Atmel FLIP](http://www.atmel.com/tools/FLIP.aspx) (Windows) and [dfu-programmer](http://dfu-programmer.sourceforge.net/) (Linux/Windows).
+
+[QMK Firmware Flasher](https://github.com/jackhumbert/qmk_firmware_flasher/releases) may work, as the S60-X keyboard uses the ATMega32U4 microcontroller, but it is untested. Use at your own risk.
+
+[Easy AVR USB Keyboard Firmware](https://deskthority.net/wiki/Easy_AVR_USB_Keyboard_Firmware) also supports S60-X, but it is completely unrelated to TMK firmware. Use at your own risk.
+
+**Programming the firmware (Windows)**
+
+1. download and install FLIP (http://www.atmel.com/tools/FLIP.aspx)
+2. connect the keyboard, press the program button on the underside of the board (S1) and wait until it enumerates (you'll hear the "disconnect" and "connect" sound)
+3. go to device manager, find the atmega32u4 chip and click "update driver"
+4. choose location manually: folder named "usb" inside the installation directory of FLIP
+5. once the driver is installed, run flip
+6. Device -> Select: choose ATMega32U4
+7. Settings -> Communication -> USB, FLIP should show the signature at this point (58 1E 95 87)
+8. File -> Load HEX file: choose the hex firmware: <firmware>.hex
+9. click "Run"
+10. after programming is done, disconnect the device from USB and connect again.
+
+
+**Programming the firmware (Linux)**
+
+1. Download and install/compile/unpack dfu-programmer from http://dfu-programmer.sourceforge.net/.
+2. Issue the following commands in the command prompt after connecting the device and pressing the programming button (S1). You may need root permissions or udev rules to do that.
+ 1. `sudo dfu-programmer atmega32u4 erase`
+ 2. `sudo dfu-programmer atmega32u4 flash <firmware>.hex`
+ 3. `sudo dfu-programmer atmega32u4 start`
+3. The keyboard should start working. If it doesn't, reconnect the cable.
+
+## Building the firmware
+
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
+ $ make [custom|poker|poker_set|poker_bit|plain|hasu|spacefn|hhkb|<name>]
+
+For a more detailed explanation of the build process and the environment setup, see the ["Getting Started" section](/readme.md#getting-started).
+
+## List of included Keymaps
+
+Several versions of keymaps are available in advance but you are recommended to define your favorite layout yourself.
+To define your own keymap, copy the [default keymap template](/quantum/template/keymaps/default) directory into the `keymaps` directory and start modifying the `keymap.c` file. Some options might require you to change the `config.h` or `Makefile` as well, refer to the main documentation for more information on those.
+If you want to later merge your finalised keymap into this repository to make it available for everyone, make sure to also modify the `readme.md` in your keymap directory to show a visual version of your keymap.
+
+Here's a list of the standard layouts that are provided with the precompiled .hex-files.
+
+### 0 Initial explanations
+The █████ blocks on the layouts hides the switch positions that do not exist physically on the PCB. If you feel like hacking the keyboard and adding new keys, those are the positions that can be used. You'll have to modify the [keymap_common.h](keymap_common.h) file for that.
+
+The â–’â–’â–’â–’â–’ blocks hides switch positions not used on this particular layout, but they do exist on the PCB.
+
+There is no LED support on the PCB at the moment, but I'll let the code for that untouched.
+
+
+### 1 [Standard - ANSI (default layout)](keymaps/default/keymap.c)
+The standard keymap is the one that is pre-flashed on the S60-X.
+
+#### 1.0 Default layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│ENTER│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │LSHFT│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │RCTRL│█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 1.1 Fn layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │GRAVE│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ Up │ │ │ │ │ │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │Left │Down │Right│ │ │ │ │ │ │ │ │▒▒▒▒▒│ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │▒▒▒▒▒│ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+
+
+### 2 [Standard - ISO](keymaps/iso/keymap.c)
+The same as the standard keymap, but with additional ISO keys.
+
+
+#### 2.0 Default layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ ESC │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BKSPC│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ TAB │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │▒▒▒▒▒│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │CAPSL│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │NUHS │ENTER│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │LSHFT│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│RSHFT│▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │LCTRL│L_GUI│L_ALT│█████│█████│█████│ SPC │█████│█████│█████│R_ALT│ FN0 │ APP │RCTRL│█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 2.1 Fn layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │GRAVE│ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ Up │ │ │ │ │ │PGUP │PGDWN│PRTSC│SCLCK│PAUSE│▒▒▒▒▒│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │Left │Down │Right│ │ │ │ │ │ │ │ │ │ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ │ │ │ │ │ │ │ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ │█████│█████│█████│ │█████│█████│█████│ │ │ │ │█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+
+
+### 3 Poker
+[The poker keymap](keymaps/poker/keymap.c) emulates original Vortex Poker layers
+while both [poker_bit](keymaps/poker_bit/keymap.c) and [poker_set](keymap/poker_set/keymap.c) implement the same layout in a slightly different way, fix a minor issue of the original poker Layout and enhance arrow keys.
+
+ Fn + Esc = `
+ Fn + {left, down, up, right} = {home, pgdown, pgup, end}
+
+#### 3.0 Default layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BkSpc│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│Enter│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Fn │ Gui │ App │Ctrl │█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 3.1 Poker Fn layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ Esc │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ │
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ FnQ │ Up │ │ │ │ │ │ │ Cal │ │Home │ Ins │ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │Left │Down │Right│ │ │ Psc │ Slk │Pause│ │ Tsk │ End │▒▒▒▒▒│ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │▒▒▒▒▒│ Del │ │ Web │Mute │ VoU │ VoD │ │PgUp │PgDwn│ Del │▒▒▒▒▒│ Up │▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ │█████│█████│█████│ FnS │█████│█████│█████│ Fn │Left │Down │Right│█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+
+
+### 4. [Plain](keymaps/plain/keymap.c)
+Without any Fn layer this will be useful if you want to use key remapping tool like AHK on host.
+
+#### 4.0 Plain Default layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BkSpc│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│Enter│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Alt │ Gui │ App │Ctrl │█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+
+
+### 5. [Hasu](keymaps/hasu/keymap.c)
+This is Hasu's favorite keymap with HHKB Fn, Vi cursor and Mousekey layer.
+
+(Hasu is the creator of the TMK firmware, for those who do not know that.)
+
+
+### 6. [SpaceFN](keymaps/spacefn/keymap.c)
+This layout proposed by spiceBar uses space bar to change layer with using Dual role key technique. Check the sourcefile and [SpaceFN discussion](http://geekhack.org/index.php?topic=51069.0) for more information.
+
+#### 6.0 Default layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │▒▒▒▒▒│BkSpc│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │▒▒▒▒▒│Enter│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Ctrl │ Gui │ Alt │█████│█████│████ Space/Fn ███│█████│█████│ Alt │ Gui │ App │Ctrl │█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 6.1 SpaceFN layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ ` │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │▒▒▒▒▒│ Del │
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ │ │ │ │ │Home │ Up │ End │ Psc │ Slk │Pause│ Ins │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ │ │ │ │PgUp │Left │Down │Right│ │ │▒▒▒▒▒│ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │▒▒▒▒▒│ │ │ │ │Space│PgDwn│ ` │ ~ │ │ │▒▒▒▒▒│ │▒▒▒▒▒│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ │ │█████│█████│█████│ Fn │█████│█████│█████│ Alt │ Gui │ App │Ctrl │█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+
+
+### 7. [HHKB](keymap/hhkb/keymap.c)
+The HHKB keymap emulates original HHKB layers.
+#### 7.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 │ [ │ ] │BkSpc│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Fn3 │ ' │▒▒▒▒▒│Enter│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Shift│▒▒▒▒▒│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │▒▒▒▒▒│Shift│ Fn │
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │▒▒▒▒▒│ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│▒▒▒▒▒│ Alt │ Gui │▒▒▒▒▒│█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+#### 7.1: HHKB Fn layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ Pwr │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ Ins │ Del │
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Caps │ │ │ │ │ │ │ │ Psc │ Slk │ Pus │ Up │ │ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │ VoD │ VoU │ Mut │ Ejc │ │ * │ / │Home │PgUp │Left │Right│▒▒▒▒▒│Enter│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ │▒▒▒▒▒│ │ │ │ │ │ + │ - │ End │PgDwn│Down │▒▒▒▒▒│ │ │
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │▒▒▒▒▒│ │ │█████│█████│█████│ │█████│█████│█████│▒▒▒▒▒│ │ │▒▒▒▒▒│█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+
+
+### 8 [Custom](keymaps/custom/keymap.c)
+The custom keymap is where I tested all the switches, not being concerned with a specific layout or layers. It's a plain layout option with the extra keys used on ISO & HHKB layouts being assigned some other keys.
+
+#### 8.0 Default layer
+ ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────â”
+ │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │PgUp │BkSpc│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │PgDwn│Enter│█████│
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Shift│Home │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ End │Shift│ Up │
+ ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ │Ctrl │ Gui │ Alt │█████│█████│█████│Space│█████│█████│█████│ Alt │ Gui │ App │Ctrl │█████│
+ └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+
+### 9. [ANSI_QWERTZ](keymaps/ansi_qwertz/keymap.c)
+
+This keymap was designed for inputting characters with diacritics with ANSI keycaps.
+It provides toggleable SpaceFn functionality, a dedicated arrow cluster and a microphone mute key on the function layer as well as a bootloader reset key.
+
+For more info, [check here](keymaps/ansi_qwertz/readme.md).
diff --git a/keyboards/s60-x/rules.mk b/keyboards/s60-x/rules.mk
new file mode 100644
index 000000000..7ec93933a
--- /dev/null
+++ b/keyboards/s60-x/rules.mk
@@ -0,0 +1,69 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change 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
+# 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 ?= no # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
+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 \ No newline at end of file
diff --git a/keyboards/s60-x/s60-x.c b/keyboards/s60-x/s60-x.c
new file mode 100644
index 000000000..417358140
--- /dev/null
+++ b/keyboards/s60-x/s60-x.c
@@ -0,0 +1,28 @@
+#include "s60-x.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, 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);
+}
diff --git a/keyboards/s60-x/s60-x.h b/keyboards/s60-x/s60-x.h
new file mode 100644
index 000000000..29a2a27b2
--- /dev/null
+++ b/keyboards/s60-x/s60-x.h
@@ -0,0 +1,69 @@
+/*
+Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Vinícius Nery Cordeiro <vinicius.nery.cordeiro@gmail.com>
+Copyright 2016 Felix Uhl <ifreilicht@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 S60X_H
+#define S60X_H
+
+#include "quantum.h"
+
+#ifdef __INTELLISENSE__
+#define PROGMEM
+#include "config.h"
+#endif
+
+/* S60-X keymap definition macro
+* K31 is the extra key next to short left ISO shift
+* K2C is the moved key next to enter on ISO boards
+* K3C is the extra key next to short right JIS shift
+* K0D is extra key from split backspace
+* K3E is extra key from HHKB-style split right shift
+*/
+
+#define KEYMAP( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K46, K4A, K4B, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, KC_NO } \
+}
+
+/*This special definition is used for S60-X keymaps that were ported from TMK
+ * QMK has a lot of keycodes that don't start with KC_, so using the regular KEYMAP macro is recommended
+ */
+#define LEGACY_KEYMAP( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K46, K4A, K4B, K4C, K4D \
+) { \
+ { 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_##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_##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_##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_##K40, KC_##K41, KC_##K42, KC_NO, KC_NO, KC_NO, KC_##K46, KC_NO, KC_NO, KC_NO, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_NO } \
+}
+
+#endif
diff --git a/keyboards/s60-x/s60-x_precompiled.zip b/keyboards/s60-x/s60-x_precompiled.zip
new file mode 100644
index 000000000..00d99ca8a
--- /dev/null
+++ b/keyboards/s60-x/s60-x_precompiled.zip
Binary files differ
diff --git a/keyboards/satan/Makefile b/keyboards/satan/Makefile
index 184b5ac37..4e2a6f00f 100644
--- a/keyboards/satan/Makefile
+++ b/keyboards/satan/Makefile
@@ -1,70 +1,3 @@
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-# comment out to disable the options.
-#
-BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes # Console for debug(+400)
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
-NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870)
-BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150)
-MIDI_ENABLE ?= no # MIDI controls
-AUDIO_ENABLE ?= no
-UNICODE_ENABLE ?= no # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../Makefile
-endif
+endif \ No newline at end of file
diff --git a/keyboards/satan/config.h b/keyboards/satan/config.h
index 7e9f91cc8..eb357b39e 100644
--- a/keyboards/satan/config.h
+++ b/keyboards/satan/config.h
@@ -67,7 +67,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#define RGB_DI_PIN E2
-#define RGBLIGHT_TIMER
+#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 8 // Number of LEDs
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
diff --git a/keyboards/satan/keymaps/dbroqua_hhkb/keymap.c b/keyboards/satan/keymaps/dbroqua_hhkb/keymap.c
new file mode 100644
index 000000000..98a298e76
--- /dev/null
+++ b/keyboards/satan/keymaps/dbroqua_hhkb/keymap.c
@@ -0,0 +1,110 @@
+// 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 "satan.h"
+
+#define _DEFAULT 0
+#define _ALTDISP 1
+#define _FN 2
+
+enum planck_keycodes {
+ DEFAULT = SAFE_RANGE,
+ ALTDISP
+};
+
+// Fillers to make layering more clear
+#define ______ KC_TRNS
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Qwerty alt/gui/space/gui/alt
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ * |-----------------------------------------------------------------------------------------+
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / | RShift | FN |
+ * |-----------------------------------------------------------------------------------------+
+ * | LAlt| LGUI | Space | RGUI | RAlt |
+ * `-----------------------------------------------------------------'
+ */
+ [_DEFAULT] = KEYMAP_HHKB( /* Basic QWERTY */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN), \
+ ______, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, ______, ______ \
+ ),
+
+/* Qwerty gui/alt/space/alt/gui
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ * |-----------------------------------------------------------------------------------------+
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / | RShift | FN |
+ * |-----------------------------------------------------------------------------------------+
+ * |LGUI | LAlt | Space | RAlt |RGUI |
+ * `-----------------------------------------------------------------'
+ */
+ [_ALTDISP] = KEYMAP_HHKB( /* Basic QWERTY */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN), \
+ ______, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, ______, ______ \
+ ),
+
+/* FN Layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
+ * |-----------------------------------------------------------------------------------------+
+ * | CAPS | BL- | BL+ | BL | | | | | Psc | Slck| Paus| Up | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | Vol-| Vol+| Mute| | | * | / | Home| PgUp| Left|Right| |
+ * |-----------------------------------------------------------------------------------------+
+ * | | Prev| Play| Next| | | + | - | End |PgDn| Down| | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | Stop | |
+ * `-----------------------------------------------------------------'
+ */
+ [_FN] = KEYMAP_HHKB( /* Layer 1 */
+ ______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
+ KC_CAPS, BL_DEC, BL_INC, BL_TOGG, ______, ______, ______, ______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, ______, ______, \
+ ______, KC_VOLD, KC_VOLU, KC_MUTE, ______, ______, KC_PAST, KC_PSLS,KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, ______, \
+ ______, KC_MPRV, KC_MPLY, KC_MNXT,______,______,KC_PPLS,KC_PMNS,KC_END, KC_PGDN, KC_DOWN, ______,______, \
+ ______, DEFAULT, ALTDISP, ______, KC_MSTP, ______, ______, ______ \
+ )
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ return MACRO_NONE;
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case DEFAULT:
+ if (record->event.pressed) {
+ persistant_default_layer_set(1UL<<_DEFAULT);
+ }
+ return false;
+ break;
+ case ALTDISP:
+ if (record->event.pressed) {
+ persistant_default_layer_set(1UL<<_ALTDISP);
+ }
+ return false;
+ break;
+ }
+ return true;
+} \ No newline at end of file
diff --git a/keyboards/satan/keymaps/dbroqua_hhkb/readme.md b/keyboards/satan/keymaps/dbroqua_hhkb/readme.md
new file mode 100644
index 000000000..39e71beed
--- /dev/null
+++ b/keyboards/satan/keymaps/dbroqua_hhkb/readme.md
@@ -0,0 +1,9 @@
+# Dbroqua HHKB like Layout
+
+Like the HHKB but with a Satan GH60 PCB :D.
+
+# Programming Instructions:
+Enter into programming mode and run the following command.
+```
+$ sudo KEYMAP=dbroqua_hhkb make dfu
+``` \ No newline at end of file
diff --git a/keyboards/satan/keymaps/default/Makefile b/keyboards/satan/keymaps/default/Makefile
new file mode 100644
index 000000000..2a7ff2779
--- /dev/null
+++ b/keyboards/satan/keymaps/default/Makefile
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = 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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/satan/keymaps/default/keymap.c b/keyboards/satan/keymaps/default/keymap.c
index 35dbbb77b..2bf49d2e6 100644
--- a/keyboards/satan/keymaps/default/keymap.c
+++ b/keyboards/satan/keymaps/default/keymap.c
@@ -11,6 +11,8 @@
#define _BL 0
#define _FL 1
+#define _______ KC_TRNS
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BL: (Base Layer) Default Layer
* ,-----------------------------------------------------------.
@@ -25,12 +27,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl |
* `-----------------------------------------------------------'
*/
-[_BL] = KEYMAP(
- F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \
- KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL),
+[_BL] = KEYMAP_ANSI(
+ F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, MO(_FL),KC_RCTL),
/* Keymap _FL: Function Layer
* ,-----------------------------------------------------------.
@@ -45,19 +47,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | |
* `-----------------------------------------------------------'
*/
-[_FL] = KEYMAP(
+[_FL] = KEYMAP_ANSI(
#ifdef RGBLIGHT_ENABLE
- KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \
- KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ KC_GRV, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
+ _______,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,_______,_______,_______, \
+ _______,_______,_______, _______, _______,_______,_______, _______),
#else
- KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \
- KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ KC_GRV, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC, BL_INC,BL_TOGG, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
+ _______,_______,_______, _______, _______,_______,_______,_______),
#endif
};
diff --git a/keyboards/satan/keymaps/default/readme.md b/keyboards/satan/keymaps/default/readme.md
new file mode 100644
index 000000000..c366147df
--- /dev/null
+++ b/keyboards/satan/keymaps/default/readme.md
@@ -0,0 +1 @@
+# default Satan GH60 layout
diff --git a/keyboards/satan/keymaps/denolfe/Makefile b/keyboards/satan/keymaps/denolfe/Makefile
new file mode 100644
index 000000000..c4adab737
--- /dev/null
+++ b/keyboards/satan/keymaps/denolfe/Makefile
@@ -0,0 +1,20 @@
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+RGBLIGHT_ENABLE ?= no # Enable keyboard underlight functionality (+4870)
+BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150)
+MIDI_ENABLE ?= no # MIDI controls
+AUDIO_ENABLE ?= no
+UNICODE_ENABLE ?= no # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/satan/keymaps/denolfe/README.md b/keyboards/satan/keymaps/denolfe/README.md
new file mode 100644
index 000000000..30b94fcdd
--- /dev/null
+++ b/keyboards/satan/keymaps/denolfe/README.md
@@ -0,0 +1,12 @@
+# denolfe's Layout
+Customized Satan keymap
+
+![Layout](keyboard-layout.png "Practical Keymap")
+
+## Programming Instructions:
+`cd` into keymap directory, `make dfu`
+
+## Features
+- Movement keys with <kbd>CapsLock</kbd> + <kbd>h</kbd>, <kbd>j</kbd>, <kbd>k</kbd>, <kbd>l</kbd>
+- Media Keys
+- Backlight control
diff --git a/keyboards/satan/keymaps/denolfe/keyboard-layout.png b/keyboards/satan/keymaps/denolfe/keyboard-layout.png
new file mode 100644
index 000000000..d6d6ad57f
--- /dev/null
+++ b/keyboards/satan/keymaps/denolfe/keyboard-layout.png
Binary files differ
diff --git a/keyboards/satan/keymaps/denolfe/keymap.c b/keyboards/satan/keymaps/denolfe/keymap.c
new file mode 100644
index 000000000..5f189d78a
--- /dev/null
+++ b/keyboards/satan/keymaps/denolfe/keymap.c
@@ -0,0 +1,171 @@
+#include "satan.h"
+
+#ifdef RGBLIGHT_ENABLE
+#include "rgblight.h"
+#endif
+
+// Used for SHIFT_ESC
+#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _BL 0
+#define _FL 1
+#define _SL 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,-----------------------------------------------------------.
+ * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
+ * |-----------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |
+ * |-----------------------------------------------------------|
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
+ * |-----------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
+ * |-----------------------------------------------------------|
+ * |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl |
+ * `-----------------------------------------------------------'
+ */
+[_BL] = KEYMAP_ANSI(
+ F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ MO(_FL), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RGUI, KC_RCTL),
+
+ /* Keymap _FL: Function Layer
+ * ,-----------------------------------------------------------.
+ * | | | | | | | | | | | | | | RESET|
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | | | |BL-|BL+|BL |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * |-----------------------------------------------------------|
+ * | | F1|F2 | F3|F4 | F5| F6| F7| F8| | | |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | |
+ * `-----------------------------------------------------------'
+ */
+[_FL] = KEYMAP_ANSI(
+ #ifdef RGBLIGHT_ENABLE
+ KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, F(1), F(2), F(3), F(4), F(5), F(6), F(7), F(8), KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ #else
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_PGUP, KC_TRNS, KC_END, KC_MPRV, KC_MNXT, KC_MPLY, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, KC_HOME, LCTL(KC_LEFT), LCTL(KC_END), LCTL(KC_RIGHT), KC_TRNS, RESET, \
+ KC_TRNS, KC_TRNS, F(9), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ #endif
+
+[_SL] = KEYMAP_ANSI(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_PGUP, KC_TRNS, LSFT(KC_END), KC_MPRV, KC_MNXT, KC_MPLY, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, LSFT(KC_LEFT), LSFT(KC_DOWN), LSFT(KC_UP), LSFT(KC_RIGHT), KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, LSFT(KC_HOME), LCTL(LSFT(KC_LEFT)), LCTL(LSFT(KC_END)), LCTL(LSFT(KC_RIGHT)), KC_TRNS, RESET, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
+enum function_id {
+ SHIFT_ESC,
+ #ifdef RGBLIGHT_ENABLE
+ RGBLED_TOGGLE,
+ RGBLED_STEP_MODE,
+ RGBLED_INCREASE_HUE,
+ RGBLED_DECREASE_HUE,
+ RGBLED_INCREASE_SAT,
+ RGBLED_DECREASE_SAT,
+ RGBLED_INCREASE_VAL,
+ RGBLED_DECREASE_VAL
+ #endif
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_FUNCTION(SHIFT_ESC),
+ #ifdef RGBLIGHT_ENABLE
+ [1] = ACTION_FUNCTION(RGBLED_TOGGLE),
+ [2] = ACTION_FUNCTION(RGBLED_STEP_MODE),
+ [3] = ACTION_FUNCTION(RGBLED_INCREASE_HUE),
+ [4] = ACTION_FUNCTION(RGBLED_DECREASE_HUE),
+ [5] = ACTION_FUNCTION(RGBLED_INCREASE_SAT),
+ [6] = ACTION_FUNCTION(RGBLED_DECREASE_SAT),
+ [7] = ACTION_FUNCTION(RGBLED_INCREASE_VAL),
+ [8] = ACTION_FUNCTION(RGBLED_DECREASE_VAL),
+ #endif
+ [9] = ACTION_LAYER_MODS(2, MOD_LSFT)
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ static uint8_t shift_esc_shift_mask;
+ switch (id) {
+ case SHIFT_ESC:
+ shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
+ if (record->event.pressed) {
+ if (shift_esc_shift_mask) {
+ add_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ add_key(KC_ESC);
+ send_keyboard_report();
+ }
+ } else {
+ if (shift_esc_shift_mask) {
+ del_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ del_key(KC_ESC);
+ send_keyboard_report();
+ }
+ }
+ break;
+ //led operations
+ #ifdef RGBLIGHT_ENABLE
+ case RGBLED_TOGGLE:
+ if (record->event.pressed) {
+ rgblight_toggle();
+ }
+ break;
+ case RGBLED_INCREASE_HUE:
+ if (record->event.pressed) {
+ rgblight_increase_hue();
+ }
+ break;
+ case RGBLED_DECREASE_HUE:
+ if (record->event.pressed) {
+ rgblight_decrease_hue();
+ }
+ break;
+ case RGBLED_INCREASE_SAT:
+ if (record->event.pressed) {
+ rgblight_increase_sat();
+ }
+ break;
+ case RGBLED_DECREASE_SAT:
+ if (record->event.pressed) {
+ rgblight_decrease_sat();
+ }
+ break;
+ case RGBLED_INCREASE_VAL:
+ if (record->event.pressed) {
+ rgblight_increase_val();
+ }
+ break;
+ case RGBLED_DECREASE_VAL:
+ if (record->event.pressed) {
+ rgblight_decrease_val();
+ }
+ break;
+ case RGBLED_STEP_MODE:
+ if (record->event.pressed) {
+ rgblight_step();
+ }
+ break;
+ #endif
+ }
+}
diff --git a/keyboards/satan/keymaps/iso_split_rshift/.gitignore b/keyboards/satan/keymaps/iso_split_rshift/.gitignore
new file mode 100644
index 000000000..4d652661c
--- /dev/null
+++ b/keyboards/satan/keymaps/iso_split_rshift/.gitignore
@@ -0,0 +1,3 @@
+updatemerge.sh
+clear_flash.hex
+resetboard.sh
diff --git a/keyboards/satan/keymaps/iso_split_rshift/LEDpinSatan.jpg b/keyboards/satan/keymaps/iso_split_rshift/LEDpinSatan.jpg
new file mode 100644
index 000000000..7616693f9
--- /dev/null
+++ b/keyboards/satan/keymaps/iso_split_rshift/LEDpinSatan.jpg
Binary files differ
diff --git a/keyboards/satan/keymaps/iso_split_rshift/Makefile b/keyboards/satan/keymaps/iso_split_rshift/Makefile
new file mode 100644
index 000000000..d1e07da3f
--- /dev/null
+++ b/keyboards/satan/keymaps/iso_split_rshift/Makefile
@@ -0,0 +1,16 @@
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality (+4870)
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality (+1150)
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/satan/keymaps/iso_split_rshift/build.sh b/keyboards/satan/keymaps/iso_split_rshift/build.sh
new file mode 100755
index 000000000..6b4b4568f
--- /dev/null
+++ b/keyboards/satan/keymaps/iso_split_rshift/build.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+# adjust for cpu
+# -j 16 gave best result on a hyperthreaded quad core core i7
+
+LIMIT=10
+THREADS="-j 16"
+KMAP=iso_split_rshift
+
+echo "We need sudo later"
+sudo ls 2>&1 /dev/null
+
+function wait_bootloader {
+ echo "Waiting for Bootloader..."
+ local STARTTIME=$(date +"%s")
+ local REMIND=0
+ local EXEC=dfu-programmer
+ local TARGET=atmega32u4
+ while true
+ do
+ sudo $EXEC $TARGET get > /dev/null 2>&1
+ [ $? -eq 0 ] && break
+ ENDTIME=$(date +"%s")
+ DURATION=$(($ENDTIME-$STARTTIME))
+ if [ $REMIND -eq 0 -a $DURATION -gt $LIMIT ]
+ then
+ echo "Did you forget to press the reset button?"
+ REMIND=1
+ fi
+ sleep 1
+ done
+}
+make clean
+make KEYMAP=${KMAP} ${THREADS}
+if [[ $? -eq 0 ]]
+then
+ echo "please trigger flashing!"
+ wait_bootloader
+ sudo make KEYMAP=${KMAP} dfu ${THREADS}
+else
+ echo "make failed"
+ exit 77
+fi
diff --git a/keyboards/satan/keymaps/iso_split_rshift/config.h b/keyboards/satan/keymaps/iso_split_rshift/config.h
new file mode 100644
index 000000000..27c1372da
--- /dev/null
+++ b/keyboards/satan/keymaps/iso_split_rshift/config.h
@@ -0,0 +1,27 @@
+/*
+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_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// only change
+#undef RGB_DI_PIN
+#define RGB_DI_PIN B2
+
+#endif
diff --git a/keyboards/satan/keymaps/iso_split_rshift/keymap.c b/keyboards/satan/keymaps/iso_split_rshift/keymap.c
new file mode 100644
index 000000000..cf938e07d
--- /dev/null
+++ b/keyboards/satan/keymaps/iso_split_rshift/keymap.c
@@ -0,0 +1,209 @@
+// 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 "satan.h"
+// TODO: replace your ugly german brckets with #defines
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _DEF 0
+#define _SPC 1
+#define _TAB 2
+#define _SFX 3
+
+// dual-role shortcuts
+#define TABDUAL LT(_TAB, KC_TAB)
+#define CAPSDUAL CTL_T(KC_ESC)
+#define SPACEDUAL LT(_SPC, KC_SPACE)
+#define ENTERDUAL CTL_T(KC_ENT)
+// arrow cluster duality bottom right corner
+#define ARRLEFT ALT_T(KC_LEFT)
+#define ARRDOWN GUI_T(KC_DOWN)
+#define ARRUP SFT_T(KC_UP)
+#define ARRRIGHT CTL_T(KC_RIGHT)
+// german brackets
+#define GER_CUR_L RALT(KC_7) // [
+#define GER_CUR_R RALT(KC_0) // ]
+#define GER_PAR_L LSFT(KC_8) // (
+#define GER_PAR_R LSFT(KC_9) // )
+#define GER_ANG_L KC_NUBS // <
+#define GER_ANG_R LSFT(KC_NUBS) // >
+#define GER_BRC_L RALT(KC_8) // [
+#define GER_BRC_R RALT(KC_9) // ]
+
+// increase readability
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _DEF: Default Layer
+ * ,-----------------------------------------------------------.
+ * |Grv| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
+ * |-----------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | Tab is Fn1
+ * |-----------------------------------------------------------|
+ * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| Return |
+ * |-----------------------------------------------------------|
+ * |Sft | < | Z| X| C| V| B| N| M| ,| .| /|Shift |Fn2| RShift is UP
+ * |-----------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space/Fn0 |Alt |Win |Menu|RCtl| Gui Menu, RCtrl is
+ * `-----------------------------------------------------------' LEFT DWN RIGHT
+ */
+ [_DEF] = KEYMAP_ISO_SPLITRSHIFT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ TABDUAL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ CAPSDUAL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, ENTERDUAL, \
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, ARRUP, TG(_SFX), \
+ KC_LCTL, KC_LGUI, KC_LALT, SPACEDUAL, KC_RALT, ARRLEFT, ARRDOWN, ARRRIGHT),
+
+ /* Keymap 1: F-and-vim Layer, modified with Space (by holding space)
+ * ,-----------------------------------------------------------.
+ * |PrSc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete|
+ * |-----------------------------------------------------------|
+ * | |Paus| Up| [ | ] | | | | ( | ) | | | | |
+ * |-----------------------------------------------------------|
+ * | |Lft|Dwn|Rgt| | |Left|Down|Right|Up| | | PLAY |
+ * |-----------------------------------------------------------|
+ * | | | | | < | > | |M0 | | | | | Vol+ | |
+ * |-----------------------------------------------------------|
+ * | | | | |Alt |Prev|Vol-|Next|
+ * `-----------------------------------------------------------'
+ */
+ [_SPC] = KEYMAP_ISO_SPLITRSHIFT(
+ KC_PSCR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ _______, KC_PAUS, KC_UP, GER_BRC_L, GER_BRC_R, _______, _______, GER_PAR_L, GER_PAR_R, _______, _______, _______, _______, _______, \
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, KC_MPLY, \
+ _______, _______, _______, _______, GER_ANG_L, GER_ANG_R, KC_SPACE, M(0), _______, _______, _______, _______, KC_VOLU, _______, \
+ _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT),
+
+ /* Keymap 2: Tab Layer w/ vim pageup, modified with Tab (by holding tab)
+ * ,-----------------------------------------------------------.
+ * |WAKE| | | | | | | | | | | | |Insert| TAB+GRC = WAKE
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | { | } | | | | |
+ * |-----------------------------------------------------------|
+ * | | | | | | |Pos1|PgDn|PgUp|End| | |Retrn |
+ * |-----------------------------------------------------------|
+ * | | | | | | | |AF2| | | | | PgUp | |
+ * |-----------------------------------------------------------|
+ * | | | | |Alt |Pos1|PgDn|End |
+ * `-----------------------------------------------------------'
+ */
+ [_TAB] = KEYMAP_ISO_SPLITRSHIFT(
+ KC_WAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, \
+ _______, _______, _______, _______, _______, _______, _______, GER_CUR_L, GER_CUR_R, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, _______, KC_ENT, \
+ _______, _______, _______, _______, _______, _______, _______, M(1), _______, _______, _______, _______, KC_PGUP, _______, \
+ _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END),
+
+ /* Keymap 3: Split right shift Numpad toggle Layer (by tapping the split rshift key)
+ * ,-----------------------------------------------------------.
+ * |RSET| | | | | | | 7| 8| 9| | | |Backsp |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | 4 | 5 | 6 | | | | \ |
+ * |-----------------------------------------------------------|
+ * | | L | L | | | | | 1 | 2 | 3 | | | Return |
+ * |-----------------------------------------------------------|
+ * | | | L | L | L | L | L | L | | 0 | | /| Up | | All "L"s represent
+ * |-----------------------------------------------------------| LED controlling
+ * |Ctrl|Win |Alt | |Alt |Left|Down|Right|
+ * `-----------------------------------------------------------'
+ */
+ [_SFX] = KEYMAP_ISO_SPLITRSHIFT(
+ RESET, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, _______, _______, KC_BSPC, \
+ _______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, KC_BSLS, \
+ _______, F(2), F(3), _______, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______, XXXXXXX, KC_ENT, \
+ _______, F(4), F(5), F(6), F(7), F(8), F(9), _______, _______, KC_0, _______, KC_SLSH, KC_UP, _______, \
+ _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT),
+};
+
+enum function_id {
+ LAUNCH,
+ RGBLED_TOGGLE,
+ RGBLED_STEP_MODE,
+ RGBLED_INCREASE_HUE,
+ RGBLED_DECREASE_HUE,
+ RGBLED_INCREASE_SAT,
+ RGBLED_DECREASE_SAT,
+ RGBLED_INCREASE_VAL,
+ RGBLED_DECREASE_VAL,
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_FUNCTION(LAUNCH),
+ [2] = ACTION_FUNCTION(RGBLED_TOGGLE),
+ [3] = ACTION_FUNCTION(RGBLED_STEP_MODE),
+ [4] = ACTION_FUNCTION(RGBLED_INCREASE_HUE),
+ [5] = ACTION_FUNCTION(RGBLED_DECREASE_HUE),
+ [6] = ACTION_FUNCTION(RGBLED_INCREASE_SAT),
+ [7] = ACTION_FUNCTION(RGBLED_DECREASE_SAT),
+ [8] = ACTION_FUNCTION(RGBLED_INCREASE_VAL),
+ [9] = ACTION_FUNCTION(RGBLED_DECREASE_VAL),
+ [10] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_ENT),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ return (record->event.pressed ?
+ MACRO( D(RALT), T(SPC), U(RALT), END )
+ :MACRO( END ));
+ break;
+ case 1:
+ return (record->event.pressed ?
+ MACRO( D(LALT), T(F2), U(LALT), END )
+ :MACRO( END ));
+ break;
+ }
+ return MACRO_NONE;
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ switch (id) {
+ case RGBLED_TOGGLE:
+ //led operations
+ if (record->event.pressed) {
+ rgblight_toggle();
+ }
+ break;
+ case RGBLED_INCREASE_HUE:
+ if (record->event.pressed) {
+ rgblight_increase_hue();
+ }
+ break;
+ case RGBLED_DECREASE_HUE:
+ if (record->event.pressed) {
+ rgblight_decrease_hue();
+ }
+ break;
+ case RGBLED_INCREASE_SAT:
+ if (record->event.pressed) {
+ rgblight_increase_sat();
+ }
+ break;
+ case RGBLED_DECREASE_SAT:
+ if (record->event.pressed) {
+ rgblight_decrease_sat();
+ }
+ break;
+ case RGBLED_INCREASE_VAL:
+ if (record->event.pressed) {
+ rgblight_increase_val();
+ }
+ break;
+ case RGBLED_DECREASE_VAL:
+ if (record->event.pressed) {
+ rgblight_decrease_val();
+ }
+ break;
+ case RGBLED_STEP_MODE:
+ if (record->event.pressed) {
+ rgblight_step();
+ }
+ break;
+ }
+}
diff --git a/keyboards/satan/keymaps/iso_split_rshift/readme.md b/keyboards/satan/keymaps/iso_split_rshift/readme.md
new file mode 100644
index 000000000..ec6123d8a
--- /dev/null
+++ b/keyboards/satan/keymaps/iso_split_rshift/readme.md
@@ -0,0 +1,36 @@
+toneman77's Satan Layout
+=====================
+
+##Quantum MK Firmware
+For the full Quantum feature list, see the parent readme.md.
+
+* heavily modified ISO (!) layout with split right shift key
+* spaceFn
+* Dual-Role keys:
+*
+ | Original key | when tapped | when held |
+ | ---------------- | ------------- | ------------- |
+ | Space | Space | layer change |
+ | Caps lock | Escape | Control |
+ | Tab | Tab | layer change |
+ | Enter | Enter | Control |
+
+* Lockable layer for LED functions and numpad
+* vim-style arrow keys on hjkl (spacefn layer)
+* corresponding Home/PgDn/PgUp/End on hjkl (tab layer)
+* bonus arrow keys in the bottom right corner on Alt/Win/Menu/rCtrl/Shift
+* more bonus arrow keys on wasd (spacefn layer)
+* media keys prev/next/play/vol+/vol- (spacefn layer)
+* firmware bootloader button
+* WS2812 RGB Underglow Support (not needed anymore to solder directly to the atmega)
+* additional brackets that only work in german layout due to horrible placement
+in the default qwertz layout
+
+
+### Additional Credits
+* Keymap has been based on TerryMathews' fork of Aqoush's fork of qmk-satan-rgb. [here](https://github.com/TerryMathews/qmk-satan-rgb/tree/master/keyboard/satan)
+* nice visualization of the layers [here](http://www.keyboard-layout-editor.com/#/gists/aba4e4396459ede85bc66a22cee88e48)
+* no-need-to-solder-on-chip picture:
+![no need to solder directly on the chip anymore](LEDpinSatan.jpg)
+* special thanks to /u/TerryMathews who suggested the pin PB2, so soldering
+directly on the atmega is not needed anymore. Happened on [reddit](https://www.reddit.com/r/MechanicalKeyboards/comments/4ghq9z/photos_satan_rgb60_w1976/d2k5tra)
diff --git a/keyboards/satan/keymaps/iso_split_rshift/resetboard.sh b/keyboards/satan/keymaps/iso_split_rshift/resetboard.sh
new file mode 100755
index 000000000..d955ccf54
--- /dev/null
+++ b/keyboards/satan/keymaps/iso_split_rshift/resetboard.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+sudo dfu-programmer atmega32u4 erase --force
+sudo dfu-programmer atmega32u4 flash clear_flash.hex
+sudo dfu-programmer atmega32u4 reset
diff --git a/keyboards/satan/keymaps/poker/keymap.c b/keyboards/satan/keymaps/poker/keymap.c
index 8181955cf..9da7d29b7 100644
--- a/keyboards/satan/keymaps/poker/keymap.c
+++ b/keyboards/satan/keymaps/poker/keymap.c
@@ -25,12 +25,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl |
* `-----------------------------------------------------------'
*/
-[_BL] = KEYMAP(
- F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \
- KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT, MO(_RL), MO(_FL), KC_RCTL),
+[_BL] = KEYMAP_ANSI(
+ F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_RL), MO(_FL), KC_RCTL),
/* Keymap _FL: Function Layer
* ,-----------------------------------------------------------.
@@ -45,12 +45,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | |
* `-----------------------------------------------------------'
*/
-[_FL] = KEYMAP(
- KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
- KC_TRNS,KC_TRNS, KC_UP, KC_TRNS,KC_TRNS,KC_TRNS, KC_CALC,KC_TRNS,KC_INS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, \
- KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_APP, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_TRNS, \
- KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+[_FL] = KEYMAP_ANSI(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, \
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_APP, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
/* Keymap _RL: Function Layer
* ,-----------------------------------------------------------.
@@ -65,19 +65,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | |
* `-----------------------------------------------------------'
*/
-[_RL] = KEYMAP(
+[_RL] = KEYMAP_ANSI(
#ifdef RGBLIGHT_ENABLE
- KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \
- KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
#else
- KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \
- KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_INC, BL_TOGG, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
#endif
};
diff --git a/keyboards/satan/keymaps/sethbc/Makefile b/keyboards/satan/keymaps/sethbc/Makefile
new file mode 100644
index 000000000..2a7ff2779
--- /dev/null
+++ b/keyboards/satan/keymaps/sethbc/Makefile
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = 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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/satan/keymaps/sethbc/keymap.c b/keyboards/satan/keymaps/sethbc/keymap.c
index f8991f9fd..93610258b 100644
--- a/keyboards/satan/keymaps/sethbc/keymap.c
+++ b/keyboards/satan/keymaps/sethbc/keymap.c
@@ -10,6 +10,9 @@
#define _BL 0
#define _FL 1
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _BL: (Base Layer) Default Layer
* ,-----------------------------------------------------------.
@@ -29,21 +32,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FL), \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL),
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_MENU, KC_RCTL),
[_FL] = KEYMAP_HHKB(
#ifdef RGBLIGHT_ENABLE
- KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, RESET, \
- KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \
- KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RESET, \
+ KC_CAPS, _______, RGB_TOG,RGB_MOD,RGB_HUI, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, KC_DEL, \
+ _______, KC_VOLD, RGB_HUD,RGB_SAI,RGB_SAD, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \
+ _______, RGB_VAI,RGB_VAD,_______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______),
#else
- KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, RESET, \
- KC_CAPS, KC_TRNS, RGB_TOG,RGB_MOD,RGB_HUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \
- KC_TRNS, KC_VOLD, RGB_HUD,RGB_SAI,RGB_SAD, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \
- KC_TRNS, RGB_VAI,RGB_VAD,KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RESET, \
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, KC_DEL, \
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \
+ _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______),
#endif
};
diff --git a/keyboards/satan/keymaps/sethbc/readme.md b/keyboards/satan/keymaps/sethbc/readme.md
new file mode 100644
index 000000000..ed0eb8701
--- /dev/null
+++ b/keyboards/satan/keymaps/sethbc/readme.md
@@ -0,0 +1,3 @@
+# sethbc's Satan GH60 layout
+
+HHKB style split right shift and split backspace. Largely based on the HHKB layout.
diff --git a/keyboards/satan/keymaps/stanleylai/config.h b/keyboards/satan/keymaps/stanleylai/config.h
index ae2bd36db..7f4bb441c 100644
--- a/keyboards/satan/keymaps/stanleylai/config.h
+++ b/keyboards/satan/keymaps/stanleylai/config.h
@@ -1,20 +1,15 @@
#include "../../config.h"
-// USB Device descriptor parameter
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0003
-#define MANUFACTURER Custom
-#define PRODUCT GH60 rev.CHN
-#define DESCRIPTION QMK keyboard firmware for GH60 with WS2812 support
-
// Backlight configuration
+#undef BACKLIGHT_LEVELS
#define BACKLIGHT_LEVELS 3
// Underlight configuration
-#define RGB_DI_PIN E2
-#define RGBLIGHT_TIMER
+#undef RGBLED_NUM
#define RGBLED_NUM 6 // Number of LEDs
+#undef RGBLIGHT_HUE_STEP
#define RGBLIGHT_HUE_STEP 8
+#undef RGBLIGHT_SAT_STEP
#define RGBLIGHT_SAT_STEP 8
+#undef RGBLIGHT_VAL_STEP
#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/satan/keymaps/stanleylai/keymap.c b/keyboards/satan/keymaps/stanleylai/keymap.c
index 623427e97..979c122e5 100644
--- a/keyboards/satan/keymaps/stanleylai/keymap.c
+++ b/keyboards/satan/keymaps/stanleylai/keymap.c
@@ -26,25 +26,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Function layer
[_FL] = KEYMAP_HHKB(
- KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_NO, \
- KC_NO, KC_MPRV, KC_UP, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS, \
- KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
- KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LT(_RGBL, KC_PGUP), KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_HOME, KC_PGDN, KC_END),
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_NO, \
+ KC_NO, KC_MPRV, KC_UP, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS, \
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LT(_RGBL, KC_PGUP), KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_HOME, KC_PGDN, KC_END),
// RGB Layer
[_RGBL] = KEYMAP_HHKB(
#ifdef RGBLIGHT_ENABLE
RESET, 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, BL_TOGG, BL_STEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
- KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_NO, KC_NO, KC_TRNS, KC_TRNS,\
+ 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, BL_TOGG, BL_STEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_NO, KC_NO, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
#else
RESET, 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, BL_TOGG, BL_STEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
- KC_TRNS, 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_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, BL_TOGG, BL_STEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_TRNS, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
#endif
};
diff --git a/keyboards/satan/readme.md b/keyboards/satan/readme.md
new file mode 100644
index 000000000..aaf189746
--- /dev/null
+++ b/keyboards/satan/readme.md
@@ -0,0 +1,4 @@
+Satan GH60 keyboard firmware
+======================
+
+TODO: to be updated.
diff --git a/keyboards/satan/rules.mk b/keyboards/satan/rules.mk
new file mode 100644
index 000000000..1102584d8
--- /dev/null
+++ b/keyboards/satan/rules.mk
@@ -0,0 +1,66 @@
+
+# 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 ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality (+4870)
+BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality (+1150)
+MIDI_ENABLE ?= no # MIDI controls
+AUDIO_ENABLE ?= no
+UNICODE_ENABLE ?= no # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/satan/satan.h b/keyboards/satan/satan.h
index fa1711915..f3cbd5305 100644
--- a/keyboards/satan/satan.h
+++ b/keyboards/satan/satan.h
@@ -3,15 +3,18 @@
#include "quantum.h"
-/* Clueboard matrix layout
+// readability
+#define XXX KC_NO
+
+/* Satan GH60 matrix layout (3c is right of 3d, 3d is shift)
* ,-----------------------------------------------------------.
- * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d |
+ * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d| 49|
* |-----------------------------------------------------------|
* | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
* |-----------------------------------------------------------|
- * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d |
+ * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c|2d |
* |-----------------------------------------------------------|
- * | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d |
+ * | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | 3c |
* |-----------------------------------------------------------|
* | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
* `-----------------------------------------------------------'
@@ -19,18 +22,45 @@
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
#define KEYMAP( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49,\
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
+ k40, k41, k42, k45, k4a, k4b, k4c, k4d \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
+ {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \
+ {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \
+}
+/* Satan GH60 ANSI layout
+ * ,-----------------------------------------------------------.
+ * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d |
+ * |-----------------------------------------------------------|
+ * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
+ * |-----------------------------------------------------------|
+ * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d |
+ * |-----------------------------------------------------------|
+ * | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d |
+ * |-----------------------------------------------------------|
+ * | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
+ * `-----------------------------------------------------------'
+ */
+#define KEYMAP_ANSI( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \
- k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \
k40, k41, k42, k45, k4a, k4b, k4c, k4d \
) \
{ \
- {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
- {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
- {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, KC_NO, k2d}, \
- {k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d}, \
- {k40, k41, k42, KC_NO, KC_NO, k45, KC_NO, KC_NO, KC_NO, KC_NO, k4a, k4b, k4c, k4d} \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
+ {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \
+ {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \
}
/* Satan HHKB matrix layout
@@ -51,17 +81,46 @@
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k49, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \
- k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
k40, k41, k42, k45, k4a, k4b, k4c, k4d \
) \
{ \
- {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
- {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
- {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, KC_NO, k2d}, \
- {k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
- {k40, k41, k42, KC_NO, KC_NO, k45, KC_NO, KC_NO, KC_NO, k49, k4a, k4b, k4c, k4d} \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d}, \
+ {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+ {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \
}
+/* ISO w/ split right shift key matrix layout
+ * ,-----------------------------------------------------------.
+ * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d |
+ * |-----------------------------------------------------------|
+ * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
+ * |-----------------------------------------------------------|
+ * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c|2d |
+ * |-----------------------------------------------------------|
+ * | 30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | 3c|
+ * |-----------------------------------------------------------|
+ * | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
+ * `-----------------------------------------------------------'
+
+ swap 3c and 3d. 3c is right of 3d in reality
+ */
+#define KEYMAP_ISO_SPLITRSHIFT( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3c, \
+ k40, k41, k42, k45, k4a, k4b, k4c, k4d \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d}, \
+ {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+ {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \
+}
void matrix_init_user(void);
void matrix_scan_user(void);
diff --git a/keyboards/sixkeyboard/Makefile b/keyboards/sixkeyboard/Makefile
index 6f273064a..4e2a6f00f 100644
--- a/keyboards/sixkeyboard/Makefile
+++ b/keyboards/sixkeyboard/Makefile
@@ -1,75 +1,3 @@
-
-
-SRC = matrix.c
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega16u2
-
-# 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 ?= no # 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 ?= no # Commands for debug and configuration
-SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
-NKRO_ENABLE ?= no # USB 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
-UNICODE_ENABLE ?= no # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-CUSTOM_MATRIX = yes
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../Makefile
-endif
-
+endif \ No newline at end of file
diff --git a/keyboards/sixkeyboard/rules.mk b/keyboards/sixkeyboard/rules.mk
new file mode 100644
index 000000000..2c99985a9
--- /dev/null
+++ b/keyboards/sixkeyboard/rules.mk
@@ -0,0 +1,70 @@
+
+
+SRC = matrix.c
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega16u2
+
+# 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 ?= no # 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 ?= no # Commands for debug and configuration
+SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
+NKRO_ENABLE ?= no # USB 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
+UNICODE_ENABLE ?= no # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
+CUSTOM_MATRIX = yes \ No newline at end of file
diff --git a/keyboards/tada68/Makefile b/keyboards/tada68/Makefile
new file mode 100644
index 000000000..4e2a6f00f
--- /dev/null
+++ b/keyboards/tada68/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/tada68/config.h b/keyboards/tada68/config.h
new file mode 100644
index 000000000..19cf9c9b3
--- /dev/null
+++ b/keyboards/tada68/config.h
@@ -0,0 +1,97 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0003
+#define MANUFACTURER TADA
+#define PRODUCT TADA68
+#define DESCRIPTION QMK keyboard firmware for TADA68 with WS2812 support
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+// ROWS: Top to bottom, COLS: Left to right
+
+#define MATRIX_ROW_PINS {D0,D1,F6,F7,D5}
+#define MATRIX_COL_PINS {F0,F1,E6,C7,C6,B7,D4,B1,B0,B5,B4,D7,D6,B3,F4}
+#define UNUSED_PINS
+
+#define BACKLIGHT_PIN B6
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* Backlight configuration
+ */
+#define BACKLIGHT_LEVELS 4
+
+/* Underlight configuration
+ */
+
+/*#define RGB_DI_PIN E2
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 2 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17*/
+//Disabled while I figure out a suitable pin for RGB support.
+//I've tried F5, D2, D3, and E2 but it's possible the end of my
+//strand is bad. New LEDs on order.
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/tada68/keymaps/default/Makefile b/keyboards/tada68/keymaps/default/Makefile
new file mode 100644
index 000000000..2a7ff2779
--- /dev/null
+++ b/keyboards/tada68/keymaps/default/Makefile
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = 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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/tada68/keymaps/default/keymap.c b/keyboards/tada68/keymaps/default/keymap.c
new file mode 100644
index 000000000..da57c0343
--- /dev/null
+++ b/keyboards/tada68/keymaps/default/keymap.c
@@ -0,0 +1,98 @@
+#include "tada68.h"
+
+
+// Used for SHIFT_ESC
+#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _BL 0
+#define _FL 1
+
+#define _______ KC_TRNS
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,----------------------------------------------------------------.
+ * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` |
+ * |----------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |Del |
+ * |----------------------------------------------------------------|
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp|
+ * |----------------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn|
+ * |----------------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lef|Dow|Rig |
+ * `----------------------------------------------------------------'
+ */
+[_BL] = KEYMAP_ANSI(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS,KC_DEL, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,KC_PGUP, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,KC_UP,KC_PGDN, \
+ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,MO(_FL),KC_RCTRL, KC_LEFT,KC_DOWN,KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ * ,----------------------------------------------------------------.
+ * | | | | | | | | | | | | | | RESET| |
+ * |----------------------------------------------------------------|
+ * | | | | | | | | | | | |BL-|BL+|BL | |
+ * |----------------------------------------------------------------|
+ * | | | | | | | | | | | | | |
+ * |----------------------------------------------------------------|
+ * | | F1|F2 | F3|F4 | F5| F6| F7| F8| | | | | |
+ * |----------------------------------------------------------------|
+ * | | | | | | | | | | |
+ * `----------------------------------------------------------------'
+ */
+[_FL] = KEYMAP_ANSI(
+ #ifdef RGBLIGHT_ENABLE
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET,_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG,_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______, \
+ _______,RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,_______,_______,_______,_______,_______, \
+ _______,_______,_______, _______, _______,_______,_______,_______,_______, _______),
+ #else
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,RESET,_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, BL_DEC,BL_INC, BL_TOGG,_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
+ _______,_______,_______, _______, _______,_______,_______,_______,_______, _______),
+ #endif
+};
+
+/*enum function_id {
+ //SHIFT_ESC,
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ //[0] = ACTION_FUNCTION(SHIFT_ESC),
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ static uint8_t shift_esc_shift_mask;
+ switch (id) {
+ case SHIFT_ESC:
+ shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
+ if (record->event.pressed) {
+ if (shift_esc_shift_mask) {
+ add_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ add_key(KC_ESC);
+ send_keyboard_report();
+ }
+ } else {
+ if (shift_esc_shift_mask) {
+ del_key(KC_GRV);
+ send_keyboard_report();
+ } else {
+ del_key(KC_ESC);
+ send_keyboard_report();
+ }
+ }
+ break;
+ }
+}*/
diff --git a/keyboards/tada68/keymaps/default/readme.md b/keyboards/tada68/keymaps/default/readme.md
new file mode 100644
index 000000000..36760d6b9
--- /dev/null
+++ b/keyboards/tada68/keymaps/default/readme.md
@@ -0,0 +1 @@
+# default TADA68 layout
diff --git a/keyboards/tada68/readme.md b/keyboards/tada68/readme.md
new file mode 100644
index 000000000..552fdea52
--- /dev/null
+++ b/keyboards/tada68/readme.md
@@ -0,0 +1,4 @@
+TADA68 keyboard firmware
+======================
+
+TODO: to be updated.
diff --git a/keyboards/clueboard2/Makefile b/keyboards/tada68/rules.mk
index e9367a90d..d8ec42365 100644
--- a/keyboards/clueboard2/Makefile
+++ b/keyboards/tada68/rules.mk
@@ -1,5 +1,4 @@
-
# MCU name
#MCU = at90usb1287
MCU = atmega32u4
@@ -53,7 +52,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
# Build Options
# comment out to disable the options.
#
-BOOTMAGIC_ENABLE ?= yes # Virtual DIP switch configuration(+1000)
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
CONSOLE_ENABLE ?= yes # Console for debug(+400)
@@ -65,7 +64,3 @@ MIDI_ENABLE ?= no # MIDI controls
AUDIO_ENABLE ?= no
UNICODE_ENABLE ?= no # Unicode
BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-
-ifndef QUANTUM_DIR
- include ../../Makefile
-endif
diff --git a/keyboards/tada68/tada68.c b/keyboards/tada68/tada68.c
new file mode 100644
index 000000000..24f89048c
--- /dev/null
+++ b/keyboards/tada68/tada68.c
@@ -0,0 +1,30 @@
+#include "tada68.h"
+#include "led.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+ matrix_init_user();
+ led_init_ports();
+};
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+ matrix_scan_user();
+};
+
+void led_init_ports(void) {
+ // * Set our LED pins as output
+ DDRB |= (1<<2);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ // Turn capslock on
+ PORTB &= ~(1<<2);
+ } else {
+ // Turn capslock off
+ PORTB |= (1<<2);
+ }
+}
diff --git a/keyboards/tada68/tada68.h b/keyboards/tada68/tada68.h
new file mode 100644
index 000000000..d0e027a6f
--- /dev/null
+++ b/keyboards/tada68/tada68.h
@@ -0,0 +1,43 @@
+#ifndef TADA68_H
+#define TADA68_H
+
+#include "quantum.h"
+
+// readability
+#define XXX KC_NO
+
+/* TADA68 ANSI layout
+ * ,----------------------------------------------------------------.
+ * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d | 0e |
+ * |----------------------------------------------------------------|
+ * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d | 1e |
+ * |----------------------------------------------------------------|
+ * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d | 2e |
+ * |----------------------------------------------------------------|
+ * | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3c| 3d| 3e |
+ * |----------------------------------------------------------------|
+ * | 40 | 41 | 42 | 45 | 49| 4a| 4b| 4c| 4d| 4e |
+ * `----------------------------------------------------------------'
+ */
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+
+#define KEYMAP_ANSI( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, k2e, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
+ k40, k41, k42, k45, k49, k4a, k4b, k4c, k4d, k4e \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d, k2e}, \
+ {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e}, \
+ {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d, k4e} \
+}
+
+void matrix_init_user(void);
+void matrix_scan_user(void);
+
+#endif
diff --git a/keyboards/tv44/Makefile b/keyboards/tv44/Makefile
new file mode 100644
index 000000000..4e2a6f00f
--- /dev/null
+++ b/keyboards/tv44/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/tv44/config.h b/keyboards/tv44/config.h
new file mode 100644
index 000000000..0ae93c095
--- /dev/null
+++ b/keyboards/tv44/config.h
@@ -0,0 +1,162 @@
+/*
+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 0xFEAE
+#define PRODUCT_ID 0x8844
+#define DEVICE_VER 0x0002
+#define MANUFACTURER Evan Sailer
+#define PRODUCT TheVan 44
+#define DESCRIPTION keyboard firmware for TV44
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/*
+ * 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 { D7, B5, F7, D4 }
+#define MATRIX_COL_PINS { D2, D3, D5, D6, B4, B6, F6, F5, F4, F1, F0, B3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* 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 */
+
+/* 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/keyboards/tv44/keymaps/default/Makefile b/keyboards/tv44/keymaps/default/Makefile
new file mode 100644
index 000000000..f4671a9d1
--- /dev/null
+++ b/keyboards/tv44/keymaps/default/Makefile
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = 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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/tv44/keymaps/default/config.h b/keyboards/tv44/keymaps/default/config.h
new file mode 100644
index 000000000..df06a2620
--- /dev/null
+++ b/keyboards/tv44/keymaps/default/config.h
@@ -0,0 +1,8 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+
+#endif \ No newline at end of file
diff --git a/keyboards/tv44/keymaps/default/keymap.c b/keyboards/tv44/keymaps/default/keymap.c
new file mode 100644
index 000000000..f3f989f2d
--- /dev/null
+++ b/keyboards/tv44/keymaps/default/keymap.c
@@ -0,0 +1,97 @@
+#include "tv44.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+#define _QW 0
+#define _DV 1
+#define _CM 2
+#define _L1 3
+#define _L2 4
+#define _L3 5
+
+// Macro name shortcuts
+#define QWERTY M(_QW)
+#define DVORAK M(_DV)
+#define COLEMAK M(_CM)
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QW] = { /* Qwerty */
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC },
+ {MO(_L1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MO(_L1) },
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_F, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2) },
+ {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) }
+ },
+ [_DV] = { /* Dvorak */
+ {KC_TAB, KC_SLSH, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC },
+ {MO(_L1), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, MO(_L1) },
+ {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, MO(_L2) },
+ {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) }
+ },
+ [_CM] = { /* Colemak */
+ {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC },
+ {MO(_L1), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, MO(_L1) },
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2) },
+ {KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_RALT, KC_ESC, XXXXXXX, TG(_L3) }
+ },
+ [_L1] = { /* LAYER 1 */
+ {KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL },
+ {_______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, _______ },
+ {_______, KC_ESC, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT },
+ {_______, KC_LGUI, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______ }
+ },
+ [_L2] = { /* LAYER 2 */
+ {_______, QWERTY, DVORAK, COLEMAK, _______, _______, _______, KC_7, KC_8, KC_9, KC_0, _______ },
+ {KC_ESC, KC_PIPE, KC_DQUO, KC_UNDS, KC_PLUS, LSFT(KC_LBRC), LSFT(KC_RBRC), KC_4, KC_5, KC_6, KC_VOLU, KC_ENT },
+ {_______, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, KC_VOLD, _______ },
+ {_______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______ }
+ },
+ [_L3] = { /* LAYER 3 */
+ {_______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, _______ },
+ {KC_ESC, _______, _______, _______, _______, _______, _______, KC_F5, KC_F6, KC_F7, KC_F8, _______ },
+ {KC_LSFT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_F9, KC_F10, KC_F11, KC_F12, _______ },
+ {_______, KC_LSFT, KC_B, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_C, _______, _______, XXXXXXX, _______ }
+ }
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case _DV:
+ if (record->event.pressed) {
+ persistant_default_layer_set(1UL<<_DV);
+ }
+ break;
+ case _QW:
+ if (record->event.pressed) {
+ persistant_default_layer_set(1UL<<_QW);
+ }
+ break;
+ case _CM:
+ if (record->event.pressed) {
+ persistant_default_layer_set(1UL<<_CM);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboards/tv44/keymaps/default/readme.md b/keyboards/tv44/keymaps/default/readme.md
new file mode 100644
index 000000000..ac84c08cf
--- /dev/null
+++ b/keyboards/tv44/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for tv44 \ No newline at end of file
diff --git a/keyboards/tv44/keymaps/jeebak/Makefile b/keyboards/tv44/keymaps/jeebak/Makefile
new file mode 100644
index 000000000..f4671a9d1
--- /dev/null
+++ b/keyboards/tv44/keymaps/jeebak/Makefile
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = 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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/tv44/keymaps/jeebak/config.h b/keyboards/tv44/keymaps/jeebak/config.h
new file mode 100644
index 000000000..a59ef2b70
--- /dev/null
+++ b/keyboards/tv44/keymaps/jeebak/config.h
@@ -0,0 +1,21 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+/**
+ *TV44 keymap definition macro
+ */
+#define KEYMAP_TV44( \
+ K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, \
+ K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, \
+ K25, K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, \
+ K37, K38, K39, K40, K41, K42, K43, K44 \
+) { \
+ { K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, }, \
+ { K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, }, \
+ { K25, K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, }, \
+ { K37, K38, K39, K40, KC_NO, KC_NO, KC_NO, K41, K42, K43, KC_NO, K44 } \
+}
+
+#endif
diff --git a/keyboards/tv44/keymaps/jeebak/keymap.c b/keyboards/tv44/keymaps/jeebak/keymap.c
new file mode 100644
index 000000000..1bb1015c3
--- /dev/null
+++ b/keyboards/tv44/keymaps/jeebak/keymap.c
@@ -0,0 +1,425 @@
+#include "tv44.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _PLOVER 5
+#define _TOUCHCURSOR 6
+#define _MOUSECURSOR 7
+#define _ADJUST 16
+
+// Keycodes
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ PLOVER,
+ LOWER,
+ RAISE,
+ BACKLIT,
+ EXT_PLV
+};
+
+enum macro_keycodes {
+ KC_ALT_TAB,
+ KC_CMD_TAB,
+ KC_CTL_TAB,
+ KC_CMD_SLSH,
+ KC_AG_FIND,
+ KC_AG_AGAIN,
+ KC_AG_UNDO,
+ KC_AG_CUT,
+ KC_AG_COPY,
+ KC_AG_PASTE,
+ KC_AG_DESK_L,
+ KC_AG_DESK_R,
+ KC_AG_TAB_C,
+ KC_AG_TAB_N,
+ KC_AG_TAB_R,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Custom macros
+#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
+#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
+#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper
+#define GUI_SEM GUI_T(KC_SCLN) // Tap for Semicolon, hold for GUI
+#define ALT_QUO ALT_T(KC_QUOT) // Tap for Quote, hold for Alt
+// Requires KC_TRNS/_______ for the trigger key in the destination layer
+#define LT_TC LT(_TOUCHCURSOR, KC_SPC) // L-ayer T-ap T-ouch C-ursor
+#define LT_MC(kc) LT(_MOUSECURSOR, kc) // L-ayer T-ap M-ouse C-ursor
+#define ALT_TAB M(KC_ALT_TAB) // Macro for Alt-Tab
+#define CMD_TAB M(KC_CMD_TAB) // Macro for Cmd-Tab
+#define CTL_TAB M(KC_CTL_TAB) // Macro for Ctl-Tab
+#define CMD_SLSH M(KC_CMD_SLSH) // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility)
+#define AG_FIND M(KC_AG_FIND) // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings
+#define AG_AGAIN M(KC_AG_AGAIN)
+#define AG_UNDO M(KC_AG_UNDO)
+#define AG_CUT M(KC_AG_CUT)
+#define AG_COPY M(KC_AG_COPY)
+#define AG_PASTE M(KC_AG_PASTE)
+#define AG_D_L M(KC_AG_DESK_L) // For Virtual Desktop Switching: Left, and
+#define AG_D_R M(KC_AG_DESK_R) // Right
+#define AG_T_C M(KC_AG_TAB_C) // For Chrome, etc. Tab Close,
+#define AG_T_N M(KC_AG_TAB_N) // Tab New, and
+#define AG_T_R M(KC_AG_TAB_R) // Tab Reopen Closed
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ *
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * |Hyper/Tab| Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | Ctrl/Esc | A | S | MC/D | F | G | H | J | K | L |GUI/; | Alt/" |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | Shift | Z | X | C | V | B | N | M | , | . | / | Sft/Ent |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol+ | Play |
+ * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+[_QWERTY] = KEYMAP_TV44(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ CTL_ESC , KC_A, KC_S,LT_MC(KC_D), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, GUI_SEM, ALT_QUO ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ KC_LSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLU , KC_MPLY ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Colemak
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * |Hyper/Tab| Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | Ctrl/Esc | A | R | MC/S | T | D | H | N | E | I | O | " |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | Shift | Z | X | C | V | B | K | M | , | . | / | Sft/Ent |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol+ | Play |
+ * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+[_COLEMAK] = KEYMAP_TV44(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ CTL_ESC , KC_A, KC_R,LT_MC(KC_S), KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ KC_LSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLU , KC_MPLY ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Dvorak
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * |Hyper/Tab| " | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | Ctrl/Esc | A | O | MC/E | U | I | D | H | T | N | S | / |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | Shift | ; | Q | J | K | X | B | M | W | V | Z | Sft/Ent |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol+ | Play |
+ * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+[_DVORAK] = KEYMAP_TV44(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ HPR_TAB,KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ CTL_ESC , KC_A, KC_O,LT_MC(KC_E), KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ KC_LSFT , KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLU , KC_MPLY ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Lower
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | [ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | "|" |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | ] | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | \ |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Brite | | | | | | Vol- | Mute |
+ * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+[_LOWER] = KEYMAP_TV44(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ KC_TILD,KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ KC_LBRC , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ KC_RBRC , KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ BACKLIT , _______ , _______ , _______ , _______ , _______ , KC_VOLD , KC_MUTE ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Raise
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | $ | 4 | 5 | 6 | . | + | . | 4 | 5 | 6 | * | "|" |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | = | 7 | 8 | 9 | 0 | - | . | 1 | 2 | 3 | / | \ |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Brite | | | | | | Vol- | Mute |
+ * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+[_RAISE] = KEYMAP_TV44(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ KC_0 , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ KC_DLR , KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ASTR, KC_PIPE ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ KC_EQL , KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_DOT, KC_1, KC_2, KC_3, KC_SLSH, KC_BSLS ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ BACKLIT , _______ , _______ , _______ , _______ , _______ , KC_VOLD , KC_MUTE ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* TouchCursor layer (http://martin-stone.github.io/touchcursor/) plus personal customizations
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * | AltTab |CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | | Alt |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L| Desk_R |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | | Undo | Cut | Copy |Paste | ` | PgDn | Del |Tab_N |Tab_R |iTerm2| |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | | | | | | | | |
+ * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ *
+ * The KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND, and KC_AGAIN keycodes don't
+ * seem to work on Mac. Presumably they'll work under Windows.
+ */
+
+[_TOUCHCURSOR] = KEYMAP_TV44(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ ALT_TAB,CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______ ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ _______ ,KC_LALT, KC_SPC, AG_T_C, AG_FIND,AG_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, AG_D_L, AG_D_R ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ _______ ,AG_UNDO, AG_CUT, AG_COPY,AG_PASTE, KC_GRV, KC_PGDN, KC_DEL, AG_T_N, AG_T_R,CMD_SLSH, _______ ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Mouse Layer
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * | | |ACCL0 | | | | |WHL_L | Up |WHL_R | BTN2 | |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | |ACCL2 | BTN2 | | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 | BTN5 |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | | | | | BTN3 | |WHL_Dn| BTN1 | | | BTN3 | |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | | | | | | | | |
+ * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+
+[_MOUSECURSOR] = KEYMAP_TV44(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ _______,_______, KC_ACL0, _______, _______, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______ ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ _______ ,KC_ACL2, KC_BTN2, _______, KC_BTN1, KC_ACL1, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4, KC_BTN5 ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ _______ ,_______, _______, _______, KC_BTN3, _______, KC_WH_D, KC_BTN1, _______, _______, KC_BTN3, _______ ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Plover layer (http://opensteno.org)
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * | # | # | # | # | # | # | # | # | # | # | # | # |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | | S | T | P | H | * | * | F | P | L | T | D |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | TogOut | S | K | W | R | * | * | R | B | G | S | Z |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Exit | A | O | | | E | U | |
+ * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+
+[_PLOVER] = KEYMAP_TV44(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ KC_1 , KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ XXXXXXX , KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ XXXXXXX , KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ EXT_PLV , KC_C , KC_V , XXXXXXX , XXXXXXX , KC_N , KC_M , XXXXXXX ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Adjust (Lower + Raise)
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * | | | | | | | | | | | | Del |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | | | | | |AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | | | | | | | | | | | | |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | | | | | | | | Reset |
+ * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+[_ADJUST] = KEYMAP_TV44(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ _______ ,_______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______ ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ _______ ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ _______ , _______ , _______ , _______ , _______ , _______ , _______ , RESET )
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ default_layer_set(1UL<<_DVORAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ case PLOVER:
+ if (record->event.pressed) {
+ layer_off(_RAISE);
+ layer_off(_LOWER);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ break;
+ case EXT_PLV:
+ if (record->event.pressed) {
+ layer_off(_PLOVER);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+/*
+ * Macro definition
+ */
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+
+ bool use_cmd = true; // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc.
+ // Compare to MAGIC_SWAP_ALT_GUI and MAGIC_UNSWAP_ALT_GUI configs, set in:
+ // quantum/quantum.c
+ if(keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1) {
+ use_cmd = false; // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc.
+ }
+
+ switch (id) {
+ case KC_ALT_TAB:
+ if(use_cmd) { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); }
+ else { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); }
+ case KC_CMD_TAB:
+ if(use_cmd) { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); }
+ else { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); }
+
+ case KC_CTL_TAB:
+ return (record->event.pressed ? MACRO( D(LCTRL), D(TAB), END ) : MACRO( U(TAB), END ));
+ case KC_CMD_SLSH:
+ return (record->event.pressed ? MACRO( D(LGUI), D(SLSH),END ) : MACRO( U(SLSH),END ));
+
+ case KC_AG_FIND:
+ return use_cmd ? MACRODOWN( D(LGUI), T(F), END ) : MACRODOWN( D(LCTRL), T(F), END );
+ case KC_AG_AGAIN:
+ return use_cmd ? MACRODOWN( D(LGUI), T(G), END ) : MACRODOWN( D(LCTRL), T(G), END );
+ case KC_AG_UNDO:
+ return use_cmd ? MACRODOWN( D(LGUI), T(Z), END ) : MACRODOWN( D(LCTRL), T(Z), END );
+ case KC_AG_CUT:
+ return use_cmd ? MACRODOWN( D(LGUI), T(X), END ) : MACRODOWN( D(LCTRL), T(X), END );
+ case KC_AG_COPY:
+ return use_cmd ? MACRODOWN( D(LGUI), T(C), END ) : MACRODOWN( D(LCTRL), T(C), END );
+ case KC_AG_PASTE:
+ return use_cmd ? MACRODOWN( D(LGUI), T(V), END ) : MACRODOWN( D(LCTRL), T(V), END );
+
+ case KC_AG_DESK_L:
+ return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(SCLN), END ) : MACRODOWN( D(LALT), D(LCTRL), T(SCLN), END );
+ case KC_AG_DESK_R:
+ return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(QUOT), END ) : MACRODOWN( D(LALT), D(LCTRL), T(QUOT), END );
+
+ case KC_AG_TAB_C:
+ return use_cmd ? MACRODOWN( D(LGUI), T(W), END ) : MACRODOWN( D(LCTRL), T(W), END );
+ case KC_AG_TAB_N:
+ return use_cmd ? MACRODOWN( D(LGUI), T(T), END ) : MACRODOWN( D(LCTRL), T(T), END );
+ case KC_AG_TAB_R:
+ return use_cmd ? MACRODOWN( D(LGUI), D(LSHIFT), T(T), END ) : MACRODOWN( D(LCTRL), D(LSHIFT), T(T), END );
+ }
+
+ return MACRO_NONE;
+}
diff --git a/keyboards/tv44/keymaps/jeebak/readme.md b/keyboards/tv44/keymaps/jeebak/readme.md
new file mode 100644
index 000000000..43d20958a
--- /dev/null
+++ b/keyboards/tv44/keymaps/jeebak/readme.md
@@ -0,0 +1,129 @@
+jeebak's TV44 layout
+=======================
+NOTE: This is a port of jeebak's planck layout, for tv44.
+
+This WIP keymap attempts to minimize fingers straying away from the home row.
+To aid in this endeavor, when additional modifyer keys to switch layers are
+needed, they will be mapped to home row keys. The `keymap.c` file will contain
+the exact changes. The diagrams in this README shows the highlights of the
+changes from the default mappings.
+
+I also decided to change all calls to `persistant_default_layer_set()` to
+`default_layer_set()` since this is my personal perference.
+
+## Macros
+```
+#define ALT_TAB M(KC_ALT_TAB)
+```
+
+## Base Layers (Qwerty/Colemak/Dvorak)
+These base layers are mostly the same as the default mappings. The interesting
+changes are shown below.
+
+- The `Ctrl/Esc`, will emit an `Escape` when tapped, and act as a `Control` key when held,
+- `GUI/;` as `;` and `GUI`,
+- `Alt/"` as `"` and `Alt`,
+- `Sft/Ent` as `Enter` and `Shift`, and
+- `Hyper/Tab` as `Tab` and `Hyper`
+
+A `TODO` item is to see if it can also act as a `CapsLock` when double-tapped.
+The arrow keys, which have been moved to the
+[TouchCursor](http://martin-stone.github.io/touchcursor/) layer, have been
+replaced with the Media keys as shown. The `MC/kc` key activates the
+`MouseCursor` layer when held, and emits the corresponding `kc` for its layer,
+when tapped.
+```
+ ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ |Hyper/Tab| Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ | Ctrl/Esc | A | S | MC/D | F | G | H | J | K | L |GUI/; | Alt/" |
+ |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ | Shift | Z | X | C | V | B | N | M | , | . | / | Sft/Ent |
+ |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol+ | Play |
+ `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+```
+
+## Lower Layer (Symbols and Function Keys)
+The symbols and functions keys are essentially the same as the default mapping.
+The most notable changes are that the symbol keys from the `RAISE` layer have
+been moved here. The remaining Media keys replace those that are now on the
+base layers. The `BACKLIT` key has also been moved here.
+```
+ ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ | [ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | "|" |
+ |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ | ] | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | \ |
+ |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ | Brite | | | | | | Vol- | Mute |
+ `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+```
+
+## Raise Layer (Numbers and Arithmetic Operators)
+All of the numbers and arithmetic operators are available on this layer. Some
+keys are duplicated for the convenience of their positions. The `0` and `$`
+keys at the far left are for quick access to beginning and end of line in vim.
+```
+ ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ | $ | 4 | 5 | 6 | . | + | . | 4 | 5 | 6 | * | "|" |
+ |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ | = | 7 | 8 | 9 | 0 | - | . | 1 | 2 | 3 | / | \ |
+ |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ | Brite | | | | | | Vol- | Mute |
+ `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+```
+
+## TouchCursor layer plus personal customizations
+[TouchCursor](http://martin-stone.github.io/touchcursor/) uses the `Space` key
+as the modifier, with the `IJKL` home row keys representing the inverted-T of
+the arrow keys. All of the default TouchCursor keymappings for the right hand
+are represented below. My personalizations include all of the keys shown for
+the left hand. Having the `Alt` and `Shift` keys (as well as the `Control` key
+from the base layers) readily accessible from the home row allows quick word
+jumps and highlighting when used in conjunction with the arrow keys. The
+`Alt-Tab` macro is not only useful under Windows, but also under Mac when used
+with alternative switchers like [HyperSwitch](https://bahoom.com/hyperswitch).
+The `Cmd-Tab` and `Ctrl-Tab` sequences are duplicated for easy access while in
+this layer. The `KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND,` and `KC_AGAIN`
+keycodes do not seem to work. There are macros in place that'll "automatically"
+choose the correct version (`Cmd-Tab` vs. `Alt-Tab`, `Cmd-C` vs. `Ctrl-C`,
+etc.) depending on which layout you've currently selected (`AG_NORM` or
+`AG_SWAP`) in the `_ADJUST` layer. The `Desk_L` and `Desk_R` macros are what I
+use to switch between Virtual Desktops Left/Right. The `Tab_C`, `Tab_N` and
+`Tab_R` are for "Close Tab," "New Tab" and "Reopen Closed Tab" for apps such as
+Google Chrome.
+```
+ ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ | AltTab |CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | |
+ |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ | | Alt |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L| Desk_R |
+ |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ | | Undo | Cut | Copy |Paste | ` | PgDn | Del |Tab_N |Tab_R |iTerm2| |
+ |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ | | | | | | | | |
+ `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+```
+
+## Mouse Layer
+The Mouse layer, closely mimics the layout/behaviour of the TouchCursor layer.
+The `D` key (on QWERTY) is used to activate this layer. All 16 keycodes for the
+mouse from the `doc/keycode.txt` file are represented, and logically located,
+IMHO. The left and right click buttons are duplicated; on the right hand side,
+for a quick click here and there, and again on the left hand side for when the
+buttons need to be held for dragging things or highlighting text, thus allowing
+the right hand to be free to use the up/down/left/right actions.
+```
+ ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ | | |ACCL0 | | | | |WHL_L | Up |WHL_R | BTN2 | |
+ |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ | |ACCL2 | BTN2 | | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 | BTN5 |
+ |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ | | | | | BTN3 | |WHL_Dn| BTN1 | | | BTN3 | |
+ |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ | | | | | | | | |
+ `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+```
diff --git a/keyboards/tv44/keymaps/xyverz/Makefile b/keyboards/tv44/keymaps/xyverz/Makefile
new file mode 100644
index 000000000..f4671a9d1
--- /dev/null
+++ b/keyboards/tv44/keymaps/xyverz/Makefile
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = 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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/tv44/keymaps/xyverz/config.h b/keyboards/tv44/keymaps/xyverz/config.h
new file mode 100644
index 000000000..df06a2620
--- /dev/null
+++ b/keyboards/tv44/keymaps/xyverz/config.h
@@ -0,0 +1,8 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+
+#endif \ No newline at end of file
diff --git a/keyboards/tv44/keymaps/xyverz/keymap.c b/keyboards/tv44/keymaps/xyverz/keymap.c
new file mode 100644
index 000000000..8cbcf8d35
--- /dev/null
+++ b/keyboards/tv44/keymaps/xyverz/keymap.c
@@ -0,0 +1,92 @@
+#include "tv44.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+#define _DV 0
+#define _QW 1
+#define _CM 2
+#define _L1 3
+#define _L2 4
+
+// Macro name shortcuts
+#define DVORAK M(_DV)
+#define QWERTY M(_QW)
+#define COLEMAK M(_CM)
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_DV] = { /* 0: Dvorak */
+ {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC },
+ {MO(_L1), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENT },
+ {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT },
+ {KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) }
+ },
+
+ [_QW] = { /* 1: Qwerty */
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC },
+ {MO(_L1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT },
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT },
+ {KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) }
+ },
+
+ [_CM] = { /* 2: Colemak */
+ {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC },
+ {MO(_L1), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT },
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT },
+ {KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, KC_SPC, KC_SLSH, KC_MINS, XXXXXXX, MO(_L2) }
+ },
+
+ [_L1] = {/* 1: FN 1 */
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL },
+ {_______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, _______ },
+ {_______, _______, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT },
+ {KC_ESC, KC_LGUI, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, KC_SLSH, _______, _______ }
+ },
+
+ [_L2] = { /* 2: FN 2 */
+ {KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_ESC },
+ {_______, KC_F11, KC_F12, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_VOLU, KC_ENT },
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, KC_VOLD, _______ },
+ {QWERTY, DVORAK, COLEMAK, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______ }
+ }
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case _DV:
+ if (record->event.pressed) {
+ persistant_default_layer_set(1UL<<_DV);
+ }
+ break;
+ case _QW:
+ if (record->event.pressed) {
+ persistant_default_layer_set(1UL<<_QW);
+ }
+ break;
+ case _CM:
+ if (record->event.pressed) {
+ persistant_default_layer_set(1UL<<_CM);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+
diff --git a/keyboards/tv44/keymaps/xyverz/readme.md b/keyboards/tv44/keymaps/xyverz/readme.md
new file mode 100644
index 000000000..ac84c08cf
--- /dev/null
+++ b/keyboards/tv44/keymaps/xyverz/readme.md
@@ -0,0 +1 @@
+# The default keymap for tv44 \ No newline at end of file
diff --git a/keyboards/tv44/readme.md b/keyboards/tv44/readme.md
new file mode 100644
index 000000000..4f691a4ca
--- /dev/null
+++ b/keyboards/tv44/readme.md
@@ -0,0 +1,28 @@
+tv44 keyboard firmware
+======================
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/tv44 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 default`.
+
+### Other Keymaps
+
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
+```
+$ make [default|jack|<name>]
+```
+
+Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` \ No newline at end of file
diff --git a/keyboards/tv44/rules.mk b/keyboards/tv44/rules.mk
new file mode 100644
index 000000000..dbba6bace
--- /dev/null
+++ b/keyboards/tv44/rules.mk
@@ -0,0 +1,69 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change 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
+# 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 ?= no # Enable keyboard backlight functionality on B7 by default
+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
diff --git a/keyboards/tv44/tv44.c b/keyboards/tv44/tv44.c
new file mode 100644
index 000000000..6dc0efd28
--- /dev/null
+++ b/keyboards/tv44/tv44.c
@@ -0,0 +1,28 @@
+#include "tv44.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, 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);
+}
diff --git a/keyboards/tv44/tv44.h b/keyboards/tv44/tv44.h
new file mode 100644
index 000000000..65c0b4593
--- /dev/null
+++ b/keyboards/tv44/tv44.h
@@ -0,0 +1,22 @@
+#ifndef TV44_H
+#define TV44_H
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+// The following is an example using the Planck MIT layout
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define KEYMAP( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
+ K30, K31, K32, K33, K37, K38, K39, K3A, K3B \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
+ { K30, K31, K32, K33, KC_NO, KC_NO, KC_NO, K37, K38, K39, K3A, K3B } \
+
+#endif
diff --git a/keyboards/vision_division/Makefile b/keyboards/vision_division/Makefile
new file mode 100644
index 000000000..4e2a6f00f
--- /dev/null
+++ b/keyboards/vision_division/Makefile
@@ -0,0 +1,3 @@
+ifndef MAKEFILE_INCLUDED
+ include ../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/vision_division/Potential Layouts.txt b/keyboards/vision_division/Potential Layouts.txt
new file mode 100644
index 000000000..f715ac8c6
--- /dev/null
+++ b/keyboards/vision_division/Potential Layouts.txt
@@ -0,0 +1,84 @@
+/* Numeric Max / Numeric Normal - Full Grid
+ * .-----------------------------------. .--------------------------------------------------------------_--------------------------------------------------------------. .-----------------------------------.
+ * | | | | | | | | | | | | | | | | | | | | | | | | |
+ * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
+ * .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------.
+ * | | | | | | | | | | | | | | | | | | | | | | | | |
+ * |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------|
+ * | | | | | | | | | | | | | | | | | | | | | | | | |
+ * |--------+--------+--------+--------| o |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------|
+ * | | | | | o | | | | | | | | | | | | | | | | | | | |
+ * |--------+--------+--------+--------| o |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------|
+ * | | | | | | | | | | | | | | | | | | | | | | | | |
+ * |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------|
+ * | | | | | | | | | | | | | | | | | | | | | | | | |
+ * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
+ */
+
+//* Numeric Max / Homing Normal - Full Grid
+ * .-----------------------------------. .--------------------------------------------------------------_--------------------------------------------------------------. .--------------------------.
+ * | | | | | | | | | | | | | | | | | | | | | | | |
+ * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '--------------------------'
+ * .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .--------------------------.
+ * | | | | | | | | | | | | | | | | | | | | | | | |
+ * |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ * | | | | | | | | | | | | | | | | | | | | | | | |
+ * |--------+--------+--------+--------| o |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ * | | | | | o | | | | | | | | | | | | | | | | | | |
+ * |--------+--------+--------+--------| o |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ * | | | | | | | | | | | | | | | | | | | | | | | |
+ * |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ * | | | | | | | | | | | | | | | | | | | | | | | |
+ * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '--------------------------'
+ */
+
+//* Numeric Max / Homing Normal - Traditional
+ * .-----------------------------------. .-----------------------------------. .-----------------_-----------------. .-----------------------------------. .--------------------------.
+ * | | | | | | | | | | | | | | | | | | | | | | | |
+ * '-----------------------------------' '-----------------------------------' '-----------------------------------' '-----------------------------------' '--------------------------'
+ * .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .--------------------------.
+ * | | | | | | | | | | | | | | | | | | | | | | | |
+ * |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------|
+ * | | | | | | | | | | | | | | | | | | | | | | | |
+ * |--------+--------+--------+ | o |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| '--------+--------+--------'
+ * | | | | | o | | | | | | | | | | | | | | |
+ * |--------+--------+--------+--------| o |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| .--------.
+ * | | | | | | | | | | | | | | | | | | | |
+ * |--------+--------+--------+ | |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| .--------+--------+--------.
+ * | | | | | | | | | | | | | | | | | | | | | |
+ * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '--------------------------'
+ */
+
+/* Numeric Max / Numeric Normal
+ * .-----------------------------------. .--------------------------------------------------------------_--------------------------------------------------------------. .-----------------------------------.
+ * | | | | | | | | | | | | | | | | | | | | | | | | |
+ * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
+ * .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------.
+ * | | | | | | 1U / 2U | | | | | | | | | | | 1U / 2U | | | | | |
+ * |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------|
+ * | 1U | | | 1U | | | | | | | | | | | | | | | | | 1U | | | 1U |
+ * | / +--------+--------+ / | o |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| | / +--------+--------+ / |
+ * | 2U | | | 2U | o | 1U / 2U | | | | | | | | | | | | | 2U | | | 2U |
+ * |--------+--------+--------+--------| o |-----------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| |--------+--------+--------+--------|
+ * | | | | | | 1U / 2U | | | | | | | | | | | 1U / 2U | | | | | |
+ * | '--------+--------' | |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| | '--------+--------' |
+ * | 1U / 2UH / 2UV | 1U / 2UH / 2UV | | | | | | | | 1U / 2U | | | | | | | | 1U / 2UH / 2UV | 1U / 2UH / 2UV |
+ * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
+ */
+
+/* Numeric Max / Numeric Max
+ * .-----------------------------------. .-----------------------------------------------------------------------_-----------------------------------------------------------------------. .-----------------------------------.
+ * | | | | | | | | | | | | | | | | | | | | | | | | | | |
+ * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
+ * .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------------------------. .-----------------------------------.
+ * | | | | | | 1U / 2U | | | | | | | | | | | | | 1U / 2U | | | | | |
+ * |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------|
+ * | 1U | | | 1U | | | | | | | | | | | | | | | | | | | 1U | | | 1U |
+ * | / +--------+--------+ / | o |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| | / +--------+--------+ / |
+ * | 2U | | | 2U | o | 1U / 2U | | | | | | | | | | | | | | | 2U | | | 2U |
+ * |--------+--------+--------+--------| o |-----------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------| |--------+--------+--------+--------|
+ * | | | | | | 1U / 2U | | | | | | | | | | | | | 1U / 2U | | | | | |
+ * | '--------+--------' | |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| | '--------+--------' |
+ * | 1U / 2UH / 2UV | 1U / 2UH / 2UV | | | | | | | | 1U / 2U | 1U / 2U | | | | | | | | 1U / 2UH / 2UV | 1U / 2UH / 2UV |
+ * '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
+ */
diff --git a/keyboards/vision_division/config.h b/keyboards/vision_division/config.h
new file mode 100644
index 000000000..5798d91ad
--- /dev/null
+++ b/keyboards/vision_division/config.h
@@ -0,0 +1,148 @@
+/*
+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"
+
+// Due to the configurability of this keyboard, matrix sizes are determined in the keymap's config.h
+
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 3
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 0
+
+#define MATRIX_MASKED
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* 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 */
+// #ifndef NO_DEBUG
+// # define NO_DEBUG
+// #endif
+
+/* disable print */
+// #ifndef NO_PRINT
+// # define NO_PRINT
+// #endif
+
+/* Only print user print statements */
+// #define USER_PRINT
+
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/vision_division/keymaps/default/Makefile b/keyboards/vision_division/keymaps/default/Makefile
new file mode 100644
index 000000000..28060947a
--- /dev/null
+++ b/keyboards/vision_division/keymaps/default/Makefile
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = yes # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/vision_division/keymaps/default/config.h b/keyboards/vision_division/keymaps/default/config.h
new file mode 100644
index 000000000..efd43f41b
--- /dev/null
+++ b/keyboards/vision_division/keymaps/default/config.h
@@ -0,0 +1,81 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+#include "matrix_types.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define DEVICE_VER 0x0001
+#define MANUFACTURER IBNobody
+#define PRODUCT Vision Division
+#define DESCRIPTION Full / Split Keyboard
+
+#define MATRIX_ROWS 6
+#define MATRIX_ROW_PINS { C2, C3, F4, F5, F6, F7 }
+
+// !!! MAKE SURE THAT THE LEFT/RIGHT PCB DEFINES MATCH ON ALL OF THESE COLUMNS
+
+// **LEFT** **RIGHT**
+#define PRODUCT_ID GET_PID( NUMERIC_NORMAL, NUMERIC_MAX_TEENSY)
+#define MATRIX_COLS GET_MATRIX_COLS( NUMERIC_NORMAL, NUMERIC_MAX_TEENSY)
+#define MATRIX_COL_PINS GET_MATRIX_COL_PINS( NUMERIC_NORMAL, NUMERIC_MAX_TEENSY)
+
+#define KEYMAP(MATRIX_LAYER, \
+ k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C, \
+ k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C, \
+ k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C, \
+ k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C, \
+ k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C, \
+ k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, k61C \
+) \
+KEYMAP_MASTER(MATRIX_LAYER, NUMERIC_NORMAL, NUMERIC_MAX_TEENSY, \
+ k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, KC_NO, KC_NO, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C, \
+ k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, KC_NO, KC_NO, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C, \
+ k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, KC_NO, KC_NO, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C, \
+ k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, KC_NO, KC_NO, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C, \
+ k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, KC_NO, KC_NO, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C, \
+ k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, KC_NO, KC_NO, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, k61C \
+)
+
+// Example Keymap Macros
+
+/*
+#define KEYMAP(MATRIX_LAYER, \
+ k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C, \
+ k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C, \
+ k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C, \
+ k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C, \
+ k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C, \
+ k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, k60B, k60C, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, k61C \
+) \
+KEYMAP_MASTER(MATRIX_LAYER, NUMERIC_MAX_TEENSY, NUMERIC_MAX, \
+ k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C, \
+ k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C, \
+ k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C, \
+ k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C, \
+ k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C, \
+ k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, k60B, k60C, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, k61C \
+)
+*/
+
+/*
+#define KEYMAP(MATRIX_LAYER, \
+ k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, \
+ k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, \
+ k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, \
+ k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, \
+ k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, \
+ k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B \
+) \
+KEYMAP_MASTER(MATRIX_LAYER, NUMERIC_NORMAL, HOMING_MAX_TEENSY, \
+ k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, KC_NO, KC_NO, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, KC_NO, \
+ k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, KC_NO, KC_NO, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, KC_NO, \
+ k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, KC_NO, KC_NO, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, KC_NO, \
+ k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, KC_NO, KC_NO, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, KC_NO, \
+ k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, KC_NO, KC_NO, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, KC_NO, \
+ k601, k602, k603, k604, k605, k606, k607, k608, k609, k60A, KC_NO, KC_NO, k611, k612, k613, k614, k615, k616, k617, k618, k619, k61A, k61B, KC_NO \
+)
+*/
+
+#endif \ No newline at end of file
diff --git a/keyboards/vision_division/keymaps/default/keymap.c b/keyboards/vision_division/keymaps/default/keymap.c
new file mode 100644
index 000000000..3282761c0
--- /dev/null
+++ b/keyboards/vision_division/keymaps/default/keymap.c
@@ -0,0 +1,622 @@
+#include "vision_division.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+#include "led.h"
+
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+ #include "song_list.h"
+#endif
+
+enum keyboard_layers {
+ LAYER_QWERTY = 0,
+ LAYER_UPPER,
+ LAYER_LOWER,
+ LAYER_FUNCTION,
+ LAYER_MOUSE,
+ LAYER_ADJUST,
+};
+enum keyboard_macros {
+ MACRO_QWERTY = 0,
+ MACRO_UPPER,
+ MACRO_LOWER,
+ MACRO_FUNCTION,
+ MACRO_MOUSE,
+ MACRO_TIMBRE_1,
+ MACRO_TIMBRE_2,
+ MACRO_TIMBRE_3,
+ MACRO_TIMBRE_4,
+ MACRO_TEMPO_U,
+ MACRO_TEMPO_D,
+ MACRO_TONE_DEFAULT,
+ MACRO_MUSIC_TOGGLE,
+ MACRO_AUDIO_TOGGLE,
+ MACRO_INC_VOICE,
+ MACRO_DEC_VOICE,
+ MACRO_BACKLIGHT,
+ MACRO_BREATH_TOGGLE,
+ MACRO_BREATH_SPEED_INC,
+ MACRO_BREATH_SPEED_DEC,
+ MACRO_BREATH_DEFAULT,
+ MACRO_MOUSE_MOVE_UL,
+ MACRO_MOUSE_MOVE_UR,
+ MACRO_MOUSE_MOVE_DL,
+ MACRO_MOUSE_MOVE_DR,
+ MACRO_HELP,
+ MACRO_HELP_1,
+ MACRO_HELP_2,
+ MACRO_HELP_3,
+ MACRO_HELP_4,
+ MACRO_HELP_5,
+ MACRO_HELP_6,
+ MACRO_HELP_7,
+ MACRO_HELP_8,
+ MACRO_HELP_9,
+ MACRO_HELP_0,
+ MACRO_GENERAL_1,
+ MACRO_GENERAL_2,
+ MACRO_GENERAL_3,
+ MACRO_GENERAL_4,
+ MACRO_GENERAL_5,
+ MACRO_CURSOR_UL,
+ MACRO_CURSOR_UR,
+ MACRO_CURSOR_DL,
+ MACRO_CURSOR_DR,
+ MACRO_MUTE_APP,
+ MACRO_COPY_CUT,
+};
+
+#define M_QWRTY M(MACRO_QWERTY)
+#define M_UPPER M(MACRO_UPPER)
+#define M_LOWER M(MACRO_LOWER)
+#define M_FUNCT M(MACRO_FUNCTION)
+#define M_MOUSE M(MACRO_MOUSE)
+
+#define TIMBR_1 M(MACRO_TIMBRE_1)
+#define TIMBR_2 M(MACRO_TIMBRE_2)
+#define TIMBR_3 M(MACRO_TIMBRE_3)
+#define TIMBR_4 M(MACRO_TIMBRE_4)
+#define TMPO_UP M(MACRO_TEMPO_U)
+#define TMPO_DN M(MACRO_TEMPO_D)
+#define TMPO_DF M(MACRO_TONE_DEFAULT)
+
+#define VC_UP M(MACRO_INC_VOICE)
+#define VC_DOWN M(MACRO_DEC_VOICE)
+
+#define M_BACKL M(MACRO_BACKLIGHT)
+#define M_BRTOG M(MACRO_BREATH_TOGGLE)
+#define M_BSPDU M(MACRO_BREATH_SPEED_INC)
+#define M_BSPDD M(MACRO_BREATH_SPEED_DEC)
+#define M_BDFLT M(MACRO_BREATH_DEFAULT)
+
+#define M_MS_UL M(MACRO_MOUSE_MOVE_UL)
+#define M_MS_UR M(MACRO_MOUSE_MOVE_UR)
+#define M_MS_DL M(MACRO_MOUSE_MOVE_DL)
+#define M_MS_DR M(MACRO_MOUSE_MOVE_DR)
+
+#define M_HELP M(MACRO_HELP)
+#define M_HELP1 M(MACRO_HELP_1)
+#define M_HELP2 M(MACRO_HELP_2)
+#define M_HELP3 M(MACRO_HELP_3)
+#define M_HELP4 M(MACRO_HELP_4)
+#define M_HELP5 M(MACRO_HELP_5)
+#define M_HELP6 M(MACRO_HELP_6)
+#define M_HELP7 M(MACRO_HELP_7)
+#define M_HELP8 M(MACRO_HELP_8)
+#define M_HELP9 M(MACRO_HELP_9)
+#define M_HELP0 M(MACRO_HELP_0)
+
+#define M_M1 M(MACRO_GENERAL_1)
+#define M_M2 M(MACRO_GENERAL_2)
+#define M_M3 M(MACRO_GENERAL_3)
+#define M_M4 M(MACRO_GENERAL_4)
+#define M_M5 M(MACRO_GENERAL_5)
+
+#define M_UL M(MACRO_CURSOR_UL)
+#define M_UR M(MACRO_CURSOR_UR)
+#define M_DL M(MACRO_CURSOR_DL)
+#define M_DR M(MACRO_CURSOR_DR)
+
+#define M_MUTEA M(MACRO_MUTE_APP)
+
+#define M_CP_CT M(MACRO_COPY_CUT)
+
+#define M_COPY KC_FN1
+
+#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 TG_NKRO MAGIC_TOGGLE_NKRO
+#define OS_SHFT KC_FN0
+
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+#define ________________ _______, _______
+#define XXXXXXXXXXXXXXXX XXXXXXX, XXXXXXX
+
+const matrix_row_t matrix_mask[MATRIX_ROWS] =
+{
+// 1098765432109876543210987654321
+ 0b0000000001111111101111011111111,
+ 0b0000000001111111111111111111111,
+ 0b0000000001111111111111111111111,
+ 0b0000000001111111111111111111111,
+ 0b0000000001010111111111111111111,
+ 0b0000000001111101111111101011111,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] =
+{
+/* LAYER = LAYER_QWERTY
+ .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------.
+ | VOL DN | MUTE | VOL UP | BACKLT | | F1 | F2 | F3 | F4 | XXXXXX | F5 | F6 | F7 | F8 | XXXXXX | F9 | F10 | F11 | F12 | | PRINT | SCR LK | PAUSE | FN |
+ '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
+ .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------.
+ | NUM LK | KP / | KP * | KP - | | ESC | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | = | BACKSP | | INS | HOME | PG UP | M1 |
+ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------|
+ | KP 7 | KP 8 | KP 9 | KP + | | TAB | TAB | Q | W | E | R | T | Y | U | I | O | P | - | \ | | DEL | END | PG DN | M2 |
+ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------|
+ | KP 4 | KP 5 | KP 6 | KP + | | CAP LK | BACKSP | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | o | CP/CT | UNDO | PASTE | M3 |
+ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------|
+ | KP 1 | KP 2 | KP 3 | KP Ent | | LSHIFT | LSHIFT | Z | X | C | V | B | N | M | , | . | / | RSHIFT | RSHIFT | | XXXXXX | UP | XXXXXX | M4 |
+ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------|
+ | KP 0 | KP , | KP . | KP Ent | | LCTRL | XXXXXX | LWIN | XXXXXX | LALT | UPPER | SPACE . SPACE | LOWER | OSHIFT | RALT | APP | XXXXXX | RCTRL | | LEFT | DOWN | RIGHT | M5 |
+ '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
+*/
+KEYMAP(LAYER_QWERTY, \
+ KC_VOLD, KC_MUTE, KC_VOLU, M_BACKL, KC_F1 , KC_F2 , KC_F3 , KC_F4 , XXXXXXX, KC_F5 , KC_F6 , KC_F7 , KC_F8 , XXXXXXX, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PSCR, KC_SLCK, KC_PAUS, M_HELP , \
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_ESC , KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_EQL , KC_BSPC, KC_INS , KC_HOME, KC_PGUP, M_M1 , \
+ KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, KC_TAB , KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_MINS, KC_BSLS, KC_DEL , KC_END , KC_PGDN, M_M2 , \
+ KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_CAPS, KC_BSPC, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , M_CP_CT, SC_UNDO, SC_PSTE, M_M3 , \
+ KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, KC_LSFT, KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_RSFT, XXXXXXX, KC_UP , XXXXXXX, M_M4 , \
+ KC_KP_0, KC_PCMM, KC_PDOT, KC_PENT, KC_LCTL, XXXXXXX, KC_LGUI, XXXXXXX, KC_LALT, M_UPPER, KC_SPC , KC_SPC , M_LOWER, OS_SHFT, KC_RALT, KC_APP , XXXXXXX, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, M_M5 \
+),
+/* LAYER = LAYER_LOWER
+ .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------.
+ | ______ | MUTE A | ______ | ______ | | F13 | F14 | F15 | F16 | XXXXXX | F17 | F18 | F19 | F20 | XXXXXX | F21 | F22 | F23 | F24 | | ______ | ______ | ______ | ______ |
+ '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
+ .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------.
+ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ |
+ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------|
+ | ______ | ______ | ______ | ______ | | ______ | ______ | $ | { | [ | ( | % | # | ) | ] | } | @ | ______ | ______ | | ______ | ______ | ______ | ______ |
+ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------|
+ | ______ | ______ | ______ | ______ | | ______ | ______ | ^ | * | + | - | / | \ | _ | ' | " | ` | ______ | ______ | o | ______ | ______ | ______ | ______ |
+ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------|
+ | ______ | ______ | ______ | ______ | | ______ | ______ | | | & | ! | ~ | ; | : | = | < | > | ? | ______ | ______ | | ______ | ______ | ______ | ______ |
+ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------|
+ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ . ______ | LOWER | ______ | ______ | ______ | XXXXXX | ______ | | ______ | ______ | ______ | ______ |
+ '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
+*/
+KEYMAP(LAYER_LOWER, \
+ _______, M_MUTEA, _______, _______, KC_F13 , KC_F14 , KC_F15 , KC_F16 , XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , XXXXXXX, KC_F21 , KC_F22 , KC_F23 , KC_F24 , _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, KC_DLR , KC_LCBR, KC_LBRC, KC_LPRN, KC_PERC, KC_HASH, KC_RPRN, KC_RBRC, KC_RCBR, KC_AT , _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, KC_CIRC, KC_ASTR, KC_PLUS, KC_MINS, KC_SLSH, KC_BSLS, KC_UNDS, KC_QUOT, KC_DQT , KC_GRV , _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, KC_PIPE, KC_AMPR, KC_EXLM, KC_TILD, KC_SCLN, KC_COLN, KC_EQL , KC_LT , KC_GT , KC_QUES, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, M_LOWER, _______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______ \
+),
+/* LAYER = LAYER_UPPER
+ .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------.
+ | ______ | MUTE A | ______ | ______ | | F13 | F14 | F15 | F16 | XXXXXX | F17 | F18 | F19 | F20 | XXXXXX | F21 | F22 | F23 | F24 | | ______ | ______ | ______ | ______ |
+ '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
+ .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------.
+ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ |
+ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------|
+ | ______ | ______ | ______ | ______ | | ______ | ______ | F1 | F2 | F3 | F4 | NUM LK | KP / | KP 7 | KP 8 | KP 9 | KP - | ______ | ______ | | ______ | ______ | ______ | ______ |
+ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------|
+ | ______ | ______ | ______ | ______ | | ______ | ______ | F5 | F6 | F7 | F8 | CAP LK | KP * | KP 4 | KP 5 | KP 6 | KP + | ______ | ______ | o | ______ | ______ | ______ | ______ |
+ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------|
+ | ______ | ______ | ______ | ______ | | ______ | ______ | F9 | F10 | F11 | F12 | SCR LK | KP 0 | KP 1 | KP 2 | KP 3 | KP Ent | ______ | ______ | | ______ | ______ | ______ | ______ |
+ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------|
+ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | UPPER | KP 0 . KP 0 | ______ | RALT | KP . | KP Ent | XXXXXX | ______ | | ______ | ______ | ______ | ______ |
+ '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
+*/
+KEYMAP(LAYER_UPPER, \
+ _______, M_MUTEA, _______, _______, KC_F13 , KC_F14 , KC_F15 , KC_F16 , XXXXXXX, KC_F17 , KC_F18 , KC_F19 , KC_F20 , XXXXXXX, KC_F21 , KC_F22 , KC_F23 , KC_F24 , _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_NLCK, KC_PSLS, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_CAPS, KC_PAST, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_SLCK, KC_KP_0, KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, M_UPPER, KC_KP_0, KC_KP_0, _______, KC_RALT, KC_PDOT, KC_PENT, XXXXXXX, _______, _______, _______, _______, _______ \
+),
+/* LAYER = LAYER_MOUSE
+ .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------.
+ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ |
+ '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
+ .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------.
+ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | MS AC0 | MS WHU | MS AC2 | MS BT1 |
+ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------|
+ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | MS WHL | MS WHD | MS WHU | MS BT2 |
+ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------|
+ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | o | MS BT1 | MS BT2 | MS BT3 | MS BT3 |
+ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------|
+ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | ______ | | XXXXXX | MS U | XXXXXX | MS BT4 |
+ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------|
+ | ______ | ______ | ______ | ______ | | ______ | ______ | ______ | ______ | ______ | ______ | ______ . ______ | ______ | ______ | ______ | ______ | ______ | ______ | | MS L | MS D | MS R | MS BT5 |
+ '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
+*/
+KEYMAP(LAYER_MOUSE, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_ACL0, KC_WH_U, KC_ACL2, KC_BTN1, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WH_L, KC_WH_D, KC_WH_U, KC_BTN2, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_BTN2, KC_BTN3, KC_BTN3, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, KC_MS_U, XXXXXXX, KC_BTN4, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN5 \
+),
+/* LAYER = LAYER_ADJUST
+ .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------.
+ | VOICE- | AUDIO | VOICE+ | MUSIC | | HELP 1 | HELP 2 | HELP 3 | HELP 4 | XXXXXX | HELP 5 | HELP 6 | HELP 7 | HELP 8 | XXXXXX | HELP 9 | HELP 0 | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+ '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
+ .-----------------------------------. .-----------------------------------------------------------------------------------------------------------------------------. .-----------------------------------.
+ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------|
+ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------|
+ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | o | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| o |--------|--------|--------+--------|
+ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | RESET | XXXXXX | MOUSE | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+ |--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |--------|--------|--------+--------|
+ | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | UPPER | XXXXXX . XXXXXX | LOWER | XXXXXX | XXXXXX | XXXXXX | XXXXXX | XXXXXX | | XXXXXX | XXXXXX | XXXXXX | XXXXXX |
+ '-----------------------------------' '-----------------------------------------------------------------------------------------------------------------------------' '-----------------------------------'
+*/
+KEYMAP(LAYER_ADJUST, \
+ MUV_DE , AU_TOG , MUV_IN , MU_TOG , M_HELP1, M_HELP2, M_HELP3, M_HELP4, XXXXXXX, M_HELP5, M_HELP6, M_HELP7, M_HELP8, XXXXXXX, M_HELP9, M_HELP0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET , XXXXXXX, M_MOUSE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, M_UPPER, XXXXXXX, XXXXXXX, M_LOWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
+),
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_my_startup[][2] = SONG(ODE_TO_JOY);
+float tone_my_goodbye[][2] = SONG(ROCK_A_BYE_BABY);
+
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+
+float tone_audio_on[][2] = SONG(CLOSE_ENCOUNTERS_5_NOTE);
+float tone_music_on[][2] = SONG(DOE_A_DEER);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+float tone_caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND);
+float tone_caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND);
+float tone_numlk_on[][2] = SONG(NUM_LOCK_ON_SOUND);
+float tone_numlk_off[][2] = SONG(NUM_LOCK_OFF_SOUND);
+float tone_scroll_on[][2] = SONG(SCROLL_LOCK_ON_SOUND);
+float tone_scroll_off[][2] = SONG(SCROLL_LOCK_OFF_SOUND);
+
+#endif /* AUDIO_ENABLE */
+
+void persistant_default_layer_set(uint16_t default_layer)
+{
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_MODS_ONESHOT(MOD_LSFT),
+ [1] = ACTION_MACRO_TAP(MACRO_COPY_CUT),
+};
+
+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_HELP_1:
+ // if (record->event.pressed)
+ // {
+ // uprint("H1");
+ // }
+ // break;
+
+ // case MACRO_HELP_2:
+ // if (record->event.pressed)
+ // {
+ // uprint("H2");
+ // }
+ // break;
+
+ // case MACRO_HELP_3:
+ // if (record->event.pressed)
+ // {
+ // uprint("H3");
+ // }
+ // break;
+
+ // case MACRO_HELP_4:
+ // if (record->event.pressed)
+ // {
+ // uprint("H4");
+ // }
+ // break;
+
+ // case MACRO_HELP_5:
+ // if (record->event.pressed)
+ // {
+ // uprint("H5");
+ // }
+ // break;
+
+ // case MACRO_HELP_6:
+ // if (record->event.pressed)
+ // {
+ // uprint("H6");
+ // }
+ // break;
+
+ // case MACRO_HELP_7:
+ // if (record->event.pressed)
+ // {
+ // uprint("H7");
+ // }
+ // break;
+
+ // case MACRO_HELP_8:
+ // if (record->event.pressed)
+ // {
+ // uprint("H8");
+ // }
+ // break;
+
+ // case MACRO_HELP_9:
+ // if (record->event.pressed)
+ // {
+ // uprint("H9");
+ // }
+ // break;
+
+ case MACRO_BREATH_TOGGLE:
+ if (record->event.pressed)
+ {
+ breathing_toggle();
+ }
+ break;
+
+ case MACRO_BREATH_SPEED_INC:
+ if (record->event.pressed)
+ {
+ breathing_speed_inc(1);
+ }
+ break;
+
+ case MACRO_BREATH_SPEED_DEC:
+ if (record->event.pressed)
+ {
+ breathing_speed_dec(1);
+ }
+ break;
+
+ case MACRO_BREATH_DEFAULT:
+ if (record->event.pressed)
+ {
+ breathing_defaults();
+ }
+ break;
+
+ case MACRO_QWERTY:
+ if (record->event.pressed)
+ {
+ persistant_default_layer_set(1UL<<LAYER_QWERTY);
+ }
+ break;
+
+ case MACRO_UPPER:
+ if (record->event.pressed)
+ {
+ layer_on(LAYER_UPPER);
+ breathing_speed_set(2);
+ breathing_pulse();
+ update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
+ }
+ else
+ {
+ layer_off(LAYER_UPPER);
+ update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
+ }
+ break;
+
+ case MACRO_LOWER:
+ if (record->event.pressed)
+ {
+ layer_on(LAYER_LOWER);
+ breathing_speed_set(2);
+ breathing_pulse();
+ update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
+ }
+ else
+ {
+ layer_off(LAYER_LOWER);
+ update_tri_layer(LAYER_LOWER, LAYER_UPPER, LAYER_ADJUST);
+ }
+ break;
+
+ case MACRO_FUNCTION:
+ if (record->event.pressed)
+ {
+ breathing_speed_set(3);
+ breathing_enable();
+ layer_on(LAYER_FUNCTION);
+ }
+ else
+ {
+ breathing_speed_set(1);
+ breathing_self_disable();
+ layer_off(LAYER_FUNCTION);
+ }
+ break;
+
+#ifdef MOUSEKEY_ENABLE
+
+ case MACRO_MOUSE:
+ if (record->event.pressed)
+ {
+ layer_invert(LAYER_MOUSE);
+ }
+ break;
+
+#endif /* MOUSEKEY_ENABLE */
+
+#ifdef AUDIO_ENABLE
+
+ case MACRO_TIMBRE_1:
+ if (record->event.pressed) set_timbre(TIMBRE_12);
+ break;
+
+ case MACRO_TIMBRE_2:
+ if (record->event.pressed) set_timbre(TIMBRE_25);
+ break;
+
+ case MACRO_TIMBRE_3:
+ if (record->event.pressed) set_timbre(TIMBRE_50);
+ break;
+
+ case MACRO_TIMBRE_4:
+ if (record->event.pressed) set_timbre(TIMBRE_75);
+ break;
+
+ case MACRO_TEMPO_U:
+ if (record->event.pressed) increase_tempo(10);
+ break;
+
+ case MACRO_TEMPO_D:
+ if (record->event.pressed) decrease_tempo(10);
+ break;
+
+ case MACRO_TONE_DEFAULT:
+ if (record->event.pressed)
+ {
+ set_timbre(TIMBRE_DEFAULT);
+ set_tempo(TEMPO_DEFAULT);
+ }
+ break;
+
+#endif /* AUDIO_ENABLE */
+
+#ifdef BACKLIGHT_ENABLE
+ case MACRO_BACKLIGHT:
+ if (record->event.pressed)
+ {
+ backlight_step();
+ }
+ break;
+#endif /* BACKLIGHT_ENABLE */
+
+ default:
+ break;
+
+}
+return MACRO_NONE;
+};
+
+#ifdef AUDIO_ENABLE
+
+void matrix_init_user(void)
+{
+ set_voice(default_voice);
+ startup_user();
+ println("Matrix Init");
+}
+
+void led_set_user(uint8_t usb_led)
+{
+ static uint8_t old_usb_led = 0;
+
+ _delay_ms(10); // gets rid of tick
+
+ if (!is_playing_notes())
+ {
+ if ((usb_led & (1<<USB_LED_CAPS_LOCK)) && !(old_usb_led & (1<<USB_LED_CAPS_LOCK)))
+ {
+ // If CAPS LK LED is turning on...
+ PLAY_NOTE_ARRAY(tone_caps_on, false, LEGATO);
+ }
+ else if (!(usb_led & (1<<USB_LED_CAPS_LOCK)) && (old_usb_led & (1<<USB_LED_CAPS_LOCK)))
+ {
+ // If CAPS LK LED is turning off...
+ PLAY_NOTE_ARRAY(tone_caps_off, false, LEGATO);
+ }
+ else if ((usb_led & (1<<USB_LED_NUM_LOCK)) && !(old_usb_led & (1<<USB_LED_NUM_LOCK)))
+ {
+ // If NUM LK LED is turning on...
+ PLAY_NOTE_ARRAY(tone_numlk_on, false, LEGATO);
+ }
+ else if (!(usb_led & (1<<USB_LED_NUM_LOCK)) && (old_usb_led & (1<<USB_LED_NUM_LOCK)))
+ {
+ // If NUM LED is turning off...
+ PLAY_NOTE_ARRAY(tone_numlk_off, false, LEGATO);
+ }
+ else if ((usb_led & (1<<USB_LED_SCROLL_LOCK)) && !(old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
+ {
+ // If SCROLL LK LED is turning on...
+ PLAY_NOTE_ARRAY(tone_scroll_on, false, LEGATO);
+ }
+ else if (!(usb_led & (1<<USB_LED_SCROLL_LOCK)) && (old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
+ {
+ // If SCROLL LED is turning off...
+ PLAY_NOTE_ARRAY(tone_scroll_off, false, LEGATO);
+ }
+ }
+
+ old_usb_led = usb_led;
+}
+
+void startup_user()
+{
+ _delay_ms(10); // gets rid of tick
+ // PLAY_NOTE_ARRAY(tone_my_startup, false, STACCATO);
+}
+
+void shutdown_user()
+{
+ // PLAY_NOTE_ARRAY(tone_my_goodbye, false, STACCATO);
+ _delay_ms(2000);
+ stop_all_notes();
+}
+
+void audio_on_user(void)
+{
+ PLAY_NOTE_ARRAY(tone_audio_on, false, STACCATO);
+}
+
+void music_on_user(void)
+{
+ PLAY_NOTE_ARRAY(tone_music_on, false, STACCATO);
+}
+
+void music_scale_user(void)
+{
+ PLAY_NOTE_ARRAY(music_scale, false, STACCATO);
+}
+
+#endif /* AUDIO_ENABLE */ \ No newline at end of file
diff --git a/keyboards/vision_division/keymaps/default/readme.md b/keyboards/vision_division/keymaps/default/readme.md
new file mode 100644
index 000000000..bb0ed3862
--- /dev/null
+++ b/keyboards/vision_division/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for vision_division \ No newline at end of file
diff --git a/keyboards/vision_division/matrix_types.h b/keyboards/vision_division/matrix_types.h
new file mode 100644
index 000000000..893e5272a
--- /dev/null
+++ b/keyboards/vision_division/matrix_types.h
@@ -0,0 +1,168 @@
+#ifndef MATRIX_TYPES_H
+#define MATRIX_TYPES_H
+
+// Because the vision/division keyboard allows for multiple PCB configurations, the configuration
+// can get tricky. The PCB itself has 12 columns, but to achieve a full sized 14-column keyboard
+// with a 4-column numeric pad on the left and a 3-column homing key cluster on the right, the
+// right PCB must have its rightmost column cut off. Also either the rightmost two columns on the
+// left PCB or the leftmost two columns on the right PCB need to be cut away.
+//
+// _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+// Left Numeric Max = 1 2 3 4 _ 5 6 7 8 9 0 A B C
+// Left Homing Max = 2 3 4 _ 5 6 7 8 9 0 A B C
+// Left Numeric Extended = 1 2 3 4 _ 5 6 7 8 9 0 A B
+// Left Homing Extended = 2 3 4 _ 5 6 7 8 9 0 A B
+// Left Numeric Normal = 1 2 3 4 _ 5 6 7 8 9 0 A
+// Left Homing Normal = 2 3 4 _ 5 6 7 8 9 0 A
+// Right Numeric Max = 1 2 3 4 5 6 7 8 _ 9 A B C
+// Right Homing Max = 1 2 3 4 5 6 7 8 _ 9 A B
+// Right Numeric Extended = 2 3 4 5 6 7 8 _ 9 A B C
+// Right Homing Extended = 2 3 4 5 6 7 8 _ 9 A B
+// Right Numeric Normal = 3 4 5 6 7 8 _ 9 A B C
+// Right Homing Normal = 3 4 5 6 7 8 _ 9 A B
+//
+//
+// A full keyboard would look like this:
+//
+// _Left_Numeric_Max__________|_Right_Homing_Normal
+// 1 2 3 4 _ 5 6 7 8 9 0 A B C|3 4 5 6 7 8 _ 9 A B
+//
+// The ideal full keyboard would use a normal and max rather than two extended because the max
+// size allows for a centered 2U space key.
+
+
+#define MATRIX_TYPE_ABSENT 0
+#define MATRIX_TYPE_NUMERIC_MAX 1
+#define MATRIX_TYPE_HOMING_MAX 2
+#define MATRIX_TYPE_NUMERIC_EXTENDED 3
+#define MATRIX_TYPE_HOMING_EXTENDED 4
+#define MATRIX_TYPE_NUMERIC_NORMAL 5
+#define MATRIX_TYPE_HOMING_NORMAL 6
+#define MATRIX_TYPE_NUMERIC_MAX_TEENSY 7
+#define MATRIX_TYPE_HOMING_MAX_TEENSY 8
+#define MATRIX_TYPE_NUMERIC_EXTENDED_TEENSY 9
+#define MATRIX_TYPE_HOMING_EXTENDED_TEENSY 10
+#define MATRIX_TYPE_NUMERIC_NORMAL_TEENSY 11
+#define MATRIX_TYPE_HOMING_NORMAL_TEENSY 12
+
+
+// Column Length
+
+#define MATRIX_COLS_ABSENT 0
+#define MATRIX_COLS_NUMERIC_MAX 12
+#define MATRIX_COLS_HOMING_MAX 11
+#define MATRIX_COLS_NUMERIC_EXTENDED 11
+#define MATRIX_COLS_HOMING_EXTENDED 10
+#define MATRIX_COLS_NUMERIC_NORMAL 10
+#define MATRIX_COLS_HOMING_NORMAL 9
+#define MATRIX_COLS_NUMERIC_MAX_TEENSY 12
+#define MATRIX_COLS_HOMING_MAX_TEENSY 11
+#define MATRIX_COLS_NUMERIC_EXTENDED_TEENSY 11
+#define MATRIX_COLS_HOMING_EXTENDED_TEENSY 10
+#define MATRIX_COLS_NUMERIC_NORMAL_TEENSY 10
+#define MATRIX_COLS_HOMING_NORMAL_TEENSY 9
+
+// Left PCB Pin assignments
+
+#define MATRIX_COL_PINS_LEFT_ABSENT
+
+#define MATRIX_COL_PINS_LEFT_NUMERIC_MAX C7, C5, C4, A7, A3, A6, A2, A5, A1, A0, A4, E6
+#define MATRIX_COL_PINS_LEFT_HOMING_MAX C5, C4, A7, A3, A6, A2, A5, A1, A0, A4, E6
+#define MATRIX_COL_PINS_LEFT_NUMERIC_EXTENDED C7, C5, C4, A7, A3, A6, A2, A5, A1, A0, A4
+#define MATRIX_COL_PINS_LEFT_HOMING_EXTENDED C5, C4, A7, A3, A6, A2, A5, A1, A0, A4
+#define MATRIX_COL_PINS_LEFT_NUMERIC_NORMAL C7, C5, C4, A7, A3, A6, A2, A5, A1, A0
+#define MATRIX_COL_PINS_LEFT_HOMING_NORMAL C5, C4, A7, A3, A6, A2, A5, A1, A0
+
+#define MATRIX_COL_PINS_LEFT_NUMERIC_MAX_TEENSY C1, C0, E1, E0, F3, F2, F1, F0, B0, B1, B2, B3
+#define MATRIX_COL_PINS_LEFT_HOMING_MAX_TEENSY C0, E1, E0, F3, F2, F1, F0, B0, B1, B2, B3
+#define MATRIX_COL_PINS_LEFT_NUMERIC_EXTENDED_TEENSY C1, C0, E1, E0, F3, F2, F1, F0, B0, B1, B2
+#define MATRIX_COL_PINS_LEFT_HOMING_EXTENDED_TEENSY C0, E1, E0, F3, F2, F1, F0, B0, B1, B2
+#define MATRIX_COL_PINS_LEFT_NUMERIC_NORMAL_TEENSY C1, C0, E1, E0, F3, F2, F1, F0, B0, B1
+#define MATRIX_COL_PINS_LEFT_HOMING_NORMAL_TEENSY C0, E1, E0, F3, F2, F1, F0, B0, B1
+
+// Right PCB Pin assignments
+
+#define MATRIX_COL_PINS_RIGHT_ABSENT
+
+#define MATRIX_COL_PINS_RIGHT_NUMERIC_MAX E6, A4, A0, A1, A5, A2, A6, A3, A7, C4, C5, C7
+#define MATRIX_COL_PINS_RIGHT_HOMING_MAX E6, A4, A0, A1, A5, A2, A6, A3, A7, C4, C5
+#define MATRIX_COL_PINS_RIGHT_NUMERIC_EXTENDED A4, A0, A1, A5, A2, A6, A3, A7, C4, C5, C7
+#define MATRIX_COL_PINS_RIGHT_HOMING_EXTENDED A4, A0, A1, A5, A2, A6, A3, A7, C4, C5
+#define MATRIX_COL_PINS_RIGHT_NUMERIC_NORMAL A0, A1, A5, A2, A6, A3, A7, C4, C5, C7
+#define MATRIX_COL_PINS_RIGHT_HOMING_NORMAL A0, A1, A5, A2, A6, A3, A7, C4, C5
+
+#define MATRIX_COL_PINS_RIGHT_NUMERIC_MAX_TEENSY B3, B2, B1, B0, F0, F1, F2, F3, E0, E1, C0, C1
+#define MATRIX_COL_PINS_RIGHT_HOMING_MAX_TEENSY B3, B2, B1, B0, F0, F1, F2, F3, E0, E1, C0
+#define MATRIX_COL_PINS_RIGHT_NUMERIC_EXTENDED_TEENSY B2, B1, B0, F0, F1, F2, F3, E0, E1, C0, C1
+#define MATRIX_COL_PINS_RIGHT_HOMING_EXTENDED_TEENSY B2, B1, B0, F0, F1, F2, F3, E0, E1, C0
+#define MATRIX_COL_PINS_RIGHT_NUMERIC_NORMAL_TEENSY B1, B0, F0, F1, F2, F3, E0, E1, C0, C1
+#define MATRIX_COL_PINS_RIGHT_HOMING_NORMAL_TEENSY B1, B0, F0, F1, F2, F3, E0, E1, C0
+
+// Fetch Macros
+
+#define GET_PID(LEFT_TYPE, RIGHT_TYPE) ( ( ( MATRIX_TYPE_ ## LEFT_TYPE ) << 8 ) + ( MATRIX_TYPE_ ## RIGHT_TYPE ) )
+#define GET_MATRIX_COL(TYPE) MATRIX_COLS_ ## TYPE
+#define GET_MATRIX_COLS(LEFT_TYPE, RIGHT_TYPE) ( ( GET_MATRIX_COL(LEFT_TYPE) ) + ( GET_MATRIX_COL(RIGHT_TYPE) ) )
+#define GET_MATRIX_COL_PINS(LEFT_TYPE, RIGHT_TYPE) { MATRIX_COL_PINS_LEFT_ ## LEFT_TYPE, MATRIX_COL_PINS_RIGHT_ ## RIGHT_TYPE }
+
+// Specialized Row Macros
+
+#define KEYMAP_ROW_LEFT_ABSENT( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)
+
+#define KEYMAP_ROW_LEFT_NUMERIC_MAX( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_LEFT_HOMING_MAX( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_LEFT_NUMERIC_EXTENDED( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_LEFT_HOMING_EXTENDED( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_LEFT_NUMERIC_NORMAL( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A
+#define KEYMAP_ROW_LEFT_HOMING_NORMAL( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k02, k03, k04, k05, k06, k07, k08, k09, k0A
+#define KEYMAP_ROW_LEFT_NUMERIC_MAX_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_LEFT_HOMING_MAX_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_LEFT_NUMERIC_EXTENDED_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_LEFT_HOMING_EXTENDED_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_LEFT_NUMERIC_NORMAL_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A
+#define KEYMAP_ROW_LEFT_HOMING_NORMAL_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k02, k03, k04, k05, k06, k07, k08, k09, k0A
+
+#define KEYMAP_ROW_RIGHT_ABSENT( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C)
+
+#define KEYMAP_ROW_RIGHT_NUMERIC_MAX( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_RIGHT_HOMING_MAX( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_RIGHT_NUMERIC_EXTENDED( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_RIGHT_HOMING_EXTENDED( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_RIGHT_NUMERIC_NORMAL( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_RIGHT_HOMING_NORMAL( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_RIGHT_NUMERIC_MAX_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_RIGHT_HOMING_MAX_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_RIGHT_NUMERIC_EXTENDED_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_RIGHT_HOMING_EXTENDED_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+#define KEYMAP_ROW_RIGHT_NUMERIC_NORMAL_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C
+#define KEYMAP_ROW_RIGHT_HOMING_NORMAL_TEENSY( k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C) k03, k04, k05, k06, k07, k08, k09, k0A, k0B
+
+// Changable Row Macro
+
+#define _KEYMAP_ROW( _LEFT_TYPE, _RIGHT_TYPE, \
+ k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C \
+) \
+KEYMAP_ROW_LEFT_ ## _LEFT_TYPE( k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C ), \
+KEYMAP_ROW_RIGHT_ ## _RIGHT_TYPE( k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C )
+
+// Changable Master Macro
+
+#define KEYMAP_MASTER(_MATRIX_LAYER, _LEFT_TYPE, _RIGHT_TYPE, \
+ k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C, \
+ k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C, \
+ k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C, \
+ k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C, \
+ k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C, \
+ k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C \
+) \
+[_MATRIX_LAYER] = { \
+ { _KEYMAP_ROW( _LEFT_TYPE, _RIGHT_TYPE, k001, k002, k003, k004, k005, k006, k007, k008, k009, k00A, k00B, k00C, k011, k012, k013, k014, k015, k016, k017, k018, k019, k01A, k01B, k01C ) },\
+ { _KEYMAP_ROW( _LEFT_TYPE, _RIGHT_TYPE, k101, k102, k103, k104, k105, k106, k107, k108, k109, k10A, k10B, k10C, k111, k112, k113, k114, k115, k116, k117, k118, k119, k11A, k11B, k11C ) },\
+ { _KEYMAP_ROW( _LEFT_TYPE, _RIGHT_TYPE, k201, k202, k203, k204, k205, k206, k207, k208, k209, k20A, k20B, k20C, k211, k212, k213, k214, k215, k216, k217, k218, k219, k21A, k21B, k21C ) },\
+ { _KEYMAP_ROW( _LEFT_TYPE, _RIGHT_TYPE, k301, k302, k303, k304, k305, k306, k307, k308, k309, k30A, k30B, k30C, k311, k312, k313, k314, k315, k316, k317, k318, k319, k31A, k31B, k31C ) },\
+ { _KEYMAP_ROW( _LEFT_TYPE, _RIGHT_TYPE, k401, k402, k403, k404, k405, k406, k407, k408, k409, k40A, k40B, k40C, k411, k412, k413, k414, k415, k416, k417, k418, k419, k41A, k41B, k41C ) },\
+ { _KEYMAP_ROW( _LEFT_TYPE, _RIGHT_TYPE, k501, k502, k503, k504, k505, k506, k507, k508, k509, k50A, k50B, k50C, k511, k512, k513, k514, k515, k516, k517, k518, k519, k51A, k51B, k51C ) },\
+}
+
+
+#endif // MATRIX_TYPES_H \ No newline at end of file
diff --git a/keyboards/vision_division/readme.md b/keyboards/vision_division/readme.md
new file mode 100644
index 000000000..de200d7c5
--- /dev/null
+++ b/keyboards/vision_division/readme.md
@@ -0,0 +1,34 @@
+vision_division keyboard firmware
+======================
+
+## Keyboard Info
+
+[See this thread.](https://geekhack.org/index.php?topic=83692.msg2227856#msg2227856)
+
+Vision/Division is a full size or split keyboard that can be customized due to its pcb.
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/vision_division 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 a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant 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 **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` \ No newline at end of file
diff --git a/keyboards/vision_division/rules.mk b/keyboards/vision_division/rules.mk
new file mode 100644
index 000000000..6990960bf
--- /dev/null
+++ b/keyboards/vision_division/rules.mk
@@ -0,0 +1,70 @@
+
+
+# MCU name
+MCU = at90usb1286
+# 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=1024
+
+
+# Build Options
+# 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
+# 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 on B7 by default
+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 \ No newline at end of file
diff --git a/keyboards/vision_division/vision_division.c b/keyboards/vision_division/vision_division.c
new file mode 100644
index 000000000..a0e0f449c
--- /dev/null
+++ b/keyboards/vision_division/vision_division.c
@@ -0,0 +1,68 @@
+#include "vision_division.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK))
+ {
+ // HI
+ DDRD |= (1<<4);
+ PORTD |= (1<<4);
+ }
+ else
+ {
+ // Hi-Z
+ DDRD &= ~(1<<4);
+ PORTD &= ~(1<<4);
+ }
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK))
+ {
+ // HI
+ DDRD |= (1<<5);
+ PORTD |= (1<<5);
+ }
+ else
+ {
+ // Hi-Z
+ DDRD &= ~(1<<5);
+ PORTD &= ~(1<<5);
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK))
+ {
+ // HI
+ DDRD |= (1<<6);
+ PORTD |= (1<<6);
+ }
+ else
+ {
+ // Hi-Z
+ DDRD &= ~(1<<6);
+ PORTD &= ~(1<<6);
+ }
+
+ led_set_user(usb_led);
+}
+
diff --git a/keyboards/vision_division/vision_division.h b/keyboards/vision_division/vision_division.h
new file mode 100644
index 000000000..a1f3195e9
--- /dev/null
+++ b/keyboards/vision_division/vision_division.h
@@ -0,0 +1,6 @@
+#ifndef VISION_DIVISION_H
+#define VISION_DIVISION_H
+
+#include "quantum.h"
+
+#endif
diff --git a/lib/googletest b/lib/googletest
new file mode 160000
+Subproject ec44c6c1675c25b9827aacd08c02433cccde778
diff --git a/message.mk b/message.mk
new file mode 100644
index 000000000..fa051fd71
--- /dev/null
+++ b/message.mk
@@ -0,0 +1,79 @@
+COLOR ?= true
+
+ifeq ($(COLOR),true)
+ NO_COLOR=\033[0m
+ OK_COLOR=\033[32;01m
+ ERROR_COLOR=\033[31;01m
+ WARN_COLOR=\033[33;01m
+ BLUE=\033[0;34m
+ BOLD=\033[1m
+endif
+
+ifneq ($(shell awk --version 2>/dev/null),)
+ AWK=awk
+else
+ AWK=cat && test
+endif
+
+ON_ERROR ?= exit 1
+
+OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR)\n
+ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR)\n
+WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR)\n
+
+TAB_LOG = printf "\n$$LOG\n\n" | $(AWK) '{ sub(/^/," | "); print }'
+TAB_LOG_PLAIN = printf "$$LOG\n"
+AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }'
+AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }'
+PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && $(ON_ERROR)
+PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG)
+PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && $(ON_ERROR)
+PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN)
+PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS)
+BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi;
+MAKE_MSG_FORMAT = $(AWK) '{ printf "%-118s", $$0;}'
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_ERRORS = $(ERROR_COLOR)Make finished with errors\n$(NO_COLOR)
+MSG_BEGIN = -------- begin --------
+MSG_END = -------- end --------
+MSG_SIZE_BEFORE = Size before:
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_BIN = Creating binary load file for Flash:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_COMPILING_CPP = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+MSG_CREATING_LIBRARY = Creating library:
+MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \
+ Some git sub-modules are out of date or modified, please consider runnning:$(BOLD)\n\
+ git submodule sync --recursive\n\
+ git submodule update --init --recursive$(NO_COLOR)\n\n\
+ You can ignore this warning if you are not compiling any ChibiOS keyboards,\n\
+ or if you have modified the ChibiOS libraries yourself. \n\n
+MSG_NO_CMP = $(ERROR_COLOR)Error:$(NO_COLOR)$(BOLD) cmp command not found, please install diffutils\n$(NO_COLOR)
+
+define GENERATE_MSG_MAKE_KB
+ MSG_MAKE_KB_ACTUAL := Making $$(KB_SP) with keymap $(BOLD)$$(CURRENT_KM)$(NO_COLOR)
+ ifneq ($$(MAKE_TARGET),)
+ MSG_MAKE_KB_ACTUAL += and target $(BOLD)$$(MAKE_TARGET)$(NO_COLOR)
+ endif
+endef
+MSG_MAKE_KB = $(eval $(call GENERATE_MSG_MAKE_KB))$(MSG_MAKE_KB_ACTUAL)
+define GENERATE_MSG_MAKE_TEST
+ MSG_MAKE_TEST_ACTUAL := Making test $(BOLD)$(TEST_NAME)$(NO_COLOR)
+ ifneq ($$(MAKE_TARGET),)
+ MSG_MAKE_TEST_ACTUAL += with target $(BOLD)$$(MAKE_TARGET)$(NO_COLOR)
+ endif
+endef
+MSG_MAKE_TEST = $(eval $(call GENERATE_MSG_MAKE_TEST))$(MSG_MAKE_TEST_ACTUAL)
+MSG_TEST = Testing $(BOLD)$(TEST_NAME)$(NO_COLOR)
diff --git a/quantum/api.c b/quantum/api.c
new file mode 100644
index 000000000..4ca3b9676
--- /dev/null
+++ b/quantum/api.c
@@ -0,0 +1,178 @@
+#include "api.h"
+#include "quantum.h"
+
+void dword_to_bytes(uint32_t dword, uint8_t * bytes) {
+ bytes[0] = (dword >> 24) & 0xFF;
+ bytes[1] = (dword >> 16) & 0xFF;
+ bytes[2] = (dword >> 8) & 0xFF;
+ bytes[3] = (dword >> 0) & 0xFF;
+}
+
+uint32_t bytes_to_dword(uint8_t * bytes, uint8_t index) {
+ return ((uint32_t)bytes[index + 0] << 24) | ((uint32_t)bytes[index + 1] << 16) | ((uint32_t)bytes[index + 2] << 8) | (uint32_t)bytes[index + 3];
+}
+
+__attribute__ ((weak))
+bool process_api_quantum(uint8_t length, uint8_t * data) {
+ return process_api_keyboard(length, data);
+}
+
+__attribute__ ((weak))
+bool process_api_keyboard(uint8_t length, uint8_t * data) {
+ return process_api_user(length, data);
+}
+
+__attribute__ ((weak))
+bool process_api_user(uint8_t length, uint8_t * data) {
+ return true;
+}
+
+void process_api(uint16_t length, uint8_t * data) {
+ // SEND_STRING("\nRX: ");
+ // for (uint8_t i = 0; i < length; i++) {
+ // send_byte(data[i]);
+ // SEND_STRING(" ");
+ // }
+ if (!process_api_quantum(length, data))
+ return;
+
+ switch (data[0]) {
+ case MT_SET_DATA:
+ switch (data[1]) {
+ case DT_DEFAULT_LAYER: {
+ eeconfig_update_default_layer(data[2]);
+ default_layer_set((uint32_t)(data[2]));
+ break;
+ }
+ case DT_KEYMAP_OPTIONS: {
+ eeconfig_update_keymap(data[2]);
+ break;
+ }
+ case DT_RGBLIGHT: {
+ #ifdef RGBLIGHT_ENABLE
+ uint32_t rgblight = bytes_to_dword(data, 2);
+ rgblight_update_dword(rgblight);
+ #endif
+ break;
+ }
+ }
+ case MT_GET_DATA:
+ switch (data[1]) {
+ case DT_HANDSHAKE: {
+ MT_GET_DATA_ACK(DT_HANDSHAKE, NULL, 0);
+ break;
+ }
+ case DT_DEBUG: {
+ uint8_t debug_bytes[1] = { eeprom_read_byte(EECONFIG_DEBUG) };
+ MT_GET_DATA_ACK(DT_DEBUG, debug_bytes, 1);
+ break;
+ }
+ case DT_DEFAULT_LAYER: {
+ uint8_t default_bytes[1] = { eeprom_read_byte(EECONFIG_DEFAULT_LAYER) };
+ MT_GET_DATA_ACK(DT_DEFAULT_LAYER, default_bytes, 1);
+ break;
+ }
+ case DT_CURRENT_LAYER: {
+ uint8_t layer_state_bytes[4];
+ dword_to_bytes(layer_state, layer_state_bytes);
+ MT_GET_DATA_ACK(DT_CURRENT_LAYER, layer_state_bytes, 4);
+ break;
+ }
+ case DT_AUDIO: {
+ #ifdef AUDIO_ENABLE
+ uint8_t audio_bytes[1] = { eeprom_read_byte(EECONFIG_AUDIO) };
+ MT_GET_DATA_ACK(DT_AUDIO, audio_bytes, 1);
+ #else
+ MT_GET_DATA_ACK(DT_AUDIO, NULL, 0);
+ #endif
+ break;
+ }
+ case DT_BACKLIGHT: {
+ #ifdef BACKLIGHT_ENABLE
+ uint8_t backlight_bytes[1] = { eeprom_read_byte(EECONFIG_BACKLIGHT) };
+ MT_GET_DATA_ACK(DT_BACKLIGHT, backlight_bytes, 1);
+ #else
+ MT_GET_DATA_ACK(DT_BACKLIGHT, NULL, 0);
+ #endif
+ break;
+ }
+ case DT_RGBLIGHT: {
+ #ifdef RGBLIGHT_ENABLE
+ uint8_t rgblight_bytes[4];
+ dword_to_bytes(eeconfig_read_rgblight(), rgblight_bytes);
+ MT_GET_DATA_ACK(DT_RGBLIGHT, rgblight_bytes, 4);
+ #else
+ MT_GET_DATA_ACK(DT_RGBLIGHT, NULL, 0);
+ #endif
+ break;
+ }
+ case DT_KEYMAP_OPTIONS: {
+ uint8_t keymap_bytes[1] = { eeconfig_read_keymap() };
+ MT_GET_DATA_ACK(DT_KEYMAP_OPTIONS, keymap_bytes, 1);
+ break;
+ }
+ case DT_KEYMAP_SIZE: {
+ uint8_t keymap_size[2] = {MATRIX_ROWS, MATRIX_COLS};
+ MT_GET_DATA_ACK(DT_KEYMAP_SIZE, keymap_size, 2);
+ break;
+ }
+ case DT_KEYMAP: {
+ uint8_t keymap_data[MATRIX_ROWS * MATRIX_COLS * 4 + 3];
+ keymap_data[0] = data[2];
+ keymap_data[1] = MATRIX_ROWS;
+ keymap_data[2] = MATRIX_COLS;
+ for (int i = 0; i < MATRIX_ROWS; i++) {
+ for (int j = 0; j < MATRIX_COLS; j++) {
+ keymap_data[3 + (i*MATRIX_COLS*2) + (j*2)] = pgm_read_word(&keymaps[data[2]][i][j]) >> 8;
+ keymap_data[3 + (i*MATRIX_COLS*2) + (j*2) + 1] = pgm_read_word(&keymaps[data[2]][i][j]) & 0xFF;
+ }
+ }
+ MT_GET_DATA_ACK(DT_KEYMAP, keymap_data, MATRIX_ROWS * MATRIX_COLS * 4 + 3);
+ // uint8_t keymap_data[5];
+ // keymap_data[0] = data[2];
+ // keymap_data[1] = data[3];
+ // keymap_data[2] = data[4];
+ // keymap_data[3] = pgm_read_word(&keymaps[data[2]][data[3]][data[4]]) >> 8;
+ // keymap_data[4] = pgm_read_word(&keymaps[data[2]][data[3]][data[4]]) & 0xFF;
+
+ // MT_GET_DATA_ACK(DT_KEYMAP, keymap_data, 5);
+ break;
+ }
+ default:
+ break;
+ }
+ break;
+ case MT_SET_DATA_ACK:
+ case MT_GET_DATA_ACK:
+ break;
+ case MT_SEND_DATA:
+ break;
+ case MT_SEND_DATA_ACK:
+ break;
+ case MT_EXE_ACTION:
+ break;
+ case MT_EXE_ACTION_ACK:
+ break;
+ case MT_TYPE_ERROR:
+ break;
+ default: ; // command not recognised
+ SEND_BYTES(MT_TYPE_ERROR, DT_NONE, data, length);
+ break;
+
+ // #ifdef RGBLIGHT_ENABLE
+ // case 0x27: ; // RGB LED functions
+ // switch (*data++) {
+ // case 0x00: ; // Update HSV
+ // rgblight_sethsv((data[0] << 8 | data[1]) % 360, data[2], data[3]);
+ // break;
+ // case 0x01: ; // Update RGB
+ // break;
+ // case 0x02: ; // Update mode
+ // rgblight_mode(data[0]);
+ // break;
+ // }
+ // break;
+ // #endif
+ }
+
+} \ No newline at end of file
diff --git a/quantum/api.h b/quantum/api.h
new file mode 100644
index 000000000..00dcdb895
--- /dev/null
+++ b/quantum/api.h
@@ -0,0 +1,59 @@
+#ifndef _API_H_
+#define _API_H_
+
+#include "lufa.h"
+
+enum MESSAGE_TYPE {
+ MT_GET_DATA = 0x10, // Get data from keyboard
+ MT_GET_DATA_ACK = 0x11, // returned data to process (ACK)
+ MT_SET_DATA = 0x20, // Set data on keyboard
+ MT_SET_DATA_ACK = 0x21, // returned data to confirm (ACK)
+ MT_SEND_DATA = 0x30, // Sending data/action from keyboard
+ MT_SEND_DATA_ACK = 0x31, // returned data/action confirmation (ACK)
+ MT_EXE_ACTION = 0x40, // executing actions on keyboard
+ MT_EXE_ACTION_ACK =0x41, // return confirmation/value (ACK)
+ MT_TYPE_ERROR = 0x80 // type not recofgnised (ACK)
+};
+
+enum DATA_TYPE {
+ DT_NONE = 0x00,
+ DT_HANDSHAKE,
+ DT_DEFAULT_LAYER,
+ DT_CURRENT_LAYER,
+ DT_KEYMAP_OPTIONS,
+ DT_BACKLIGHT,
+ DT_RGBLIGHT,
+ DT_UNICODE,
+ DT_DEBUG,
+ DT_AUDIO,
+ DT_QUANTUM_ACTION,
+ DT_KEYBOARD_ACTION,
+ DT_USER_ACTION,
+ DT_KEYMAP_SIZE,
+ DT_KEYMAP
+};
+
+void dword_to_bytes(uint32_t dword, uint8_t * bytes);
+uint32_t bytes_to_dword(uint8_t * bytes, uint8_t index);
+
+#define MT_GET_DATA(data_type, data, length) SEND_BYTES(MT_GET_DATA, data_type, data, length)
+#define MT_GET_DATA_ACK(data_type, data, length) SEND_BYTES(MT_GET_DATA_ACK, data_type, data, length)
+#define MT_SET_DATA(data_type, data, length) SEND_BYTES(MT_SET_DATA, data_type, data, length)
+#define MT_SET_DATA_ACK(data_type, data, length) SEND_BYTES(MT_SET_DATA_ACK, data_type, data, length)
+#define MT_SEND_DATA(data_type, data, length) SEND_BYTES(MT_SEND_DATA, data_type, data, length)
+#define MT_SEND_DATA_ACK(data_type, data, length) SEND_BYTES(MT_SEND_DATA_ACK, data_type, data, length)
+#define MT_EXE_ACTION(data_type, data, length) SEND_BYTES(MT_EXE_ACTION, data_type, data, length)
+#define MT_EXE_ACTION_ACK(data_type, data, length) SEND_BYTES(MT_EXE_ACTION_ACK, data_type, data, length)
+
+void process_api(uint16_t length, uint8_t * data);
+
+__attribute__ ((weak))
+bool process_api_quantum(uint8_t length, uint8_t * data);
+
+__attribute__ ((weak))
+bool process_api_keyboard(uint8_t length, uint8_t * data);
+
+__attribute__ ((weak))
+bool process_api_user(uint8_t length, uint8_t * data);
+
+#endif \ No newline at end of file
diff --git a/quantum/api/api_sysex.c b/quantum/api/api_sysex.c
new file mode 100644
index 000000000..a4a554e76
--- /dev/null
+++ b/quantum/api/api_sysex.c
@@ -0,0 +1,29 @@
+#include "api_sysex.h"
+
+void send_bytes_sysex(uint8_t message_type, uint8_t data_type, uint8_t * bytes, uint16_t length) {
+ // SEND_STRING("\nTX: ");
+ // for (uint8_t i = 0; i < length; i++) {
+ // send_byte(bytes[i]);
+ // SEND_STRING(" ");
+ // }
+ uint8_t * precode = malloc(sizeof(uint8_t) * (length + 2));
+ precode[0] = message_type;
+ precode[1] = data_type;
+ memcpy(precode + 2, bytes, length);
+ uint8_t * encoded = malloc(sizeof(uint8_t) * (sysex_encoded_length(length + 2)));
+ uint16_t encoded_length = sysex_encode(encoded, precode, length + 2);
+ uint8_t * array = malloc(sizeof(uint8_t) * (encoded_length + 5));
+ array[0] = 0xF0;
+ array[1] = 0x00;
+ array[2] = 0x00;
+ array[3] = 0x00;
+ array[encoded_length + 4] = 0xF7;
+ memcpy(array + 4, encoded, encoded_length);
+ midi_send_array(&midi_device, encoded_length + 5, array);
+
+ // SEND_STRING("\nTD: ");
+ // for (uint8_t i = 0; i < encoded_length + 5; i++) {
+ // send_byte(array[i]);
+ // SEND_STRING(" ");
+ // }
+} \ No newline at end of file
diff --git a/quantum/api/api_sysex.h b/quantum/api/api_sysex.h
new file mode 100644
index 000000000..b947b60e5
--- /dev/null
+++ b/quantum/api/api_sysex.h
@@ -0,0 +1,10 @@
+#ifndef _API_SYSEX_H_
+#define _API_SYSEX_H_
+
+#include "api.h"
+
+void send_bytes_sysex(uint8_t message_type, uint8_t data_type, uint8_t * bytes, uint16_t length);
+
+#define SEND_BYTES(mt, dt, b, l) send_bytes_sysex(mt, dt, b, l)
+
+#endif \ No newline at end of file
diff --git a/quantum/audio/song_list.h b/quantum/audio/song_list.h
index fc6fcdeef..8022ca672 100644
--- a/quantum/audio/song_list.h
+++ b/quantum/audio/song_list.h
@@ -28,6 +28,14 @@
Q__NOTE(_E4), Q__NOTE(_C4), \
Q__NOTE(_E4),
+/* Requires: PLAY_NOTE_ARRAY(..., ..., STACCATO); */
+#define IN_LIKE_FLINT \
+ E__NOTE(_AS4), E__NOTE(_AS4), QD_NOTE(_B4), \
+ E__NOTE(_AS4), E__NOTE(_B4), QD_NOTE(_CS4), \
+ E__NOTE(_B4), E__NOTE(_CS4), QD_NOTE(_DS4), \
+ E__NOTE(_CS4), E__NOTE(_B4), QD_NOTE(_AS4), \
+ E__NOTE(_AS4), E__NOTE(_AS4), QD_NOTE(_B4),
+
#define GOODBYE_SOUND \
E__NOTE(_E7), \
E__NOTE(_A6), \
diff --git a/quantum/audio/voices.c b/quantum/audio/voices.c
index 6d4172a06..19f7b646e 100644
--- a/quantum/audio/voices.c
+++ b/quantum/audio/voices.c
@@ -18,7 +18,7 @@ void voice_iterate() {
}
void voice_deiterate() {
- voice = (voice - 1) % number_of_voices;
+ voice = (voice - 1 + number_of_voices) % number_of_voices;
}
float voice_envelope(float frequency) {
@@ -31,6 +31,27 @@ float voice_envelope(float frequency) {
polyphony_rate = 0;
break;
+ case something:
+ polyphony_rate = 0;
+ switch (compensated_index) {
+ case 0 ... 9:
+ note_timbre = TIMBRE_12;
+ break;
+
+ case 10 ... 19:
+ note_timbre = TIMBRE_25;
+ break;
+
+ case 20 ... 200:
+ note_timbre = .25 + .125 + pow(((float)compensated_index - 20) / (200 - 20), 2)*.125;
+ break;
+
+ default:
+ note_timbre = .25;
+ break;
+ }
+ break;
+
case butts_fader:
polyphony_rate = 0;
switch (compensated_index) {
diff --git a/quantum/audio/voices.h b/quantum/audio/voices.h
index b2495b23b..b43def3d7 100644
--- a/quantum/audio/voices.h
+++ b/quantum/audio/voices.h
@@ -11,6 +11,7 @@ float voice_envelope(float frequency);
typedef enum {
default_voice,
+ something,
butts_fader,
octave_crunch,
duty_osc,
diff --git a/quantum/config_common.h b/quantum/config_common.h
index 09a4fe701..17c11faeb 100644
--- a/quantum/config_common.h
+++ b/quantum/config_common.h
@@ -5,46 +5,56 @@
#define COL2ROW 0
#define ROW2COL 1
/* I/O pins */
-#define B0 0x30
-#define B1 0x31
-#define B2 0x32
-#define B3 0x33
-#define B4 0x34
-#define B5 0x35
-#define B6 0x36
-#define B7 0x37
-#define C0 0x60
-#define C1 0x61
-#define C2 0x62
-#define C3 0x63
-#define C4 0x64
-#define C5 0x65
-#define C6 0x66
-#define C7 0x67
-#define D0 0x90
-#define D1 0x91
-#define D2 0x92
-#define D3 0x93
-#define D4 0x94
-#define D5 0x95
-#define D6 0x96
-#define D7 0x97
-#define E0 0xC0
-#define E1 0xC1
-#define E2 0xC2
-#define E3 0xC3
-#define E4 0xC4
-#define E5 0xC5
-#define E6 0xC6
-#define E7 0xC7
-#define F0 0xF0
-#define F1 0xF1
-#define F2 0xF2
-#define F3 0xF3
-#define F4 0xF4
-#define F5 0xF5
-#define F6 0xF6
-#define F7 0xF7
+#ifndef F0
+ #define B0 0x30
+ #define B1 0x31
+ #define B2 0x32
+ #define B3 0x33
+ #define B4 0x34
+ #define B5 0x35
+ #define B6 0x36
+ #define B7 0x37
+ #define C0 0x60
+ #define C1 0x61
+ #define C2 0x62
+ #define C3 0x63
+ #define C4 0x64
+ #define C5 0x65
+ #define C6 0x66
+ #define C7 0x67
+ #define D0 0x90
+ #define D1 0x91
+ #define D2 0x92
+ #define D3 0x93
+ #define D4 0x94
+ #define D5 0x95
+ #define D6 0x96
+ #define D7 0x97
+ #define E0 0xC0
+ #define E1 0xC1
+ #define E2 0xC2
+ #define E3 0xC3
+ #define E4 0xC4
+ #define E5 0xC5
+ #define E6 0xC6
+ #define E7 0xC7
+ #define F0 0xF0
+ #define F1 0xF1
+ #define F2 0xF2
+ #define F3 0xF3
+ #define F4 0xF4
+ #define F5 0xF5
+ #define F6 0xF6
+ #define F7 0xF7
+ #define A0 0x00
+ #define A1 0x01
+ #define A2 0x02
+ #define A3 0x03
+ #define A4 0x04
+ #define A5 0x05
+ #define A6 0x06
+ #define A7 0x07
+#endif
/* USART configuration */
#ifdef BLUETOOTH_ENABLE
@@ -67,53 +77,7 @@
} while(0)
# else
# error "USART configuration is needed."
-#endif
-
-// I'm fairly sure these aren't needed, but oh well - Jack
-
-/*
- * 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
#endif
#endif
diff --git a/quantum/dynamic_macro.h b/quantum/dynamic_macro.h
new file mode 100644
index 000000000..e6dbc5b9c
--- /dev/null
+++ b/quantum/dynamic_macro.h
@@ -0,0 +1,231 @@
+/* Author: Wojciech Siewierski < wojciech dot siewierski at onet dot pl > */
+#ifndef DYNAMIC_MACROS_H
+#define DYNAMIC_MACROS_H
+
+#include "action_layer.h"
+
+#ifndef DYNAMIC_MACRO_SIZE
+/* May be overridden with a custom value. Be aware that the effective
+ * macro length is half of this value: each keypress is recorded twice
+ * because of the down-event and up-event. This is not a bug, it's the
+ * intended behavior.
+ *
+ * Usually it should be fine to set the macro size to at least 256 but
+ * there have been reports of it being too much in some users' cases,
+ * so 128 is considered a safe default.
+ */
+#define DYNAMIC_MACRO_SIZE 128
+#endif
+
+/* DYNAMIC_MACRO_RANGE must be set as the last element of user's
+ * "planck_keycodes" enum prior to including this header. This allows
+ * us to 'extend' it.
+ */
+enum dynamic_macro_keycodes {
+ DYN_REC_START1 = DYNAMIC_MACRO_RANGE,
+ DYN_REC_START2,
+ DYN_MACRO_PLAY1,
+ DYN_MACRO_PLAY2,
+};
+
+/* Blink the LEDs to notify the user about some event. */
+void dynamic_macro_led_blink(void)
+{
+ backlight_toggle();
+ _delay_ms(100);
+ backlight_toggle();
+}
+
+/**
+ * Start recording of the dynamic macro.
+ *
+ * @param[out] macro_pointer The new macro buffer iterator.
+ * @param[in] macro_buffer The macro buffer used to initialize macro_pointer.
+ */
+void dynamic_macro_record_start(
+ keyrecord_t **macro_pointer, keyrecord_t *macro_buffer)
+{
+ dynamic_macro_led_blink();
+
+ clear_keyboard();
+ layer_clear();
+ *macro_pointer = macro_buffer;
+}
+
+/**
+ * Play the dynamic macro.
+ *
+ * @param macro_buffer[in] The beginning of the macro buffer being played.
+ * @param macro_end[in] The element after the last macro buffer element.
+ * @param direction[in] Either +1 or -1, which way to iterate the buffer.
+ */
+void dynamic_macro_play(
+ keyrecord_t *macro_buffer, keyrecord_t *macro_end, int8_t direction)
+{
+ uint32_t saved_layer_state = layer_state;
+
+ clear_keyboard();
+ layer_clear();
+
+ while (macro_buffer != macro_end) {
+ process_record(macro_buffer);
+ macro_buffer += direction;
+ }
+
+ clear_keyboard();
+
+ layer_state = saved_layer_state;
+}
+
+/**
+ * Record a single key in a dynamic macro.
+ *
+ * @param macro_pointer[in,out] The current buffer position.
+ * @param macro_end2[in] The end of the other macro which shouldn't be overwritten.
+ * @param direction[in] Either +1 or -1, which way to iterate the buffer.
+ * @param record[in] The current keypress.
+ */
+void dynamic_macro_record_key(
+ keyrecord_t **macro_pointer,
+ keyrecord_t *macro_end2,
+ int8_t direction,
+ keyrecord_t *record)
+{
+ if (*macro_pointer + direction != macro_end2) {
+ **macro_pointer = *record;
+ *macro_pointer += direction;
+ } else {
+ /* Notify about the end of buffer. The blinks are paired
+ * because they should happen on both down and up events. */
+ backlight_toggle();
+ }
+}
+
+/**
+ * End recording of the dynamic macro. Essentially just update the
+ * pointer to the end of the macro.
+ */
+void dynamic_macro_record_end(keyrecord_t *macro_pointer, keyrecord_t **macro_end)
+{
+ dynamic_macro_led_blink();
+
+ *macro_end = macro_pointer;
+}
+
+/* Handle the key events related to the dynamic macros. Should be
+ * called from process_record_user() like this:
+ *
+ * bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ * if (!process_record_dynamic_macro(keycode, record)) {
+ * return false;
+ * }
+ * <...THE REST OF THE FUNCTION...>
+ * }
+ */
+bool process_record_dynamic_macro(uint16_t keycode, keyrecord_t *record)
+{
+ /* Both macros use the same buffer but read/write on different
+ * ends of it.
+ *
+ * Macro1 is written left-to-right starting from the beginning of
+ * the buffer.
+ *
+ * Macro2 is written right-to-left starting from the end of the
+ * buffer.
+ *
+ * &macro_buffer macro_end
+ * v v
+ * +------------------------------------------------------------+
+ * |>>>>>> MACRO1 >>>>>>| |<<<<<<<<<<<<< MACRO2 <<<<<<<<<<<<<|
+ * +------------------------------------------------------------+
+ * ^ ^
+ * r_macro_end r_macro_buffer
+ *
+ * During the recording when one macro encounters the end of the
+ * other macro, the recording is stopped. Apart from this, there
+ * are no arbitrary limits for the macros' length in relation to
+ * each other: for example one can either have two medium sized
+ * macros or one long macro and one short macro. Or even one empty
+ * and one using the whole buffer.
+ */
+ static keyrecord_t macro_buffer[DYNAMIC_MACRO_SIZE];
+
+ /* Pointer to the first buffer element after the first macro.
+ * Initially points to the very beginning of the buffer since the
+ * macro is empty. */
+ static keyrecord_t *macro_end = macro_buffer;
+
+ /* The other end of the macro buffer. Serves as the beginning of
+ * the second macro. */
+ static keyrecord_t *const r_macro_buffer = macro_buffer + DYNAMIC_MACRO_SIZE - 1;
+
+ /* Like macro_end but for the second macro. */
+ static keyrecord_t *r_macro_end = r_macro_buffer;
+
+ /* A persistent pointer to the current macro position (iterator)
+ * used during the recording. */
+ static keyrecord_t *macro_pointer = NULL;
+
+ /* 0 - no macro is being recorded right now
+ * 1,2 - either macro 1 or 2 is being recorded */
+ static uint8_t macro_id = 0;
+
+ if (macro_id == 0) {
+ /* No macro recording in progress. */
+ if (!record->event.pressed) {
+ switch (keycode) {
+ case DYN_REC_START1:
+ dynamic_macro_record_start(&macro_pointer, macro_buffer);
+ macro_id = 1;
+ return false;
+ case DYN_REC_START2:
+ dynamic_macro_record_start(&macro_pointer, r_macro_buffer);
+ macro_id = 2;
+ return false;
+ case DYN_MACRO_PLAY1:
+ dynamic_macro_play(macro_buffer, macro_end, +1);
+ return false;
+ case DYN_MACRO_PLAY2:
+ dynamic_macro_play(r_macro_buffer, r_macro_end, -1);
+ return false;
+ }
+ }
+ } else {
+ /* A macro is being recorded right now. */
+ switch (keycode) {
+ case MO(_DYN):
+ /* Use the layer key used to access the macro recording as
+ * a stop button. */
+ if (record->event.pressed) { /* Ignore the initial release
+ * just after the recoding
+ * starts. */
+ switch (macro_id) {
+ case 1:
+ dynamic_macro_record_end(macro_pointer, &macro_end);
+ break;
+ case 2:
+ dynamic_macro_record_end(macro_pointer, &r_macro_end);
+ break;
+ }
+ macro_id = 0;
+ }
+ return false;
+ default:
+ /* Store the key in the macro buffer and process it normally. */
+ switch (macro_id) {
+ case 1:
+ dynamic_macro_record_key(&macro_pointer, r_macro_end, +1, record);
+ break;
+ case 2:
+ dynamic_macro_record_key(&macro_pointer, macro_end, -1, record);
+ break;
+ }
+ return true;
+ break;
+ }
+ }
+
+ return true;
+}
+
+#endif
diff --git a/quantum/keycode_config.h b/quantum/keycode_config.h
index 6216eefc9..c15b0d32f 100644
--- a/quantum/keycode_config.h
+++ b/quantum/keycode_config.h
@@ -1,6 +1,9 @@
#include "eeconfig.h"
#include "keycode.h"
+#ifndef KEYCODE_CONFIG_H
+#define KEYCODE_CONFIG_H
+
uint16_t keycode_config(uint16_t keycode);
/* NOTE: Not portable. Bit field order depends on implementation */
@@ -19,3 +22,5 @@ typedef union {
} keymap_config_t;
extern keymap_config_t keymap_config;
+
+#endif /* KEYCODE_CONFIG_H */
diff --git a/quantum/keymap.h b/quantum/keymap.h
index a15865183..ae56d16c7 100644
--- a/quantum/keymap.h
+++ b/quantum/keymap.h
@@ -84,6 +84,10 @@ enum quantum_keycodes {
QK_MOD_TAP_MAX = 0x6FFF,
QK_TAP_DANCE = 0x7100,
QK_TAP_DANCE_MAX = 0x71FF,
+#ifdef UNICODEMAP_ENABLE
+ QK_UNICODE_MAP = 0x7800,
+ QK_UNICODE_MAP_MAX = 0x7FFF,
+#endif
#ifdef UNICODE_ENABLE
QK_UNICODE = 0x8000,
QK_UNICODE_MAX = 0xFFFF,
@@ -111,6 +115,7 @@ enum quantum_keycodes {
MAGIC_UNSWAP_BACKSLASH_BACKSPACE,
MAGIC_UNHOST_NKRO,
MAGIC_UNSWAP_ALT_GUI,
+ MAGIC_TOGGLE_NKRO,
// Leader key
#ifndef DISABLE_LEADER
@@ -156,16 +161,16 @@ enum quantum_keycodes {
BL_INC,
BL_TOGG,
BL_STEP,
-
- // RGB functionality
- RGB_TOG,
- RGB_MOD,
- RGB_HUI,
- RGB_HUD,
- RGB_SAI,
- RGB_SAD,
- RGB_VAI,
- RGB_VAD,
+
+ // RGB functionality
+ RGB_TOG,
+ RGB_MOD,
+ RGB_HUI,
+ RGB_HUD,
+ RGB_SAI,
+ RGB_SAD,
+ RGB_VAI,
+ RGB_VAD,
// Left shift, open paren
KC_LSPO,
@@ -173,6 +178,10 @@ enum quantum_keycodes {
// Right shift, close paren
KC_RSPC,
+ // Printing
+ PRINT_ON,
+ PRINT_OFF,
+
// always leave at the end
SAFE_RANGE
};
@@ -190,6 +199,7 @@ enum quantum_keycodes {
#define HYPR(kc) (kc | QK_LCTL | QK_LSFT | QK_LALT | QK_LGUI)
#define MEH(kc) (kc | QK_LCTL | QK_LSFT | QK_LALT)
#define LCAG(kc) (kc | QK_LCTL | QK_LALT | QK_LGUI)
+#define ALTG(kc) (kc | QK_RCTL | QK_RALT)
#define MOD_HYPR 0xf
#define MOD_MEH 0x7
@@ -294,7 +304,10 @@ enum quantum_keycodes {
// ON_PRESS = 1
// ON_RELEASE = 2
// Unless you have a good reason not to do so, prefer ON_PRESS (1) as your default.
-#define TO(layer, when) (layer | QK_TO | (when << 0x4))
+// In fact, we changed it to assume ON_PRESS for sanity/simplicity. If needed, you can add your own
+// keycode modeled after the old version, kept below for this.
+/* #define TO(layer, when) (layer | QK_TO | (when << 0x4)) */
+#define TO(layer) (layer | QK_TO | (ON_PRESS << 0x4))
// Momentary switch layer - 256 layer max
#define MO(layer) (layer | QK_MOMENTARY)
@@ -309,7 +322,7 @@ enum quantum_keycodes {
#define OSL(layer) (layer | QK_ONE_SHOT_LAYER)
// One-shot mod
-#define OSM(layer) (layer | QK_ONE_SHOT_MOD)
+#define OSM(mod) (mod | QK_ONE_SHOT_MOD)
// M-od, T-ap - 256 keycode max
#define MT(mod, kc) (kc | QK_MOD_TAP | ((mod & 0xF) << 8))
@@ -334,5 +347,8 @@ enum quantum_keycodes {
#define UC(n) UNICODE(n)
#endif
+#ifdef UNICODEMAP_ENABLE
+ #define X(n) (n | QK_UNICODE_MAP)
+#endif
#endif
diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c
index d0a8312c1..833e5a8f8 100644
--- a/quantum/keymap_common.c
+++ b/quantum/keymap_common.c
@@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "quantum.h"
#ifdef MIDI_ENABLE
- #include "keymap_midi.h"
+ #include "process_midi.h"
#endif
extern keymap_config_t keymap_config;
diff --git a/quantum/keymap_extras/keymap_bepo.h b/quantum/keymap_extras/keymap_bepo.h
index 4c3096054..e5ef39552 100644
--- a/quantum/keymap_extras/keymap_bepo.h
+++ b/quantum/keymap_extras/keymap_bepo.h
@@ -118,7 +118,7 @@
// Fourth row
#define BP_COLON LSFT(BP_DOT) // :
#define BP_COLN BP_COLON
-#define BP_QUESTION LSFT(BP_QUOTE) // ?
+#define BP_QUESTION LSFT(BP_APOS) // ?
#define BP_QEST BP_QUESTION
// Space bar
@@ -183,7 +183,7 @@
// Third row
#define BP_AE_LIGATURE ALTGR(BP_A) // æ
#define BP_AE BP_AE_LIGATURE
-#define BP_U_GRAVE AGR(BP_U) // ù
+#define BP_U_GRAVE ALTGR(BP_U) // ù
#define BP_UGRV BP_U_GRAVE
#define BP_DEAD_TREMA ALTGR(BP_I) // dead ¨ (trema/umlaut/diaresis)
#define BP_DTRM BP_DEAD_TREMA
diff --git a/quantum/keymap_extras/keymap_br_abnt2.h b/quantum/keymap_extras/keymap_br_abnt2.h
new file mode 100644
index 000000000..0df177721
--- /dev/null
+++ b/quantum/keymap_extras/keymap_br_abnt2.h
@@ -0,0 +1,58 @@
+#ifndef KEYMAP_BR_ABNT2_H
+#define KEYMAP_BR_ABNT2_H
+
+#include "keymap_common.h"
+
+/* Scan codes for the Brazilian ABNT2 keyboard layout */
+
+#define BR_CCDL KC_SCLN // Ç same scancode as ;: on US layout
+#define BR_SCLN KC_SLSH // ;: same scancode as /? on US layout
+#define BR_QUOT KC_GRV // '" same scancode as `~ on US layout
+#define BR_TILD KC_QUOT // ~^ dead keys, same scancode as '" on US layout
+#define BR_ACUT KC_LBRC // ´` dead keys, same scancode as [{ on US layout
+#define BR_LBRC KC_RBRC // [{ same scancode as ]} on US layout
+#define BR_RBRC KC_BSLS // ]} same scancode as \| on US layout
+#define BR_BSLS KC_NUBS // \| uses the non-US hash scancode (#~, sometimes §±)
+#define BR_SLSH KC_INT1 // /? uses the INTL1 scancode
+
+#define BR_COLN LSFT(BR_SCLN) // shifted :
+#define BR_DQT LSFT(BR_QUOT) // shifted "
+#define BR_CIRC LSFT(BR_TILD) // shifted ^ (dead key)
+#define BR_GRAV LSFT(BR_ACUT) // shifted ` (dead key)
+#define BR_LCBR LSFT(BR_LBRC) // shifted {
+#define BR_RCBR LSFT(BR_RBRC) // shifted }
+#define BR_PIPE LSFT(BR_BSLS) // shifted |
+#define BR_QUES LSFT(BR_SLSH) // shifted ?
+#define BR_TRMA LSFT(KC_6) // shifted ¨ (dead key - trema accent)
+
+// On the ABNT2 the keypad comma and the keypad dot scancodes are switched
+// (presumably because in Brazil comma is used as the decimal separator)
+#define BR_KPDT KC_KP_COMMA // keypad .
+#define BR_KPCM KC_KP_DOT // keypad ,
+
+#define BR_1UP LALT(KC_1) // 1 superscript ¹ alt+1
+#define BR_2UP LALT(KC_2) // 2 superscript ² alt+2
+#define BR_3UP LALT(KC_3) // 3 superscript ³ alt+3
+#define BR_PND LALT(KC_4) // Pound sign £ alt+4
+#define BR_CENT LALT(KC_5) // Cent sign ¢ alt+5
+#define BR_NOT LALT(KC_6) // Not sign ¬ alt+6
+#define BR_SECT LALT(KC_EQL) // Section sign § alt+=
+#define BR_FORD LALT(BR_LBRC) // Feminine Ordinal Sign ª alt+[
+#define BR_MORD LALT(BR_RBRC) // Masculine Ordinal Sign º alt+]
+#define BR_DGRE LALT(BR_SLSH) // Degree sign ° alt+/
+
+#define BR_EURO LALT(KC_E) // Euro sign € alt+e
+#define BR_NDTD LALT(BR_TILD) // Non-dead key tilde ~ alt+~
+#define BR_NDAC LALT(BR_ACUT) // Non-dead key acute accent ´ alt+´
+#define BR_NDGV LALT(BR_QUOT) // Non-dead key grave accent ` alt+'
+#define BR_NDCR LALT(BR_CIRC) // Non-dead key circumflex accent ^ alt+^ (alt+shift+~)
+#define BR_NDTR LALT(BR_TRMA) // Non-dead key trema accent ¨ alt+¨ (alt+shift+6)
+
+// For 101-key keyboard layouts, the ABNT2 layout allows
+// the slash and question mark to be typed using alt+q and alt+w.
+// The shortcuts are provided here for completeness' sake,
+// but it's recommended to use BR_SLSH and BR_QUES instead
+#define BR_ASLS LALT(KC_Q)
+#define BR_AQST LALT(KC_W)
+
+#endif
diff --git a/quantum/keymap_extras/keymap_canadian_multilingual.h b/quantum/keymap_extras/keymap_canadian_multilingual.h
new file mode 100644
index 000000000..0bc20c7b9
--- /dev/null
+++ b/quantum/keymap_extras/keymap_canadian_multilingual.h
@@ -0,0 +1,255 @@
+#ifndef KEYMAP_CANADIAN_MULTILINGUAG_H
+#define KEYMAP_CANADIAN_MULTILINGUAG_H
+
+#include "keymap.h"
+
+// Alt gr
+#ifndef ALTGR
+#define ALTGR(kc) RALT(kc)
+#endif
+#ifndef ALGR
+#define ALGR(kc) ALTGR(kc)
+#endif
+
+#define CSA_ALTGR KC_RALT
+#define CSA_ALGR CSA_ALTGR
+
+#ifndef GR2A
+#define GR2A(kc) RCTL(kc)
+#endif
+
+// Normal characters
+// First row
+#define CSA_SLASH KC_GRV // /
+#define CSA_SLSH CSA_SLASH
+
+// Second row
+#define CSA_DEAD_CIRCUMFLEX KC_LBRACKET // dead ^
+#define CSA_DCRC CSA_DEAD_CIRCUMFLEX
+#define CSA_C_CEDILLA KC_RBRACKET // Ç
+#define CSA_CCED CSA_C_CEDILLA
+
+// Third row
+#define CSA_E_GRAVE KC_QUOT // è
+#define CSA_EGRV CSA_E_GRAVE
+#define CSA_A_GRAVE KC_BSLASH // à
+#define CSA_AGRV CSA_A_GRAVE
+
+// Fourth row
+#define CSA_U_GRAVE KC_NONUS_BSLASH // ù
+#define CSA_UGRV CSA_U_GRAVE
+#define CSA_E_ACUTE KC_SLSH // é
+#define CSA_ECUT CSA_E_ACUTE
+
+// Shifted characters
+// First row
+#define CSA_BACKSLASH LSFT(CSA_SLASH) /* \ */
+#define CSA_BSLS CSA_BACKSLASH
+#define CSA_QUESTION LSFT(KC_6) // ?
+#define CSA_QEST CSA_QUESTION
+
+// Second row
+#define CSA_DEAD_TREMA LSFT(CSA_DEAD_CIRCUMFLEX) // dead trema/umlaut/diaresis for ä ë ï ö ü
+#define CSA_DTRM CSA_DEAD_TREMA
+
+// Third row
+// all same as US-QWERTY, or capitalised character of the non-shifted key
+
+// Fourth row
+#define CSA_APOSTROPHE LSFT(KC_COMMA) // '
+#define CSA_APOS CSA_APOSTROPHE
+#define CSA_DOUBLE_QUOTE LSFT(KC_DOT) // "
+#define CSA_DQOT CSA_DOUBLE_QUOTE
+
+// Alt Gr-ed characters
+// First row
+#define CSA_PIPE ALTGR(CSA_SLASH) // |
+#define CSA_CURRENCY ALTGR(KC_4) // ¤
+#define CSA_CURR CSA_CURRENCY
+#define CSA_LEFT_CURLY_BRACE ALTGR(KC_7) // {
+#define CSA_LCBR CSA_LEFT_CURLY_BRACE
+#define CSA_RIGHT_CURLY_BRACE ALTGR(KC_8) // }
+#define CSA_RCBR CSA_RIGHT_CURLY_BRACE
+#define CSA_LBRACKET ALTGR(KC_9) // [
+#define CSA_LBRC CSA_LBRACKET
+#define CSA_RBRACKET ALTGR(KC_0) // ]
+#define CSA_RBRC CSA_RBRACKET
+#define CSA_NEGATION ALTGR(KC_EQUAL) // ¬
+#define CSA_NEGT CSA_NEGATION
+
+// Second row
+// euro symbol not available on Linux? (X.org)
+#define CSA_EURO ALTGR(KC_E) // €
+#define CSA_DEAD_GRAVE ALTGR(CSA_DEAD_CIRCUMFLEX)
+#define CSA_DGRV CSA_DEAD_GRAVE // dead `
+#define CSA_DEAD_TILDE ALTGR(CSA_C_CEDILLA) // ~
+#define CSA_DTLD CSA_DEAD_TILDE
+
+// Third row
+#define CSA_DEGREE ALTGR(KC_SCOLON) // °
+#define CSA_DEGR CSA_DEGREE
+
+// Fourth row
+#define CSA_LEFT_GUILLEMET ALTGR(KC_Z) // «
+#define CSA_LGIL CSA_LEFT_GUILLEMET
+#define CSA_RIGHT_GUILLEMET ALTGR(KC_X) // »
+#define CSA_RGIL CSA_RIGHT_GUILLEMET
+#define CSA_LESS ALTGR(KC_COMMA) // <
+#define CSA_GREATER ALTGR(KC_DOT) // >
+#define CSA_GRTR CSA_GREATER
+
+// Space bar
+#define CSA_NON_BREAKING_SPACE ALTGR(KC_SPACE)
+#define CSA_NBSP CSA_NON_BREAKING_SPACE
+
+// GR2A-ed characters
+// First row
+#define CSA_SUPERSCRIPT_ONE GR2A(KC_1) // ¹
+#define CSA_SUP1 CSA_SUPERSCRIPT_ONE
+#define CSA_SUPERSCRIPT_TWO GR2A(KC_2) // ²
+#define CSA_SUP2 CSA_SUPERSCRIPT_TWO
+#define CSA_SUPERSCRIPT_THREE GR2A(KC_3) // ³
+#define CSA_SUP3 CSA_SUPERSCRIPT_THREE
+#define CSA_ONE_QUARTER GR2A(KC_4) // ¼
+#define CSA_1QRT CSA_ONE_QUARTER
+#define CSA_ONE_HALF GR2A(KC_5) // ½
+#define CSA_1HLF CSA_ONE_HALF
+#define CSA_THREE_QUARTERS GR2A(KC_6) // ¾
+#define CSA_3QRT CSA_THREE_QUARTERS
+// nothing on 7-0 and -
+#define CSA_DEAD_CEDILLA GR2A(KC_EQUAL) // dead ¸
+#define CSA_DCED CSA_DEAD_CEDILLA
+
+// Second row
+#define CSA_OMEGA GR2A(KC_Q) // ω
+#define CSA_OMEG CSA_OMEGA
+#define CSA_L_STROKE GR2A(KC_W) // Å‚
+#define CSA_LSTK CSA_L_STROKE
+#define CSA_OE_LIGATURE GR2A(KC_E) // Å“
+#define CSA_OE CSA_OE_LIGATURE
+#define CSA_PARAGRAPH GR2A(KC_R) // ¶
+#define CSA_PARG CSA_PARAGRAPH
+#define CSA_T_STROKE GR2A(KC_T) // ŧ
+#define CSA_LEFT_ARROW GR2A(KC_Y) // â†
+#define CSA_LARW CSA_LEFT_ARROW
+#define CSA_DOWN_ARROW GR2A(KC_U) // ↓
+#define CSA_DARW CSA_DOWN_ARROW
+#define CSA_RIGHT_ARROW GR2A(KC_I) // →
+#define CSA_RARW CSA_RIGHT_ARROW
+#define CSA_O_STROKE GR2A(KC_O) // ø
+#define CSA_OSTK CSA_O_STROKE
+#define CSA_THORN GR2A(KC_P) // þ
+#define CSA_THRN CSA_THORN
+// nothing on ^
+#define CSA_TILDE GR2A(CSA_C_CEDILLA) // dead ~
+#define CSA_TILD CSA_TILDE
+
+// Third row
+#define CSA_AE_LIGATURE GR2A(KC_A) // æ
+#define CSA_AE CSA_AE_LIGATURE
+#define CSA_SHARP_S GR2A(KC_S) // ß
+#define CSA_SRPS CSA_SHARP_S
+#define CSA_ETH GR2A(KC_D) // ð
+// nothing on F
+#define CSA_ENG GR2A(KC_G) // Å‹
+#define CSA_H_SRTOKE GR2A(KC_H) // ħ
+#define CSA_HSTK CSA_H_SRTOKE
+#define CSA_IJ_LIGATURE GR2A(KC_J) // ij
+#define CSA_IJ CSA_IJ_LIGATURE
+#define CSA_KRA GR2A(KC_K) // ĸ
+#define CSA_L_FLOWN_DOT GR2A(KC_L) // ŀ
+#define CSA_LFLD CSA_L_FLOWN_DOT
+#define CSA_DEAD_ACUTE GR2A(KC_SCLN) // dead acute accent
+#define CSA_DACT CSA_DEAD_ACUTE
+// nothing on È & À
+
+// Fourth row
+#define CSA_CENT GR2A(KC_C) // ¢
+#define CSA_LEFT_DOUBLE_QUOTE GR2A(KC_V) // “
+#define CSA_LDQT CSA_LEFT_DOUBLE_QUOTE
+#define CSA_RIGHT_DOUBLE_QUOTE GR2A(KC_B) // â€
+#define CSA_RDQT CSA_RIGHT_DOUBLE_QUOTE
+#define CSA_N_APOSTROPHE GR2A(KC_N) // ʼn (deprecated unicode codepoint)
+#define CSA_NAPO CSA_N_APOSTROPHE
+#define CSA_MU GR2A(KC_M) // μ
+#define CSA_HORIZONTAL_BAR GR2A(KC_COMMA) // ―
+#define CSA_HZBR CSA_HORIZONTAL_BAR
+#define CSA_DEAD_DOT_ABOVE GR2A(KC_DOT) // dead Ë™
+#define CSA_DDTA CSA_DEAD_DOT_ABOVE
+
+// GR2A-shifted characters (different from capitalised GR2A-ed characters)
+// First row
+#define CSA_SOFT_HYPHEN GR2A(LSFT(CSA_SLASH)) // soft-hyphen, appears as a hyphen in wrapped word
+#define CSA_SHYP CSA_SOFT_HYPHEN
+#define CSA_INVERTED_EXCLAIM GR2A(KC_EXCLAIM) // ¡
+#define CSA_IXLM CSA_INVERTED_EXCLAIM
+// nothing on 2
+#define CSA_POUND GR2A(LSFT(KC_3)) // £
+#define CSA_GBP CSA_POUND_SIGN
+// already on ALTGR(KC_E)
+#define CSA_EURO_BIS GR2A(LSFT(KC_4)) // €
+#define CSA_EURB CSA_EURO_BIS
+#define CSA_THREE_EIGHTHS GR2A(LSFT(KC_5)) // ⅜
+#define CSA_3ON8 CSA_THREE_EIGHTHS
+#define CSA_FIVE_EIGHTHS GR2A(LSFT(KC_6)) // â…
+#define CSA_5ON8 CSA_FIVE_EIGHTHS
+#define CSA_SEVEN_EIGHTHS GR2A(LSFT(KC_7)) // â…ž
+#define CSA_7ON8 CSA_SEVEN_EIGHTHS
+#define CSA_TRADEMARK GR2A(LSFT(KC_8)) // â„¢
+#define CSA_TM CSA_TRADEMARK
+#define CSA_PLUS_MINUS GR2A(LSFT(KC_9)) // ±
+#define CSA_PSMS CSA_PLUS_MINUS
+// nothing on 0
+#define CSA_INVERTED_QUESTION GR2A(LSFT(KC_MINUS)) // ¿
+#define CSA_IQST CSA_INVERTED_QUESTION
+#define CSA_DEAD_OGONEK GR2A(LSFT(KC_EQUAL)) // dead Ë›
+#define CSA_DOGO CSA_DEAD_OGONEK
+
+// Second row
+#define CSA_REGISTERED_TRADEMARK GR2A(LSFT(KC_R)) // ®
+#define CSA_RTM CSA_REGISTERED_TRADEMARK
+#define CSA_YEN GR2A(LSFT(KC_Y)) // ¥
+#define CSA_YUAN CSA_YEN
+#define CSA_UP_ARROW LSFT(CSA_DOWN_ARROW) // ↑
+#define CSA_DOTLESS_I GR2A(LSFT(KC_I)) // ı
+#define CSA_DLSI CSA_DOTLESS_I
+#define CSA_DEAD_RING GR2A(LSFT(CSA_DCRC)) // dead °
+#define CSA_DRNG CSA_DEAD_RING
+#define CSA_DEAD_MACRON GR2A(LSFT(CSA_C_CEDILLA)) // dead ¯
+#define CSA_DMCR CSA_DEAD_MACRON
+
+// Third row
+#define CSA_SECTION GR2A(LSFT(KC_S)) // §
+#define CSA_SECT CSA_SECTION
+#define CSA_ORDINAL_INDICATOR_A GR2A(LSFT(KC_F)) // ª
+#define CSA_ORDA CSA_ORDINAL_INDICATOR_A
+#define CSA_DEAD_DOUBLE_ACUTE LSFT(CSA_DEAD_ACUTE) // Ë
+#define CSA_DDCT CSA_DEAD_DOUBLE_ACUTE
+#define CSA_DEAD_CARON GR2A(LSFT(CSA_E_GRAVE)) // dead ˇ
+#define CSA_DCAR CSA_DEAD_CARON
+#define CSA_DEAD_BREVE GR2A(LSFT(CSA_A_GRAVE)) // dead ˘
+#define CSA_DBRV CSA_DEAD_BREVE
+
+// Fourth row
+#define CSA_BROKEN_PIPE GR2A(LSFT(CSA_U_GRAVE)) // ¦
+#define CSA_BPIP CSA_BROKEN_PIPE
+#define CSA_COPYRIGHT GR2A(LSFT(KC_C)) // ©
+#define CSA_CPRT CSA_COPYRIGHT
+#define CSA_LEFT_QUOTE GR2A(LSFT(KC_V)) // ‘
+#define CSA_LQOT CSA_LEFT_QUOTE
+#define CSA_RIGHT_QUOTE GR2A(LSFT(KC_B)) // ’
+#define CSA_RQOT CSA_RIGHT_QUOTE
+#define CSA_EIGHTH_NOTE GR2A(LSFT(KC_N)) // ♪
+#define CSA_8NOT CSA_EIGHTH_NOTE
+#define CSA_ORDINAL_INDICATOR_O GR2A(LSFT(KC_M)) // º
+#define CSA_ORDO CSA_ORDINAL_INDICATOR_O
+#define CSA_TIMES GR2A(LSFT(KC_COMMA)) // ×
+#define CSA_TIMS CSA_TIMES
+#define CSA_OBELUS GR2A(LSFT(KC_DOT)) // ÷
+#define CSA_OBEL CSA_OBELUS
+// more conventional name of the symbol
+#define CSA_DIVISION_SIGN CSA_OBELUS
+#define CSA_DVSN CSA_DIVISION_SIGN
+// TODO GR2A(LSFT(CSA_E_ACUTE))
+
+#endif
diff --git a/quantum/keymap_extras/keymap_dvorak.h b/quantum/keymap_extras/keymap_dvorak.h
index e855056e8..a0feed850 100644
--- a/quantum/keymap_extras/keymap_dvorak.h
+++ b/quantum/keymap_extras/keymap_dvorak.h
@@ -18,18 +18,19 @@
#define DV_LBRC KC_MINS
#define DV_RBRC KC_EQL
-#define DV_QUOT KC_Q
+#define DV_QUOT KC_Q
#define DV_COMM KC_W
#define DV_DOT KC_E
#define DV_P KC_R
#define DV_Y KC_T
#define DV_F KC_Y
#define DV_G KC_U
-#define DV_C KC_I
+#define DV_C KC_I
#define DV_R KC_O
#define DV_L KC_P
#define DV_SLSH KC_LBRC
#define DV_EQL KC_RBRC
+#define DV_BSLS KC_BSLS
#define DV_A KC_A
#define DV_O KC_S
@@ -68,7 +69,17 @@
#define DV_RPRN LSFT(DV_0)
#define DV_LCBR LSFT(DV_LBRC)
#define DV_RCBR LSFT(DV_RBRC)
-#define DV_UNDS LSFT(DV_MINS)
-#define DV_PLUS LSFT(DV_EQL)
+
+#define DV_DQUO LSFT(DV_QUOT)
+#define DV_LABK LSFT(DV_COMM)
+#define DV_RABK LSFT(DV_DOT)
+
+#define DV_QUES LSFT(DV_SLSH)
+#define DV_PLUS LSFT(DV_EQL)
+#define DV_PIPE LSFT(DV_BSLS)
+
+#define DV_UNDS LSFT(DV_MINS)
+
+#define DV_COLN LSFT(DV_SCLN)
#endif
diff --git a/quantum/keymap_extras/keymap_dvp.h b/quantum/keymap_extras/keymap_dvp.h
new file mode 100644
index 000000000..83f49a52b
--- /dev/null
+++ b/quantum/keymap_extras/keymap_dvp.h
@@ -0,0 +1,82 @@
+#ifndef KEYMAP_DVP_H
+#define KEYMAP_DVP_H
+
+#include "keymap.h"
+
+// Normal characters
+#define DP_DLR KC_GRV
+#define DP_AMPR KC_1
+#define DP_LBRC KC_2
+#define DP_LCBR KC_3
+#define DP_RCBR KC_4
+#define DP_LPRN KC_5
+#define DP_EQL KC_6
+#define DP_ASTR KC_7
+#define DP_RPRN KC_8
+#define DP_PLUS KC_9
+#define DP_RBRC KC_0
+#define DP_EXLM KC_MINS
+#define DP_HASH KC_EQL
+
+#define DP_SCLN KC_Q
+#define DP_COMM KC_W
+#define DP_DOT KC_E
+#define DP_P KC_R
+#define DP_Y KC_T
+#define DP_F KC_Y
+#define DP_G KC_U
+#define DP_C KC_I
+#define DP_R KC_O
+#define DP_L KC_P
+#define DP_SLSH KC_LBRC
+#define DP_AT KC_RBRC
+#define DP_BSLS KC_BSLS
+
+#define DP_A KC_A
+#define DP_O KC_S
+#define DP_E KC_D
+#define DP_U KC_F
+#define DP_I KC_G
+#define DP_D KC_H
+#define DP_H KC_J
+#define DP_T KC_K
+#define DP_N KC_L
+#define DP_S KC_SCLN
+#define DP_MINS KC_QUOT
+
+#define DP_QUOT KC_Z
+#define DP_Q KC_X
+#define DP_J KC_C
+#define DP_K KC_V
+#define DP_X KC_B
+#define DP_B KC_N
+#define DP_M KC_M
+#define DP_W KC_COMM
+#define DP_V KC_DOT
+#define DP_Z KC_SLSH
+
+// Shifted characters
+#define DP_TILD LSFT(DP_DLR)
+#define DP_PERC LSFT(DP_AMPR)
+#define DP_7 LSFT(DP_LBRC)
+#define DP_5 LSFT(DP_LCBR)
+#define DP_3 LSFT(DP_RCBR)
+#define DP_1 LSFT(DP_LPRN)
+#define DP_9 LSFT(DP_EQL)
+#define DP_0 LSFT(DP_ASTR)
+#define DP_2 LSFT(DP_RPRN)
+#define DP_4 LSFT(DP_PLUS)
+#define DP_6 LSFT(DP_RBRC)
+#define DP_8 LSFT(DP_EXLM)
+#define DP_GRV LSFT(DP_HASH)
+
+#define DP_COLN LSFT(DP_SCLN)
+#define DP_LABK LSFT(DP_COMM)
+#define DP_RABK LSFT(DP_DOT)
+#define DP_QUES LSFT(DP_SLSH)
+#define DP_CIRC LSFT(DP_AT)
+#define DP_PIPE LSFT(DP_BSLS)
+#define DP_UNDS LSFT(DP_MINS)
+#define DP_DQUO LSFT(DP_QUOT)
+
+#endif
diff --git a/quantum/keymap_extras/keymap_fr_ch.h b/quantum/keymap_extras/keymap_fr_ch.h
index 3fd971357..87d4bb24c 100644
--- a/quantum/keymap_extras/keymap_fr_ch.h
+++ b/quantum/keymap_extras/keymap_fr_ch.h
@@ -4,7 +4,7 @@
#include "keymap.h"
// Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
#define FR_CH_ALGR KC_RALT
// normal characters
diff --git a/quantum/keymap_extras/keymap_french.h b/quantum/keymap_extras/keymap_french.h
index 2a44c80b1..834c69650 100644
--- a/quantum/keymap_extras/keymap_french.h
+++ b/quantum/keymap_extras/keymap_french.h
@@ -4,7 +4,7 @@
#include "keymap.h"
// Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
#define NO_ALGR KC_RALT
// Normal characters
@@ -80,4 +80,4 @@
#define FR_EURO ALGR(KC_E)
#define FR_BULT ALGR(FR_DLR)
-#endif \ No newline at end of file
+#endif
diff --git a/quantum/keymap_extras/keymap_german.h b/quantum/keymap_extras/keymap_german.h
index 3f9ae8bad..7e2e0ed44 100644
--- a/quantum/keymap_extras/keymap_german.h
+++ b/quantum/keymap_extras/keymap_german.h
@@ -4,7 +4,7 @@
#include "keymap.h"
// Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
#define DE_ALGR KC_RALT
// normal characters
diff --git a/quantum/keymap_extras/keymap_german_ch.h b/quantum/keymap_extras/keymap_german_ch.h
index 6a782bcd7..b66d582a4 100644
--- a/quantum/keymap_extras/keymap_german_ch.h
+++ b/quantum/keymap_extras/keymap_german_ch.h
@@ -4,7 +4,7 @@
#include "keymap.h"
// Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
#define CH_ALGR KC_RALT
// normal characters
diff --git a/quantum/keymap_extras/keymap_jp.h b/quantum/keymap_extras/keymap_jp.h
new file mode 100644
index 000000000..e81b5952e
--- /dev/null
+++ b/quantum/keymap_extras/keymap_jp.h
@@ -0,0 +1,62 @@
+/* JP106-layout (Japanese Standard)
+ *
+ * For more information, see
+ * http://www2d.biglobe.ne.jp/~msyk/keyboard/layout/usbkeycode.html
+ * note: This website is written in Japanese.
+ */
+
+
+#ifndef KEYMAP_JP_H
+#define KEYMAP_JP_H
+
+
+#include "keymap.h"
+
+
+#define JP_ZHTG KC_GRV // hankaku/zenkaku|kanzi
+#define JP_YEN KC_INT3 // yen, |
+#define JP_CIRC KC_EQL // ^, ~
+#define JP_AT KC_LBRC // @, `
+#define JP_LBRC KC_RBRC // [, {
+#define JP_COLN KC_QUOT // :, *
+#define JP_RBRC KC_NUHS // ], }
+#define JP_BSLS KC_INT1 // \, _
+#define JP_MHEN KC_INT5 // muhenkan
+#define JP_HENK KC_INT4 // henkan
+#define JP_KANA KC_INT2 // katakana/hiragana|ro-mazi
+
+
+//Aliases for shifted symbols
+#define JP_DQT LSFT(KC_2) // "
+#define JP_AMPR LSFT(KC_6) // &
+#define JP_QUOT LSFT(KC_7) // '
+#define JP_LPRN LSFT(KC_8) // (
+#define JP_RPRN LSFT(KC_9) // )
+#define JP_EQL LSFT(KC_MINS) // =
+#define JP_TILD LSFT(JP_CIRC) // ~
+#define JP_PIPE LSFT(JP_YEN) // |
+#define JP_GRV LSFT(JP_AT) // `
+#define JP_LCBR LSFT(JP_LBRC) // {
+#define JP_PLUS LSFT(KC_SCLN) // +
+#define JP_ASTR LSFT(JP_COLN) // *
+#define JP_RCBR LSFT(JP_RBRC) // }
+#define JP_UNDS LSFT(JP_BSLS) // _
+
+
+// These symbols are correspond to US101-layout.
+#define JP_MINS KC_MINS // -
+#define JP_SCLN KC_SCLN // ;
+#define JP_COMM KC_COMM // ,
+#define JP_DOT KC_DOT // .
+#define JP_SLSH KC_SLSH // /
+// shifted
+#define JP_EXLM KC_EXLM // !
+#define JP_HASH KC_HASH // #
+#define JP_DLR KC_DLR // $
+#define JP_PERC KC_PERC // %
+#define JP_LT KC_LT // <
+#define JP_GT KC_GT // >
+#define JP_QUES KC_QUES // ?
+
+
+#endif
diff --git a/quantum/keymap_extras/keymap_nordic.h b/quantum/keymap_extras/keymap_nordic.h
index 3acb8b698..9b0ef35ca 100644
--- a/quantum/keymap_extras/keymap_nordic.h
+++ b/quantum/keymap_extras/keymap_nordic.h
@@ -4,7 +4,7 @@
#include "keymap.h"
// Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
#define NO_ALGR KC_RALT
// Normal characters
@@ -13,7 +13,7 @@
#define NO_ACUT KC_EQL
#define NO_AM KC_LBRC
-#define NO_QUOT KC_RBRC
+#define NO_QUOT KC_RBRC // this is the "umlaut" char on Nordic keyboards, Apple layout
#define NO_AE KC_SCLN
#define NO_OSLH KC_QUOT
#define NO_APOS KC_NUHS
@@ -25,7 +25,7 @@
#define NO_SECT LSFT(NO_HALF)
#define NO_QUO2 LSFT(KC_2)
#define NO_BULT LSFT(KC_4)
-#define NO_AMP LSFT(KC_6)
+#define NO_AMPR LSFT(KC_6)
#define NO_SLSH LSFT(KC_7)
#define NO_LPRN LSFT(KC_8)
#define NO_RPRN LSFT(KC_9)
diff --git a/quantum/keymap_extras/keymap_norwegian.h b/quantum/keymap_extras/keymap_norwegian.h
index 018bfeae5..5c4e8c495 100644
--- a/quantum/keymap_extras/keymap_norwegian.h
+++ b/quantum/keymap_extras/keymap_norwegian.h
@@ -13,7 +13,7 @@
#undef NO_BSLS
#define NO_BSLS KC_EQL // '\'
#undef NO_CIRC
-#define NO_CIRC LSFT(C_RBRC) // ^
+#define NO_CIRC LSFT(KC_RBRC) // ^
#undef NO_GRV
#define NO_GRV LSFT(NO_BSLS) //
#undef NO_OSLH
diff --git a/quantum/keymap_extras/keymap_russian.h b/quantum/keymap_extras/keymap_russian.h
new file mode 100644
index 000000000..237e9abde
--- /dev/null
+++ b/quantum/keymap_extras/keymap_russian.h
@@ -0,0 +1,77 @@
+#ifndef KEYMAP_RUSSIAN_H
+#define KEYMAP_RUSSIAN_H
+
+#include "keymap.h"
+
+// Normal Chracters // reg SHIFT
+#define RU_A KC_F // а and Ð
+#define RU_BE KC_COMM // б and Б
+#define RU_VE KC_D // в and В
+#define RU_GHE KC_U // г and Г
+#define RU_DE KC_L // д and Д
+#define RU_IE KC_T // е and Е
+#define RU_IO KC_GRV // Ñ‘ and Ð
+#define RU_ZHE KC_SCLN // ж and Ж
+#define RU_ZE KC_P // з and З
+#define RU_I KC_B // и and И
+#define RU_SRT_I KC_Q // й and Й
+#define RU_KA KC_R // к and К
+#define RU_EL KC_K // л and Л
+#define RU_EM KC_V // м and М
+#define RU_EN KC_Y // н and Ð
+#define RU_O KC_J // о and О
+#define RU_PE KC_G // п and П
+#define RU_ER KC_H // р and Р
+#define RU_ES KC_C // Ñ and С
+#define RU_TE KC_N // т and Т
+#define RU_U KC_E // у and У
+#define RU_EF KC_A // ф and Ф
+#define RU_HA KC_LBRC // х and Х
+#define RU_TSE KC_W // ц and Ц
+#define RU_CHE KC_X // ч and Ч
+#define RU_SHA KC_I // ш and Ш
+#define RU_SHCHA KC_O // щ and Щ
+#define RU_HSIGN KC_RBRC // ъ and Ъ
+#define RU_YERU KC_S // ы and Ы
+#define RU_SSIGN KC_M // ь and Ь
+#define RU_E KC_QUOT // Ñ and Э
+#define RU_YU KC_DOT // ю and Ю
+#define RU_YA KC_Z // Ñ and Я
+
+#define RU_1 KC_1 // 1 and !
+#define RU_2 KC_2 // 2 and "
+#define RU_3 KC_3 // 3 and â„–
+#define RU_4 KC_4 // 4 and ;
+#define RU_5 KC_5 // 5 and %
+#define RU_6 KC_6 // 6 and :
+#define RU_7 KC_7 // 7 and ?
+#define RU_8 KC_8 // 8 and *
+#define RU_9 KC_9 // 9 and (
+#define RU_0 KC_0 // 0 and )
+
+#define RU_MINS KC_MINS // - and _
+#define RU_EQL KC_EQL // = and +
+#define RU_BSLS KC_BSLS // \ and /
+#define RU_DOT KC_SLSH // . and ,
+
+// Shifted Chracters
+#define RU_EXLM LSFT(RU_1) // !
+#define RU_DQUT LSFT(RU_2) // "
+#define RU_NMRO LSFT(RU_3) // â„–
+#define RU_SCLN LSFT(RU_4) // ;
+#define RU_PERC LSFT(RU_5) // %
+#define RU_COLN LSFT(RU_6) // :
+#define RU_QUES LSFT(RU_7) // ?
+#define RU_ASTR LSFT(RU_8) // *
+#define RU_LPRN LSFT(RU_9) // (
+#define RU_RPRN LSFT(RU_0) // )
+
+#define RU_UNDR LSFT(RU_MINS) // _
+#define RU_PLUS LSFT(RU_EQL) // +
+#define RU_SLSH LSFT(RU_BSLS) // /
+#define RU_COMM LSFT(RU_DOT) // ,
+
+// Alt Gr-ed characters
+#define RU_RUBL RALT(RU_8) // ₽
+
+#endif
diff --git a/quantum/keymap_extras/keymap_spanish.h b/quantum/keymap_extras/keymap_spanish.h
index af76e39fc..4ba568af2 100644
--- a/quantum/keymap_extras/keymap_spanish.h
+++ b/quantum/keymap_extras/keymap_spanish.h
@@ -4,7 +4,7 @@
#include "keymap.h"
// Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
#define NO_ALGR KC_RALT
// Normal characters
diff --git a/quantum/keymap_extras/keymap_uk.h b/quantum/keymap_extras/keymap_uk.h
index 5c5d95179..00c87afc3 100644
--- a/quantum/keymap_extras/keymap_uk.h
+++ b/quantum/keymap_extras/keymap_uk.h
@@ -4,7 +4,7 @@
#include "keymap.h"
// Alt gr
-#define ALGR(kc) kc | 0x1400
+#define ALGR(kc) RALT(kc)
#define NO_ALGR KC_RALT
// Normal characters
@@ -33,4 +33,4 @@
#define UK_AACT ALGR(KC_A)
-#endif \ No newline at end of file
+#endif
diff --git a/quantum/keymap_extras/keymap_unicode_cyrillic.h b/quantum/keymap_extras/keymap_unicode_cyrillic.h
new file mode 100644
index 000000000..a40626d91
--- /dev/null
+++ b/quantum/keymap_extras/keymap_unicode_cyrillic.h
@@ -0,0 +1,163 @@
+#ifndef KEYMAP_CYRILLIC_H
+#define KEYMAP_CYRILLIC_H
+
+#include "keymap.h"
+
+/*
+ * This is based off of
+ * https://en.wikipedia.org/wiki/Cyrillic_script
+ *
+ * Unicode is iffy, a software implementation is preferred
+ */
+
+// Capital Char russian/ukrainian/bulgarian
+#define CY_A UC(0x0410) // Ð rus ukr bul
+#define CY_BE UC(0x0411) // Б rus ukr bul
+#define CY_VE UC(0x0412) // Ð’ rus ukr bul
+#define CY_GHE UC(0x0413) // Г rus ukr bul
+#define CY_GHEUP UC(0x0490) // Ò ukr
+#define CY_DE UC(0x0414) // Д rus ukr bul
+#define CY_DJE UC(0x0402) // Ђ
+#define CY_GJE UC(0x0403) // Ѓ
+#define CY_IE UC(0x0415) // Е rus ukr bul
+#define CY_IO UC(0x0401) // Ð rus
+#define CY_UIE UC(0x0404) // Є ukr
+#define CY_ZHE UC(0x0416) // Ж rus ukr bul
+#define CY_ZE UC(0x0417) // З rus ukr bul
+#define CY_DZE UC(0x0405) // Ð…
+#define CY_I UC(0x0418) // И rus ukr bul
+#define CY_B_U_I UC(0x0406) // І ukr
+#define CY_YI UC(0x0407) // Ї ukr
+#define CY_SRT_I UC(0x0419) // Й rus ukr bul
+#define CY_JE UC(0x0408) // Ј
+#define CY_KA UC(0x041a) // К rus ukr bul
+#define CY_EL UC(0x041b) // Л rus ukr bul
+#define CY_LJE UC(0x0409) // Љ
+#define CY_EM UC(0x041c) // М rus ukr bul
+#define CY_EN UC(0x041d) // Ð rus ukr bul
+#define CY_NJE UC(0x040a) // Њ
+#define CY_O UC(0x041e) // О rus ukr bul
+#define CY_PE UC(0x041f) // П rus ukr bul
+#define CY_ER UC(0x0420) // Р rus ukr bul
+#define CY_ES UC(0x0421) // С rus ukr bul
+#define CY_TE UC(0x0422) // Т rus ukr bul
+#define CY_TSHE UC(0x040b) // Ћ
+#define CY_KJE UC(0x040c) // Ќ
+#define CY_U UC(0x0423) // У rus ukr bul
+#define CY_SRT_U UC(0x040e) // ÐŽ
+#define CY_EF UC(0x0424) // Ф rus ukr bul
+#define CY_HA UC(0x0425) // Х rus bul
+#define CY_TSE UC(0x0426) // Ц rus ukr bul
+#define CY_CHE UC(0x0427) // Ч rus ukr bul
+#define CY_DZHE UC(0x040f) // Ð
+#define CY_SHA UC(0x0428) // Ш rus ukr bul
+#define CY_SHCHA UC(0x0429) // Щ rus ukr bul
+#define CY_HSIGN UC(0x042a) // Ъ rus bul
+#define CY_YERU UC(0x042b) // Ы rus
+#define CY_SSIGN UC(0x042c) // Ь rus ukr bul
+#define CY_E UC(0x042d) // Э rus
+#define CY_YU UC(0x042e) // Ю rus ukr bul
+#define CY_YA UC(0x042f) // Я rus ukr bul
+// Important Cyrillic non-Slavic letters
+#define CY_PALOCHKA UC(0x04c0) // Ó€
+#define CY_SCHWA UC(0x04d8) // Ó˜
+#define CY_GHE_S UC(0x0492) // Ò’
+#define CY_ZE_D UC(0x0498) // Ò˜
+#define CY_ES_D UC(0x04aa) // Òª
+#define CY_BR_KA UC(0x04a0) // Ò 
+#define CY_ZHE_D UC(0x0496) // Ò–
+#define CY_KA_D UC(0x049a) // Òš
+#define CY_EN_D UC(0x04a2) // Ò¢
+#define CY_ENGHE UC(0x04a4) // Ò¤
+#define CY_BRD_O UC(0x04e8) // Ó¨
+#define CY_STR_U UC(0x04ae) // Ò®
+#define CY_S_U_S UC(0x04b0) // Ò°
+#define CY_SHHA UC(0x04ba) // Òº
+#define CY_HA_D UC(0x04b2) // Ò²
+
+
+// Small
+#define CY_a UC(0x0430) // a rus ukr bul
+#define CY_be UC(0x0431) // б rus ukr bul
+#define CY_ve UC(0x0432) // в rus ukr bul
+#define CY_ghe UC(0x0433) // г rus ukr bul
+#define CY_gheup UC(0x0491) // Ò‘ ukr
+#define CY_de UC(0x0434) // д rus ukr bul
+#define CY_dje UC(0x0452) // Ñ’
+#define CY_gje UC(0x0453) // Ñ“
+#define CY_ie UC(0x0435) // е rus ukr bul
+#define CY_io UC(0x0451) // Ñ‘ rus
+#define CY_uie UC(0x0454) // Ñ” ukr
+#define CY_zhe UC(0x0436) // ж rus ukr bul
+#define CY_ze UC(0x0437) // з rus ukr bul
+#define CY_dze UC(0x0455) // Ñ•
+#define CY_i UC(0x0438) // и rus ukr bul
+#define CY_b_u_i UC(0x0456) // Ñ– ukr
+#define CY_yi UC(0x0457) // Ñ— ukr
+#define CY_srt_i UC(0x0439) // й rus ukr bul
+#define CY_je UC(0x0458) // ј
+#define CY_ka UC(0x043a) // к rus ukr bul
+#define CY_el UC(0x043b) // л rus ukr bul
+#define CY_lje UC(0x0459) // Ñ™
+#define CY_em UC(0x043c) // м rus ukr bul
+#define CY_en UC(0x043d) // н rus ukr bul
+#define CY_nje UC(0x045a) // Ñš
+#define CY_o UC(0x043e) // о rus ukr bul
+#define CY_pe UC(0x043f) // п rus ukr bul
+#define CY_er UC(0x0440) // р rus ukr bul
+#define CY_es UC(0x0441) // Ñ rus ukr bul
+#define CY_te UC(0x0442) // Ñ‚ rus ukr bul
+#define CY_tshe UC(0x045b) // Ñ›
+#define CY_kje UC(0x045c) // ќ
+#define CY_u UC(0x0443) // у rus ukr bul
+#define CY_srt_u UC(0x045e) // Ñž
+#define CY_ef UC(0x0444) // Ñ„ rus ukr bul
+#define CY_ha UC(0x0445) // Ñ… rus ukr bul
+#define CY_tse UC(0x0446) // ц rus ukr bul
+#define CY_che UC(0x0447) // ч rus ukr bul
+#define CY_dzhe UC(0x045f) // ÑŸ
+#define CY_sha UC(0x0448) // ш rus ukr bul
+#define CY_shcha UC(0x0449) // щ rus ukr bul
+#define CY_hsign UC(0x044a) // ÑŠ rus bul
+#define CY_yeru UC(0x044b) // Ñ‹ rus
+#define CY_ssign UC(0x044c) // ь rus ukr bul
+#define CY_e UC(0x044d) // Ñ rus
+#define CY_yu UC(0x044e) // ÑŽ rus ukr bul
+#define CY_ya UC(0x044f) // Ñ rus ukr bul
+// Important Cyrillic non-Slavic letters
+#define CY_palochka UC(0x04cf) // Ó
+#define CY_schwa UC(0x04d9) // Ó™
+#define CY_ghe_s UC(0x0493) // Ò“
+#define CY_ze_d UC(0x0499) // Ò™
+#define CY_es_d UC(0x04ab) // Ò«
+#define CY_br_ka UC(0x04a1) // Ò¡
+#define CY_zhe_d UC(0x0497) // Ò—
+#define CY_ka_d UC(0x049b) // Ò›
+#define CY_en_d UC(0x04a3) // Ò£
+#define CY_enghe UC(0x04a5) // Ò¥
+#define CY_brd_o UC(0x04e9) // Ó©
+#define CY_str_u UC(0x04af) // Ò¯
+#define CY_s_u_s UC(0x04b1) // Ò±
+#define CY_shha UC(0x04bb) // Ò»
+#define CY_ha_d UC(0x04b3) // Ò³
+
+
+// Extra
+#define CY_slr_ve UC(0x1c80) // á²€ CYRILLIC SMALL LETTER ROUNDED VE
+#define CY_ll_de UC(0x1c81) // á² CYRILLIC SMALL LETTER LONG-LEGGED DE
+#define CY_ZEMLYA UC(0xa640) // Ꙁ CYRILLIC CAPITAL LETTER ZEMLYA
+#define CY_zemlya UC(0xa641) // ê™ CYRILLIC SMALL LETTER ZEMLYA
+#define CY_RV_DZE UC(0xa644) // Ꙅ CYRILLIC CAPITAL LETTER REVERSED DZE
+#define CY_rv_DZE UC(0xa645) // ê™… CYRILLIC SMALL LETTER REVERSED DZE
+#define CY_slw_es UC(0x1c83) // ᲃ CYRILLIC SMALL LETTER WIDE ES
+#define CY_st_te UC(0x1c84) // ᲄ CYRILLIC SMALL LETTER TALL TE
+#define CY_3l_te UC(0x1c85) // á²… CYRILLIC SMALL LETTER THREE-LEGGED TE
+#define CY_thsign UC(0x1c86) // ᲆ CYRILLIC SMALL LETTER TALL HARD SIGN
+#define CY_YERUBY UC(0xa650) // ê™ CYRILLIC CAPITAL LETTER YERU WITH BACK YER
+#define CY_yeruby UC(0xa651) // ꙑ CYRILLIC SMALL LETTER YERU WITH BACK YER
+#define CY_RUBL UC(0x20bd) // ₽
+#define CY_NMRO UC(0x2116) // â„–
+
+// The letters Zje and Sje are made for other letters and accent marks
+
+#endif
diff --git a/quantum/light_ws2812.c b/quantum/light_ws2812.c
index 401845e85..a883b1388 100755
--- a/quantum/light_ws2812.c
+++ b/quantum/light_ws2812.c
@@ -16,14 +16,128 @@
#include <util/delay.h>
#include "debug.h"
+#ifdef RGBW_BB_TWI
+
+// Port for the I2C
+#define I2C_DDR DDRD
+#define I2C_PIN PIND
+#define I2C_PORT PORTD
+
+// Pins to be used in the bit banging
+#define I2C_CLK 0
+#define I2C_DAT 1
+
+#define I2C_DATA_HI()\
+I2C_DDR &= ~ (1 << I2C_DAT);\
+I2C_PORT |= (1 << I2C_DAT);
+#define I2C_DATA_LO()\
+I2C_DDR |= (1 << I2C_DAT);\
+I2C_PORT &= ~ (1 << I2C_DAT);
+
+#define I2C_CLOCK_HI()\
+I2C_DDR &= ~ (1 << I2C_CLK);\
+I2C_PORT |= (1 << I2C_CLK);
+#define I2C_CLOCK_LO()\
+I2C_DDR |= (1 << I2C_CLK);\
+I2C_PORT &= ~ (1 << I2C_CLK);
+
+#define I2C_DELAY 1
+
+void I2C_WriteBit(unsigned char c)
+{
+ if (c > 0)
+ {
+ I2C_DATA_HI();
+ }
+ else
+ {
+ I2C_DATA_LO();
+ }
+
+ I2C_CLOCK_HI();
+ _delay_us(I2C_DELAY);
+
+ I2C_CLOCK_LO();
+ _delay_us(I2C_DELAY);
+
+ if (c > 0)
+ {
+ I2C_DATA_LO();
+ }
+
+ _delay_us(I2C_DELAY);
+}
+
+// Inits bitbanging port, must be called before using the functions below
+//
+void I2C_Init()
+{
+ I2C_PORT &= ~ ((1 << I2C_DAT) | (1 << I2C_CLK));
+
+ I2C_CLOCK_HI();
+ I2C_DATA_HI();
+
+ _delay_us(I2C_DELAY);
+}
+
+// Send a START Condition
+//
+void I2C_Start()
+{
+ // set both to high at the same time
+ I2C_DDR &= ~ ((1 << I2C_DAT) | (1 << I2C_CLK));
+ _delay_us(I2C_DELAY);
+
+ I2C_DATA_LO();
+ _delay_us(I2C_DELAY);
+
+ I2C_CLOCK_LO();
+ _delay_us(I2C_DELAY);
+}
+
+// Send a STOP Condition
+//
+void I2C_Stop()
+{
+ I2C_CLOCK_HI();
+ _delay_us(I2C_DELAY);
+
+ I2C_DATA_HI();
+ _delay_us(I2C_DELAY);
+}
+
+// write a byte to the I2C slave device
+//
+unsigned char I2C_Write(unsigned char c)
+{
+ for (char i = 0; i < 8; i++)
+ {
+ I2C_WriteBit(c & 128);
+
+ c <<= 1;
+ }
+
+
+ I2C_WriteBit(0);
+ _delay_us(I2C_DELAY);
+ _delay_us(I2C_DELAY);
+
+ // _delay_us(I2C_DELAY);
+ //return I2C_ReadBit();
+ return 0;
+}
+
+
+#endif
+
// Setleds for standard RGB
-void inline ws2812_setleds(struct cRGB *ledarray, uint16_t leds)
+void inline ws2812_setleds(LED_TYPE *ledarray, uint16_t leds)
{
// ws2812_setleds_pin(ledarray,leds, _BV(ws2812_pin));
ws2812_setleds_pin(ledarray,leds, _BV(RGB_DI_PIN & 0xF));
}
-void inline ws2812_setleds_pin(struct cRGB *ledarray, uint16_t leds, uint8_t pinmask)
+void inline ws2812_setleds_pin(LED_TYPE *ledarray, uint16_t leds, uint8_t pinmask)
{
// ws2812_DDRREG |= pinmask; // Enable DDR
// new universal format (DDR)
@@ -34,14 +148,41 @@ void inline ws2812_setleds_pin(struct cRGB *ledarray, uint16_t leds, uint8_t pin
}
// Setleds for SK6812RGBW
-void inline ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t leds)
+void inline ws2812_setleds_rgbw(LED_TYPE *ledarray, uint16_t leds)
{
+
+ #ifdef RGBW_BB_TWI
+ uint8_t sreg_prev, twcr_prev;
+ sreg_prev=SREG;
+ twcr_prev=TWCR;
+ cli();
+ TWCR &= ~(1<<TWEN);
+ I2C_Init();
+ I2C_Start();
+ I2C_Write(0x84);
+ uint16_t datlen = leds<<2;
+ uint8_t curbyte;
+ uint8_t * data = (uint8_t*)ledarray;
+ while (datlen--) {
+ curbyte=*data++;
+ I2C_Write(curbyte);
+ }
+ I2C_Stop();
+ SREG=sreg_prev;
+ TWCR=twcr_prev;
+ #endif
+
+
// ws2812_DDRREG |= _BV(ws2812_pin); // Enable DDR
// new universal format (DDR)
_SFR_IO8((RGB_DI_PIN >> 4) + 1) |= _BV(RGB_DI_PIN & 0xF);
ws2812_sendarray_mask((uint8_t*)ledarray,leds<<2,_BV(RGB_DI_PIN & 0xF));
- _delay_us(80);
+
+
+ #ifndef RGBW_BB_TWI
+ _delay_us(80);
+ #endif
}
void ws2812_sendarray(uint8_t *data,uint16_t datlen)
@@ -123,7 +264,7 @@ void inline ws2812_sendarray_mask(uint8_t *data,uint16_t datlen,uint8_t maskhi)
cli();
while (datlen--) {
- curbyte=*data++;
+ curbyte=(*data++);
asm volatile(
" ldi %0,8 \n\t"
diff --git a/quantum/light_ws2812.h b/quantum/light_ws2812.h
index 54eef22d9..9498e550e 100755
--- a/quantum/light_ws2812.h
+++ b/quantum/light_ws2812.h
@@ -16,6 +16,21 @@
#include <avr/io.h>
#include <avr/interrupt.h>
//#include "ws2812_config.h"
+//#include "i2cmaster.h"
+
+#define LIGHT_I2C 1
+#define LIGHT_I2C_ADDR 0x84
+#define LIGHT_I2C_ADDR_WRITE ( (LIGHT_I2C_ADDR<<1) | I2C_WRITE )
+#define LIGHT_I2C_ADDR_READ ( (LIGHT_I2C_ADDR<<1) | I2C_READ )
+
+#define RGBW 1
+
+#ifdef RGBW
+ #define LED_TYPE struct cRGBW
+#else
+ #define LED_TYPE struct cRGB
+#endif
+
/*
* Structure of the LED array
@@ -42,9 +57,9 @@ struct cRGBW { uint8_t g; uint8_t r; uint8_t b; uint8_t w;};
* - Wait 50�s to reset the LEDs
*/
-void ws2812_setleds (struct cRGB *ledarray, uint16_t number_of_leds);
-void ws2812_setleds_pin (struct cRGB *ledarray, uint16_t number_of_leds,uint8_t pinmask);
-void ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t number_of_leds);
+void ws2812_setleds (LED_TYPE *ledarray, uint16_t number_of_leds);
+void ws2812_setleds_pin (LED_TYPE *ledarray, uint16_t number_of_leds,uint8_t pinmask);
+void ws2812_setleds_rgbw(LED_TYPE *ledarray, uint16_t number_of_leds);
/*
* Old interface / Internal functions
diff --git a/quantum/matrix.c b/quantum/matrix.c
index 3174e0739..07eb87bc3 100644
--- a/quantum/matrix.c
+++ b/quantum/matrix.c
@@ -25,37 +25,65 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "debug.h"
#include "util.h"
#include "matrix.h"
+#include "timer.h"
+
/* Set 0 if debouncing isn't needed */
#ifndef DEBOUNCING_DELAY
# define DEBOUNCING_DELAY 5
#endif
-static uint8_t debouncing = DEBOUNCING_DELAY;
+
+#if (DEBOUNCING_DELAY > 0)
+ static uint16_t debouncing_time;
+ static bool debouncing = false;
+#endif
+
+#if (MATRIX_COLS <= 8)
+# define print_matrix_header() print("\nr/c 01234567\n")
+# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop(matrix[i])
+# define ROW_SHIFTER ((uint8_t)1)
+#elif (MATRIX_COLS <= 16)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop16(matrix[i])
+# define ROW_SHIFTER ((uint16_t)1)
+#elif (MATRIX_COLS <= 32)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop32(matrix[i])
+# define ROW_SHIFTER ((uint32_t)1)
+#endif
+
+#ifdef MATRIX_MASKED
+ extern const matrix_row_t matrix_mask[];
+#endif
static const uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
static const uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
/* matrix state(1:on, 0:off) */
static matrix_row_t matrix[MATRIX_ROWS];
+
+static matrix_row_t matrix_raw[MATRIX_ROWS];
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-#if DIODE_DIRECTION == ROW2COL
- static matrix_row_t matrix_reversed[MATRIX_COLS];
- static matrix_row_t matrix_reversed_debouncing[MATRIX_COLS];
-#endif
-#if MATRIX_COLS > 16
- #define SHIFTER 1UL
-#else
- #define SHIFTER 1
+#if (DIODE_DIRECTION == COL2ROW)
+ static void init_cols(void);
+ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row);
+ static void unselect_rows(void);
+ static void select_row(uint8_t row);
+ static void unselect_row(uint8_t row);
+#else // ROW2COL
+ static void init_rows(void);
+ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
+ static void unselect_cols(void);
+ static void unselect_col(uint8_t col);
+ static void select_col(uint8_t col);
#endif
-static matrix_row_t read_cols(void);
-static void init_cols(void);
-static void unselect_rows(void);
-static void select_row(uint8_t row);
-
__attribute__ ((weak))
void matrix_init_quantum(void) {
matrix_init_kb();
@@ -95,7 +123,7 @@ uint8_t matrix_cols(void) {
}
// void matrix_power_up(void) {
-// #if DIODE_DIRECTION == COL2ROW
+// #if (DIODE_DIRECTION == COL2ROW)
// for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) {
// /* DDRxn */
// _SFR_IO8((row_pins[r] >> 4) + 1) |= _BV(row_pins[r] & 0xF);
@@ -119,19 +147,26 @@ uint8_t matrix_cols(void) {
// }
void matrix_init(void) {
+
// To use PORTF disable JTAG with writing JTD bit twice within four cycles.
- #ifdef __AVR_ATmega32U4__
+ #if (defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) || defined(__AVR_ATmega32U4__))
MCUCR |= _BV(JTD);
MCUCR |= _BV(JTD);
#endif
// initialize row and col
+#if (DIODE_DIRECTION == COL2ROW)
unselect_rows();
init_cols();
+#else // ROW2COL
+ unselect_cols();
+ init_rows();
+#endif
// initialize matrix state: all keys off
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
matrix[i] = 0;
+ matrix_raw[i] = 0;
matrix_debouncing[i] = 0;
}
@@ -141,71 +176,60 @@ void matrix_init(void) {
uint8_t matrix_scan(void)
{
-#if DIODE_DIRECTION == COL2ROW
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- select_row(i);
- wait_us(30); // without this wait read unstable value.
- matrix_row_t cols = read_cols();
- if (matrix_debouncing[i] != cols) {
- matrix_debouncing[i] = cols;
- if (debouncing) {
- debug("bounce!: "); debug_hex(debouncing); debug("\n");
- }
- debouncing = DEBOUNCING_DELAY;
- }
- unselect_rows();
- }
+#if (DIODE_DIRECTION == COL2ROW)
- if (debouncing) {
- if (--debouncing) {
- wait_ms(1);
- } else {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
+ // Set row, read cols
+ for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) {
+# if (DEBOUNCING_DELAY > 0)
+ bool matrix_changed = read_cols_on_row(matrix_debouncing, current_row);
+
+ if (matrix_changed) {
+ debouncing = true;
+ debouncing_time = timer_read();
}
- }
+
+# else
+ read_cols_on_row(matrix, current_row);
+# endif
+
}
-#else
- for (uint8_t i = 0; i < MATRIX_COLS; i++) {
- select_row(i);
- wait_us(30); // without this wait read unstable value.
- matrix_row_t rows = read_cols();
- if (matrix_reversed_debouncing[i] != rows) {
- matrix_reversed_debouncing[i] = rows;
- if (debouncing) {
- debug("bounce!: "); debug_hex(debouncing); debug("\n");
+
+#else // ROW2COL
+
+ // Set col, read rows
+ for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
+# if (DEBOUNCING_DELAY > 0)
+ bool matrix_changed = read_rows_on_col(matrix_debouncing, current_col);
+ if (matrix_changed) {
+ debouncing = true;
+ debouncing_time = timer_read();
}
- debouncing = DEBOUNCING_DELAY;
- }
- unselect_rows();
+# else
+ read_rows_on_col(matrix, current_col);
+# endif
+
}
- if (debouncing) {
- if (--debouncing) {
- wait_ms(1);
- } else {
- for (uint8_t i = 0; i < MATRIX_COLS; i++) {
- matrix_reversed[i] = matrix_reversed_debouncing[i];
+#endif
+
+# if (DEBOUNCING_DELAY > 0)
+ if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) {
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = matrix_debouncing[i];
}
+ debouncing = false;
}
- }
- for (uint8_t y = 0; y < MATRIX_ROWS; y++) {
- matrix_row_t row = 0;
- for (uint8_t x = 0; x < MATRIX_COLS; x++) {
- row |= ((matrix_reversed[x] & (1<<y)) >> y) << x;
- }
- matrix[y] = row;
- }
-#endif
+# endif
matrix_scan_quantum();
-
return 1;
}
bool matrix_is_modified(void)
{
+#if (DEBOUNCING_DELAY > 0)
if (debouncing) return false;
+#endif
return true;
}
@@ -218,15 +242,22 @@ bool matrix_is_on(uint8_t row, uint8_t col)
inline
matrix_row_t matrix_get_row(uint8_t row)
{
+ // Matrix mask lets you disable switches in the returned matrix data. For example, if you have a
+ // switch blocker installed and the switch is always pressed.
+#ifdef MATRIX_MASKED
+ return matrix[row] & matrix_mask[row];
+#else
return matrix[row];
+#endif
}
void matrix_print(void)
{
- print("\nr/c 0123456789ABCDEF\n");
+ print_matrix_header();
+
for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
phex(row); print(": ");
- pbin_reverse16(matrix_get_row(row));
+ print_matrix_row(row);
print("\n");
}
}
@@ -235,63 +266,148 @@ uint8_t matrix_key_count(void)
{
uint8_t count = 0;
for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop16(matrix[i]);
+ count += matrix_bitpop(i);
}
return count;
}
+
+
+#if (DIODE_DIRECTION == COL2ROW)
+
static void init_cols(void)
{
-#if DIODE_DIRECTION == COL2ROW
- for(int x = 0; x < MATRIX_COLS; x++) {
- int pin = col_pins[x];
-#else
- for(int x = 0; x < MATRIX_ROWS; x++) {
- int pin = row_pins[x];
-#endif
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF);
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF);
+ for(uint8_t x = 0; x < MATRIX_COLS; x++) {
+ uint8_t pin = col_pins[x];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
}
}
-static matrix_row_t read_cols(void)
+static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
{
- matrix_row_t result = 0;
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[current_row];
-#if DIODE_DIRECTION == COL2ROW
- for(int x = 0; x < MATRIX_COLS; x++) {
- int pin = col_pins[x];
-#else
- for(int x = 0; x < MATRIX_ROWS; x++) {
- int pin = row_pins[x];
-#endif
- result |= (_SFR_IO8(pin >> 4) & _BV(pin & 0xF)) ? 0 : (SHIFTER << x);
+ // Clear data in matrix row
+ current_matrix[current_row] = 0;
+
+ // Select row and wait for row selecton to stabilize
+ select_row(current_row);
+ wait_us(30);
+
+ // For each col...
+ for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+
+ // Select the col pin to read (active low)
+ uint8_t pin = col_pins[col_index];
+ uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
+
+ // Populate the matrix row with the state of the col pin
+ current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
}
- return result;
+
+ // Unselect row
+ unselect_row(current_row);
+
+ return (last_row_value != current_matrix[current_row]);
+}
+
+static void select_row(uint8_t row)
+{
+ uint8_t pin = row_pins[row];
+ _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
+ _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+}
+
+static void unselect_row(uint8_t row)
+{
+ uint8_t pin = row_pins[row];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
}
static void unselect_rows(void)
{
-#if DIODE_DIRECTION == COL2ROW
- for(int x = 0; x < MATRIX_ROWS; x++) {
- int pin = row_pins[x];
-#else
- for(int x = 0; x < MATRIX_COLS; x++) {
- int pin = col_pins[x];
-#endif
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF);
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF);
+ for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ uint8_t pin = row_pins[x];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
}
}
-static void select_row(uint8_t row)
+#else // ROW2COL
+
+static void init_rows(void)
{
+ for(uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ uint8_t pin = row_pins[x];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+ }
+}
-#if DIODE_DIRECTION == COL2ROW
- int pin = row_pins[row];
-#else
- int pin = col_pins[row];
-#endif
- _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF);
- _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF);
+static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
+{
+ bool matrix_changed = false;
+
+ // Select col and wait for col selecton to stabilize
+ select_col(current_col);
+ wait_us(30);
+
+ // For each row...
+ for(uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++)
+ {
+
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[row_index];
+
+ // Check row pin state
+ if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
+ {
+ // Pin LO, set col bit
+ current_matrix[row_index] |= (ROW_SHIFTER << current_col);
+ }
+ else
+ {
+ // Pin HI, clear col bit
+ current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
+ }
+
+ // Determine if the matrix changed state
+ if ((last_row_value != current_matrix[row_index]) && !(matrix_changed))
+ {
+ matrix_changed = true;
+ }
+ }
+
+ // Unselect col
+ unselect_col(current_col);
+
+ return matrix_changed;
}
+
+static void select_col(uint8_t col)
+{
+ uint8_t pin = col_pins[col];
+ _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
+ _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+}
+
+static void unselect_col(uint8_t col)
+{
+ uint8_t pin = col_pins[col];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+}
+
+static void unselect_cols(void)
+{
+ for(uint8_t x = 0; x < MATRIX_COLS; x++) {
+ uint8_t pin = col_pins[x];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+ }
+}
+
+#endif
diff --git a/quantum/pincontrol.h b/quantum/pincontrol.h
new file mode 100644
index 000000000..36ce29ef2
--- /dev/null
+++ b/quantum/pincontrol.h
@@ -0,0 +1,37 @@
+#pragma once
+// Some helpers for controlling gpio pins
+#include <avr/io.h>
+
+enum {
+ PinDirectionInput = 0,
+ PinDirectionOutput = 1,
+ PinLevelHigh = 1,
+ PinLevelLow = 0,
+};
+
+// ex: pinMode(B0, PinDirectionOutput);
+static inline void pinMode(uint8_t pin, int mode) {
+ uint8_t bv = _BV(pin & 0xf);
+ if (mode == PinDirectionOutput) {
+ _SFR_IO8((pin >> 4) + 1) |= bv;
+ } else {
+ _SFR_IO8((pin >> 4) + 1) &= ~bv;
+ _SFR_IO8((pin >> 4) + 2) &= ~bv;
+ }
+}
+
+// ex: digitalWrite(B0, PinLevelHigh);
+static inline void digitalWrite(uint8_t pin, int mode) {
+ uint8_t bv = _BV(pin & 0xf);
+ if (mode == PinLevelHigh) {
+ _SFR_IO8((pin >> 4) + 2) |= bv;
+ } else {
+ _SFR_IO8((pin >> 4) + 2) &= ~bv;
+ }
+}
+
+// Return true if the pin is HIGH
+// digitalRead(B0)
+static inline bool digitalRead(uint8_t pin) {
+ return _SFR_IO8(pin >> 4) & _BV(pin & 0xf);
+}
diff --git a/quantum/process_keycode/process_midi.c b/quantum/process_keycode/process_midi.c
index d6ab9c626..577dad43a 100644
--- a/quantum/process_keycode/process_midi.c
+++ b/quantum/process_keycode/process_midi.c
@@ -1,13 +1,15 @@
#include "process_midi.h"
bool midi_activated = false;
-uint8_t starting_note = 0x0C;
-int offset = 7;
+uint8_t midi_starting_note = 0x0C;
+int midi_offset = 7;
bool process_midi(uint16_t keycode, keyrecord_t *record) {
if (keycode == MI_ON && record->event.pressed) {
midi_activated = true;
+#ifdef AUDIO_ENABLE
music_scale_user();
+#endif
return false;
}
@@ -20,42 +22,42 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) {
if (midi_activated) {
if (record->event.key.col == (MATRIX_COLS - 1) && record->event.key.row == (MATRIX_ROWS - 1)) {
if (record->event.pressed) {
- starting_note++; // Change key
+ midi_starting_note++; // Change key
midi_send_cc(&midi_device, 0, 0x7B, 0);
}
return false;
}
if (record->event.key.col == (MATRIX_COLS - 2) && record->event.key.row == (MATRIX_ROWS - 1)) {
if (record->event.pressed) {
- starting_note--; // Change key
+ midi_starting_note--; // Change key
midi_send_cc(&midi_device, 0, 0x7B, 0);
}
return false;
}
if (record->event.key.col == (MATRIX_COLS - 3) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) {
- offset++; // Change scale
+ midi_offset++; // Change scale
midi_send_cc(&midi_device, 0, 0x7B, 0);
return false;
}
if (record->event.key.col == (MATRIX_COLS - 4) && record->event.key.row == (MATRIX_ROWS - 1) && record->event.pressed) {
- offset--; // Change scale
+ midi_offset--; // Change scale
midi_send_cc(&midi_device, 0, 0x7B, 0);
return false;
}
// basic
- // uint8_t note = (starting_note + SCALE[record->event.key.col + offset])+12*(MATRIX_ROWS - record->event.key.row);
+ // uint8_t note = (midi_starting_note + SCALE[record->event.key.col + midi_offset])+12*(MATRIX_ROWS - record->event.key.row);
// advanced
- // uint8_t note = (starting_note + record->event.key.col + offset)+12*(MATRIX_ROWS - record->event.key.row);
+ // uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+12*(MATRIX_ROWS - record->event.key.row);
// guitar
- uint8_t note = (starting_note + record->event.key.col + offset)+5*(MATRIX_ROWS - record->event.key.row);
+ uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+5*(MATRIX_ROWS - record->event.key.row);
// violin
- // uint8_t note = (starting_note + record->event.key.col + offset)+7*(MATRIX_ROWS - record->event.key.row);
+ // uint8_t note = (midi_starting_note + record->event.key.col + midi_offset)+7*(MATRIX_ROWS - record->event.key.row);
if (record->event.pressed) {
- // midi_send_noteon(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127);
+ // midi_send_noteon(&midi_device, record->event.key.row, midi_starting_note + SCALE[record->event.key.col], 127);
midi_send_noteon(&midi_device, 0, note, 127);
} else {
- // midi_send_noteoff(&midi_device, record->event.key.row, starting_note + SCALE[record->event.key.col], 127);
+ // midi_send_noteoff(&midi_device, record->event.key.row, midi_starting_note + SCALE[record->event.key.col], 127);
midi_send_noteoff(&midi_device, 0, note, 127);
}
@@ -63,4 +65,4 @@ bool process_midi(uint16_t keycode, keyrecord_t *record) {
return false;
}
return true;
-} \ No newline at end of file
+}
diff --git a/quantum/process_keycode/process_music.c b/quantum/process_keycode/process_music.c
index c8f3ddb90..bae43943e 100644
--- a/quantum/process_keycode/process_music.c
+++ b/quantum/process_keycode/process_music.c
@@ -1,11 +1,12 @@
#include "process_music.h"
bool music_activated = false;
-uint8_t starting_note = 0x0C;
-int offset = 7;
+uint8_t music_starting_note = 0x0C;
+int music_offset = 7;
// music sequencer
static bool music_sequence_recording = false;
+static bool music_sequence_recorded = false;
static bool music_sequence_playing = false;
static float music_sequence[16] = {0};
static uint8_t music_sequence_count = 0;
@@ -77,6 +78,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
if (keycode == KC_LCTL && record->event.pressed) { // Start recording
stop_all_notes();
music_sequence_recording = true;
+ music_sequence_recorded = false;
music_sequence_playing = false;
music_sequence_count = 0;
return false;
@@ -84,12 +86,15 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
if (keycode == KC_LALT && record->event.pressed) { // Stop recording/playing
stop_all_notes();
+ if (music_sequence_recording) { // was recording
+ music_sequence_recorded = true;
+ }
music_sequence_recording = false;
music_sequence_playing = false;
return false;
}
- if (keycode == KC_LGUI && record->event.pressed) { // Start playing
+ if (keycode == KC_LGUI && record->event.pressed && music_sequence_recorded) { // Start playing
stop_all_notes();
music_sequence_recording = false;
music_sequence_playing = true;
@@ -110,7 +115,7 @@ bool process_music(uint16_t keycode, keyrecord_t *record) {
return false;
}
- float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(starting_note + SCALE[record->event.key.col + offset])/12.0+(MATRIX_ROWS - record->event.key.row));
+ float freq = ((float)220.0)*pow(2.0, -5.0)*pow(2.0,(music_starting_note + SCALE[record->event.key.col + music_offset])/12.0+(MATRIX_ROWS - record->event.key.row));
if (record->event.pressed) {
play_note(freq, 0xF);
if (music_sequence_recording) {
diff --git a/quantum/process_keycode/process_printer.c b/quantum/process_keycode/process_printer.c
new file mode 100644
index 000000000..2e11dd366
--- /dev/null
+++ b/quantum/process_keycode/process_printer.c
@@ -0,0 +1,254 @@
+#include "process_printer.h"
+#include "action_util.h"
+
+bool printing_enabled = false;
+uint8_t character_shift = 0;
+
+void enabled_printing() {
+ printing_enabled = true;
+ serial_init();
+}
+
+void disable_printing() {
+ printing_enabled = false;
+}
+
+uint8_t shifted_numbers[10] = {0x21, 0x40, 0x23, 0x24, 0x25, 0x5E, 0x26, 0x2A, 0x28, 0x29};
+
+// uint8_t keycode_to_ascii[0xFF][2];
+
+// keycode_to_ascii[KC_MINS] = {0x2D, 0x5F};
+
+void print_char(char c) {
+ USB_Disable();
+ serial_send(c);
+ USB_Init();
+}
+
+void print_box_string(uint8_t text[]) {
+ uint8_t len = strlen(text);
+ uint8_t out[len * 3 + 8];
+ out[0] = 0xDA;
+ for (uint8_t i = 0; i < len; i++) {
+ out[i+1] = 0xC4;
+ }
+ out[len + 1] = 0xBF;
+ out[len + 2] = '\n';
+
+ out[len + 3] = 0xB3;
+ for (uint8_t i = 0; i < len; i++) {
+ out[len + 4 + i] = text[i];
+ }
+ out[len * 2 + 4] = 0xB3;
+ out[len * 2 + 5] = '\n';
+
+
+ out[len * 2 + 6] = 0xC0;
+ for (uint8_t i = 0; i < len; i++) {
+ out[len * 2 + 7 + i] = 0xC4;
+ }
+ out[len * 3 + 7] = 0xD9;
+ out[len * 3 + 8] = '\n';
+
+ print_string(out);
+}
+
+void print_string(char c[]) {
+ for(uint8_t i = 0; i < strlen(c); i++)
+ print_char(c[i]);
+}
+
+bool process_printer(uint16_t keycode, keyrecord_t *record) {
+ if (keycode == PRINT_ON) {
+ enabled_printing();
+ return false;
+ }
+ if (keycode == PRINT_OFF) {
+ disable_printing();
+ return false;
+ }
+
+ if (printing_enabled) {
+ switch(keycode) {
+ case KC_EXLM ... KC_RPRN:
+ case KC_UNDS:
+ case KC_PLUS:
+ case KC_LCBR:
+ case KC_RCBR:
+ case KC_PIPE:
+ case KC_TILD:
+ keycode &= 0xFF;
+ case KC_LSFT:
+ case KC_RSFT:
+ if (record->event.pressed) {
+ character_shift++;
+ } else {
+ character_shift--;
+ }
+ return false;
+ break;
+ }
+
+ switch(keycode) {
+ case KC_F1:
+ if (record->event.pressed) {
+ print_box_string("This is a line of text!");
+ }
+ return false;
+ case KC_ESC:
+ if (record->event.pressed) {
+ print_char(0x1B);
+ }
+ return false;
+ break;
+ case KC_SPC:
+ if (record->event.pressed) {
+ print_char(0x20);
+ }
+ return false;
+ break;
+ case KC_A ... KC_Z:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x41 + (keycode - KC_A));
+ } else {
+ print_char(0x61 + (keycode - KC_A));
+ }
+ }
+ return false;
+ break;
+ case KC_1 ... KC_0:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(shifted_numbers[keycode - KC_1]);
+ } else {
+ print_char(0x30 + ((keycode - KC_1 + 1) % 10));
+ }
+ }
+ return false;
+ break;
+ case KC_ENT:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x0C);
+ } else {
+ print_char(0x0A);
+ }
+ }
+ return false;
+ break;
+ case KC_BSPC:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x18);
+ } else {
+ print_char(0x1A);
+ }
+ }
+ return false;
+ break;
+ case KC_DOT:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x3E);
+ } else {
+ print_char(0x2E);
+ }
+ }
+ return false;
+ break;
+ case KC_COMM:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x3C);
+ } else {
+ print_char(0x2C);
+ }
+ }
+ return false;
+ break;
+ case KC_SLSH:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x3F);
+ } else {
+ print_char(0x2F);
+ }
+ }
+ return false;
+ break;
+ case KC_QUOT:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x22);
+ } else {
+ print_char(0x27);
+ }
+ }
+ return false;
+ break;
+ case KC_GRV:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x7E);
+ } else {
+ print_char(0x60);
+ }
+ }
+ return false;
+ break;
+ case KC_MINS:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x5F);
+ } else {
+ print_char(0x2D);
+ }
+ }
+ return false;
+ break;
+ case KC_EQL:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x2B);
+ } else {
+ print_char(0x3D);
+ }
+ }
+ return false;
+ break;
+ case KC_LBRC:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x7B);
+ } else {
+ print_char(0x5B);
+ }
+ }
+ return false;
+ break;
+ case KC_RBRC:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x7D);
+ } else {
+ print_char(0x5D);
+ }
+ }
+ return false;
+ break;
+ case KC_BSLS:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x7C);
+ } else {
+ print_char(0x5C);
+ }
+ }
+ return false;
+ break;
+ }
+ }
+ return true;
+
+} \ No newline at end of file
diff --git a/quantum/process_keycode/process_printer.h b/quantum/process_keycode/process_printer.h
new file mode 100644
index 000000000..fdd36d75a
--- /dev/null
+++ b/quantum/process_keycode/process_printer.h
@@ -0,0 +1,8 @@
+#ifndef PROCESS_PRINTER_H
+#define PROCESS_PRINTER_H
+
+#include "quantum.h"
+
+#include "protocol/serial.h"
+
+#endif \ No newline at end of file
diff --git a/quantum/process_keycode/process_printer_bb.c b/quantum/process_keycode/process_printer_bb.c
new file mode 100644
index 000000000..1924d0377
--- /dev/null
+++ b/quantum/process_keycode/process_printer_bb.c
@@ -0,0 +1,260 @@
+#include "process_printer.h"
+#include "action_util.h"
+
+bool printing_enabled = false;
+uint8_t character_shift = 0;
+
+#define SERIAL_PIN_DDR DDRD
+#define SERIAL_PIN_PORT PORTD
+#define SERIAL_PIN_MASK _BV(PD3)
+#define SERIAL_DELAY 52
+
+inline static
+void serial_delay(void) {
+ _delay_us(SERIAL_DELAY);
+}
+
+inline static
+void serial_high(void) {
+ SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
+}
+
+inline static
+void serial_low(void) {
+ SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
+}
+
+inline static
+void serial_output(void) {
+ SERIAL_PIN_DDR |= SERIAL_PIN_MASK;
+}
+
+
+void enabled_printing() {
+ printing_enabled = true;
+ serial_output();
+ serial_high();
+}
+
+void disable_printing() {
+ printing_enabled = false;
+}
+
+uint8_t shifted_numbers[10] = {0x21, 0x40, 0x23, 0x24, 0x25, 0x5E, 0x26, 0x2A, 0x28, 0x29};
+
+// uint8_t keycode_to_ascii[0xFF][2];
+
+// keycode_to_ascii[KC_MINS] = {0x2D, 0x5F};
+
+void print_char(char c) {
+ uint8_t b = 8;
+ serial_output();
+ while( b-- ) {
+ if(c & (1 << b)) {
+ serial_high();
+ } else {
+ serial_low();
+ }
+ serial_delay();
+ }
+}
+
+void print_string(char c[]) {
+ for(uint8_t i = 0; i < strlen(c); i++)
+ print_char(c[i]);
+}
+
+bool process_printer(uint16_t keycode, keyrecord_t *record) {
+ if (keycode == PRINT_ON) {
+ enabled_printing();
+ return false;
+ }
+ if (keycode == PRINT_OFF) {
+ disable_printing();
+ return false;
+ }
+
+ if (printing_enabled) {
+ switch(keycode) {
+ case KC_EXLM ... KC_RPRN:
+ case KC_UNDS:
+ case KC_PLUS:
+ case KC_LCBR:
+ case KC_RCBR:
+ case KC_PIPE:
+ case KC_TILD:
+ keycode &= 0xFF;
+ case KC_LSFT:
+ case KC_RSFT:
+ if (record->event.pressed) {
+ character_shift++;
+ } else {
+ character_shift--;
+ }
+ return false;
+ break;
+ }
+
+ switch(keycode) {
+ case KC_F1:
+ if (record->event.pressed) {
+ print_string("This is a line of text!\n\n\n");
+ }
+ return false;
+ case KC_ESC:
+ if (record->event.pressed) {
+ print_char(0x1B);
+ }
+ return false;
+ break;
+ case KC_SPC:
+ if (record->event.pressed) {
+ print_char(0x20);
+ }
+ return false;
+ break;
+ case KC_A ... KC_Z:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x41 + (keycode - KC_A));
+ } else {
+ print_char(0x61 + (keycode - KC_A));
+ }
+ }
+ return false;
+ break;
+ case KC_1 ... KC_0:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(shifted_numbers[keycode - KC_1]);
+ } else {
+ print_char(0x30 + ((keycode - KC_1 + 1) % 10));
+ }
+ }
+ return false;
+ break;
+ case KC_ENT:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x0C);
+ } else {
+ print_char(0x0A);
+ }
+ }
+ return false;
+ break;
+ case KC_BSPC:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x18);
+ } else {
+ print_char(0x1A);
+ }
+ }
+ return false;
+ break;
+ case KC_DOT:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x3E);
+ } else {
+ print_char(0x2E);
+ }
+ }
+ return false;
+ break;
+ case KC_COMM:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x3C);
+ } else {
+ print_char(0x2C);
+ }
+ }
+ return false;
+ break;
+ case KC_SLSH:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x3F);
+ } else {
+ print_char(0x2F);
+ }
+ }
+ return false;
+ break;
+ case KC_QUOT:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x22);
+ } else {
+ print_char(0x27);
+ }
+ }
+ return false;
+ break;
+ case KC_GRV:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x7E);
+ } else {
+ print_char(0x60);
+ }
+ }
+ return false;
+ break;
+ case KC_MINS:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x5F);
+ } else {
+ print_char(0x2D);
+ }
+ }
+ return false;
+ break;
+ case KC_EQL:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x2B);
+ } else {
+ print_char(0x3D);
+ }
+ }
+ return false;
+ break;
+ case KC_LBRC:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x7B);
+ } else {
+ print_char(0x5B);
+ }
+ }
+ return false;
+ break;
+ case KC_RBRC:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x7D);
+ } else {
+ print_char(0x5D);
+ }
+ }
+ return false;
+ break;
+ case KC_BSLS:
+ if (record->event.pressed) {
+ if (character_shift) {
+ print_char(0x7C);
+ } else {
+ print_char(0x5C);
+ }
+ }
+ return false;
+ break;
+ }
+ }
+ return true;
+
+} \ No newline at end of file
diff --git a/quantum/process_keycode/process_tap_dance.c b/quantum/process_keycode/process_tap_dance.c
index 9b172e1b6..6ae362c4c 100644
--- a/quantum/process_keycode/process_tap_dance.c
+++ b/quantum/process_keycode/process_tap_dance.c
@@ -1,90 +1,136 @@
#include "quantum.h"
+#include "action_tapping.h"
-static qk_tap_dance_state_t qk_tap_dance_state;
+static uint16_t last_td;
+static int8_t highest_td = -1;
-static void _process_tap_dance_action_pair (qk_tap_dance_state_t *state,
- uint16_t kc1, uint16_t kc2) {
- uint16_t kc;
+void qk_tap_dance_pair_finished (qk_tap_dance_state_t *state, void *user_data) {
+ qk_tap_dance_pair_t *pair = (qk_tap_dance_pair_t *)user_data;
- if (state->count == 0)
- return;
-
- kc = (state->count == 1) ? kc1 : kc2;
+ if (state->count == 1) {
+ register_code16 (pair->kc1);
+ } else if (state->count == 2) {
+ register_code16 (pair->kc2);
+ }
+}
- register_code (kc);
- unregister_code (kc);
+void qk_tap_dance_pair_reset (qk_tap_dance_state_t *state, void *user_data) {
+ qk_tap_dance_pair_t *pair = (qk_tap_dance_pair_t *)user_data;
- if (state->count >= 2) {
- reset_tap_dance (state);
+ if (state->count == 1) {
+ unregister_code16 (pair->kc1);
+ } else if (state->count == 2) {
+ unregister_code16 (pair->kc2);
}
}
-static void _process_tap_dance_action_fn (qk_tap_dance_state_t *state,
- qk_tap_dance_user_fn_t fn)
+static inline void _process_tap_dance_action_fn (qk_tap_dance_state_t *state,
+ void *user_data,
+ qk_tap_dance_user_fn_t fn)
{
- fn(state);
+ if (fn) {
+ fn(state, user_data);
+ }
}
-void process_tap_dance_action (uint16_t keycode)
+static inline void process_tap_dance_action_on_each_tap (qk_tap_dance_action_t *action)
{
- uint16_t idx = keycode - QK_TAP_DANCE;
- qk_tap_dance_action_t action;
-
- action = tap_dance_actions[idx];
+ _process_tap_dance_action_fn (&action->state, action->user_data, action->fn.on_each_tap);
+}
- switch (action.type) {
- case QK_TAP_DANCE_TYPE_PAIR:
- _process_tap_dance_action_pair (&qk_tap_dance_state,
- action.pair.kc1, action.pair.kc2);
- break;
- case QK_TAP_DANCE_TYPE_FN:
- _process_tap_dance_action_fn (&qk_tap_dance_state, action.fn);
- break;
+static inline void process_tap_dance_action_on_dance_finished (qk_tap_dance_action_t *action)
+{
+ if (action->state.finished)
+ return;
+ action->state.finished = true;
+ _process_tap_dance_action_fn (&action->state, action->user_data, action->fn.on_dance_finished);
+}
- default:
- break;
- }
+static inline void process_tap_dance_action_on_reset (qk_tap_dance_action_t *action)
+{
+ _process_tap_dance_action_fn (&action->state, action->user_data, action->fn.on_reset);
}
bool process_tap_dance(uint16_t keycode, keyrecord_t *record) {
- bool r = true;
+ uint16_t idx = keycode - QK_TAP_DANCE;
+ qk_tap_dance_action_t *action;
+
+ if (last_td && last_td != keycode) {
+ (&tap_dance_actions[last_td - QK_TAP_DANCE])->state.interrupted = true;
+ }
switch(keycode) {
case QK_TAP_DANCE ... QK_TAP_DANCE_MAX:
- if (qk_tap_dance_state.keycode && qk_tap_dance_state.keycode != keycode) {
- process_tap_dance_action (qk_tap_dance_state.keycode);
- } else {
- r = false;
- }
+ if ((int16_t)idx > highest_td)
+ highest_td = idx;
+ action = &tap_dance_actions[idx];
+ action->state.pressed = record->event.pressed;
if (record->event.pressed) {
- qk_tap_dance_state.keycode = keycode;
- qk_tap_dance_state.timer = timer_read ();
- qk_tap_dance_state.count++;
+ action->state.keycode = keycode;
+ action->state.count++;
+ action->state.timer = timer_read();
+ process_tap_dance_action_on_each_tap (action);
+
+ if (last_td && last_td != keycode) {
+ qk_tap_dance_action_t *paction = &tap_dance_actions[last_td - QK_TAP_DANCE];
+ paction->state.interrupted = true;
+ process_tap_dance_action_on_dance_finished (paction);
+ reset_tap_dance (&paction->state);
+ }
+
+ last_td = keycode;
}
+
break;
default:
- if (qk_tap_dance_state.keycode) {
- process_tap_dance_action (qk_tap_dance_state.keycode);
-
- reset_tap_dance (&qk_tap_dance_state);
+ if (!record->event.pressed)
+ return true;
+
+ if (highest_td == -1)
+ return true;
+
+ for (int i = 0; i <= highest_td; i++) {
+ action = &tap_dance_actions[i];
+ if (action->state.count == 0)
+ continue;
+ action->state.interrupted = true;
+ process_tap_dance_action_on_dance_finished (action);
+ reset_tap_dance (&action->state);
}
break;
}
- return r;
+ return true;
}
void matrix_scan_tap_dance () {
- if (qk_tap_dance_state.keycode && timer_elapsed (qk_tap_dance_state.timer) > TAPPING_TERM) {
- process_tap_dance_action (qk_tap_dance_state.keycode);
+ if (highest_td == -1)
+ return;
- reset_tap_dance (&qk_tap_dance_state);
+ for (int i = 0; i <= highest_td; i++) {
+ qk_tap_dance_action_t *action = &tap_dance_actions[i];
+
+ if (action->state.count && timer_elapsed (action->state.timer) > TAPPING_TERM) {
+ process_tap_dance_action_on_dance_finished (action);
+ reset_tap_dance (&action->state);
+ }
}
}
void reset_tap_dance (qk_tap_dance_state_t *state) {
- state->keycode = 0;
+ qk_tap_dance_action_t *action;
+
+ if (state->pressed)
+ return;
+
+ action = &tap_dance_actions[state->keycode - QK_TAP_DANCE];
+
+ process_tap_dance_action_on_reset (action);
+
state->count = 0;
+ state->interrupted = false;
+ state->finished = false;
+ last_td = 0;
}
diff --git a/quantum/process_keycode/process_tap_dance.h b/quantum/process_keycode/process_tap_dance.h
index b9d7c7fcf..f753cbba6 100644
--- a/quantum/process_keycode/process_tap_dance.h
+++ b/quantum/process_keycode/process_tap_dance.h
@@ -11,41 +11,48 @@ typedef struct
uint8_t count;
uint16_t keycode;
uint16_t timer;
+ bool interrupted;
+ bool pressed;
+ bool finished;
} qk_tap_dance_state_t;
#define TD(n) (QK_TAP_DANCE + n)
-typedef enum
-{
- QK_TAP_DANCE_TYPE_PAIR,
- QK_TAP_DANCE_TYPE_FN,
-} qk_tap_dance_type_t;
-
-typedef void (*qk_tap_dance_user_fn_t) (qk_tap_dance_state_t *state);
+typedef void (*qk_tap_dance_user_fn_t) (qk_tap_dance_state_t *state, void *user_data);
typedef struct
{
- qk_tap_dance_type_t type;
- union {
- struct {
- uint16_t kc1;
- uint16_t kc2;
- } pair;
- qk_tap_dance_user_fn_t fn;
- };
+ struct {
+ qk_tap_dance_user_fn_t on_each_tap;
+ qk_tap_dance_user_fn_t on_dance_finished;
+ qk_tap_dance_user_fn_t on_reset;
+ } fn;
+ qk_tap_dance_state_t state;
+ void *user_data;
} qk_tap_dance_action_t;
+typedef struct
+{
+ uint16_t kc1;
+ uint16_t kc2;
+} qk_tap_dance_pair_t;
+
#define ACTION_TAP_DANCE_DOUBLE(kc1, kc2) { \
- .type = QK_TAP_DANCE_TYPE_PAIR, \
- .pair = { kc1, kc2 } \
+ .fn = { NULL, qk_tap_dance_pair_finished, qk_tap_dance_pair_reset }, \
+ .user_data = (void *)&((qk_tap_dance_pair_t) { kc1, kc2 }), \
+ }
+
+#define ACTION_TAP_DANCE_FN(user_fn) { \
+ .fn = { NULL, user_fn, NULL }, \
+ .user_data = NULL, \
}
-#define ACTION_TAP_DANCE_FN(user_fn) { \
- .type = QK_TAP_DANCE_TYPE_FN, \
- .fn = user_fn \
+#define ACTION_TAP_DANCE_FN_ADVANCED(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset) { \
+ .fn = { user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset }, \
+ .user_data = NULL, \
}
-extern const qk_tap_dance_action_t tap_dance_actions[];
+extern qk_tap_dance_action_t tap_dance_actions[];
/* To be used internally */
@@ -53,6 +60,9 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record);
void matrix_scan_tap_dance (void);
void reset_tap_dance (qk_tap_dance_state_t *state);
+void qk_tap_dance_pair_finished (qk_tap_dance_state_t *state, void *user_data);
+void qk_tap_dance_pair_reset (qk_tap_dance_state_t *state, void *user_data);
+
#else
#define TD(n) KC_NO
diff --git a/quantum/process_keycode/process_unicode.c b/quantum/process_keycode/process_unicode.c
index ad5d7f86b..cd3a610b4 100644
--- a/quantum/process_keycode/process_unicode.c
+++ b/quantum/process_keycode/process_unicode.c
@@ -2,6 +2,7 @@
static uint8_t input_mode;
+__attribute__((weak))
uint16_t hex_to_keycode(uint8_t hex)
{
if (hex == 0x0) {
@@ -13,45 +14,251 @@ uint16_t hex_to_keycode(uint8_t hex)
}
}
-void set_unicode_mode(uint8_t os_target)
+void set_unicode_input_mode(uint8_t os_target)
{
input_mode = os_target;
}
+uint8_t get_unicode_input_mode(void) {
+ return input_mode;
+}
+
+__attribute__((weak))
+void unicode_input_start (void) {
+ switch(input_mode) {
+ case UC_OSX:
+ register_code(KC_LALT);
+ break;
+ case UC_LNX:
+ register_code(KC_LCTL);
+ register_code(KC_LSFT);
+ register_code(KC_U);
+ unregister_code(KC_U);
+ unregister_code(KC_LSFT);
+ unregister_code(KC_LCTL);
+ break;
+ case UC_WIN:
+ register_code(KC_LALT);
+ register_code(KC_PPLS);
+ unregister_code(KC_PPLS);
+ break;
+ case UC_WINC:
+ register_code(KC_RALT);
+ unregister_code(KC_RALT);
+ register_code(KC_U);
+ unregister_code(KC_U);
+ }
+ wait_ms(UNICODE_TYPE_DELAY);
+}
+
+__attribute__((weak))
+void unicode_input_finish (void) {
+ switch(input_mode) {
+ case UC_OSX:
+ case UC_WIN:
+ unregister_code(KC_LALT);
+ break;
+ case UC_LNX:
+ register_code(KC_SPC);
+ unregister_code(KC_SPC);
+ break;
+ }
+}
+
+void register_hex(uint16_t hex) {
+ for(int i = 3; i >= 0; i--) {
+ uint8_t digit = ((hex >> (i*4)) & 0xF);
+ register_code(hex_to_keycode(digit));
+ unregister_code(hex_to_keycode(digit));
+ }
+}
+
bool process_unicode(uint16_t keycode, keyrecord_t *record) {
if (keycode > QK_UNICODE && record->event.pressed) {
uint16_t unicode = keycode & 0x7FFF;
- switch(input_mode) {
- case UC_OSX:
- register_code(KC_LALT);
- break;
- case UC_LNX:
- register_code(KC_LCTL);
- register_code(KC_LSFT);
- register_code(KC_U);
- unregister_code(KC_U);
- break;
- case UC_WIN:
- register_code(KC_LALT);
- register_code(KC_PPLS);
- unregister_code(KC_PPLS);
- break;
+ unicode_input_start();
+ register_hex(unicode);
+ unicode_input_finish();
+ }
+ return true;
+}
+
+#ifdef UNICODEMAP_ENABLE
+__attribute__((weak))
+const uint32_t PROGMEM unicode_map[] = {
+};
+
+void register_hex32(uint32_t hex) {
+ uint8_t onzerostart = 1;
+ for(int i = 7; i >= 0; i--) {
+ if (i <= 3) {
+ onzerostart = 0;
}
- for(int i = 3; i >= 0; i--) {
- uint8_t digit = ((unicode >> (i*4)) & 0xF);
+ uint8_t digit = ((hex >> (i*4)) & 0xF);
+ if (digit == 0) {
+ if (onzerostart == 0) {
register_code(hex_to_keycode(digit));
unregister_code(hex_to_keycode(digit));
+ }
+ } else {
+ register_code(hex_to_keycode(digit));
+ unregister_code(hex_to_keycode(digit));
+ onzerostart = 0;
}
- switch(input_mode) {
- case UC_OSX:
- case UC_WIN:
- unregister_code(KC_LALT);
- break;
- case UC_LNX:
- unregister_code(KC_LCTL);
- unregister_code(KC_LSFT);
+ }
+}
+
+__attribute__((weak))
+void unicode_map_input_error() {}
+
+bool process_unicode_map(uint16_t keycode, keyrecord_t *record) {
+ if ((keycode & QK_UNICODE_MAP) == QK_UNICODE_MAP && record->event.pressed) {
+ const uint32_t* map = unicode_map;
+ uint16_t index = keycode & 0x7FF;
+ uint32_t code = pgm_read_dword_far(&map[index]);
+ if ((code > 0xFFFF && input_mode == UC_OSX) || (code > 0xFFFFF && input_mode == UC_LNX)) {
+ // when character is out of range supported by the OS
+ unicode_map_input_error();
+ } else {
+ unicode_input_start();
+ register_hex32(code);
+ unicode_input_finish();
+ }
+ }
+ return true;
+}
+#endif
+
+#ifdef UCIS_ENABLE
+qk_ucis_state_t qk_ucis_state;
+
+void qk_ucis_start(void) {
+ qk_ucis_state.count = 0;
+ qk_ucis_state.in_progress = true;
+
+ qk_ucis_start_user();
+}
+
+__attribute__((weak))
+void qk_ucis_start_user(void) {
+ unicode_input_start();
+ register_hex(0x2328);
+ unicode_input_finish();
+}
+
+static bool is_uni_seq(char *seq) {
+ uint8_t i;
+
+ for (i = 0; seq[i]; i++) {
+ uint16_t code;
+ if (('1' <= seq[i]) && (seq[i] <= '0'))
+ code = seq[i] - '1' + KC_1;
+ else
+ code = seq[i] - 'a' + KC_A;
+
+ if (i > qk_ucis_state.count || qk_ucis_state.codes[i] != code)
+ return false;
+ }
+
+ return (qk_ucis_state.codes[i] == KC_ENT ||
+ qk_ucis_state.codes[i] == KC_SPC);
+}
+
+__attribute__((weak))
+void qk_ucis_symbol_fallback (void) {
+ for (uint8_t i = 0; i < qk_ucis_state.count - 1; i++) {
+ uint8_t code = qk_ucis_state.codes[i];
+ register_code(code);
+ unregister_code(code);
+ wait_ms(UNICODE_TYPE_DELAY);
+ }
+}
+
+void register_ucis(const char *hex) {
+ for(int i = 0; hex[i]; i++) {
+ uint8_t kc = 0;
+ char c = hex[i];
+
+ switch (c) {
+ case '0':
+ kc = KC_0;
+ break;
+ case '1' ... '9':
+ kc = c - '1' + KC_1;
+ break;
+ case 'a' ... 'f':
+ kc = c - 'a' + KC_A;
+ break;
+ case 'A' ... 'F':
+ kc = c - 'A' + KC_A;
+ break;
+ }
+
+ if (kc) {
+ register_code (kc);
+ unregister_code (kc);
+ wait_ms (UNICODE_TYPE_DELAY);
+ }
+ }
+}
+
+bool process_ucis (uint16_t keycode, keyrecord_t *record) {
+ uint8_t i;
+
+ if (!qk_ucis_state.in_progress)
+ return true;
+
+ if (qk_ucis_state.count >= UCIS_MAX_SYMBOL_LENGTH &&
+ !(keycode == KC_BSPC || keycode == KC_ESC || keycode == KC_SPC || keycode == KC_ENT)) {
+ return false;
+ }
+
+ if (!record->event.pressed)
+ return true;
+
+ qk_ucis_state.codes[qk_ucis_state.count] = keycode;
+ qk_ucis_state.count++;
+
+ if (keycode == KC_BSPC) {
+ if (qk_ucis_state.count >= 2) {
+ qk_ucis_state.count -= 2;
+ return true;
+ } else {
+ qk_ucis_state.count--;
+ return false;
+ }
+ }
+
+ if (keycode == KC_ENT || keycode == KC_SPC || keycode == KC_ESC) {
+ bool symbol_found = false;
+
+ for (i = qk_ucis_state.count; i > 0; i--) {
+ register_code (KC_BSPC);
+ unregister_code (KC_BSPC);
+ wait_ms(UNICODE_TYPE_DELAY);
+ }
+
+ if (keycode == KC_ESC) {
+ qk_ucis_state.in_progress = false;
+ return false;
+ }
+
+ unicode_input_start();
+ for (i = 0; ucis_symbol_table[i].symbol; i++) {
+ if (is_uni_seq (ucis_symbol_table[i].symbol)) {
+ symbol_found = true;
+ register_ucis(ucis_symbol_table[i].code + 2);
break;
+ }
+ }
+ if (!symbol_found) {
+ qk_ucis_symbol_fallback();
}
+ unicode_input_finish();
+
+ qk_ucis_state.in_progress = false;
+ return false;
}
return true;
-} \ No newline at end of file
+}
+#endif
diff --git a/quantum/process_keycode/process_unicode.h b/quantum/process_keycode/process_unicode.h
index ca17f8f66..f17cfa6cf 100644
--- a/quantum/process_keycode/process_unicode.h
+++ b/quantum/process_keycode/process_unicode.h
@@ -3,15 +3,60 @@
#include "quantum.h"
-#define UC_OSX 0
-#define UC_LNX 1
-#define UC_WIN 2
-#define UC_BSD 3
+#define UC_OSX 0 // Mac OS X
+#define UC_LNX 1 // Linux
+#define UC_WIN 2 // Windows 'HexNumpad'
+#define UC_BSD 3 // BSD (not implemented)
+#define UC_WINC 4 // WinCompose https://github.com/samhocevar/wincompose
+
+#ifndef UNICODE_TYPE_DELAY
+#define UNICODE_TYPE_DELAY 10
+#endif
void set_unicode_input_mode(uint8_t os_target);
+uint8_t get_unicode_input_mode(void);
+void unicode_input_start(void);
+void unicode_input_finish(void);
+void register_hex(uint16_t hex);
bool process_unicode(uint16_t keycode, keyrecord_t *record);
+#ifdef UNICODEMAP_ENABLE
+void unicode_map_input_error(void);
+bool process_unicode_map(uint16_t keycode, keyrecord_t *record);
+#endif
+
+#ifdef UCIS_ENABLE
+#ifndef UCIS_MAX_SYMBOL_LENGTH
+#define UCIS_MAX_SYMBOL_LENGTH 32
+#endif
+
+typedef struct {
+ char *symbol;
+ char *code;
+} qk_ucis_symbol_t;
+
+typedef struct {
+ uint8_t count;
+ uint16_t codes[UCIS_MAX_SYMBOL_LENGTH];
+ bool in_progress:1;
+} qk_ucis_state_t;
+
+extern qk_ucis_state_t qk_ucis_state;
+
+#define UCIS_TABLE(...) {__VA_ARGS__, {NULL, NULL}}
+#define UCIS_SYM(name, code) {name, #code}
+
+extern const qk_ucis_symbol_t ucis_symbol_table[];
+
+void qk_ucis_start(void);
+void qk_ucis_start_user(void);
+void qk_ucis_symbol_fallback (void);
+void register_ucis(const char *hex);
+bool process_ucis (uint16_t keycode, keyrecord_t *record);
+
+#endif
+
#define UC_BSPC UC(0x0008)
#define UC_SPC UC(0x0020)
@@ -119,4 +164,4 @@ bool process_unicode(uint16_t keycode, keyrecord_t *record);
#define UC_TILD UC(0x007E)
#define UC_DEL UC(0x007F)
-#endif \ No newline at end of file
+#endif
diff --git a/quantum/quantum.c b/quantum/quantum.c
index bc2da510f..f653564a6 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -1,5 +1,46 @@
#include "quantum.h"
+#ifndef TAPPING_TERM
+#define TAPPING_TERM 200
+#endif
+
+static void do_code16 (uint16_t code, void (*f) (uint8_t)) {
+ switch (code) {
+ case QK_MODS ... QK_MODS_MAX:
+ break;
+ default:
+ return;
+ }
+
+ if (code & QK_LCTL)
+ f(KC_LCTL);
+ if (code & QK_LSFT)
+ f(KC_LSFT);
+ if (code & QK_LALT)
+ f(KC_LALT);
+ if (code & QK_LGUI)
+ f(KC_LGUI);
+
+ if (code & QK_RCTL)
+ f(KC_RCTL);
+ if (code & QK_RSFT)
+ f(KC_RSFT);
+ if (code & QK_RALT)
+ f(KC_RALT);
+ if (code & QK_RGUI)
+ f(KC_RGUI);
+}
+
+void register_code16 (uint16_t code) {
+ do_code16 (code, register_code);
+ register_code (code);
+}
+
+void unregister_code16 (uint16_t code) {
+ unregister_code (code);
+ do_code16 (code, unregister_code);
+}
+
__attribute__ ((weak))
bool process_action_kb(keyrecord_t *record) {
return true;
@@ -38,6 +79,7 @@ void reset_keyboard(void) {
#endif
static bool shift_interrupted[2] = {0, 0};
+static uint16_t scs_timer = 0;
bool process_record_quantum(keyrecord_t *record) {
@@ -46,18 +88,20 @@ bool process_record_quantum(keyrecord_t *record) {
uint16_t keycode;
#if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS)
- uint8_t layer;
+ /* TODO: Use store_or_get_action() or a similar function. */
+ if (!disable_action_cache) {
+ uint8_t layer;
- if (record->event.pressed) {
- layer = layer_switch_get_layer(key);
- update_source_layers_cache(key, layer);
- } else {
- layer = read_source_layers_cache(key);
- }
- keycode = keymap_key_to_keycode(layer, key);
- #else
- keycode = keymap_key_to_keycode(layer_switch_get_layer(key), key);
+ if (record->event.pressed) {
+ layer = layer_switch_get_layer(key);
+ update_source_layers_cache(key, layer);
+ } else {
+ layer = read_source_layers_cache(key);
+ }
+ keycode = keymap_key_to_keycode(layer, key);
+ } else
#endif
+ keycode = keymap_key_to_keycode(layer_switch_get_layer(key), key);
// This is how you use actions here
// if (keycode == KC_LEAD) {
@@ -87,6 +131,15 @@ bool process_record_quantum(keyrecord_t *record) {
#ifdef UNICODE_ENABLE
process_unicode(keycode, record) &&
#endif
+ #ifdef UCIS_ENABLE
+ process_ucis(keycode, record) &&
+ #endif
+ #ifdef PRINTING_ENABLE
+ process_printer(keycode, record) &&
+ #endif
+ #ifdef UNICODEMAP_ENABLE
+ process_unicode_map(keycode, record) &&
+ #endif
true)) {
return false;
}
@@ -157,7 +210,7 @@ bool process_record_quantum(keyrecord_t *record) {
return false;
break;
#endif
- case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_UNSWAP_ALT_GUI:
+ case MAGIC_SWAP_CONTROL_CAPSLOCK ... MAGIC_TOGGLE_NKRO:
if (record->event.pressed) {
// MAGIC actions (BOOTMAGIC without the boot)
if (!eeconfig_is_enabled()) {
@@ -165,54 +218,80 @@ bool process_record_quantum(keyrecord_t *record) {
}
/* keymap config */
keymap_config.raw = eeconfig_read_keymap();
- if (keycode == MAGIC_SWAP_CONTROL_CAPSLOCK) {
- keymap_config.swap_control_capslock = 1;
- } else if (keycode == MAGIC_CAPSLOCK_TO_CONTROL) {
- keymap_config.capslock_to_control = 1;
- } else if (keycode == MAGIC_SWAP_LALT_LGUI) {
- keymap_config.swap_lalt_lgui = 1;
- } else if (keycode == MAGIC_SWAP_RALT_RGUI) {
- keymap_config.swap_ralt_rgui = 1;
- } else if (keycode == MAGIC_NO_GUI) {
- keymap_config.no_gui = 1;
- } else if (keycode == MAGIC_SWAP_GRAVE_ESC) {
- keymap_config.swap_grave_esc = 1;
- } else if (keycode == MAGIC_SWAP_BACKSLASH_BACKSPACE) {
- keymap_config.swap_backslash_backspace = 1;
- } else if (keycode == MAGIC_HOST_NKRO) {
- keymap_config.nkro = 1;
- } else if (keycode == MAGIC_SWAP_ALT_GUI) {
- keymap_config.swap_lalt_lgui = 1;
- keymap_config.swap_ralt_rgui = 1;
- }
- /* UNs */
- else if (keycode == MAGIC_UNSWAP_CONTROL_CAPSLOCK) {
- keymap_config.swap_control_capslock = 0;
- } else if (keycode == MAGIC_UNCAPSLOCK_TO_CONTROL) {
- keymap_config.capslock_to_control = 0;
- } else if (keycode == MAGIC_UNSWAP_LALT_LGUI) {
- keymap_config.swap_lalt_lgui = 0;
- } else if (keycode == MAGIC_UNSWAP_RALT_RGUI) {
- keymap_config.swap_ralt_rgui = 0;
- } else if (keycode == MAGIC_UNNO_GUI) {
- keymap_config.no_gui = 0;
- } else if (keycode == MAGIC_UNSWAP_GRAVE_ESC) {
- keymap_config.swap_grave_esc = 0;
- } else if (keycode == MAGIC_UNSWAP_BACKSLASH_BACKSPACE) {
- keymap_config.swap_backslash_backspace = 0;
- } else if (keycode == MAGIC_UNHOST_NKRO) {
- keymap_config.nkro = 0;
- } else if (keycode == MAGIC_UNSWAP_ALT_GUI) {
- keymap_config.swap_lalt_lgui = 0;
- keymap_config.swap_ralt_rgui = 0;
+ switch (keycode)
+ {
+ case MAGIC_SWAP_CONTROL_CAPSLOCK:
+ keymap_config.swap_control_capslock = true;
+ break;
+ case MAGIC_CAPSLOCK_TO_CONTROL:
+ keymap_config.capslock_to_control = true;
+ break;
+ case MAGIC_SWAP_LALT_LGUI:
+ keymap_config.swap_lalt_lgui = true;
+ break;
+ case MAGIC_SWAP_RALT_RGUI:
+ keymap_config.swap_ralt_rgui = true;
+ break;
+ case MAGIC_NO_GUI:
+ keymap_config.no_gui = true;
+ break;
+ case MAGIC_SWAP_GRAVE_ESC:
+ keymap_config.swap_grave_esc = true;
+ break;
+ case MAGIC_SWAP_BACKSLASH_BACKSPACE:
+ keymap_config.swap_backslash_backspace = true;
+ break;
+ case MAGIC_HOST_NKRO:
+ keymap_config.nkro = true;
+ break;
+ case MAGIC_SWAP_ALT_GUI:
+ keymap_config.swap_lalt_lgui = true;
+ keymap_config.swap_ralt_rgui = true;
+ break;
+ case MAGIC_UNSWAP_CONTROL_CAPSLOCK:
+ keymap_config.swap_control_capslock = false;
+ break;
+ case MAGIC_UNCAPSLOCK_TO_CONTROL:
+ keymap_config.capslock_to_control = false;
+ break;
+ case MAGIC_UNSWAP_LALT_LGUI:
+ keymap_config.swap_lalt_lgui = false;
+ break;
+ case MAGIC_UNSWAP_RALT_RGUI:
+ keymap_config.swap_ralt_rgui = false;
+ break;
+ case MAGIC_UNNO_GUI:
+ keymap_config.no_gui = false;
+ break;
+ case MAGIC_UNSWAP_GRAVE_ESC:
+ keymap_config.swap_grave_esc = false;
+ break;
+ case MAGIC_UNSWAP_BACKSLASH_BACKSPACE:
+ keymap_config.swap_backslash_backspace = false;
+ break;
+ case MAGIC_UNHOST_NKRO:
+ keymap_config.nkro = false;
+ break;
+ case MAGIC_UNSWAP_ALT_GUI:
+ keymap_config.swap_lalt_lgui = false;
+ keymap_config.swap_ralt_rgui = false;
+ break;
+ case MAGIC_TOGGLE_NKRO:
+ keymap_config.nkro = !keymap_config.nkro;
+ break;
+ default:
+ break;
}
eeconfig_update_keymap(keymap_config.raw);
+ clear_keyboard(); // clear to prevent stuck keys
+
return false;
}
break;
case KC_LSPO: {
if (record->event.pressed) {
shift_interrupted[0] = false;
+ scs_timer = timer_read ();
register_mods(MOD_BIT(KC_LSFT));
}
else {
@@ -222,19 +301,20 @@ bool process_record_quantum(keyrecord_t *record) {
shift_interrupted[1] = true;
}
#endif
- if (!shift_interrupted[0]) {
+ if (!shift_interrupted[0] && timer_elapsed(scs_timer) < TAPPING_TERM) {
register_code(LSPO_KEY);
unregister_code(LSPO_KEY);
}
unregister_mods(MOD_BIT(KC_LSFT));
}
return false;
- break;
+ // break;
}
case KC_RSPC: {
if (record->event.pressed) {
shift_interrupted[1] = false;
+ scs_timer = timer_read ();
register_mods(MOD_BIT(KC_RSFT));
}
else {
@@ -244,14 +324,14 @@ bool process_record_quantum(keyrecord_t *record) {
shift_interrupted[1] = true;
}
#endif
- if (!shift_interrupted[1]) {
+ if (!shift_interrupted[1] && timer_elapsed(scs_timer) < TAPPING_TERM) {
register_code(RSPC_KEY);
unregister_code(RSPC_KEY);
}
unregister_mods(MOD_BIT(KC_RSFT));
}
return false;
- break;
+ // break;
}
default: {
shift_interrupted[0] = true;
@@ -729,6 +809,51 @@ void backlight_set(uint8_t level)
#endif // backlight
+// Functions for spitting out values
+//
+
+void send_dword(uint32_t number) { // this might not actually work
+ uint16_t word = (number >> 16);
+ send_word(word);
+ send_word(number & 0xFFFFUL);
+}
+
+void send_word(uint16_t number) {
+ uint8_t byte = number >> 8;
+ send_byte(byte);
+ send_byte(number & 0xFF);
+}
+
+void send_byte(uint8_t number) {
+ uint8_t nibble = number >> 4;
+ send_nibble(nibble);
+ send_nibble(number & 0xF);
+}
+
+void send_nibble(uint8_t number) {
+ switch (number) {
+ case 0:
+ register_code(KC_0);
+ unregister_code(KC_0);
+ break;
+ case 1 ... 9:
+ register_code(KC_1 + (number - 1));
+ unregister_code(KC_1 + (number - 1));
+ break;
+ case 0xA ... 0xF:
+ register_code(KC_A + (number - 0xA));
+ unregister_code(KC_A + (number - 0xA));
+ break;
+ }
+}
+
+void api_send_unicode(uint32_t unicode) {
+#ifdef API_ENABLE
+ uint8_t chunk[4];
+ dword_to_bytes(unicode, chunk);
+ MT_SEND_DATA(DT_UNICODE, chunk, 5);
+#endif
+}
__attribute__ ((weak))
void led_set_user(uint8_t usb_led) {
diff --git a/quantum/quantum.h b/quantum/quantum.h
index 7ebfb24e3..e6adf974a 100644
--- a/quantum/quantum.h
+++ b/quantum/quantum.h
@@ -25,6 +25,7 @@
#include "led.h"
#include "action_util.h"
#include <stdlib.h>
+#include "print.h"
extern uint32_t default_layer_state;
@@ -58,6 +59,10 @@ extern uint32_t default_layer_state;
#include "process_tap_dance.h"
+#ifdef PRINTING_ENABLE
+ #include "process_printer.h"
+#endif
+
#define SEND_STRING(str) send_string(PSTR(str))
void send_string(const char *str);
@@ -82,6 +87,9 @@ void reset_keyboard(void);
void startup_user(void);
void shutdown_user(void);
+void register_code16 (uint16_t code);
+void unregister_code16 (uint16_t code);
+
#ifdef BACKLIGHT_ENABLE
void backlight_init_ports(void);
@@ -102,8 +110,15 @@ void breathing_speed_dec(uint8_t value);
#endif
#endif
+void send_dword(uint32_t number);
+void send_word(uint16_t number);
+void send_byte(uint8_t number);
+void send_nibble(uint8_t number);
+
void led_set_user(uint8_t usb_led);
void led_set_kb(uint8_t usb_led);
+void api_send_unicode(uint32_t unicode);
+
#endif
diff --git a/quantum/rgblight.c b/quantum/rgblight.c
index b1b0f035d..625971e0f 100644
--- a/quantum/rgblight.c
+++ b/quantum/rgblight.c
@@ -6,98 +6,126 @@
#include "rgblight.h"
#include "debug.h"
+// Lightness curve using the CIE 1931 lightness formula
+//Generated by the python script provided in http://jared.geek.nz/2013/feb/linear-led-pwm
const uint8_t DIM_CURVE[] PROGMEM = {
- 0, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6,
- 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
- 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11,
- 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15,
- 15, 15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20,
- 20, 20, 21, 21, 22, 22, 22, 23, 23, 24, 24, 25, 25, 25, 26, 26,
- 27, 27, 28, 28, 29, 29, 30, 30, 31, 32, 32, 33, 33, 34, 35, 35,
- 36, 36, 37, 38, 38, 39, 40, 40, 41, 42, 43, 43, 44, 45, 46, 47,
- 48, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 68, 69, 70, 71, 73, 74, 75, 76, 78, 79, 81, 82,
- 83, 85, 86, 88, 90, 91, 93, 94, 96, 98, 99, 101, 103, 105, 107, 109,
- 110, 112, 114, 116, 118, 121, 123, 125, 127, 129, 132, 134, 136, 139, 141, 144,
- 146, 149, 151, 154, 157, 159, 162, 165, 168, 171, 174, 177, 180, 183, 186, 190,
- 193, 196, 200, 203, 207, 211, 214, 218, 222, 226, 230, 234, 238, 242, 248, 255,
+ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
+ 3, 4, 4, 4, 4, 4, 4, 5, 5, 5,
+ 5, 5, 6, 6, 6, 6, 6, 7, 7, 7,
+ 7, 8, 8, 8, 8, 9, 9, 9, 10, 10,
+ 10, 10, 11, 11, 11, 12, 12, 12, 13, 13,
+ 13, 14, 14, 15, 15, 15, 16, 16, 17, 17,
+ 17, 18, 18, 19, 19, 20, 20, 21, 21, 22,
+ 22, 23, 23, 24, 24, 25, 25, 26, 26, 27,
+ 28, 28, 29, 29, 30, 31, 31, 32, 32, 33,
+ 34, 34, 35, 36, 37, 37, 38, 39, 39, 40,
+ 41, 42, 43, 43, 44, 45, 46, 47, 47, 48,
+ 49, 50, 51, 52, 53, 54, 54, 55, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 70, 71, 72, 73, 74, 75, 76, 77, 79,
+ 80, 81, 82, 83, 85, 86, 87, 88, 90, 91,
+ 92, 94, 95, 96, 98, 99, 100, 102, 103, 105,
+ 106, 108, 109, 110, 112, 113, 115, 116, 118, 120,
+ 121, 123, 124, 126, 128, 129, 131, 132, 134, 136,
+ 138, 139, 141, 143, 145, 146, 148, 150, 152, 154,
+ 155, 157, 159, 161, 163, 165, 167, 169, 171, 173,
+ 175, 177, 179, 181, 183, 185, 187, 189, 191, 193,
+ 196, 198, 200, 202, 204, 207, 209, 211, 214, 216,
+ 218, 220, 223, 225, 228, 230, 232, 235, 237, 240,
+ 242, 245, 247, 250, 252, 255,
+ };
+
+const uint8_t RGBLED_BREATHING_TABLE[] PROGMEM = {
+ 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 4, 5, 5, 6, 7, 9,
+ 10, 11, 12, 14, 15, 17, 18, 20, 21, 23, 25, 27, 29, 31, 33, 35,
+ 37, 40, 42, 44, 47, 49, 52, 54, 57, 59, 62, 65, 67, 70, 73, 76,
+ 79, 82, 85, 88, 90, 93, 97, 100, 103, 106, 109, 112, 115, 118, 121, 124,
+ 127, 131, 134, 137, 140, 143, 146, 149, 152, 155, 158, 162, 165, 167, 170, 173,
+ 176, 179, 182, 185, 188, 190, 193, 196, 198, 201, 203, 206, 208, 211, 213, 215,
+ 218, 220, 222, 224, 226, 228, 230, 232, 234, 235, 237, 238, 240, 241, 243, 244,
+ 245, 246, 248, 249, 250, 250, 251, 252, 253, 253, 254, 254, 254, 255, 255, 255,
+ 255, 255, 255, 255, 254, 254, 254, 253, 253, 252, 251, 250, 250, 249, 248, 246,
+ 245, 244, 243, 241, 240, 238, 237, 235, 234, 232, 230, 228, 226, 224, 222, 220,
+ 218, 215, 213, 211, 208, 206, 203, 201, 198, 196, 193, 190, 188, 185, 182, 179,
+ 176, 173, 170, 167, 165, 162, 158, 155, 152, 149, 146, 143, 140, 137, 134, 131,
+ 128, 124, 121, 118, 115, 112, 109, 106, 103, 100, 97, 93, 90, 88, 85, 82,
+ 79, 76, 73, 70, 67, 65, 62, 59, 57, 54, 52, 49, 47, 44, 42, 40,
+ 37, 35, 33, 31, 29, 27, 25, 23, 21, 20, 18, 17, 15, 14, 12, 11,
+ 10, 9, 7, 6, 5, 5, 4, 3, 2, 2, 1, 1, 1, 0, 0, 0
};
-const uint8_t RGBLED_BREATHING_TABLE[] PROGMEM = {0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,17,18,20,21,23,25,27,29,31,33,35,37,40,42,44,47,49,52,54,57,59,62,65,67,70,73,76,79,82,85,88,90,93,97,100,103,106,109,112,115,118,121,124,127,131,134,137,140,143,146,149,152,155,158,162,165,167,170,173,176,179,182,185,188,190,193,196,198,201,203,206,208,211,213,215,218,220,222,224,226,228,230,232,234,235,237,238,240,241,243,244,245,246,248,249,250,250,251,252,253,253,254,254,254,255,255,255,255,255,255,255,254,254,254,253,253,252,251,250,250,249,248,246,245,244,243,241,240,238,237,235,234,232,230,228,226,224,222,220,218,215,213,211,208,206,203,201,198,196,193,190,188,185,182,179,176,173,170,167,165,162,158,155,152,149,146,143,140,137,134,131,128,124,121,118,115,112,109,106,103,100,97,93,90,88,85,82,79,76,73,70,67,65,62,59,57,54,52,49,47,44,42,40,37,35,33,31,29,27,25,23,21,20,18,17,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0};
+
+__attribute__ ((weak))
const uint8_t RGBLED_BREATHING_INTERVALS[] PROGMEM = {30, 20, 10, 5};
+__attribute__ ((weak))
const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {120, 60, 30};
+__attribute__ ((weak))
const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {100, 50, 20};
+__attribute__ ((weak))
const uint8_t RGBLED_SNAKE_INTERVALS[] PROGMEM = {100, 50, 20};
+__attribute__ ((weak))
const uint8_t RGBLED_KNIGHT_INTERVALS[] PROGMEM = {100, 50, 20};
rgblight_config_t rgblight_config;
rgblight_config_t inmem_config;
-struct cRGB led[RGBLED_NUM];
+
+LED_TYPE led[RGBLED_NUM];
uint8_t rgblight_inited = 0;
+bool rgblight_timer_enabled = false;
+
+void sethsv(uint16_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1) {
+ uint8_t r = 0, g = 0, b = 0, base, color;
+ if (sat == 0) { // Acromatic color (gray). Hue doesn't mind.
+ r = val;
+ g = val;
+ b = val;
+ } else {
+ base = ((255 - sat) * val) >> 8;
+ color = (val - base) * (hue % 60) / 60;
+
+ switch (hue / 60) {
+ case 0:
+ r = val;
+ g = base + color;
+ b = base;
+ break;
+ case 1:
+ r = val - color;
+ g = val;
+ b = base;
+ break;
+ case 2:
+ r = base;
+ g = val;
+ b = base + color;
+ break;
+ case 3:
+ r = base;
+ g = val - color;
+ b = val;
+ break;
+ case 4:
+ r = base + color;
+ g = base;
+ b = val;
+ break;
+ case 5:
+ r = val;
+ g = base;
+ b = val - color;
+ break;
+ }
+ }
+ r = pgm_read_byte(&DIM_CURVE[r]);
+ g = pgm_read_byte(&DIM_CURVE[g]);
+ b = pgm_read_byte(&DIM_CURVE[b]);
-void sethsv(uint16_t hue, uint8_t sat, uint8_t val, struct cRGB *led1) {
- /* convert hue, saturation and brightness ( HSB/HSV ) to RGB
- The DIM_CURVE is used only on brightness/value and on saturation (inverted).
- This looks the most natural.
- */
- uint8_t r = 0, g = 0, b = 0;
-
- val = pgm_read_byte(&DIM_CURVE[val]);
- sat = 255 - pgm_read_byte(&DIM_CURVE[255 - sat]);
-
- uint8_t base;
-
- if (sat == 0) { // Acromatic color (gray). Hue doesn't mind.
- r = val;
- g = val;
- b = val;
- } else {
- base = ((255 - sat) * val) >> 8;
-
- switch (hue / 60) {
- case 0:
- r = val;
- g = (((val - base)*hue) / 60) + base;
- b = base;
- break;
-
- case 1:
- r = (((val - base)*(60 - (hue % 60))) / 60) + base;
- g = val;
- b = base;
- break;
-
- case 2:
- r = base;
- g = val;
- b = (((val - base)*(hue % 60)) / 60) + base;
- break;
-
- case 3:
- r = base;
- g = (((val - base)*(60 - (hue % 60))) / 60) + base;
- b = val;
- break;
-
- case 4:
- r = (((val - base)*(hue % 60)) / 60) + base;
- g = base;
- b = val;
- break;
-
- case 5:
- r = val;
- g = base;
- b = (((val - base)*(60 - (hue % 60))) / 60) + base;
- break;
- }
- }
- setrgb(r,g,b, led1);
-}
-
-void setrgb(uint8_t r, uint8_t g, uint8_t b, struct cRGB *led1) {
+ setrgb(r, g, b, led1);
+}
+
+void setrgb(uint8_t r, uint8_t g, uint8_t b, LED_TYPE *led1) {
(*led1).r = r;
(*led1).g = g;
(*led1).b = b;
@@ -111,103 +139,115 @@ void eeconfig_update_rgblight(uint32_t val) {
eeprom_update_dword(EECONFIG_RGBLIGHT, val);
}
void eeconfig_update_rgblight_default(void) {
- dprintf("eeconfig_update_rgblight_default\n");
- rgblight_config.enable = 1;
- rgblight_config.mode = 1;
- rgblight_config.hue = 200;
- rgblight_config.sat = 204;
- rgblight_config.val = 204;
- eeconfig_update_rgblight(rgblight_config.raw);
+ dprintf("eeconfig_update_rgblight_default\n");
+ rgblight_config.enable = 1;
+ rgblight_config.mode = 1;
+ rgblight_config.hue = 0;
+ rgblight_config.sat = 255;
+ rgblight_config.val = 255;
+ eeconfig_update_rgblight(rgblight_config.raw);
}
void eeconfig_debug_rgblight(void) {
- dprintf("rgblight_config eprom\n");
- dprintf("rgblight_config.enable = %d\n", rgblight_config.enable);
- dprintf("rghlight_config.mode = %d\n", rgblight_config.mode);
- dprintf("rgblight_config.hue = %d\n", rgblight_config.hue);
- dprintf("rgblight_config.sat = %d\n", rgblight_config.sat);
- dprintf("rgblight_config.val = %d\n", rgblight_config.val);
+ dprintf("rgblight_config eprom\n");
+ dprintf("rgblight_config.enable = %d\n", rgblight_config.enable);
+ dprintf("rghlight_config.mode = %d\n", rgblight_config.mode);
+ dprintf("rgblight_config.hue = %d\n", rgblight_config.hue);
+ dprintf("rgblight_config.sat = %d\n", rgblight_config.sat);
+ dprintf("rgblight_config.val = %d\n", rgblight_config.val);
}
void rgblight_init(void) {
debug_enable = 1; // Debug ON!
- dprintf("rgblight_init called.\n");
+ dprintf("rgblight_init called.\n");
rgblight_inited = 1;
- dprintf("rgblight_init start!\n");
+ dprintf("rgblight_init start!\n");
if (!eeconfig_is_enabled()) {
- dprintf("rgblight_init eeconfig is not enabled.\n");
+ dprintf("rgblight_init eeconfig is not enabled.\n");
eeconfig_init();
- eeconfig_update_rgblight_default();
+ eeconfig_update_rgblight_default();
}
rgblight_config.raw = eeconfig_read_rgblight();
- if (!rgblight_config.mode) {
- dprintf("rgblight_init rgblight_config.mode = 0. Write default values to EEPROM.\n");
- eeconfig_update_rgblight_default();
- rgblight_config.raw = eeconfig_read_rgblight();
- }
- eeconfig_debug_rgblight(); // display current eeprom values
+ if (!rgblight_config.mode) {
+ dprintf("rgblight_init rgblight_config.mode = 0. Write default values to EEPROM.\n");
+ eeconfig_update_rgblight_default();
+ rgblight_config.raw = eeconfig_read_rgblight();
+ }
+ eeconfig_debug_rgblight(); // display current eeprom values
- #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
- rgblight_timer_init(); // setup the timer
- #endif
+ #ifdef RGBLIGHT_ANIMATIONS
+ rgblight_timer_init(); // setup the timer
+ #endif
if (rgblight_config.enable) {
rgblight_mode(rgblight_config.mode);
}
}
+void rgblight_update_dword(uint32_t dword) {
+ rgblight_config.raw = dword;
+ eeconfig_update_rgblight(rgblight_config.raw);
+ if (rgblight_config.enable)
+ rgblight_mode(rgblight_config.mode);
+ else {
+ #ifdef RGBLIGHT_ANIMATIONS
+ rgblight_timer_disable();
+ #endif
+ rgblight_set();
+ }
+}
+
void rgblight_increase(void) {
- uint8_t mode = 0;
+ uint8_t mode = 0;
if (rgblight_config.mode < RGBLIGHT_MODES) {
mode = rgblight_config.mode + 1;
}
- rgblight_mode(mode);
+ rgblight_mode(mode);
}
-
void rgblight_decrease(void) {
- uint8_t mode = 0;
- if (rgblight_config.mode > 1) { //mode will never < 1, if mode is less than 1, eeprom need to be initialized.
- mode = rgblight_config.mode-1;
+ uint8_t mode = 0;
+ // Mode will never be < 1. If it ever is, eeprom needs to be initialized.
+ if (rgblight_config.mode > 1) {
+ mode = rgblight_config.mode - 1;
}
- rgblight_mode(mode);
+ rgblight_mode(mode);
}
-
void rgblight_step(void) {
- uint8_t mode = 0;
+ uint8_t mode = 0;
mode = rgblight_config.mode + 1;
if (mode > RGBLIGHT_MODES) {
mode = 1;
}
- rgblight_mode(mode);
+ rgblight_mode(mode);
}
void rgblight_mode(uint8_t mode) {
- if (!rgblight_config.enable) {
- return;
- }
- if (mode<1) {
- rgblight_config.mode = 1;
- } else if (mode > RGBLIGHT_MODES) {
- rgblight_config.mode = RGBLIGHT_MODES;
- } else {
- rgblight_config.mode = mode;
- }
+ if (!rgblight_config.enable) {
+ return;
+ }
+ if (mode < 1) {
+ rgblight_config.mode = 1;
+ } else if (mode > RGBLIGHT_MODES) {
+ rgblight_config.mode = RGBLIGHT_MODES;
+ } else {
+ rgblight_config.mode = mode;
+ }
eeconfig_update_rgblight(rgblight_config.raw);
xprintf("rgblight mode: %u\n", rgblight_config.mode);
- if (rgblight_config.mode == 1) {
- #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
- rgblight_timer_disable();
- #endif
- } else if (rgblight_config.mode >=2 && rgblight_config.mode <=23) {
- // MODE 2-5, breathing
- // MODE 6-8, rainbow mood
- // MODE 9-14, rainbow swirl
- // MODE 15-20, snake
- // MODE 21-23, knight
-
- #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
- rgblight_timer_enable();
- #endif
- }
+ if (rgblight_config.mode == 1) {
+ #ifdef RGBLIGHT_ANIMATIONS
+ rgblight_timer_disable();
+ #endif
+ } else if (rgblight_config.mode >= 2 && rgblight_config.mode <= 23) {
+ // MODE 2-5, breathing
+ // MODE 6-8, rainbow mood
+ // MODE 9-14, rainbow swirl
+ // MODE 15-20, snake
+ // MODE 21-23, knight
+
+ #ifdef RGBLIGHT_ANIMATIONS
+ rgblight_timer_enable();
+ #endif
+ }
rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
}
@@ -215,306 +255,343 @@ void rgblight_toggle(void) {
rgblight_config.enable ^= 1;
eeconfig_update_rgblight(rgblight_config.raw);
xprintf("rgblight toggle: rgblight_config.enable = %u\n", rgblight_config.enable);
- if (rgblight_config.enable) {
- rgblight_mode(rgblight_config.mode);
- } else {
+ if (rgblight_config.enable) {
+ rgblight_mode(rgblight_config.mode);
+ } else {
+ #ifdef RGBLIGHT_ANIMATIONS
+ rgblight_timer_disable();
+ #endif
+ _delay_ms(50);
+ rgblight_set();
+ }
+}
- #if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
- rgblight_timer_disable();
- #endif
- _delay_ms(50);
- rgblight_set();
- }
+void rgblight_enable(void) {
+ rgblight_config.enable = 1;
+ eeconfig_update_rgblight(rgblight_config.raw);
+ xprintf("rgblight enable: rgblight_config.enable = %u\n", rgblight_config.enable);
+ rgblight_mode(rgblight_config.mode);
}
-void rgblight_increase_hue(void){
- uint16_t hue;
+void rgblight_increase_hue(void) {
+ uint16_t hue;
hue = (rgblight_config.hue+RGBLIGHT_HUE_STEP) % 360;
rgblight_sethsv(hue, rgblight_config.sat, rgblight_config.val);
}
-void rgblight_decrease_hue(void){
- uint16_t hue;
- if (rgblight_config.hue-RGBLIGHT_HUE_STEP <0 ) {
- hue = (rgblight_config.hue+360-RGBLIGHT_HUE_STEP) % 360;
- } else {
- hue = (rgblight_config.hue-RGBLIGHT_HUE_STEP) % 360;
- }
+void rgblight_decrease_hue(void) {
+ uint16_t hue;
+ if (rgblight_config.hue-RGBLIGHT_HUE_STEP < 0) {
+ hue = (rgblight_config.hue + 360 - RGBLIGHT_HUE_STEP) % 360;
+ } else {
+ hue = (rgblight_config.hue - RGBLIGHT_HUE_STEP) % 360;
+ }
rgblight_sethsv(hue, rgblight_config.sat, rgblight_config.val);
}
void rgblight_increase_sat(void) {
- uint8_t sat;
+ uint8_t sat;
if (rgblight_config.sat + RGBLIGHT_SAT_STEP > 255) {
sat = 255;
} else {
- sat = rgblight_config.sat+RGBLIGHT_SAT_STEP;
+ sat = rgblight_config.sat + RGBLIGHT_SAT_STEP;
}
rgblight_sethsv(rgblight_config.hue, sat, rgblight_config.val);
}
-void rgblight_decrease_sat(void){
- uint8_t sat;
+void rgblight_decrease_sat(void) {
+ uint8_t sat;
if (rgblight_config.sat - RGBLIGHT_SAT_STEP < 0) {
sat = 0;
} else {
- sat = rgblight_config.sat-RGBLIGHT_SAT_STEP;
+ sat = rgblight_config.sat - RGBLIGHT_SAT_STEP;
}
rgblight_sethsv(rgblight_config.hue, sat, rgblight_config.val);
}
-void rgblight_increase_val(void){
- uint8_t val;
+void rgblight_increase_val(void) {
+ uint8_t val;
if (rgblight_config.val + RGBLIGHT_VAL_STEP > 255) {
val = 255;
} else {
- val = rgblight_config.val+RGBLIGHT_VAL_STEP;
+ val = rgblight_config.val + RGBLIGHT_VAL_STEP;
}
rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, val);
}
void rgblight_decrease_val(void) {
- uint8_t val;
+ uint8_t val;
if (rgblight_config.val - RGBLIGHT_VAL_STEP < 0) {
val = 0;
} else {
- val = rgblight_config.val-RGBLIGHT_VAL_STEP;
+ val = rgblight_config.val - RGBLIGHT_VAL_STEP;
}
rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, val);
}
-void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val){
- inmem_config.raw = rgblight_config.raw;
+void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val) {
+ inmem_config.raw = rgblight_config.raw;
if (rgblight_config.enable) {
- struct cRGB tmp_led;
+ LED_TYPE tmp_led;
sethsv(hue, sat, val, &tmp_led);
- inmem_config.hue = hue;
- inmem_config.sat = sat;
- inmem_config.val = val;
+ inmem_config.hue = hue;
+ inmem_config.sat = sat;
+ inmem_config.val = val;
// dprintf("rgblight set hue [MEMORY]: %u,%u,%u\n", inmem_config.hue, inmem_config.sat, inmem_config.val);
rgblight_setrgb(tmp_led.r, tmp_led.g, tmp_led.b);
}
}
-void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val){
+void rgblight_sethsv(uint16_t hue, uint8_t sat, uint8_t val) {
if (rgblight_config.enable) {
- if (rgblight_config.mode == 1) {
- // same static color
- rgblight_sethsv_noeeprom(hue, sat, val);
- } else {
- // all LEDs in same color
- if (rgblight_config.mode >= 2 && rgblight_config.mode <= 5) {
- // breathing mode, ignore the change of val, use in memory value instead
- val = rgblight_config.val;
- } else if (rgblight_config.mode >= 6 && rgblight_config.mode <= 14) {
- // rainbow mood and rainbow swirl, ignore the change of hue
- hue = rgblight_config.hue;
- }
- }
- rgblight_config.hue = hue;
- rgblight_config.sat = sat;
- rgblight_config.val = val;
- eeconfig_update_rgblight(rgblight_config.raw);
- xprintf("rgblight set hsv [EEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
- }
-}
-
-void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b){
+ if (rgblight_config.mode == 1) {
+ // same static color
+ rgblight_sethsv_noeeprom(hue, sat, val);
+ } else {
+ // all LEDs in same color
+ if (rgblight_config.mode >= 2 && rgblight_config.mode <= 5) {
+ // breathing mode, ignore the change of val, use in memory value instead
+ val = rgblight_config.val;
+ } else if (rgblight_config.mode >= 6 && rgblight_config.mode <= 14) {
+ // rainbow mood and rainbow swirl, ignore the change of hue
+ hue = rgblight_config.hue;
+ }
+ }
+ rgblight_config.hue = hue;
+ rgblight_config.sat = sat;
+ rgblight_config.val = val;
+ eeconfig_update_rgblight(rgblight_config.raw);
+ xprintf("rgblight set hsv [EEPROM]: %u,%u,%u\n", rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
+ }
+}
+
+void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b) {
// dprintf("rgblight set rgb: %u,%u,%u\n", r,g,b);
- for (uint8_t i=0;i<RGBLED_NUM;i++) {
+ for (uint8_t i = 0; i < RGBLED_NUM; i++) {
led[i].r = r;
led[i].g = g;
led[i].b = b;
}
rgblight_set();
-
}
void rgblight_set(void) {
- if (rgblight_config.enable) {
- ws2812_setleds(led, RGBLED_NUM);
- } else {
- for (uint8_t i=0;i<RGBLED_NUM;i++) {
- led[i].r = 0;
- led[i].g = 0;
- led[i].b = 0;
- }
- ws2812_setleds(led, RGBLED_NUM);
- }
+ if (rgblight_config.enable) {
+ #ifdef RGBW
+ ws2812_setleds_rgbw(led, RGBLED_NUM);
+ #else
+ ws2812_setleds(led, RGBLED_NUM);
+ #endif
+ } else {
+ for (uint8_t i = 0; i < RGBLED_NUM; i++) {
+ led[i].r = 0;
+ led[i].g = 0;
+ led[i].b = 0;
+ }
+ #ifdef RGBW
+ ws2812_setleds_rgbw(led, RGBLED_NUM);
+ #else
+ ws2812_setleds(led, RGBLED_NUM);
+ #endif
+ }
}
-
-#if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
+#ifdef RGBLIGHT_ANIMATIONS
// Animation timer -- AVR Timer3
void rgblight_timer_init(void) {
- static uint8_t rgblight_timer_is_init = 0;
- if (rgblight_timer_is_init) {
- return;
- }
- rgblight_timer_is_init = 1;
- /* Timer 3 setup */
- TCCR3B = _BV(WGM32) //CTC mode OCR3A as TOP
- | _BV(CS30); //Clock selelct: clk/1
- /* Set TOP value */
- uint8_t sreg = SREG;
- cli();
- OCR3AH = (RGBLED_TIMER_TOP>>8)&0xff;
- OCR3AL = RGBLED_TIMER_TOP&0xff;
- SREG = sreg;
+ // static uint8_t rgblight_timer_is_init = 0;
+ // if (rgblight_timer_is_init) {
+ // return;
+ // }
+ // rgblight_timer_is_init = 1;
+ // /* Timer 3 setup */
+ // TCCR3B = _BV(WGM32) // CTC mode OCR3A as TOP
+ // | _BV(CS30); // Clock selelct: clk/1
+ // /* Set TOP value */
+ // uint8_t sreg = SREG;
+ // cli();
+ // OCR3AH = (RGBLED_TIMER_TOP >> 8) & 0xff;
+ // OCR3AL = RGBLED_TIMER_TOP & 0xff;
+ // SREG = sreg;
+
+ rgblight_timer_enabled = true;
}
void rgblight_timer_enable(void) {
- TIMSK3 |= _BV(OCIE3A);
- dprintf("TIMER3 enabled.\n");
+ rgblight_timer_enabled = true;
+ dprintf("TIMER3 enabled.\n");
}
void rgblight_timer_disable(void) {
- TIMSK3 &= ~_BV(OCIE3A);
- dprintf("TIMER3 disabled.\n");
+ rgblight_timer_enabled = false;
+ dprintf("TIMER3 disabled.\n");
}
void rgblight_timer_toggle(void) {
- TIMSK3 ^= _BV(OCIE3A);
- dprintf("TIMER3 toggled.\n");
-}
-
-ISR(TIMER3_COMPA_vect) {
- // Mode = 1, static light, do nothing here
- if (rgblight_config.mode>=2 && rgblight_config.mode<=5) {
- // mode = 2 to 5, breathing mode
- rgblight_effect_breathing(rgblight_config.mode-2);
-
- } else if (rgblight_config.mode>=6 && rgblight_config.mode<=8) {
- rgblight_effect_rainbow_mood(rgblight_config.mode-6);
- } else if (rgblight_config.mode>=9 && rgblight_config.mode<=14) {
- rgblight_effect_rainbow_swirl(rgblight_config.mode-9);
- } else if (rgblight_config.mode>=15 && rgblight_config.mode<=20) {
- rgblight_effect_snake(rgblight_config.mode-15);
- } else if (rgblight_config.mode>=21 && rgblight_config.mode<=23) {
- rgblight_effect_knight(rgblight_config.mode-21);
- }
+ rgblight_timer_enabled ^= rgblight_timer_enabled;
+ dprintf("TIMER3 toggled.\n");
+}
+
+void rgblight_show_solid_color(uint8_t r, uint8_t g, uint8_t b) {
+ rgblight_enable();
+ rgblight_mode(1);
+ rgblight_setrgb(r, g, b);
+}
+
+void rgblight_task(void) {
+ if (rgblight_timer_enabled) {
+ // mode = 1, static light, do nothing here
+ if (rgblight_config.mode >= 2 && rgblight_config.mode <= 5) {
+ // mode = 2 to 5, breathing mode
+ rgblight_effect_breathing(rgblight_config.mode - 2);
+ } else if (rgblight_config.mode >= 6 && rgblight_config.mode <= 8) {
+ // mode = 6 to 8, rainbow mood mod
+ rgblight_effect_rainbow_mood(rgblight_config.mode - 6);
+ } else if (rgblight_config.mode >= 9 && rgblight_config.mode <= 14) {
+ // mode = 9 to 14, rainbow swirl mode
+ rgblight_effect_rainbow_swirl(rgblight_config.mode - 9);
+ } else if (rgblight_config.mode >= 15 && rgblight_config.mode <= 20) {
+ // mode = 15 to 20, snake mode
+ rgblight_effect_snake(rgblight_config.mode - 15);
+ } else if (rgblight_config.mode >= 21 && rgblight_config.mode <= 23) {
+ // mode = 21 to 23, knight mode
+ rgblight_effect_knight(rgblight_config.mode - 21);
+ }
+ }
}
-// effects
+// Effects
void rgblight_effect_breathing(uint8_t interval) {
- static uint8_t pos = 0;
- static uint16_t last_timer = 0;
+ static uint8_t pos = 0;
+ static uint16_t last_timer = 0;
- if (timer_elapsed(last_timer)<pgm_read_byte(&RGBLED_BREATHING_INTERVALS[interval])) return;
- last_timer = timer_read();
+ if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_BREATHING_INTERVALS[interval])) {
+ return;
+ }
+ last_timer = timer_read();
- rgblight_sethsv_noeeprom(rgblight_config.hue, rgblight_config.sat, pgm_read_byte(&RGBLED_BREATHING_TABLE[pos]));
- pos = (pos+1) % 256;
+ rgblight_sethsv_noeeprom(rgblight_config.hue, rgblight_config.sat, pgm_read_byte(&RGBLED_BREATHING_TABLE[pos]));
+ pos = (pos + 1) % 256;
}
-
void rgblight_effect_rainbow_mood(uint8_t interval) {
- static uint16_t current_hue=0;
- static uint16_t last_timer = 0;
+ static uint16_t current_hue = 0;
+ static uint16_t last_timer = 0;
- if (timer_elapsed(last_timer)<pgm_read_byte(&RGBLED_RAINBOW_MOOD_INTERVALS[interval])) return;
- last_timer = timer_read();
- rgblight_sethsv_noeeprom(current_hue, rgblight_config.sat, rgblight_config.val);
- current_hue = (current_hue+1) % 360;
+ if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_RAINBOW_MOOD_INTERVALS[interval])) {
+ return;
+ }
+ last_timer = timer_read();
+ rgblight_sethsv_noeeprom(current_hue, rgblight_config.sat, rgblight_config.val);
+ current_hue = (current_hue + 1) % 360;
}
-
void rgblight_effect_rainbow_swirl(uint8_t interval) {
- static uint16_t current_hue=0;
- static uint16_t last_timer = 0;
- uint16_t hue;
- uint8_t i;
- if (timer_elapsed(last_timer)<pgm_read_byte(&RGBLED_RAINBOW_MOOD_INTERVALS[interval/2])) return;
- last_timer = timer_read();
- for (i=0; i<RGBLED_NUM; i++) {
- hue = (360/RGBLED_NUM*i+current_hue)%360;
- sethsv(hue, rgblight_config.sat, rgblight_config.val, &led[i]);
- }
- rgblight_set();
-
- if (interval % 2) {
- current_hue = (current_hue+1) % 360;
- } else {
- if (current_hue -1 < 0) {
- current_hue = 359;
- } else {
- current_hue = current_hue - 1;
- }
-
- }
+ static uint16_t current_hue = 0;
+ static uint16_t last_timer = 0;
+ uint16_t hue;
+ uint8_t i;
+ if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_RAINBOW_MOOD_INTERVALS[interval / 2])) {
+ return;
+ }
+ last_timer = timer_read();
+ for (i = 0; i < RGBLED_NUM; i++) {
+ hue = (360 / RGBLED_NUM * i + current_hue) % 360;
+ sethsv(hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&led[i]);
+ }
+ rgblight_set();
+
+ if (interval % 2) {
+ current_hue = (current_hue + 1) % 360;
+ } else {
+ if (current_hue - 1 < 0) {
+ current_hue = 359;
+ } else {
+ current_hue = current_hue - 1;
+ }
+ }
}
void rgblight_effect_snake(uint8_t interval) {
- static uint8_t pos=0;
- static uint16_t last_timer = 0;
- uint8_t i,j;
- int8_t k;
- int8_t increament = 1;
- if (interval%2) increament = -1;
- if (timer_elapsed(last_timer)<pgm_read_byte(&RGBLED_SNAKE_INTERVALS[interval/2])) return;
- last_timer = timer_read();
- for (i=0;i<RGBLED_NUM;i++) {
- led[i].r=0;
- led[i].g=0;
- led[i].b=0;
- for (j=0;j<RGBLIGHT_EFFECT_SNAKE_LENGTH;j++) {
- k = pos+j*increament;
- if (k<0) k = k+RGBLED_NUM;
- if (i==k) {
- sethsv(rgblight_config.hue, rgblight_config.sat, (uint8_t)(rgblight_config.val*(RGBLIGHT_EFFECT_SNAKE_LENGTH-j)/RGBLIGHT_EFFECT_SNAKE_LENGTH), &led[i]);
- }
- }
- }
- rgblight_set();
- if (increament == 1) {
- if (pos - 1 < 0) {
- pos = RGBLED_NUM-1;
- } else {
- pos -= 1;
- }
- } else {
- pos = (pos+1)%RGBLED_NUM;
- }
-
+ static uint8_t pos = 0;
+ static uint16_t last_timer = 0;
+ uint8_t i, j;
+ int8_t k;
+ int8_t increment = 1;
+ if (interval % 2) {
+ increment = -1;
+ }
+ if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_SNAKE_INTERVALS[interval / 2])) {
+ return;
+ }
+ last_timer = timer_read();
+ for (i = 0; i < RGBLED_NUM; i++) {
+ led[i].r = 0;
+ led[i].g = 0;
+ led[i].b = 0;
+ for (j = 0; j < RGBLIGHT_EFFECT_SNAKE_LENGTH; j++) {
+ k = pos + j * increment;
+ if (k < 0) {
+ k = k + RGBLED_NUM;
+ }
+ if (i == k) {
+ sethsv(rgblight_config.hue, rgblight_config.sat, (uint8_t)(rgblight_config.val*(RGBLIGHT_EFFECT_SNAKE_LENGTH-j)/RGBLIGHT_EFFECT_SNAKE_LENGTH), (LED_TYPE *)&led[i]);
+ }
+ }
+ }
+ rgblight_set();
+ if (increment == 1) {
+ if (pos - 1 < 0) {
+ pos = RGBLED_NUM - 1;
+ } else {
+ pos -= 1;
+ }
+ } else {
+ pos = (pos + 1) % RGBLED_NUM;
+ }
}
-
void rgblight_effect_knight(uint8_t interval) {
- static int8_t pos=0;
- static uint16_t last_timer = 0;
- uint8_t i,j,cur;
- int8_t k;
- struct cRGB preled[RGBLED_NUM];
- static int8_t increament = -1;
- if (timer_elapsed(last_timer)<pgm_read_byte(&RGBLED_KNIGHT_INTERVALS[interval])) return;
- last_timer = timer_read();
- for (i=0;i<RGBLED_NUM;i++) {
- preled[i].r=0;
- preled[i].g=0;
- preled[i].b=0;
- for (j=0;j<RGBLIGHT_EFFECT_KNIGHT_LENGTH;j++) {
- k = pos+j*increament;
- if (k<0) k = 0;
- if (k>=RGBLED_NUM) k=RGBLED_NUM-1;
- if (i==k) {
- sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, &preled[i]);
- }
- }
- }
- if (RGBLIGHT_EFFECT_KNIGHT_OFFSET) {
- for (i=0;i<RGBLED_NUM;i++) {
- cur = (i+RGBLIGHT_EFFECT_KNIGHT_OFFSET) % RGBLED_NUM;
- led[i].r = preled[cur].r;
- led[i].g = preled[cur].g;
- led[i].b = preled[cur].b;
- }
- }
- rgblight_set();
- if (increament == 1) {
- if (pos - 1 < 0 - RGBLIGHT_EFFECT_KNIGHT_LENGTH) {
- pos = 0- RGBLIGHT_EFFECT_KNIGHT_LENGTH;
- increament = -1;
- } else {
- pos -= 1;
- }
- } else {
- if (pos+1>RGBLED_NUM+RGBLIGHT_EFFECT_KNIGHT_LENGTH) {
- pos = RGBLED_NUM+RGBLIGHT_EFFECT_KNIGHT_LENGTH-1;
- increament = 1;
- } else {
- pos += 1;
- }
- }
-
-}
-
-#endif \ No newline at end of file
+ static int8_t pos = 0;
+ static uint16_t last_timer = 0;
+ uint8_t i, j, cur;
+ int8_t k;
+ LED_TYPE preled[RGBLED_NUM];
+ static int8_t increment = -1;
+ if (timer_elapsed(last_timer) < pgm_read_byte(&RGBLED_KNIGHT_INTERVALS[interval])) {
+ return;
+ }
+ last_timer = timer_read();
+ for (i = 0; i < RGBLED_NUM; i++) {
+ preled[i].r = 0;
+ preled[i].g = 0;
+ preled[i].b = 0;
+ for (j = 0; j < RGBLIGHT_EFFECT_KNIGHT_LENGTH; j++) {
+ k = pos + j * increment;
+ if (k < 0) {
+ k = 0;
+ }
+ if (k >= RGBLED_NUM) {
+ k = RGBLED_NUM - 1;
+ }
+ if (i == k) {
+ sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val, (LED_TYPE *)&preled[i]);
+ }
+ }
+ }
+ if (RGBLIGHT_EFFECT_KNIGHT_OFFSET) {
+ for (i = 0; i < RGBLED_NUM; i++) {
+ cur = (i + RGBLIGHT_EFFECT_KNIGHT_OFFSET) % RGBLED_NUM;
+ led[i].r = preled[cur].r;
+ led[i].g = preled[cur].g;
+ led[i].b = preled[cur].b;
+ }
+ }
+ rgblight_set();
+ if (increment == 1) {
+ if (pos - 1 < 0 - RGBLIGHT_EFFECT_KNIGHT_LENGTH) {
+ pos = 0 - RGBLIGHT_EFFECT_KNIGHT_LENGTH;
+ increment = -1;
+ } else {
+ pos -= 1;
+ }
+ } else {
+ if (pos + 1 > RGBLED_NUM + RGBLIGHT_EFFECT_KNIGHT_LENGTH) {
+ pos = RGBLED_NUM + RGBLIGHT_EFFECT_KNIGHT_LENGTH - 1;
+ increment = 1;
+ } else {
+ pos += 1;
+ }
+ }
+}
+
+#endif
diff --git a/quantum/rgblight.h b/quantum/rgblight.h
index def26c428..aa1d026e0 100644
--- a/quantum/rgblight.h
+++ b/quantum/rgblight.h
@@ -1,8 +1,7 @@
#ifndef RGBLIGHT_H
#define RGBLIGHT_H
-
-#if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
+#ifdef RGBLIGHT_ANIMATIONS
#define RGBLIGHT_MODES 23
#else
#define RGBLIGHT_MODES 1
@@ -34,12 +33,19 @@
#endif
#define RGBLED_TIMER_TOP F_CPU/(256*64)
+// #define RGBLED_TIMER_TOP 0xFF10
#include <stdint.h>
#include <stdbool.h>
#include "eeconfig.h"
#include "light_ws2812.h"
+extern const uint8_t RGBLED_BREATHING_INTERVALS[4] PROGMEM;
+extern const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[3] PROGMEM;
+extern const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[3] PROGMEM;
+extern const uint8_t RGBLED_SNAKE_INTERVALS[3] PROGMEM;
+extern const uint8_t RGBLED_KNIGHT_INTERVALS[3] PROGMEM;
+
typedef union {
uint32_t raw;
struct {
@@ -55,9 +61,11 @@ void rgblight_init(void);
void rgblight_increase(void);
void rgblight_decrease(void);
void rgblight_toggle(void);
+void rgblight_enable(void);
void rgblight_step(void);
void rgblight_mode(uint8_t mode);
void rgblight_set(void);
+void rgblight_update_dword(uint32_t dword);
void rgblight_increase_hue(void);
void rgblight_decrease_hue(void);
void rgblight_increase_sat(void);
@@ -72,10 +80,15 @@ void eeconfig_update_rgblight(uint32_t val);
void eeconfig_update_rgblight_default(void);
void eeconfig_debug_rgblight(void);
-void sethsv(uint16_t hue, uint8_t sat, uint8_t val, struct cRGB *led1);
-void setrgb(uint8_t r, uint8_t g, uint8_t b, struct cRGB *led1);
+void sethsv(uint16_t hue, uint8_t sat, uint8_t val, LED_TYPE *led1);
+void setrgb(uint8_t r, uint8_t g, uint8_t b, LED_TYPE *led1);
void rgblight_sethsv_noeeprom(uint16_t hue, uint8_t sat, uint8_t val);
+#define EZ_RGB(val) rgblight_show_solid_color((val >> 16) & 0xFF, (val >> 8) & 0xFF, val & 0xFF)
+void rgblight_show_solid_color(uint8_t r, uint8_t g, uint8_t b);
+
+void rgblight_task(void);
+
void rgblight_timer_init(void);
void rgblight_timer_enable(void);
void rgblight_timer_disable(void);
diff --git a/quantum/serial_link/protocol/byte_stuffer.c b/quantum/serial_link/protocol/byte_stuffer.c
index fb4c45a8d..2c87d64c2 100644
--- a/quantum/serial_link/protocol/byte_stuffer.c
+++ b/quantum/serial_link/protocol/byte_stuffer.c
@@ -31,9 +31,6 @@ SOFTWARE.
// https://en.wikipedia.org/wiki/Consistent_Overhead_Byte_Stuffing
// http://www.stuartcheshire.org/papers/COBSforToN.pdf
-#define MAX_FRAME_SIZE 1024
-#define NUM_LINKS 2
-
typedef struct byte_stuffer_state {
uint16_t next_zero;
uint16_t data_pos;
diff --git a/quantum/serial_link/protocol/byte_stuffer.h b/quantum/serial_link/protocol/byte_stuffer.h
index 2cc88beb4..97e896856 100644
--- a/quantum/serial_link/protocol/byte_stuffer.h
+++ b/quantum/serial_link/protocol/byte_stuffer.h
@@ -27,6 +27,9 @@ SOFTWARE.
#include <stdint.h>
+#define MAX_FRAME_SIZE 1024
+#define NUM_LINKS 2
+
void init_byte_stuffer(void);
void byte_stuffer_recv_byte(uint8_t link, uint8_t data);
void byte_stuffer_send_frame(uint8_t link, uint8_t* data, uint16_t size);
diff --git a/quantum/serial_link/protocol/transport.c b/quantum/serial_link/protocol/transport.c
index f418d11ce..ff795fe20 100644
--- a/quantum/serial_link/protocol/transport.c
+++ b/quantum/serial_link/protocol/transport.c
@@ -31,6 +31,10 @@ SOFTWARE.
static remote_object_t* remote_objects[MAX_REMOTE_OBJECTS];
static uint32_t num_remote_objects = 0;
+void reinitialize_serial_link_transport(void) {
+ num_remote_objects = 0;
+}
+
void add_remote_objects(remote_object_t** _remote_objects, uint32_t _num_remote_objects) {
unsigned int i;
for(i=0;i<_num_remote_objects;i++) {
diff --git a/quantum/serial_link/protocol/transport.h b/quantum/serial_link/protocol/transport.h
index 9a052d880..2c5d890b2 100644
--- a/quantum/serial_link/protocol/transport.h
+++ b/quantum/serial_link/protocol/transport.h
@@ -82,7 +82,7 @@ typedef struct { \
remote_object_t* obj = (remote_object_t*)&remote_object_##name; \
uint8_t* start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size);\
triple_buffer_object_t* tb = (triple_buffer_object_t*)start; \
- return triple_buffer_read_internal(obj->object_size, tb); \
+ return (type*)triple_buffer_read_internal(obj->object_size, tb); \
}
#define MASTER_TO_SINGLE_SLAVE_OBJECT(name, type) \
@@ -112,7 +112,7 @@ typedef struct { \
remote_object_t* obj = (remote_object_t*)&remote_object_##name; \
uint8_t* start = obj->buffer + NUM_SLAVES * LOCAL_OBJECT_SIZE(obj->object_size);\
triple_buffer_object_t* tb = (triple_buffer_object_t*)start; \
- return triple_buffer_read_internal(obj->object_size, tb); \
+ return (type*)triple_buffer_read_internal(obj->object_size, tb); \
}
#define SLAVE_TO_MASTER_OBJECT(name, type) \
@@ -139,12 +139,13 @@ typedef struct { \
uint8_t* start = obj->buffer + LOCAL_OBJECT_SIZE(obj->object_size);\
start+=slave * REMOTE_OBJECT_SIZE(obj->object_size); \
triple_buffer_object_t* tb = (triple_buffer_object_t*)start; \
- return triple_buffer_read_internal(obj->object_size, tb); \
+ return (type*)triple_buffer_read_internal(obj->object_size, tb); \
}
#define REMOTE_OBJECT(name) (remote_object_t*)&remote_object_##name
void add_remote_objects(remote_object_t** remote_objects, uint32_t num_remote_objects);
+void reinitialize_serial_link_transport(void);
void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size);
void update_transport(void);
diff --git a/quantum/serial_link/tests/byte_stuffer_tests.c b/quantum/serial_link/tests/byte_stuffer_tests.cpp
index 64b170e8c..ff49d727b 100644
--- a/quantum/serial_link/tests/byte_stuffer_tests.c
+++ b/quantum/serial_link/tests/byte_stuffer_tests.cpp
@@ -22,70 +22,90 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
-#include <cgreen/cgreen.h>
-#include <cgreen/mocks.h>
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+#include <vector>
+#include <algorithm>
+extern "C" {
#include "serial_link/protocol/byte_stuffer.h"
-#include "serial_link/protocol/byte_stuffer.c"
#include "serial_link/protocol/frame_validator.h"
#include "serial_link/protocol/physical.h"
+}
-static uint8_t sent_data[MAX_FRAME_SIZE*2];
-static uint16_t sent_data_size;
+using testing::_;
+using testing::ElementsAreArray;
+using testing::Args;
-Describe(ByteStuffer);
-BeforeEach(ByteStuffer) {
- init_byte_stuffer();
- sent_data_size = 0;
-}
-AfterEach(ByteStuffer) {}
+class ByteStuffer : public ::testing::Test{
+public:
+ ByteStuffer() {
+ Instance = this;
+ init_byte_stuffer();
+ }
-void validator_recv_frame(uint8_t link, uint8_t* data, uint16_t size) {
- mock(data, size);
-}
+ ~ByteStuffer() {
+ Instance = nullptr;
+ }
+
+ MOCK_METHOD3(validator_recv_frame, void (uint8_t link, uint8_t* data, uint16_t size));
+
+ void send_data(uint8_t link, const uint8_t* data, uint16_t size) {
+ std::copy(data, data + size, std::back_inserter(sent_data));
+ }
+ std::vector<uint8_t> sent_data;
-void send_data(uint8_t link, const uint8_t* data, uint16_t size) {
- memcpy(sent_data + sent_data_size, data, size);
- sent_data_size += size;
+ static ByteStuffer* Instance;
+};
+
+ByteStuffer* ByteStuffer::Instance = nullptr;
+
+extern "C" {
+ void validator_recv_frame(uint8_t link, uint8_t* data, uint16_t size) {
+ ByteStuffer::Instance->validator_recv_frame(link, data, size);
+ }
+
+ void send_data(uint8_t link, const uint8_t* data, uint16_t size) {
+ ByteStuffer::Instance->send_data(link, data, size);
+ }
}
-Ensure(ByteStuffer, receives_no_frame_for_a_single_zero_byte) {
- never_expect(validator_recv_frame);
+TEST_F(ByteStuffer, receives_no_frame_for_a_single_zero_byte) {
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .Times(0);
byte_stuffer_recv_byte(0, 0);
}
-Ensure(ByteStuffer, receives_no_frame_for_a_single_FF_byte) {
- never_expect(validator_recv_frame);
+TEST_F(ByteStuffer, receives_no_frame_for_a_single_FF_byte) {
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .Times(0);
byte_stuffer_recv_byte(0, 0xFF);
}
-Ensure(ByteStuffer, receives_no_frame_for_a_single_random_byte) {
- never_expect(validator_recv_frame);
+TEST_F(ByteStuffer, receives_no_frame_for_a_single_random_byte) {
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .Times(0);
byte_stuffer_recv_byte(0, 0x4A);
}
-Ensure(ByteStuffer, receives_no_frame_for_a_zero_length_frame) {
- never_expect(validator_recv_frame);
+TEST_F(ByteStuffer, receives_no_frame_for_a_zero_length_frame) {
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .Times(0);
byte_stuffer_recv_byte(0, 1);
byte_stuffer_recv_byte(0, 0);
}
-Ensure(ByteStuffer, receives_single_byte_valid_frame) {
+TEST_F(ByteStuffer, receives_single_byte_valid_frame) {
uint8_t expected[] = {0x37};
- expect(validator_recv_frame,
- when(size, is_equal_to(1)),
- when(data, is_equal_to_contents_of(expected, 1))
- );
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(expected)));
byte_stuffer_recv_byte(0, 2);
byte_stuffer_recv_byte(0, 0x37);
byte_stuffer_recv_byte(0, 0);
}
-
-Ensure(ByteStuffer, receives_three_bytes_valid_frame) {
+TEST_F(ByteStuffer, receives_three_bytes_valid_frame) {
uint8_t expected[] = {0x37, 0x99, 0xFF};
- expect(validator_recv_frame,
- when(size, is_equal_to(3)),
- when(data, is_equal_to_contents_of(expected, 3))
- );
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(expected)));
byte_stuffer_recv_byte(0, 4);
byte_stuffer_recv_byte(0, 0x37);
byte_stuffer_recv_byte(0, 0x99);
@@ -93,23 +113,19 @@ Ensure(ByteStuffer, receives_three_bytes_valid_frame) {
byte_stuffer_recv_byte(0, 0);
}
-Ensure(ByteStuffer, receives_single_zero_valid_frame) {
+TEST_F(ByteStuffer, receives_single_zero_valid_frame) {
uint8_t expected[] = {0};
- expect(validator_recv_frame,
- when(size, is_equal_to(1)),
- when(data, is_equal_to_contents_of(expected, 1))
- );
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(expected)));
byte_stuffer_recv_byte(0, 1);
byte_stuffer_recv_byte(0, 1);
byte_stuffer_recv_byte(0, 0);
}
-Ensure(ByteStuffer, receives_valid_frame_with_zeroes) {
+TEST_F(ByteStuffer, receives_valid_frame_with_zeroes) {
uint8_t expected[] = {5, 0, 3, 0};
- expect(validator_recv_frame,
- when(size, is_equal_to(4)),
- when(data, is_equal_to_contents_of(expected, 4))
- );
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(expected)));
byte_stuffer_recv_byte(0, 2);
byte_stuffer_recv_byte(0, 5);
byte_stuffer_recv_byte(0, 2);
@@ -118,17 +134,14 @@ Ensure(ByteStuffer, receives_valid_frame_with_zeroes) {
byte_stuffer_recv_byte(0, 0);
}
-Ensure(ByteStuffer, receives_two_valid_frames) {
+
+TEST_F(ByteStuffer, receives_two_valid_frames) {
uint8_t expected1[] = {5, 0};
uint8_t expected2[] = {3};
- expect(validator_recv_frame,
- when(size, is_equal_to(2)),
- when(data, is_equal_to_contents_of(expected1, 2))
- );
- expect(validator_recv_frame,
- when(size, is_equal_to(1)),
- when(data, is_equal_to_contents_of(expected2, 1))
- );
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(expected1)));
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(expected2)));
byte_stuffer_recv_byte(1, 2);
byte_stuffer_recv_byte(1, 5);
byte_stuffer_recv_byte(1, 1);
@@ -138,12 +151,10 @@ Ensure(ByteStuffer, receives_two_valid_frames) {
byte_stuffer_recv_byte(1, 0);
}
-Ensure(ByteStuffer, receives_valid_frame_after_unexpected_zero) {
+TEST_F(ByteStuffer, receives_valid_frame_after_unexpected_zero) {
uint8_t expected[] = {5, 7};
- expect(validator_recv_frame,
- when(size, is_equal_to(2)),
- when(data, is_equal_to_contents_of(expected, 2))
- );
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(expected)));
byte_stuffer_recv_byte(1, 3);
byte_stuffer_recv_byte(1, 1);
byte_stuffer_recv_byte(1, 0);
@@ -153,12 +164,10 @@ Ensure(ByteStuffer, receives_valid_frame_after_unexpected_zero) {
byte_stuffer_recv_byte(1, 0);
}
-Ensure(ByteStuffer, receives_valid_frame_after_unexpected_non_zero) {
+TEST_F(ByteStuffer, receives_valid_frame_after_unexpected_non_zero) {
uint8_t expected[] = {5, 7};
- expect(validator_recv_frame,
- when(size, is_equal_to(2)),
- when(data, is_equal_to_contents_of(expected, 2))
- );
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(expected)));
byte_stuffer_recv_byte(0, 2);
byte_stuffer_recv_byte(0, 9);
byte_stuffer_recv_byte(0, 4); // This should have been zero
@@ -169,16 +178,14 @@ Ensure(ByteStuffer, receives_valid_frame_after_unexpected_non_zero) {
byte_stuffer_recv_byte(0, 0);
}
-Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_and_then_end_of_frame) {
+TEST_F(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_and_then_end_of_frame) {
uint8_t expected[254];
int i;
for (i=0;i<254;i++) {
expected[i] = i + 1;
}
- expect(validator_recv_frame,
- when(size, is_equal_to(254)),
- when(data, is_equal_to_contents_of(expected, 254))
- );
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(expected)));
byte_stuffer_recv_byte(0, 0xFF);
for (i=0;i<254;i++) {
byte_stuffer_recv_byte(0, i+1);
@@ -186,17 +193,15 @@ Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_and_then_end_
byte_stuffer_recv_byte(0, 0);
}
-Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_non_zero) {
+TEST_F(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_non_zero) {
uint8_t expected[255];
int i;
for (i=0;i<254;i++) {
expected[i] = i + 1;
}
expected[254] = 7;
- expect(validator_recv_frame,
- when(size, is_equal_to(255)),
- when(data, is_equal_to_contents_of(expected, 255))
- );
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(expected)));
byte_stuffer_recv_byte(0, 0xFF);
for (i=0;i<254;i++) {
byte_stuffer_recv_byte(0, i+1);
@@ -206,17 +211,15 @@ Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_
byte_stuffer_recv_byte(0, 0);
}
-Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_zero) {
+TEST_F(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_zero) {
uint8_t expected[255];
int i;
for (i=0;i<254;i++) {
expected[i] = i + 1;
}
expected[254] = 0;
- expect(validator_recv_frame,
- when(size, is_equal_to(255)),
- when(data, is_equal_to_contents_of(expected, 255))
- );
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(expected)));
byte_stuffer_recv_byte(0, 0xFF);
for (i=0;i<254;i++) {
byte_stuffer_recv_byte(0, i+1);
@@ -226,7 +229,7 @@ Ensure(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_
byte_stuffer_recv_byte(0, 0);
}
-Ensure(ByteStuffer, receives_two_long_frames_and_some_more) {
+TEST_F(ByteStuffer, receives_two_long_frames_and_some_more) {
uint8_t expected[515];
int i;
int j;
@@ -238,10 +241,8 @@ Ensure(ByteStuffer, receives_two_long_frames_and_some_more) {
for (i=0;i<7;i++) {
expected[254*2+i] = i + 1;
}
- expect(validator_recv_frame,
- when(size, is_equal_to(515)),
- when(data, is_equal_to_contents_of(expected, 510))
- );
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(expected)));
byte_stuffer_recv_byte(0, 0xFF);
for (i=0;i<254;i++) {
byte_stuffer_recv_byte(0, i+1);
@@ -261,12 +262,10 @@ Ensure(ByteStuffer, receives_two_long_frames_and_some_more) {
byte_stuffer_recv_byte(0, 0);
}
-Ensure(ByteStuffer, receives_an_all_zeros_frame_that_is_maximum_size) {
+TEST_F(ByteStuffer, receives_an_all_zeros_frame_that_is_maximum_size) {
uint8_t expected[MAX_FRAME_SIZE] = {};
- expect(validator_recv_frame,
- when(size, is_equal_to(MAX_FRAME_SIZE)),
- when(data, is_equal_to_contents_of(expected, MAX_FRAME_SIZE))
- );
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(expected)));
int i;
byte_stuffer_recv_byte(0, 1);
for(i=0;i<MAX_FRAME_SIZE;i++) {
@@ -275,9 +274,10 @@ Ensure(ByteStuffer, receives_an_all_zeros_frame_that_is_maximum_size) {
byte_stuffer_recv_byte(0, 0);
}
-Ensure(ByteStuffer, doesnt_recv_a_frame_thats_too_long_all_zeroes) {
+TEST_F(ByteStuffer, doesnt_recv_a_frame_thats_too_long_all_zeroes) {
uint8_t expected[1] = {0};
- never_expect(validator_recv_frame);
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .Times(0);
int i;
byte_stuffer_recv_byte(0, 1);
for(i=0;i<MAX_FRAME_SIZE;i++) {
@@ -287,12 +287,10 @@ Ensure(ByteStuffer, doesnt_recv_a_frame_thats_too_long_all_zeroes) {
byte_stuffer_recv_byte(0, 0);
}
-Ensure(ByteStuffer, received_frame_is_aborted_when_its_too_long) {
+TEST_F(ByteStuffer, received_frame_is_aborted_when_its_too_long) {
uint8_t expected[1] = {1};
- expect(validator_recv_frame,
- when(size, is_equal_to(1)),
- when(data, is_equal_to_contents_of(expected, 1))
- );
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(expected)));
int i;
byte_stuffer_recv_byte(0, 1);
for(i=0;i<MAX_FRAME_SIZE;i++) {
@@ -303,76 +301,68 @@ Ensure(ByteStuffer, received_frame_is_aborted_when_its_too_long) {
byte_stuffer_recv_byte(0, 0);
}
-Ensure(ByteStuffer, does_nothing_when_sending_zero_size_frame) {
- assert_that(sent_data_size, is_equal_to(0));
+TEST_F(ByteStuffer, does_nothing_when_sending_zero_size_frame) {
+ EXPECT_EQ(sent_data.size(), 0);
byte_stuffer_send_frame(0, NULL, 0);
}
-Ensure(ByteStuffer, send_one_byte_frame) {
+TEST_F(ByteStuffer, send_one_byte_frame) {
uint8_t data[] = {5};
byte_stuffer_send_frame(1, data, 1);
uint8_t expected[] = {2, 5, 0};
- assert_that(sent_data_size, is_equal_to(sizeof(expected)));
- assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
+ EXPECT_THAT(sent_data, ElementsAreArray(expected));
}
-Ensure(ByteStuffer, sends_two_byte_frame) {
+TEST_F(ByteStuffer, sends_two_byte_frame) {
uint8_t data[] = {5, 0x77};
byte_stuffer_send_frame(0, data, 2);
uint8_t expected[] = {3, 5, 0x77, 0};
- assert_that(sent_data_size, is_equal_to(sizeof(expected)));
- assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
+ EXPECT_THAT(sent_data, ElementsAreArray(expected));
}
-Ensure(ByteStuffer, sends_one_byte_frame_with_zero) {
+TEST_F(ByteStuffer, sends_one_byte_frame_with_zero) {
uint8_t data[] = {0};
byte_stuffer_send_frame(0, data, 1);
uint8_t expected[] = {1, 1, 0};
- assert_that(sent_data_size, is_equal_to(sizeof(expected)));
- assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
+ EXPECT_THAT(sent_data, ElementsAreArray(expected));
}
-Ensure(ByteStuffer, sends_two_byte_frame_starting_with_zero) {
+TEST_F(ByteStuffer, sends_two_byte_frame_starting_with_zero) {
uint8_t data[] = {0, 9};
byte_stuffer_send_frame(1, data, 2);
uint8_t expected[] = {1, 2, 9, 0};
- assert_that(sent_data_size, is_equal_to(sizeof(expected)));
- assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
+ EXPECT_THAT(sent_data, ElementsAreArray(expected));
}
-Ensure(ByteStuffer, sends_two_byte_frame_starting_with_non_zero) {
+TEST_F(ByteStuffer, sends_two_byte_frame_starting_with_non_zero) {
uint8_t data[] = {9, 0};
byte_stuffer_send_frame(1, data, 2);
uint8_t expected[] = {2, 9, 1, 0};
- assert_that(sent_data_size, is_equal_to(sizeof(expected)));
- assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
+ EXPECT_THAT(sent_data, ElementsAreArray(expected));
}
-Ensure(ByteStuffer, sends_three_byte_frame_zero_in_the_middle) {
+TEST_F(ByteStuffer, sends_three_byte_frame_zero_in_the_middle) {
uint8_t data[] = {9, 0, 0x68};
byte_stuffer_send_frame(0, data, 3);
uint8_t expected[] = {2, 9, 2, 0x68, 0};
- assert_that(sent_data_size, is_equal_to(sizeof(expected)));
- assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
+ EXPECT_THAT(sent_data, ElementsAreArray(expected));
}
-Ensure(ByteStuffer, sends_three_byte_frame_data_in_the_middle) {
+TEST_F(ByteStuffer, sends_three_byte_frame_data_in_the_middle) {
uint8_t data[] = {0, 0x55, 0};
byte_stuffer_send_frame(0, data, 3);
uint8_t expected[] = {1, 2, 0x55, 1, 0};
- assert_that(sent_data_size, is_equal_to(sizeof(expected)));
- assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
+ EXPECT_THAT(sent_data, ElementsAreArray(expected));
}
-Ensure(ByteStuffer, sends_three_byte_frame_with_all_zeroes) {
+TEST_F(ByteStuffer, sends_three_byte_frame_with_all_zeroes) {
uint8_t data[] = {0, 0, 0};
byte_stuffer_send_frame(0, data, 3);
uint8_t expected[] = {1, 1, 1, 1, 0};
- assert_that(sent_data_size, is_equal_to(sizeof(expected)));
- assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
+ EXPECT_THAT(sent_data, ElementsAreArray(expected));
}
-Ensure(ByteStuffer, sends_frame_with_254_non_zeroes) {
+TEST_F(ByteStuffer, sends_frame_with_254_non_zeroes) {
uint8_t data[254];
int i;
for(i=0;i<254;i++) {
@@ -385,11 +375,10 @@ Ensure(ByteStuffer, sends_frame_with_254_non_zeroes) {
expected[i] = i;
}
expected[255] = 0;
- assert_that(sent_data_size, is_equal_to(sizeof(expected)));
- assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
+ EXPECT_THAT(sent_data, ElementsAreArray(expected));
}
-Ensure(ByteStuffer, sends_frame_with_255_non_zeroes) {
+TEST_F(ByteStuffer, sends_frame_with_255_non_zeroes) {
uint8_t data[255];
int i;
for(i=0;i<255;i++) {
@@ -404,17 +393,16 @@ Ensure(ByteStuffer, sends_frame_with_255_non_zeroes) {
expected[255] = 2;
expected[256] = 255;
expected[257] = 0;
- assert_that(sent_data_size, is_equal_to(sizeof(expected)));
- assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
+ EXPECT_THAT(sent_data, ElementsAreArray(expected));
}
-Ensure(ByteStuffer, sends_frame_with_254_non_zeroes_followed_by_zero) {
+TEST_F(ByteStuffer, sends_frame_with_254_non_zeroes_followed_by_zero) {
uint8_t data[255];
int i;
for(i=0;i<254;i++) {
data[i] = i + 1;
}
- data[255] = 0;
+ data[254] = 0;
byte_stuffer_send_frame(0, data, 255);
uint8_t expected[258];
expected[0] = 0xFF;
@@ -424,53 +412,46 @@ Ensure(ByteStuffer, sends_frame_with_254_non_zeroes_followed_by_zero) {
expected[255] = 1;
expected[256] = 1;
expected[257] = 0;
- assert_that(sent_data_size, is_equal_to(sizeof(expected)));
- assert_that(sent_data, is_equal_to_contents_of(expected, sizeof(expected)));
+ EXPECT_THAT(sent_data, ElementsAreArray(expected));
}
-Ensure(ByteStuffer, sends_and_receives_full_roundtrip_small_packet) {
+TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_small_packet) {
uint8_t original_data[] = { 1, 2, 3};
byte_stuffer_send_frame(0, original_data, sizeof(original_data));
- expect(validator_recv_frame,
- when(size, is_equal_to(sizeof(original_data))),
- when(data, is_equal_to_contents_of(original_data, sizeof(original_data)))
- );
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(original_data)));
int i;
- for(i=0;i<sent_data_size;i++) {
- byte_stuffer_recv_byte(1, sent_data[i]);
+ for(auto& d : sent_data) {
+ byte_stuffer_recv_byte(1, d);
}
}
-Ensure(ByteStuffer, sends_and_receives_full_roundtrip_small_packet_with_zeros) {
+TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_small_packet_with_zeros) {
uint8_t original_data[] = { 1, 0, 3, 0, 0, 9};
byte_stuffer_send_frame(1, original_data, sizeof(original_data));
- expect(validator_recv_frame,
- when(size, is_equal_to(sizeof(original_data))),
- when(data, is_equal_to_contents_of(original_data, sizeof(original_data)))
- );
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(original_data)));
int i;
- for(i=0;i<sent_data_size;i++) {
- byte_stuffer_recv_byte(0, sent_data[i]);
+ for(auto& d : sent_data) {
+ byte_stuffer_recv_byte(1, d);
}
}
-Ensure(ByteStuffer, sends_and_receives_full_roundtrip_254_bytes) {
+TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_254_bytes) {
uint8_t original_data[254];
int i;
for(i=0;i<254;i++) {
original_data[i] = i + 1;
}
byte_stuffer_send_frame(0, original_data, sizeof(original_data));
- expect(validator_recv_frame,
- when(size, is_equal_to(sizeof(original_data))),
- when(data, is_equal_to_contents_of(original_data, sizeof(original_data)))
- );
- for(i=0;i<sent_data_size;i++) {
- byte_stuffer_recv_byte(1, sent_data[i]);
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(original_data)));
+ for(auto& d : sent_data) {
+ byte_stuffer_recv_byte(1, d);
}
}
-Ensure(ByteStuffer, sends_and_receives_full_roundtrip_256_bytes) {
+TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_256_bytes) {
uint8_t original_data[256];
int i;
for(i=0;i<254;i++) {
@@ -479,16 +460,14 @@ Ensure(ByteStuffer, sends_and_receives_full_roundtrip_256_bytes) {
original_data[254] = 22;
original_data[255] = 23;
byte_stuffer_send_frame(0, original_data, sizeof(original_data));
- expect(validator_recv_frame,
- when(size, is_equal_to(sizeof(original_data))),
- when(data, is_equal_to_contents_of(original_data, sizeof(original_data)))
- );
- for(i=0;i<sent_data_size;i++) {
- byte_stuffer_recv_byte(1, sent_data[i]);
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(original_data)));
+ for(auto& d : sent_data) {
+ byte_stuffer_recv_byte(1, d);
}
}
-Ensure(ByteStuffer, sends_and_receives_full_roundtrip_254_bytes_and_then_zero) {
+TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_254_bytes_and_then_zero) {
uint8_t original_data[255];
int i;
for(i=0;i<254;i++) {
@@ -496,11 +475,9 @@ Ensure(ByteStuffer, sends_and_receives_full_roundtrip_254_bytes_and_then_zero) {
}
original_data[254] = 0;
byte_stuffer_send_frame(0, original_data, sizeof(original_data));
- expect(validator_recv_frame,
- when(size, is_equal_to(sizeof(original_data))),
- when(data, is_equal_to_contents_of(original_data, sizeof(original_data)))
- );
- for(i=0;i<sent_data_size;i++) {
- byte_stuffer_recv_byte(1, sent_data[i]);
+ EXPECT_CALL(*this, validator_recv_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(original_data)));
+ for(auto& d : sent_data) {
+ byte_stuffer_recv_byte(1, d);
}
}
diff --git a/quantum/serial_link/tests/frame_router_tests.c b/quantum/serial_link/tests/frame_router_tests.c
deleted file mode 100644
index 6c806fa93..000000000
--- a/quantum/serial_link/tests/frame_router_tests.c
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
-The MIT License (MIT)
-
-Copyright (c) 2016 Fred Sundvik
-
-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.
-*/
-
-#include <cgreen/cgreen.h>
-#include <cgreen/mocks.h>
-#include "serial_link/protocol/byte_stuffer.c"
-#include "serial_link/protocol/frame_validator.c"
-#include "serial_link/protocol/frame_router.c"
-#include "serial_link/protocol/transport.h"
-
-static uint8_t received_data[256];
-static uint16_t received_data_size;
-
-typedef struct {
- uint8_t sent_data[256];
- uint16_t sent_data_size;
-} receive_buffer_t;
-
-typedef struct {
- receive_buffer_t send_buffers[2];
-} router_buffer_t;
-
-router_buffer_t router_buffers[8];
-
-router_buffer_t* current_router_buffer;
-
-
-Describe(FrameRouter);
-BeforeEach(FrameRouter) {
- init_byte_stuffer();
- memset(router_buffers, 0, sizeof(router_buffers));
- current_router_buffer = 0;
-}
-AfterEach(FrameRouter) {}
-
-typedef struct {
- uint32_t data;
- uint8_t extra[16];
-} frame_buffer_t;
-
-
-void send_data(uint8_t link, const uint8_t* data, uint16_t size) {
- receive_buffer_t* buffer = &current_router_buffer->send_buffers[link];
- memcpy(buffer->sent_data + buffer->sent_data_size, data, size);
- buffer->sent_data_size += size;
-}
-
-static void receive_data(uint8_t link, uint8_t* data, uint16_t size) {
- int i;
- for(i=0;i<size;i++) {
- byte_stuffer_recv_byte(link, data[i]);
- }
-}
-
-static void activate_router(uint8_t num) {
- current_router_buffer = router_buffers + num;
- router_set_master(num==0);
-}
-
-static void simulate_transport(uint8_t from, uint8_t to) {
- activate_router(to);
- if (from > to) {
- receive_data(DOWN_LINK,
- router_buffers[from].send_buffers[UP_LINK].sent_data,
- router_buffers[from].send_buffers[UP_LINK].sent_data_size);
- }
- else if(to > from) {
- receive_data(UP_LINK,
- router_buffers[from].send_buffers[DOWN_LINK].sent_data,
- router_buffers[from].send_buffers[DOWN_LINK].sent_data_size);
- }
-}
-
-void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size) {
- mock(from, data, size);
-}
-
-
-Ensure(FrameRouter, master_broadcast_is_received_by_everyone) {
- frame_buffer_t data;
- data.data = 0xAB7055BB;
- activate_router(0);
- router_send_frame(0xFF, (uint8_t*)&data, 4);
- assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0));
- assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-
- expect(transport_recv_frame,
- when(from, is_equal_to(0)),
- when(size, is_equal_to(4)),
- when(data, is_equal_to_contents_of(&data.data, 4))
- );
- simulate_transport(0, 1);
- assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0));
- assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-
- expect(transport_recv_frame,
- when(from, is_equal_to(0)),
- when(size, is_equal_to(4)),
- when(data, is_equal_to_contents_of(&data.data, 4))
- );
- simulate_transport(1, 2);
- assert_that(router_buffers[2].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0));
- assert_that(router_buffers[2].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-}
-
-Ensure(FrameRouter, master_send_is_received_by_targets) {
- frame_buffer_t data;
- data.data = 0xAB7055BB;
- activate_router(0);
- router_send_frame((1 << 1) | (1 << 2), (uint8_t*)&data, 4);
- assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0));
- assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-
- simulate_transport(0, 1);
- assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0));
- assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-
- expect(transport_recv_frame,
- when(from, is_equal_to(0)),
- when(size, is_equal_to(4)),
- when(data, is_equal_to_contents_of(&data.data, 4))
- );
- simulate_transport(1, 2);
- assert_that(router_buffers[2].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0));
- assert_that(router_buffers[2].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-
- expect(transport_recv_frame,
- when(from, is_equal_to(0)),
- when(size, is_equal_to(4)),
- when(data, is_equal_to_contents_of(&data.data, 4))
- );
- simulate_transport(2, 3);
- assert_that(router_buffers[3].send_buffers[DOWN_LINK].sent_data_size, is_greater_than(0));
- assert_that(router_buffers[3].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-}
-
-Ensure(FrameRouter, first_link_sends_to_master) {
- frame_buffer_t data;
- data.data = 0xAB7055BB;
- activate_router(1);
- router_send_frame(0, (uint8_t*)&data, 4);
- assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_greater_than(0));
- assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0));
-
- expect(transport_recv_frame,
- when(from, is_equal_to(1)),
- when(size, is_equal_to(4)),
- when(data, is_equal_to_contents_of(&data.data, 4))
- );
- simulate_transport(1, 0);
- assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0));
- assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-}
-
-Ensure(FrameRouter, second_link_sends_to_master) {
- frame_buffer_t data;
- data.data = 0xAB7055BB;
- activate_router(2);
- router_send_frame(0, (uint8_t*)&data, 4);
- assert_that(router_buffers[2].send_buffers[UP_LINK].sent_data_size, is_greater_than(0));
- assert_that(router_buffers[2].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0));
-
- simulate_transport(2, 1);
- assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_greater_than(0));
- assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0));
-
- expect(transport_recv_frame,
- when(from, is_equal_to(2)),
- when(size, is_equal_to(4)),
- when(data, is_equal_to_contents_of(&data.data, 4))
- );
- simulate_transport(1, 0);
- assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0));
- assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
-}
-
-Ensure(FrameRouter, master_sends_to_master_does_nothing) {
- frame_buffer_t data;
- data.data = 0xAB7055BB;
- activate_router(0);
- router_send_frame(0, (uint8_t*)&data, 4);
- assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
- assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0));
-}
-
-Ensure(FrameRouter, link_sends_to_other_link_does_nothing) {
- frame_buffer_t data;
- data.data = 0xAB7055BB;
- activate_router(1);
- router_send_frame(2, (uint8_t*)&data, 4);
- assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
- assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0));
-}
-
-Ensure(FrameRouter, master_receives_on_uplink_does_nothing) {
- frame_buffer_t data;
- data.data = 0xAB7055BB;
- activate_router(1);
- router_send_frame(0, (uint8_t*)&data, 4);
- assert_that(router_buffers[1].send_buffers[UP_LINK].sent_data_size, is_greater_than(0));
- assert_that(router_buffers[1].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0));
-
- never_expect(transport_recv_frame);
- activate_router(0);
- receive_data(UP_LINK,
- router_buffers[1].send_buffers[UP_LINK].sent_data,
- router_buffers[1].send_buffers[UP_LINK].sent_data_size);
- assert_that(router_buffers[0].send_buffers[UP_LINK].sent_data_size, is_equal_to(0));
- assert_that(router_buffers[0].send_buffers[DOWN_LINK].sent_data_size, is_equal_to(0));
-}
diff --git a/quantum/serial_link/tests/frame_router_tests.cpp b/quantum/serial_link/tests/frame_router_tests.cpp
new file mode 100644
index 000000000..2bd5bf830
--- /dev/null
+++ b/quantum/serial_link/tests/frame_router_tests.cpp
@@ -0,0 +1,229 @@
+/*
+The MIT License (MIT)
+
+Copyright (c) 2016 Fred Sundvik
+
+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.
+*/
+
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+#include <array>
+extern "C" {
+ #include "serial_link/protocol/transport.h"
+ #include "serial_link/protocol/byte_stuffer.h"
+ #include "serial_link/protocol/frame_router.h"
+}
+
+using testing::_;
+using testing::ElementsAreArray;
+using testing::Args;
+
+class FrameRouter : public testing::Test {
+public:
+ FrameRouter() :
+ current_router_buffer(nullptr)
+ {
+ Instance = this;
+ init_byte_stuffer();
+ }
+
+ ~FrameRouter() {
+ Instance = nullptr;
+ }
+
+ void send_data(uint8_t link, const uint8_t* data, uint16_t size) {
+ auto& buffer = current_router_buffer->send_buffers[link];
+ std::copy(data, data + size, std::back_inserter(buffer));
+ }
+
+ void receive_data(uint8_t link, uint8_t* data, uint16_t size) {
+ int i;
+ for(i=0;i<size;i++) {
+ byte_stuffer_recv_byte(link, data[i]);
+ }
+ }
+
+ void activate_router(uint8_t num) {
+ current_router_buffer = router_buffers + num;
+ router_set_master(num==0);
+ }
+
+ void simulate_transport(uint8_t from, uint8_t to) {
+ activate_router(to);
+ if (from > to) {
+ receive_data(DOWN_LINK,
+ router_buffers[from].send_buffers[UP_LINK].data(),
+ router_buffers[from].send_buffers[UP_LINK].size());
+ }
+ else if(to > from) {
+ receive_data(UP_LINK,
+ router_buffers[from].send_buffers[DOWN_LINK].data(),
+ router_buffers[from].send_buffers[DOWN_LINK].size());
+ }
+ }
+
+ MOCK_METHOD3(transport_recv_frame, void (uint8_t from, uint8_t* data, uint16_t size));
+
+ std::vector<uint8_t> received_data;
+
+ struct router_buffer {
+ std::vector<uint8_t> send_buffers[2];
+ };
+
+ router_buffer router_buffers[8];
+ router_buffer* current_router_buffer;
+
+ static FrameRouter* Instance;
+};
+
+FrameRouter* FrameRouter::Instance = nullptr;
+
+
+typedef struct {
+ std::array<uint8_t, 4> data;
+ uint8_t extra[16];
+} frame_buffer_t;
+
+
+extern "C" {
+ void send_data(uint8_t link, const uint8_t* data, uint16_t size) {
+ FrameRouter::Instance->send_data(link, data, size);
+ }
+
+
+ void transport_recv_frame(uint8_t from, uint8_t* data, uint16_t size) {
+ FrameRouter::Instance->transport_recv_frame(from, data, size);
+ }
+}
+
+TEST_F(FrameRouter, master_broadcast_is_received_by_everyone) {
+ frame_buffer_t data;
+ data.data = {0xAB, 0x70, 0x55, 0xBB};
+ activate_router(0);
+ router_send_frame(0xFF, (uint8_t*)&data, 4);
+ EXPECT_GT(router_buffers[0].send_buffers[DOWN_LINK].size(), 0);
+ EXPECT_EQ(router_buffers[0].send_buffers[UP_LINK].size(), 0);
+ EXPECT_CALL(*this, transport_recv_frame(0, _, _))
+ .With(Args<1, 2>(ElementsAreArray(data.data)));
+ simulate_transport(0, 1);
+ EXPECT_GT(router_buffers[1].send_buffers[DOWN_LINK].size(), 0);
+ EXPECT_EQ(router_buffers[1].send_buffers[UP_LINK].size(), 0);
+
+ EXPECT_CALL(*this, transport_recv_frame(0, _, _))
+ .With(Args<1, 2>(ElementsAreArray(data.data)));
+ simulate_transport(1, 2);
+ EXPECT_GT(router_buffers[2].send_buffers[DOWN_LINK].size(), 0);
+ EXPECT_EQ(router_buffers[2].send_buffers[UP_LINK].size(), 0);
+}
+
+TEST_F(FrameRouter, master_send_is_received_by_targets) {
+ frame_buffer_t data;
+ data.data = {0xAB, 0x70, 0x55, 0xBB};
+ activate_router(0);
+ router_send_frame((1 << 1) | (1 << 2), (uint8_t*)&data, 4);
+ EXPECT_GT(router_buffers[0].send_buffers[DOWN_LINK].size(), 0);
+ EXPECT_EQ(router_buffers[0].send_buffers[UP_LINK].size(), 0);
+
+ simulate_transport(0, 1);
+ EXPECT_GT(router_buffers[1].send_buffers[DOWN_LINK].size(), 0);
+ EXPECT_EQ(router_buffers[1].send_buffers[UP_LINK].size(), 0);
+
+ EXPECT_CALL(*this, transport_recv_frame(0, _, _))
+ .With(Args<1, 2>(ElementsAreArray(data.data)));
+ simulate_transport(1, 2);
+ EXPECT_GT(router_buffers[2].send_buffers[DOWN_LINK].size(), 0);
+ EXPECT_EQ(router_buffers[2].send_buffers[UP_LINK].size(), 0);
+
+ EXPECT_CALL(*this, transport_recv_frame(0, _, _))
+ .With(Args<1, 2>(ElementsAreArray(data.data)));
+ simulate_transport(2, 3);
+ EXPECT_GT(router_buffers[3].send_buffers[DOWN_LINK].size(), 0);
+ EXPECT_EQ(router_buffers[3].send_buffers[UP_LINK].size(), 0);
+}
+
+TEST_F(FrameRouter, first_link_sends_to_master) {
+ frame_buffer_t data;
+ data.data = {0xAB, 0x70, 0x55, 0xBB};
+ activate_router(1);
+ router_send_frame(0, (uint8_t*)&data, 4);
+ EXPECT_GT(router_buffers[1].send_buffers[UP_LINK].size(), 0);
+ EXPECT_EQ(router_buffers[1].send_buffers[DOWN_LINK].size(), 0);
+
+ EXPECT_CALL(*this, transport_recv_frame(1, _, _))
+ .With(Args<1, 2>(ElementsAreArray(data.data)));
+ simulate_transport(1, 0);
+ EXPECT_EQ(router_buffers[0].send_buffers[DOWN_LINK].size(), 0);
+ EXPECT_EQ(router_buffers[0].send_buffers[UP_LINK].size(), 0);
+}
+
+TEST_F(FrameRouter, second_link_sends_to_master) {
+ frame_buffer_t data;
+ data.data = {0xAB, 0x70, 0x55, 0xBB};
+ activate_router(2);
+ router_send_frame(0, (uint8_t*)&data, 4);
+ EXPECT_GT(router_buffers[2].send_buffers[UP_LINK].size(), 0);
+ EXPECT_EQ(router_buffers[2].send_buffers[DOWN_LINK].size(), 0);
+
+ simulate_transport(2, 1);
+ EXPECT_GT(router_buffers[1].send_buffers[UP_LINK].size(), 0);
+ EXPECT_EQ(router_buffers[1].send_buffers[DOWN_LINK].size(), 0);
+
+ EXPECT_CALL(*this, transport_recv_frame(2, _, _))
+ .With(Args<1, 2>(ElementsAreArray(data.data)));
+ simulate_transport(1, 0);
+ EXPECT_EQ(router_buffers[0].send_buffers[DOWN_LINK].size(), 0);
+ EXPECT_EQ(router_buffers[0].send_buffers[UP_LINK].size(), 0);
+}
+
+TEST_F(FrameRouter, master_sends_to_master_does_nothing) {
+ frame_buffer_t data;
+ data.data = {0xAB, 0x70, 0x55, 0xBB};
+ activate_router(0);
+ router_send_frame(0, (uint8_t*)&data, 4);
+ EXPECT_EQ(router_buffers[0].send_buffers[UP_LINK].size(), 0);
+ EXPECT_EQ(router_buffers[0].send_buffers[DOWN_LINK].size(), 0);
+}
+
+TEST_F(FrameRouter, link_sends_to_other_link_does_nothing) {
+ frame_buffer_t data;
+ data.data = {0xAB, 0x70, 0x55, 0xBB};
+ activate_router(1);
+ router_send_frame(2, (uint8_t*)&data, 4);
+ EXPECT_EQ(router_buffers[1].send_buffers[UP_LINK].size(), 0);
+ EXPECT_EQ(router_buffers[1].send_buffers[DOWN_LINK].size(), 0);
+}
+
+TEST_F(FrameRouter, master_receives_on_uplink_does_nothing) {
+ frame_buffer_t data;
+ data.data = {0xAB, 0x70, 0x55, 0xBB};
+ activate_router(1);
+ router_send_frame(0, (uint8_t*)&data, 4);
+ EXPECT_GT(router_buffers[1].send_buffers[UP_LINK].size(), 0);
+ EXPECT_EQ(router_buffers[1].send_buffers[DOWN_LINK].size(), 0);
+
+ EXPECT_CALL(*this, transport_recv_frame(_, _, _))
+ .Times(0);
+ activate_router(0);
+ receive_data(UP_LINK,
+ router_buffers[1].send_buffers[UP_LINK].data(),
+ router_buffers[1].send_buffers[UP_LINK].size());
+ EXPECT_EQ(router_buffers[0].send_buffers[UP_LINK].size(), 0);
+ EXPECT_EQ(router_buffers[0].send_buffers[DOWN_LINK].size(), 0);
+}
diff --git a/quantum/serial_link/tests/frame_validator_tests.c b/quantum/serial_link/tests/frame_validator_tests.cpp
index d20947e2c..9223af83b 100644
--- a/quantum/serial_link/tests/frame_validator_tests.c
+++ b/quantum/serial_link/tests/frame_validator_tests.cpp
@@ -22,24 +22,47 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
-#include <cgreen/cgreen.h>
-#include <cgreen/mocks.h>
-#include "serial_link/protocol/frame_validator.c"
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+extern "C" {
+#include "serial_link/protocol/frame_validator.h"
+}
+
+using testing::_;
+using testing::ElementsAreArray;
+using testing::Args;
+
+class FrameValidator : public testing::Test {
+public:
+ FrameValidator() {
+ Instance = this;
+ }
+
+ ~FrameValidator() {
+ Instance = nullptr;
+ }
+
+ MOCK_METHOD3(route_incoming_frame, void (uint8_t link, uint8_t* data, uint16_t size));
+ MOCK_METHOD3(byte_stuffer_send_frame, void (uint8_t link, uint8_t* data, uint16_t size));
+ static FrameValidator* Instance;
+};
+
+FrameValidator* FrameValidator::Instance = nullptr;
+
+extern "C" {
void route_incoming_frame(uint8_t link, uint8_t* data, uint16_t size) {
- mock(data, size);
+ FrameValidator::Instance->route_incoming_frame(link, data, size);
}
void byte_stuffer_send_frame(uint8_t link, uint8_t* data, uint16_t size) {
- mock(data, size);
+ FrameValidator::Instance->byte_stuffer_send_frame(link, data, size);
+}
}
-Describe(FrameValidator);
-BeforeEach(FrameValidator) {}
-AfterEach(FrameValidator) {}
-
-Ensure(FrameValidator, doesnt_validate_frames_under_5_bytes) {
- never_expect(route_incoming_frame);
+TEST_F(FrameValidator, doesnt_validate_frames_under_5_bytes) {
+ EXPECT_CALL(*this, route_incoming_frame(_, _, _))
+ .Times(0);
uint8_t data[] = {1, 2};
validator_recv_frame(0, 0, 1);
validator_recv_frame(0, data, 2);
@@ -47,55 +70,46 @@ Ensure(FrameValidator, doesnt_validate_frames_under_5_bytes) {
validator_recv_frame(0, data, 4);
}
-Ensure(FrameValidator, validates_one_byte_frame_with_correct_crc) {
+TEST_F(FrameValidator, validates_one_byte_frame_with_correct_crc) {
uint8_t data[] = {0x44, 0x04, 0x6A, 0xB3, 0xA3};
- expect(route_incoming_frame,
- when(size, is_equal_to(1)),
- when(data, is_equal_to_contents_of(data, 1))
- );
+ EXPECT_CALL(*this, route_incoming_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(data, 1)));
validator_recv_frame(0, data, 5);
}
-Ensure(FrameValidator, does_not_validate_one_byte_frame_with_incorrect_crc) {
+TEST_F(FrameValidator, does_not_validate_one_byte_frame_with_incorrect_crc) {
uint8_t data[] = {0x44, 0, 0, 0, 0};
- never_expect(route_incoming_frame);
+ EXPECT_CALL(*this, route_incoming_frame(_, _, _))
+ .Times(0);
validator_recv_frame(1, data, 5);
}
-Ensure(FrameValidator, validates_four_byte_frame_with_correct_crc) {
+TEST_F(FrameValidator, validates_four_byte_frame_with_correct_crc) {
uint8_t data[] = {0x44, 0x10, 0xFF, 0x00, 0x74, 0x4E, 0x30, 0xBA};
- expect(route_incoming_frame,
- when(size, is_equal_to(4)),
- when(data, is_equal_to_contents_of(data, 4))
- );
+ EXPECT_CALL(*this, route_incoming_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(data, 4)));
validator_recv_frame(1, data, 8);
}
-Ensure(FrameValidator, validates_five_byte_frame_with_correct_crc) {
+TEST_F(FrameValidator, validates_five_byte_frame_with_correct_crc) {
uint8_t data[] = {1, 2, 3, 4, 5, 0xF4, 0x99, 0x0B, 0x47};
- expect(route_incoming_frame,
- when(size, is_equal_to(5)),
- when(data, is_equal_to_contents_of(data, 5))
- );
+ EXPECT_CALL(*this, route_incoming_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(data, 5)));
validator_recv_frame(0, data, 9);
}
-Ensure(FrameValidator, sends_one_byte_with_correct_crc) {
+TEST_F(FrameValidator, sends_one_byte_with_correct_crc) {
uint8_t original[] = {0x44, 0, 0, 0, 0};
uint8_t expected[] = {0x44, 0x04, 0x6A, 0xB3, 0xA3};
- expect(byte_stuffer_send_frame,
- when(size, is_equal_to(sizeof(expected))),
- when(data, is_equal_to_contents_of(expected, sizeof(expected)))
- );
+ EXPECT_CALL(*this, byte_stuffer_send_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(expected)));
validator_send_frame(0, original, 1);
}
-Ensure(FrameValidator, sends_five_bytes_with_correct_crc) {
+TEST_F(FrameValidator, sends_five_bytes_with_correct_crc) {
uint8_t original[] = {1, 2, 3, 4, 5, 0, 0, 0, 0};
uint8_t expected[] = {1, 2, 3, 4, 5, 0xF4, 0x99, 0x0B, 0x47};
- expect(byte_stuffer_send_frame,
- when(size, is_equal_to(sizeof(expected))),
- when(data, is_equal_to_contents_of(expected, sizeof(expected)))
- );
+ EXPECT_CALL(*this, byte_stuffer_send_frame(_, _, _))
+ .With(Args<1, 2>(ElementsAreArray(expected)));
validator_send_frame(0, original, 5);
}
diff --git a/quantum/serial_link/tests/rules.mk b/quantum/serial_link/tests/rules.mk
new file mode 100644
index 000000000..b81515bc5
--- /dev/null
+++ b/quantum/serial_link/tests/rules.mk
@@ -0,0 +1,22 @@
+serial_link_byte_stuffer_SRC :=\
+ $(SERIAL_PATH)/tests/byte_stuffer_tests.cpp \
+ $(SERIAL_PATH)/protocol/byte_stuffer.c
+
+serial_link_frame_validator_SRC := \
+ $(SERIAL_PATH)/tests/frame_validator_tests.cpp \
+ $(SERIAL_PATH)/protocol/frame_validator.c
+
+serial_link_frame_router_SRC := \
+ $(SERIAL_PATH)/tests/frame_router_tests.cpp \
+ $(SERIAL_PATH)/protocol/byte_stuffer.c \
+ $(SERIAL_PATH)/protocol/frame_validator.c \
+ $(SERIAL_PATH)/protocol/frame_router.c
+
+serial_link_triple_buffered_object_SRC := \
+ $(SERIAL_PATH)/tests/triple_buffered_object_tests.cpp \
+ $(SERIAL_PATH)/protocol/triple_buffered_object.c
+
+serial_link_transport_SRC := \
+ $(SERIAL_PATH)/tests/transport_tests.cpp \
+ $(SERIAL_PATH)/protocol/transport.c \
+ $(SERIAL_PATH)/protocol/triple_buffered_object.c
diff --git a/quantum/serial_link/tests/testlist.mk b/quantum/serial_link/tests/testlist.mk
new file mode 100644
index 000000000..a80e88884
--- /dev/null
+++ b/quantum/serial_link/tests/testlist.mk
@@ -0,0 +1,6 @@
+TEST_LIST +=\
+ serial_link_byte_stuffer\
+ serial_link_frame_validator\
+ serial_link_frame_router\
+ serial_link_triple_buffered_object\
+ serial_link_transport \ No newline at end of file
diff --git a/quantum/serial_link/tests/transport_tests.c b/quantum/serial_link/tests/transport_tests.c
deleted file mode 100644
index 358e1b9fd..000000000
--- a/quantum/serial_link/tests/transport_tests.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
-The MIT License (MIT)
-
-Copyright (c) 2016 Fred Sundvik
-
-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.
-*/
-
-#include <cgreen/cgreen.h>
-#include <cgreen/mocks.h>
-#include "serial_link/protocol/transport.c"
-#include "serial_link/protocol/triple_buffered_object.c"
-
-void signal_data_written(void) {
- mock();
-}
-
-static uint8_t sent_data[2048];
-static uint16_t sent_data_size;
-
-void router_send_frame(uint8_t destination, uint8_t* data, uint16_t size) {
- mock(destination);
- memcpy(sent_data + sent_data_size, data, size);
- sent_data_size += size;
-}
-
-typedef struct {
- uint32_t test;
-} test_object1_t;
-
-typedef struct {
- uint32_t test1;
- uint32_t test2;
-} test_object2_t;
-
-MASTER_TO_ALL_SLAVES_OBJECT(master_to_slave, test_object1_t);
-MASTER_TO_SINGLE_SLAVE_OBJECT(master_to_single_slave, test_object1_t);
-SLAVE_TO_MASTER_OBJECT(slave_to_master, test_object1_t);
-
-static remote_object_t* test_remote_objects[] = {
- REMOTE_OBJECT(master_to_slave),
- REMOTE_OBJECT(master_to_single_slave),
- REMOTE_OBJECT(slave_to_master),
-};
-
-Describe(Transport);
-BeforeEach(Transport) {
- add_remote_objects(test_remote_objects, sizeof(test_remote_objects) / sizeof(remote_object_t*));
- sent_data_size = 0;
-}
-AfterEach(Transport) {}
-
-Ensure(Transport, write_to_local_signals_an_event) {
- begin_write_master_to_slave();
- expect(signal_data_written);
- end_write_master_to_slave();
- begin_write_slave_to_master();
- expect(signal_data_written);
- end_write_slave_to_master();
- begin_write_master_to_single_slave(1);
- expect(signal_data_written);
- end_write_master_to_single_slave(1);
-}
-
-Ensure(Transport, writes_from_master_to_all_slaves) {
- update_transport();
- test_object1_t* obj = begin_write_master_to_slave();
- obj->test = 5;
- expect(signal_data_written);
- end_write_master_to_slave();
- expect(router_send_frame,
- when(destination, is_equal_to(0xFF)));
- update_transport();
- transport_recv_frame(0, sent_data, sent_data_size);
- test_object1_t* obj2 = read_master_to_slave();
- assert_that(obj2, is_not_equal_to(NULL));
- assert_that(obj2->test, is_equal_to(5));
-}
-
-Ensure(Transport, writes_from_slave_to_master) {
- update_transport();
- test_object1_t* obj = begin_write_slave_to_master();
- obj->test = 7;
- expect(signal_data_written);
- end_write_slave_to_master();
- expect(router_send_frame,
- when(destination, is_equal_to(0)));
- update_transport();
- transport_recv_frame(3, sent_data, sent_data_size);
- test_object1_t* obj2 = read_slave_to_master(2);
- assert_that(read_slave_to_master(0), is_equal_to(NULL));
- assert_that(obj2, is_not_equal_to(NULL));
- assert_that(obj2->test, is_equal_to(7));
-}
-
-Ensure(Transport, writes_from_master_to_single_slave) {
- update_transport();
- test_object1_t* obj = begin_write_master_to_single_slave(3);
- obj->test = 7;
- expect(signal_data_written);
- end_write_master_to_single_slave(3);
- expect(router_send_frame,
- when(destination, is_equal_to(4)));
- update_transport();
- transport_recv_frame(0, sent_data, sent_data_size);
- test_object1_t* obj2 = read_master_to_single_slave();
- assert_that(obj2, is_not_equal_to(NULL));
- assert_that(obj2->test, is_equal_to(7));
-}
-
-Ensure(Transport, ignores_object_with_invalid_id) {
- update_transport();
- test_object1_t* obj = begin_write_master_to_single_slave(3);
- obj->test = 7;
- expect(signal_data_written);
- end_write_master_to_single_slave(3);
- expect(router_send_frame,
- when(destination, is_equal_to(4)));
- update_transport();
- sent_data[sent_data_size - 1] = 44;
- transport_recv_frame(0, sent_data, sent_data_size);
- test_object1_t* obj2 = read_master_to_single_slave();
- assert_that(obj2, is_equal_to(NULL));
-}
-
-Ensure(Transport, ignores_object_with_size_too_small) {
- update_transport();
- test_object1_t* obj = begin_write_master_to_slave();
- obj->test = 7;
- expect(signal_data_written);
- end_write_master_to_slave();
- expect(router_send_frame);
- update_transport();
- sent_data[sent_data_size - 2] = 0;
- transport_recv_frame(0, sent_data, sent_data_size - 1);
- test_object1_t* obj2 = read_master_to_slave();
- assert_that(obj2, is_equal_to(NULL));
-}
-
-Ensure(Transport, ignores_object_with_size_too_big) {
- update_transport();
- test_object1_t* obj = begin_write_master_to_slave();
- obj->test = 7;
- expect(signal_data_written);
- end_write_master_to_slave();
- expect(router_send_frame);
- update_transport();
- sent_data[sent_data_size + 21] = 0;
- transport_recv_frame(0, sent_data, sent_data_size + 22);
- test_object1_t* obj2 = read_master_to_slave();
- assert_that(obj2, is_equal_to(NULL));
-}
diff --git a/quantum/serial_link/tests/transport_tests.cpp b/quantum/serial_link/tests/transport_tests.cpp
new file mode 100644
index 000000000..21b7b165f
--- /dev/null
+++ b/quantum/serial_link/tests/transport_tests.cpp
@@ -0,0 +1,188 @@
+/*
+The MIT License (MIT)
+
+Copyright (c) 2016 Fred Sundvik
+
+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.
+*/
+
+#include "gtest/gtest.h"
+#include "gmock/gmock.h"
+
+using testing::_;
+using testing::ElementsAreArray;
+using testing::Args;
+
+extern "C" {
+#include "serial_link/protocol/transport.h"
+}
+
+struct test_object1 {
+ uint32_t test;
+};
+
+struct test_object2 {
+ uint32_t test1;
+ uint32_t test2;
+};
+
+MASTER_TO_ALL_SLAVES_OBJECT(master_to_slave, test_object1);
+MASTER_TO_SINGLE_SLAVE_OBJECT(master_to_single_slave, test_object1);
+SLAVE_TO_MASTER_OBJECT(slave_to_master, test_object1);
+
+static remote_object_t* test_remote_objects[] = {
+ REMOTE_OBJECT(master_to_slave),
+ REMOTE_OBJECT(master_to_single_slave),
+ REMOTE_OBJECT(slave_to_master),
+};
+
+class Transport : public testing::Test {
+public:
+ Transport() {
+ Instance = this;
+ add_remote_objects(test_remote_objects, sizeof(test_remote_objects) / sizeof(remote_object_t*));
+ }
+
+ ~Transport() {
+ Instance = nullptr;
+ reinitialize_serial_link_transport();
+ }
+
+ MOCK_METHOD0(signal_data_written, void ());
+ MOCK_METHOD1(router_send_frame, void (uint8_t destination));
+
+ void router_send_frame(uint8_t destination, uint8_t* data, uint16_t size) {
+ router_send_frame(destination);
+ std::copy(data, data + size, std::back_inserter(sent_data));
+ }
+
+ static Transport* Instance;
+
+ std::vector<uint8_t> sent_data;
+};
+
+Transport* Transport::Instance = nullptr;
+
+extern "C" {
+void signal_data_written(void) {
+ Transport::Instance->signal_data_written();
+}
+
+void router_send_frame(uint8_t destination, uint8_t* data, uint16_t size) {
+ Transport::Instance->router_send_frame(destination, data, size);
+}
+}
+
+TEST_F(Transport, write_to_local_signals_an_event) {
+ begin_write_master_to_slave();
+ EXPECT_CALL(*this, signal_data_written());
+ end_write_master_to_slave();
+ begin_write_slave_to_master();
+ EXPECT_CALL(*this, signal_data_written());
+ end_write_slave_to_master();
+ begin_write_master_to_single_slave(1);
+ EXPECT_CALL(*this, signal_data_written());
+ end_write_master_to_single_slave(1);
+}
+
+TEST_F(Transport, writes_from_master_to_all_slaves) {
+ update_transport();
+ test_object1* obj = begin_write_master_to_slave();
+ obj->test = 5;
+ EXPECT_CALL(*this, signal_data_written());
+ end_write_master_to_slave();
+ EXPECT_CALL(*this, router_send_frame(0xFF));
+ update_transport();
+ transport_recv_frame(0, sent_data.data(), sent_data.size());
+ test_object1* obj2 = read_master_to_slave();
+ EXPECT_NE(obj2, nullptr);
+ EXPECT_EQ(obj2->test, 5);
+}
+
+TEST_F(Transport, writes_from_slave_to_master) {
+ update_transport();
+ test_object1* obj = begin_write_slave_to_master();
+ obj->test = 7;
+ EXPECT_CALL(*this, signal_data_written());
+ end_write_slave_to_master();
+ EXPECT_CALL(*this, router_send_frame(0));
+ update_transport();
+ transport_recv_frame(3, sent_data.data(), sent_data.size());
+ test_object1* obj2 = read_slave_to_master(2);
+ EXPECT_EQ(read_slave_to_master(0), nullptr);
+ EXPECT_NE(obj2, nullptr);
+ EXPECT_EQ(obj2->test, 7);
+}
+
+TEST_F(Transport, writes_from_master_to_single_slave) {
+ update_transport();
+ test_object1* obj = begin_write_master_to_single_slave(3);
+ obj->test = 7;
+ EXPECT_CALL(*this, signal_data_written());
+ end_write_master_to_single_slave(3);
+ EXPECT_CALL(*this, router_send_frame(4));
+ update_transport();
+ transport_recv_frame(0, sent_data.data(), sent_data.size());
+ test_object1* obj2 = read_master_to_single_slave();
+ EXPECT_NE(obj2, nullptr);
+ EXPECT_EQ(obj2->test, 7);
+}
+
+TEST_F(Transport, ignores_object_with_invalid_id) {
+ update_transport();
+ test_object1* obj = begin_write_master_to_single_slave(3);
+ obj->test = 7;
+ EXPECT_CALL(*this, signal_data_written());
+ end_write_master_to_single_slave(3);
+ EXPECT_CALL(*this, router_send_frame(4));
+ update_transport();
+ sent_data[sent_data.size() - 1] = 44;
+ transport_recv_frame(0, sent_data.data(), sent_data.size());
+ test_object1* obj2 = read_master_to_single_slave();
+ EXPECT_EQ(obj2, nullptr);
+}
+
+TEST_F(Transport, ignores_object_with_size_too_small) {
+ update_transport();
+ test_object1* obj = begin_write_master_to_slave();
+ obj->test = 7;
+ EXPECT_CALL(*this, signal_data_written());
+ end_write_master_to_slave();
+ EXPECT_CALL(*this, router_send_frame(_));
+ update_transport();
+ sent_data[sent_data.size() - 2] = 0;
+ transport_recv_frame(0, sent_data.data(), sent_data.size() - 1);
+ test_object1* obj2 = read_master_to_slave();
+ EXPECT_EQ(obj2, nullptr);
+}
+
+TEST_F(Transport, ignores_object_with_size_too_big) {
+ update_transport();
+ test_object1* obj = begin_write_master_to_slave();
+ obj->test = 7;
+ EXPECT_CALL(*this, signal_data_written());
+ end_write_master_to_slave();
+ EXPECT_CALL(*this, router_send_frame(_));
+ update_transport();
+ sent_data.resize(sent_data.size() + 22);
+ sent_data[sent_data.size() - 1] = 0;
+ transport_recv_frame(0, sent_data.data(), sent_data.size());
+ test_object1* obj2 = read_master_to_slave();
+ EXPECT_EQ(obj2, nullptr);
+}
diff --git a/quantum/serial_link/tests/triple_buffered_object_tests.c b/quantum/serial_link/tests/triple_buffered_object_tests.cpp
index 6f7c82b46..7724bbee9 100644
--- a/quantum/serial_link/tests/triple_buffered_object_tests.c
+++ b/quantum/serial_link/tests/triple_buffered_object_tests.cpp
@@ -22,53 +22,55 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
-#include <cgreen/cgreen.h>
-#include "serial_link/protocol/triple_buffered_object.c"
+#include "gtest/gtest.h"
+extern "C" {
+#include "serial_link/protocol/triple_buffered_object.h"
+}
-typedef struct {
+struct test_object{
uint8_t state;
uint32_t buffer[3];
-}test_object_t;
-
-test_object_t test_object;
+};
-Describe(TripleBufferedObject);
-BeforeEach(TripleBufferedObject) {
- triple_buffer_init((triple_buffer_object_t*)&test_object);
-}
-AfterEach(TripleBufferedObject) {}
+test_object test_object;
+class TripleBufferedObject : public testing::Test {
+public:
+ TripleBufferedObject() {
+ triple_buffer_init((triple_buffer_object_t*)&test_object);
+ }
+};
-Ensure(TripleBufferedObject, writes_and_reads_object) {
+TEST_F(TripleBufferedObject, writes_and_reads_object) {
*triple_buffer_begin_write(&test_object) = 0x3456ABCC;
triple_buffer_end_write(&test_object);
- assert_that(*triple_buffer_read(&test_object), is_equal_to(0x3456ABCC));
+ EXPECT_EQ(*triple_buffer_read(&test_object), 0x3456ABCC);
}
-Ensure(TripleBufferedObject, does_not_read_empty) {
- assert_that(triple_buffer_read(&test_object), is_equal_to(NULL));
+TEST_F(TripleBufferedObject, does_not_read_empty) {
+ EXPECT_EQ(triple_buffer_read(&test_object), nullptr);
}
-Ensure(TripleBufferedObject, writes_twice_and_reads_object) {
+TEST_F(TripleBufferedObject, writes_twice_and_reads_object) {
*triple_buffer_begin_write(&test_object) = 0x3456ABCC;
triple_buffer_end_write(&test_object);
*triple_buffer_begin_write(&test_object) = 0x44778899;
triple_buffer_end_write(&test_object);
- assert_that(*triple_buffer_read(&test_object), is_equal_to(0x44778899));
+ EXPECT_EQ(*triple_buffer_read(&test_object), 0x44778899);
}
-Ensure(TripleBufferedObject, performs_another_write_in_the_middle_of_read) {
+TEST_F(TripleBufferedObject, performs_another_write_in_the_middle_of_read) {
*triple_buffer_begin_write(&test_object) = 1;
triple_buffer_end_write(&test_object);
uint32_t* read = triple_buffer_read(&test_object);
*triple_buffer_begin_write(&test_object) = 2;
triple_buffer_end_write(&test_object);
- assert_that(*read, is_equal_to(1));
- assert_that(*triple_buffer_read(&test_object), is_equal_to(2));
- assert_that(triple_buffer_read(&test_object), is_equal_to(NULL));
+ EXPECT_EQ(*read, 1);
+ EXPECT_EQ(*triple_buffer_read(&test_object), 2);
+ EXPECT_EQ(triple_buffer_read(&test_object), nullptr);
}
-Ensure(TripleBufferedObject, performs_two_writes_in_the_middle_of_read) {
+TEST_F(TripleBufferedObject, performs_two_writes_in_the_middle_of_read) {
*triple_buffer_begin_write(&test_object) = 1;
triple_buffer_end_write(&test_object);
uint32_t* read = triple_buffer_read(&test_object);
@@ -76,7 +78,7 @@ Ensure(TripleBufferedObject, performs_two_writes_in_the_middle_of_read) {
triple_buffer_end_write(&test_object);
*triple_buffer_begin_write(&test_object) = 3;
triple_buffer_end_write(&test_object);
- assert_that(*read, is_equal_to(1));
- assert_that(*triple_buffer_read(&test_object), is_equal_to(3));
- assert_that(triple_buffer_read(&test_object), is_equal_to(NULL));
+ EXPECT_EQ(*read, 1);
+ EXPECT_EQ(*triple_buffer_read(&test_object), 3);
+ EXPECT_EQ(triple_buffer_read(&test_object), nullptr);
}
diff --git a/quantum/template/Makefile b/quantum/template/Makefile
index 3f6d133c9..4e2a6f00f 100644
--- a/quantum/template/Makefile
+++ b/quantum/template/Makefile
@@ -1,75 +1,3 @@
-
-
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=512
-
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes # Console for debug(+400)
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
-# 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 ?= no # USB Nkey Rollover
-BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
-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
-
-ifndef QUANTUM_DIR
+ifndef MAKEFILE_INCLUDED
include ../../Makefile
-endif
-
-
+endif \ No newline at end of file
diff --git a/quantum/template/readme.md b/quantum/template/readme.md
index b2fb4dd98..b16f4cd76 100644
--- a/quantum/template/readme.md
+++ b/quantum/template/readme.md
@@ -3,7 +3,7 @@
## Quantum MK Firmware
-For the full Quantum feature list, see [the parent readme.md](/doc/readme.md).
+For the full Quantum feature list, see [the parent readme](/).
## Building
@@ -13,16 +13,16 @@ Depending on which keymap you would like to use, you will have to compile slight
### Default
-To build with the default keymap, simply run `make`.
+To build with the default keymap, simply run `make default`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
-To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
```
-$ make keymap=[default|jack|<name>]
+$ make [default|jack|<name>]
```
-Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/` \ No newline at end of file
+Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/quantum/template/rules.mk b/quantum/template/rules.mk
new file mode 100644
index 000000000..55898147d
--- /dev/null
+++ b/quantum/template/rules.mk
@@ -0,0 +1,67 @@
+# 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
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= yes # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+# 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 ?= no # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
+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
diff --git a/quantum/variable_trace.c b/quantum/variable_trace.c
new file mode 100644
index 000000000..de580244c
--- /dev/null
+++ b/quantum/variable_trace.c
@@ -0,0 +1,110 @@
+#include "variable_trace.h"
+#include <stddef.h>
+#include <string.h>
+
+#ifdef NO_PRINT
+#error "You need undef NO_PRINT to use the variable trace feature"
+#endif
+
+#ifndef CONSOLE_ENABLE
+#error "The console needs to be enabled in the makefile to use the variable trace feature"
+#endif
+
+
+#define NUM_TRACED_VARIABLES 1
+#ifndef MAX_VARIABLE_TRACE_SIZE
+ #define MAX_VARIABLE_TRACE_SIZE 4
+#endif
+
+typedef struct {
+ const char* name;
+ void* addr;
+ unsigned size;
+ const char* func;
+ int line;
+ uint8_t last_value[MAX_VARIABLE_TRACE_SIZE];
+
+} traced_variable_t;
+
+static traced_variable_t traced_variables[NUM_TRACED_VARIABLES];
+
+void add_traced_variable(const char* name, void* addr, unsigned size, const char* func, int line) {
+ verify_traced_variables(func, line);
+ if (size > MAX_VARIABLE_TRACE_SIZE) {
+#if defined(__AVR__)
+ xprintf("Traced variable \"%S\" exceeds the maximum size %d\n", name, size);
+#else
+ xprintf("Traced variable \"%s\" exceeds the maximum size %d\n", name, size);
+#endif
+ size = MAX_VARIABLE_TRACE_SIZE;
+ }
+ int index = -1;
+ for (int i = 0; i < NUM_TRACED_VARIABLES; i++) {
+ if (index == -1 && traced_variables[i].addr == NULL){
+ index = i;
+ }
+ else if (strcmp_P(name, traced_variables[i].name)==0) {
+ index = i;
+ break;
+ }
+ }
+
+ if (index == -1) {
+ xprintf("You can only trace %d variables at the same time\n", NUM_TRACED_VARIABLES);
+ return;
+ }
+
+ traced_variable_t* t = &traced_variables[index];
+ t->name = name;
+ t->addr = addr;
+ t->size = size;
+ t->func = func;
+ t->line = line;
+ memcpy(&t->last_value[0], addr, size);
+
+}
+
+void remove_traced_variable(const char* name, const char* func, int line) {
+ verify_traced_variables(func, line);
+ for (int i = 0; i < NUM_TRACED_VARIABLES; i++) {
+ if (strcmp_P(name, traced_variables[i].name)==0) {
+ traced_variables[i].name = 0;
+ traced_variables[i].addr = NULL;
+ break;
+ }
+ }
+}
+
+void verify_traced_variables(const char* func, int line) {
+ for (int i = 0; i < NUM_TRACED_VARIABLES; i++) {
+ traced_variable_t* t = &traced_variables[i];
+ if (t->addr != NULL && t->name != NULL) {
+ if (memcmp(t->last_value, t->addr, t->size)!=0){
+#if defined(__AVR__)
+ xprintf("Traced variable \"%S\" has been modified\n", t->name);
+ xprintf("Between %S:%d\n", t->func, t->line);
+ xprintf("And %S:%d\n", func, line);
+
+#else
+ xprintf("Traced variable \"%s\" has been modified\n", t->name);
+ xprintf("Between %s:%d\n", t->func, t->line);
+ xprintf("And %s:%d\n", func, line);
+#endif
+ xprintf("Previous value ");
+ for (int j=0; j<t->size;j++) {
+ print_hex8(t->last_value[j]);
+ }
+ xprintf("\nNew value ");
+ uint8_t* addr = (uint8_t*)(t->addr);
+ for (int j=0; j<t->size;j++) {
+ print_hex8(addr[j]);
+ }
+ xprintf("\n");
+ memcpy(t->last_value, addr, t->size);
+ }
+ }
+
+ t->func = func;
+ t->line = line;
+ }
+}
diff --git a/quantum/variable_trace.h b/quantum/variable_trace.h
new file mode 100644
index 000000000..46bd82786
--- /dev/null
+++ b/quantum/variable_trace.h
@@ -0,0 +1,34 @@
+#ifndef VARIABLE_TRACE_H
+#define VARIABLE_TRACE_H
+
+// For more information about the variable tracing see the readme.
+
+#include "print.h"
+
+#ifdef NUM_TRACED_VARIABLES
+
+// Start tracing a variable at the memory address addr
+// The name can be anything and is used only for reporting
+// The size should usually be the same size as the variable you are interested in
+#define ADD_TRACED_VARIABLE(name, addr, size) \
+ add_traced_variable(PSTR(name), (void*)addr, size, PSTR(__FILE__), __LINE__)
+
+// Stop tracing the variable with the given name
+#define REMOVE_TRACED_VARIABLE(name) remove_traced_variable(PSTR(name), PSTR(__FILE__), __LINE__)
+
+// Call to get messages when the variable has been changed
+#define VERIFY_TRACED_VARIABLES() verify_traced_variables(PSTR(__FILE__), __LINE__)
+
+#else
+
+#define ADD_TRACED_VARIABLE(name, addr, size)
+#define REMOVE_TRACED_VARIABLE(name)
+#define VERIFY_TRACED_VARIABLES()
+
+#endif
+
+// Don't call directly, use the macros instead
+void add_traced_variable(const char* name, void* addr, unsigned size, const char* func, int line);
+void remove_traced_variable(const char* name, const char* func, int line);
+void verify_traced_variables(const char* func, int line);
+#endif
diff --git a/readme.md b/readme.md
index e0dcd5608..90584cabc 100644
--- a/readme.md
+++ b/readme.md
@@ -4,7 +4,7 @@
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.com), the [ErgoDox EZ](http://www.ergodox-ez.com) keyboard, and the [Clueboard product line](http://clueboard.co/).
-## Official website
+## Official website (currently under construction with the move to the wiki)
For an easy-to-read version of this document and the repository, check out [http://qmk.fm](http://qmk.fm). Nicely formatted keyboard and keymap listings are also available there, along with the ability to download .hex files instead of having to setup a build environment and compile them.
@@ -13,7 +13,7 @@ For an easy-to-read version of this document and the repository, check out [http
* [Planck](/keyboards/planck/)
* [Preonic](/keyboards/preonic/)
* [Atomic](/keyboards/atomic/)
-* [ErgoDox EZ](/keyboards/ergodox_ez/)
+* [ErgoDox EZ](/keyboards/ergodox/)
* [Clueboard](/keyboards/clueboard/)
* [Cluepad](/keyboards/cluepad/)
@@ -31,856 +31,9 @@ The OLKB product firmwares are maintained by [Jack Humbert](https://github.com/j
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](keyboards/ergodox_ez/); for the Planck, it's [here](keyboards/planck/) and so on.
+* [**The Wiki**](https://github.com/jackhumbert/qmk_firmware/wiki) - the entirity of the readme has been moved here
+* The readme for your own keyboard: This is found under `keyboards/<your keyboards's name>/`. So for the ErgoDox EZ, it's [here](keyboards/ergodox/ez/); for the Planck, it's [here](keyboards/planck/) and so on.
* The list of possible keycodes you can use in your keymap is actually spread out in a few different places:
* [doc/keycode.txt](doc/keycode.txt) - an explanation of those same keycodes.
* [quantum/keymap.h](quantum/keymap.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.h` is where they're actually defined.
-* The [TMK documentation](doc/TMK_readme.md). QMK is based on TMK, and this explains how it works internally.
-
-# Getting started
-
-Before you are able to compile, you'll need to install an environment for AVR development. You'll find the instructions for any OS below. If you find another/better way to set things up from scratch, please consider [making a pull request](https://github.com/jackhumbert/qmk_firmware/pulls) with your changes!
-
-## Build Environment Setup
-
-### 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. 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 MHV AVR Shell, which sets up an environment compatible with colorful build output. The standard Command Prompt will also work, but add `COLOR=false` to the end of all make commands when using it.
-
-### Mac
-If you're using [homebrew,](http://brew.sh/) you can use the following commands:
-
- brew tap osx-cross/avr
- brew install avr-libc
- brew install dfu-programmer
-
-This is the recommended method. If you don't have homebrew, [install it!](http://brew.sh/) It's very much worth it for anyone who works in the command line.
-
-You can also try these instructions:
-
-1. Install Xcode from the App Store.
-2. Install the Command Line Tools from `Xcode->Preferences->Downloads`.
-3. Install [DFU-Programmer][dfu-prog].
-
-### Linux
-Install AVR GCC, AVR libc, and dfu-progammer with your favorite package manager.
-
-Debian/Ubuntu example:
-
- sudo apt-get update
- sudo apt-get install gcc-avr avr-libc dfu-programmer
-
-### Vagrant
-If you have any problems building the firmware, you can try using a tool called Vagrant. It will set up a virtual computer with a known configuration that's ready-to-go for firmware building. OLKB does NOT host the files for this virtual computer. Details on how to set up Vagrant are in the [VAGRANT_GUIDE file](VAGRANT_GUIDE.md).
-
-## Verify Your Installation
-1. If you haven't already, obtain this repository ([https://github.com/jackhumbert/qmk_firmware](https://github.com/jackhumbert/qmk_firmware)). You can either download it as a zip file and extract it, or clone it using the command line tool git or the Github Desktop application.
-2. Open up a terminal or command prompt and navigate to the `qmk_firmware` folder using the `cd` command. The command prompt will typically open to your home directory. If, for example, you cloned the repository to your Documents folder, then you would type `cd Documents/qmk_firmware`. If you extracted the file from a zip, then it may be named `qmk_firmware-master` instead.
-3. To confirm that you're in the correct location, you can display the contents of your current folder using the `dir` command on Windows, or the `ls` command on Linux or Mac. You should see several files, including `readme.md` and a `quantum` folder. From here, you need to navigate to the appropriate folder under `keyboards/`. For example, if you're building for a Planck, run `cd keyboards/planck`.
-4. Once you're in the correct keyboard-specific folder, run the `make` command. This should output a lot of information about the build process. More information about the `make` command can be found below.
-
-# Customizing your keymap
-
-In every keymap folder, the following files are recommended:
-
-* `config.h` - the options to configure your keymap
-* `keymap.c` - all of your keymap code, required
-* `Makefile` - the features of QMK that are enabled, required to run `make` in your keymap folder
-* `readme.md` - a description of your keymap, how others might use it, and explanations of features
-
-## The `make` command
-
-The `make` command is how you compile the firmware into a .hex file, which can be loaded by a dfu programmer (like dfu-progammer via `make dfu`) or the [Teensy loader](https://www.pjrc.com/teensy/loader.html) (only used with Teensys). You can run `make` from the root (`/`), your keyboard folder (`/keyboards/<keyboard>/`), or your keymap folder (`/keyboards/<keyboard>/keymaps/<keymap>/`) if you have a `Makefile` there (see the example [here](/doc/keymap_makefile_example.mk)).
-
-By default, this will generate a `<keyboard>_<keymap>.hex` file in whichever folder you run `make` from. These files are ignored by git, so don't worry about deleting them when committing/creating pull requests. Your .hex file will also be available on qmk.fm/keyboards/<keyboard>/keymaps/<keymap>/.
-
-Below are some definitions that will be useful:
-
-* The "root" (`/`) folder is the qmk_firmware folder, in which are `doc`, `keyboard`, `quantum`, etc.
-* The "keyboard" folder is any keyboard project's folder, like `/keyboards/planck`.
-* The "keymap" folder is any keymap's folder, like `/keyboards/planck/keymaps/default`.
-
-Below is a list of the useful `make` commands in QMK:
-
-* `make` - cleans automatically and builds your keyboard and keymap depending on which folder you're in. This defaults to the "default" layout (unless in a keymap folder), and Planck keyboard in the root folder
- * `make keyboard=<keyboard>` - specifies the keyboard (only to be used in root)
- * `make keymap=<keymap>` - specifies the keymap (only to be used in root and keyboard folder - not needed when in keymap folder)
-* `make quick` - skips the clean step (cannot be used immediately after modifying config.h or Makefiles)
-* `make dfu` - (requires dfu-programmer) builds and flashes the keymap to your keyboard once placed in reset/dfu mode (button or press `KC_RESET`). This does not work for Teensy-based keyboards like the ErgoDox EZ.
- * `keyboard=` and `keymap=` are compatible with this
-* `make all-keyboards` - builds all keymaps for all keyboards and outputs status of each (use in root)
-* `make all-keyboards-default` - builds all default keymaps for all keyboards and outputs status of each (use in root)
-* `make all-keymaps [keyboard=<keyboard>]` - builds all of the keymaps for whatever keyboard folder you're in, or specified by `<keyboard>`
-* `make all-keyboards-quick`, `make all-keyboards-default-quick` and `make all-keymaps-quick [keyboard=<keyboard>]` - like the normal "make-all-*" commands, but they skip the clean steps
-
-Other, less useful functionality:
-
-* `make COLOR=false` - turns off color output
-* `make SILENT=true` - turns off output besides errors/warnings
-* `make VERBOSE=true` - outputs all of the avr-gcc stuff (not interesting)
-
-## The `Makefile`
-
-There are 3 different `make` and `Makefile` locations:
-
-* root (`/`)
-* keyboard (`/keyboards/<keyboard>/`)
-* keymap (`/keyboards/<keyboard>/keymaps/<keymap>/`)
-
-The root contains the code used to automatically figure out which keymap or keymaps to compile based on your current directory and commandline arguments. It's considered stable, and shouldn't be modified. The keyboard one will contain the MCU set-up and default settings for your keyboard, and shouldn't be modified unless you are the producer of that keyboard. The keymap Makefile can be modified by users, and is optional. It is included automatically if it exists. You can see an example [here](/doc/keymap_makefile_example.mk) - the last few lines are the most important. The settings you set here will override any defaults set in the keyboard Makefile. **It is required if you want to run `make` in the keymap folder.**
-
-### Makefile options
-
-Set the variables to `no` to disable them, and `yes` to enable them.
-
-`BOOTMAGIC_ENABLE`
-
-This allows you to hold a key and the salt key (space by default) and have access to a various EEPROM settings that persist over power loss. It's advised you keep this disabled, as the settings are often changed by accident, and produce confusing results that makes it difficult to debug. It's one of the more common problems encountered in help sessions.
-
-`MOUSEKEY_ENABLE`
-
-This gives you control over cursor movements and clicks via keycodes/custom functions.
-
-`EXTRAKEY_ENABLE`
-
-This allows you to use the system and audio control key codes.
-
-`CONSOLE_ENABLE`
-
-TODO
-
-`COMMAND_ENABLE`
-
-TODO
-
-`SLEEP_LED_ENABLE`
-
-Enables your LED to breath while your computer is sleeping. Timer1 is being used here. This feature is largely unused and untested, and needs updating/abstracting.
-
-`NKRO_ENABLE`
-
-This allows for n-key rollover (default is 6) to be enabled. It is off by default, but can be forced by adding `#define FORCE_NKRO` to your config.h.
-
-`BACKLIGHT_ENABLE`
-
-This enables your backlight on Timer1 and ports B5, B6, or B7 (for now). You can specify your port by putting this in your `config.h`:
-
- #define BACKLIGHT_PIN B7
-
-`MIDI_ENABLE`
-
-This enables MIDI sending and receiving with your keyboard. To enter MIDI send mode, you can use the keycode `MI_ON`, and `MI_OFF` to turn it off. This is a largely untested feature, but more information can be found in the `quantum/quantum.c` file.
-
-`UNICODE_ENABLE`
-
-This allows you to send unicode symbols via `UC(<unicode>)` in your keymap. Only codes up to 0x7FFF are currently supported.
-
-`BLUETOOTH_ENABLE`
-
-This allows you to interface with a Bluefruit EZ-key to send keycodes wirelessly. It uses the D2 and D3 pins.
-
-`AUDIO_ENABLE`
-
-This allows you output audio on the C6 pin (needs abstracting). See the [audio section](#driving-a-speaker---audio-support) for more information.
-
-### Customizing Makefile options on a per-keymap basis
-
-If your keymap directory has a file called `Makefile` (note the filename), any Makefile options you set in that file will take precedence over other Makefile options for your particular keyboard.
-
-So let's say your keyboard's makefile has `BACKLIGHT_ENABLE = yes` (or maybe doesn't even list the `BACKLIGHT_ENABLE` option, which would cause it to be off). You want your particular keymap to not have the debug console, so you make a file called `Makefile` and specify `BACKLIGHT_ENABLE = no`.
-
-You can use the `doc/keymap_makefile_example.md` as a template/starting point.
-
-## The `config.h` file
-
-There are 2 `config.h` locations:
-
-* keyboard (`/keyboards/<keyboard>/`)
-* keymap (`/keyboards/<keyboard>/keymaps/<keymap>/`)
-
-The keyboard `config.h` is included only if the keymap one doesn't exist. The format to use for your custom one [is here](/doc/keymap_config_h_example.h). If you want to override a setting from the parent `config.h` file, you need to do this:
-
-```c
-#undef MY_SETTING
-#define MY_SETTING 4
-```
-
-For a value of `4` for this imaginary setting. So we `undef` it first, then `define` it.
-
-You can then override any settings, rather than having to copy and paste the whole thing.
-
-## Going beyond the keycodes
-
-Aside from the [basic keycodes](doc/keycode.txt), your keymap can include shortcuts to common operations.
-
-### Switching and toggling layers
-
-`MO(layer)` - momentary switch to *layer*. As soon as you let go of the key, the layer is deactivated and you pop back out to the previous layer. When you apply this to a key, that same key must be set as `KC_TRNS` on the destination layer. Otherwise, you won't make it back to the original layer when you release the key (and you'll get a keycode sent). You can only switch to layers *above* your current layer. If you're on layer 0 and you use `MO(1)`, that will switch to layer 1 just fine. But if you include `MO(3)` on layer 5, that won't do anything for you -- because layer 3 is lower than layer 5 on the stack.
-
-`OSL(layer)` - momentary switch to *layer*, as a one-shot operation. So if you have a key that's defined as `OSL(1)`, and you tap that key, then only the very next keystroke would come from layer 1. You would drop back to layer zero immediately after that one keystroke. That's handy if you have a layer full of custom shortcuts -- for example, a dedicated key for closing a window. So you tap your one-shot layer mod, then tap that magic 'close window' key, and keep typing like a boss. Layer 1 would remain active as long as you hold that key down, too (so you can use it like a momentary toggle-layer key with extra powers).
-
-`LT(layer, kc)` - momentary switch to *layer* when held, and *kc* when tapped. Like `MO()`, this only works upwards in the layer stack (`layer` must be higher than the current layer).
-
-`TG(layer)` - toggles a layer on or off. As with `MO()`, you should set this key as `KC_TRNS` in the destination layer so that tapping it again actually toggles back to the original layer. Only works upwards in the layer stack.
-
-
-### Fun with modifier keys
-
-* `LSFT(kc)` - applies left Shift to *kc* (keycode) - `S(kc)` is an alias
-* `RSFT(kc)` - applies right Shift to *kc*
-* `LCTL(kc)` - applies left Control to *kc*
-* `RCTL(kc)` - applies right Control to *kc*
-* `LALT(kc)` - applies left Alt to *kc*
-* `RALT(kc)` - applies right Alt to *kc*
-* `LGUI(kc)` - applies left GUI (command/win) to *kc*
-* `RGUI(kc)` - applies right GUI (command/win) to *kc*
-* `HYPR(kc)` - applies Hyper (all modifiers) to *kc*
-* `MEH(kc)` - applies Meh (all modifiers except Win/Cmd) to *kc*
-* `LCAG(kc)` - applies CtrlAltGui to *kc*
-
-You can also chain these, like this:
-
- LALT(LCTL(KC_DEL)) -- this makes a key that sends Alt, Control, and Delete in a single keypress.
-
-The following shortcuts automatically add `LSFT()` to keycodes to get commonly used symbols. Their long names are also available and documented in `/quantum/keymap_common.h`.
-
- KC_TILD ~
- KC_EXLM !
- KC_AT @
- KC_HASH #
- KC_DLR $
- KC_PERC %
- KC_CIRC ^
- KC_AMPR &
- KC_ASTR *
- KC_LPRN (
- KC_RPRN )
- KC_UNDS _
- KC_PLUS +
- KC_DQUO "
- KC_LCBR {
- KC_RCBR }
- KC_LABK <
- KC_RABK >
- KC_PIPE |
- KC_COLN :
-
-`OSM(mod)` - this is a "one shot" modifier. So let's say you have your left Shift key defined as `OSM(MOD_LSFT)`. Tap it, let go, and Shift is "on" -- but only for the next character you'll type. So to write "The", you don't need to hold down Shift -- you tap it, tap t, and move on with life. And if you hold down the left Shift key, it just works as a left Shift key, as you would expect (so you could type THE). There's also a magical, secret way to "lock" a modifier by tapping it multiple times. If you want to learn more about that, open an issue. :)
-
-`MT(mod, kc)` - is *mod* (modifier key - MOD_LCTL, MOD_LSFT) when held, and *kc* when tapped. In other words, you can have a key that sends Esc (or the letter O or whatever) when you tap it, but works as a Control key or a Shift key when you hold it down.
-
-These are the values you can use for the `mod` in `MT()` and `OSM()` (right-hand modifiers are not available for `MT()`):
-
- * MOD_LCTL
- * MOD_LSFT
- * MOD_LALT
- * MOD_LGUI
- * MOD_HYPR
- * MOD_MEH
-
-These can also be combined like `MOD_LCTL | MOD_LSFT` e.g. `MT(MOD_LCTL | MOD_LSFT, KC_ESC)` which would activate Control and Shift when held, and send Escape when tapped.
-
-We've added shortcuts to make common modifier/tap (mod-tap) mappings more compact:
-
- * `CTL_T(kc)` - is LCTL when held and *kc* when tapped
- * `SFT_T(kc)` - is LSFT when held and *kc* when tapped
- * `ALT_T(kc)` - is LALT when held and *kc* when tapped
- * `GUI_T(kc)` - is LGUI when held and *kc* when tapped
- * `ALL_T(kc)` - is Hyper (all mods) when held and *kc* when tapped. To read more about what you can do with a Hyper key, see [this blog post by Brett Terpstra](http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key/)
- * `LCAG_T(kc)` - is CtrlAltGui when held and *kc* when tapped
- * `MEH_T(kc)` - is like Hyper, but not as cool -- does not include the Cmd/Win key, so just sends Alt+Ctrl+Shift.
-
-### Space Cadet Shift: The future, built in
-
-Steve Losh [described](http://stevelosh.com/blog/2012/10/a-modern-space-cadet/) the Space Cadet Shift quite well. Essentially, you hit the left Shift on its own, and you get an opening parenthesis; hit the right Shift on its own, and you get the closing one. When hit with other keys, the Shift key keeps working as it always does. Yes, it's as cool as it sounds.
-
-To use it, use `KC_LSPO` (Left Shift, Parens Open) for your left Shift on your keymap, and `KC_RSPC` (Right Shift, Parens Close) for your right Shift.
-
-It's defaulted to work on US keyboards, but if your layout uses different keys for parenthesis, you can define those in your `config.h` like this:
-
- #define LSPO_KEY KC_9
- #define RSPC_KEY KC_0
-
-You can also choose between different rollover behaviors of the shift keys by defining:
-
- #define DISABLE_SPACE_CADET_ROLLOVER
-
-in your `config.h`. Disabling rollover allows you to use the opposite shift key to cancel the space cadet state in the event of an erroneous press instead of emitting a pair of parentheses when the keys are released.
-
-The only other thing you're going to want to do is create a `Makefile` in your keymap directory and set the following:
-
-```
-COMMAND_ENABLE = no # Commands for debug and configuration
-```
-
-This is just to keep the keyboard from going into command mode when you hold both Shift keys at the same time.
-
-### The Leader key: A new kind of modifier
-
-If you've ever used Vim, you know what a Leader key is. If not, you're about to discover a wonderful concept. :) Instead of hitting Alt+Shift+W for example (holding down three keys at the same time), what if you could hit a _sequence_ of keys instead? So you'd hit our special modifier (the Leader key), followed by W and then C (just a rapid succession of keys), and something would happen.
-
-That's what `KC_LEAD` does. Here's an example:
-
-1. Pick a key on your keyboard you want to use as the Leader key. Assign it the keycode `KC_LEAD`. This key would be dedicated just for this -- it's a single action key, can't be used for anything else.
-2. Include the line `#define LEADER_TIMEOUT 300` somewhere in your keymap.c file, probably near the top. The 300 there is 300ms -- that's how long you have for the sequence of keys following the leader. You can tweak this value for comfort, of course.
-3. Within your `matrix_scan_user` function, do something like this:
-
-```
-void matrix_scan_user(void) {
- LEADER_DICTIONARY() {
- leading = false;
- leader_end();
-
- SEQ_ONE_KEY(KC_F) {
- register_code(KC_S);
- unregister_code(KC_S);
- }
- SEQ_TWO_KEYS(KC_A, KC_S) {
- register_code(KC_H);
- unregister_code(KC_H);
- }
- SEQ_THREE_KEYS(KC_A, KC_S, KC_D) {
- register_code(KC_LGUI);
- register_code(KC_S);
- unregister_code(KC_S);
- unregister_code(KC_LGUI);
- }
- }
-}
-```
-
-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.
-
-### Tap Dance: A single key can do 3, 5, or 100 different things
-
-Hit the semicolon key once, send a semicolon. Hit it twice, rapidly -- send a colon. Hit it three times, and your keyboard's LEDs do a wild dance. That's just one example of what Tap Dance can do. It's one of the nicest community-contributed features in the firmware, conceived and created by [algernon](https://github.com/algernon) in [#451](https://github.com/jackhumbert/qmk_firmware/pull/451). Here's how Algernon describes the feature:
-
-With this feature one can specify keys that behave differently, based on the amount of times they have been tapped, and when interrupted, they get handled before the interrupter.
-
-To make it clear how this is different from `ACTION_FUNCTION_TAP`, lets explore a certain setup! We want one key to send `Space` on single tap, but `Enter` on double-tap.
-
-With `ACTION_FUNCTION_TAP`, it is quite a rain-dance to set this up, and has the problem that when the sequence is interrupted, the interrupting key will be send first. Thus, `SPC a` will result in `a SPC` being sent, if they are typed within `TAPPING_TERM`. With the tap dance feature, that'll come out as `SPC a`, correctly.
-
-The implementation hooks into two parts of the system, to achieve this: into `process_record_quantum()`, and the matrix scan. We need the latter to be able to time out a tap sequence even when a key is not being pressed, so `SPC` alone will time out and register after `TAPPING_TERM` time.
-
-But lets start with how to use it, first!
-
-First, you will need `TAP_DANCE_ENABLE=yes` in your `Makefile`, because the feature is disabled by default. This adds a little less than 1k to the firmware size. Next, you will want to define some tap-dance keys, which is easiest to do with the `TD()` macro, that - similar to `F()`, takes a number, which will later be used as an index into the `tap_dance_actions` array.
-
-This array specifies what actions shall be taken when a tap-dance key is in action. Currently, there are two possible options:
-
-* `ACTION_TAP_DANCE_DOUBLE(kc1, kc2)`: Sends the `kc1` keycode when tapped once, `kc2` otherwise.
-* `ACTION_TAP_DANCE_FN(fn)`: Calls the specified function - defined in the user keymap - with the current state of the tap-dance action.
-
-The first option is enough for a lot of cases, that just want dual roles. For example, `ACTION_TAP_DANCE(KC_SPC, KC_ENT)` will result in `Space` being sent on single-tap, `Enter` otherwise.
-
-And that's the bulk of it!
-
-Do note, however, that this implementation does have some consequences: keys do not register until either they reach the tapping ceiling, or they time out. This means that if you hold the key, nothing happens, no repeat, no nothing. It is possible to detect held state, and register an action then too, but that's not implemented yet. Keys also unregister immediately after being registered, so you can't even hold the second tap. This is intentional, to be consistent.
-
-And now, on to the explanation of how it works!
-
-The main entry point is `process_tap_dance()`, called from `process_record_quantum()`, which is run for every keypress, and our handler gets to run early. This function checks whether the key pressed is a tap-dance key. If it is not, and a tap-dance was in action, we handle that first, and enqueue the newly pressed key. If it is a tap-dance key, then we check if it is the same as the already active one (if there's one active, that is). If it is not, we fire off the old one first, then register the new one. If it was the same, we increment the counter and the timer.
-
-This means that you have `TAPPING_TERM` time to tap the key again, you do not have to input all the taps within that timeframe. This allows for longer tap counts, with minimal impact on responsiveness.
-
-Our next stop is `matrix_scan_tap_dance()`. This handles the timeout of tap-dance keys.
-
-For the sake of flexibility, tap-dance actions can be either a pair of keycodes, or a user function. The latter allows one to handle higher tap counts, or do extra things, like blink the LEDs, fiddle with the backlighting, and so on. This is accomplished by using an union, and some clever macros.
-
-In the end, let's see a full example!
-
-```c
-enum {
- CT_SE = 0,
- CT_CLN,
- CT_EGG
-};
-
-/* Have the above three on the keymap, TD(CT_SE), etc... */
-
-void dance_cln (qk_tap_dance_state_t *state) {
- if (state->count == 1) {
- register_code (KC_RSFT);
- register_code (KC_SCLN);
- unregister_code (KC_SCLN);
- unregister_code (KC_RSFT);
- } else {
- register_code (KC_SCLN);
- unregister_code (KC_SCLN);
- reset_tap_dance (state);
- }
-}
-
-void dance_egg (qk_tap_dance_state_t *state) {
- if (state->count >= 100) {
- SEND_STRING ("Safety dance!");
- reset_tap_dance (state);
- }
-}
-
-const qk_tap_dance_action_t tap_dance_actions[] = {
- [CT_SE] = ACTION_TAP_DANCE_DOUBLE (KC_SPC, KC_ENT)
- ,[CT_CLN] = ACTION_TAP_DANCE_FN (dance_cln)
- ,[CT_EGG] = ACTION_TAP_DANCE_FN (dance_egg)
-};
-```
-
-### Temporarily setting the default layer
-
-`DF(layer)` - sets default layer to *layer*. The default layer is the one at the "bottom" of the layer stack - the ultimate fallback layer. This currently does not persist over power loss. When you plug the keyboard back in, layer 0 will always be the default. It is theoretically possible to work around that, but that's not what `DF` does.
-
-### Prevent stuck modifiers
-
-Consider the following scenario:
-
-1. Layer 0 has a key defined as Shift.
-2. The same key is defined on layer 1 as the letter A.
-3. User presses Shift.
-4. User switches to layer 1 for whatever reason.
-5. User releases Shift, or rather the letter A.
-6. User switches back to layer 0.
-
-Shift was actually never released and is still considered pressed.
-
-If such situation bothers you add this to your `config.h`:
-
- #define PREVENT_STUCK_MODIFIERS
-
-This option uses 5 bytes of memory per every 8 keys on the keyboard
-rounded up (5 bits per key). For example on Planck (48 keys) it uses
-(48/8)\*5 = 30 bytes.
-
-### 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/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.
-
-## Macro shortcuts: Send a whole string when pressing just one key
-
-Instead of using the `ACTION_MACRO` function, you can simply use `M(n)` to access macro *n* - *n* will get passed into the `action_get_macro` as the `id`, and you can use a switch statement to trigger it. This gets called on the keydown and keyup, so you'll need to use an if statement testing `record->event.pressed` (see keymap_default.c).
-
-```c
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is.
-{
- switch(id) {
- case 0: // this would trigger when you hit a key mapped as M(0)
- if (record->event.pressed) {
- return MACRO( I(255), T(H), T(E), T(L), T(L), W(255), T(O), END ); // this sends the string 'hello' when the macro executes
- }
- break;
- }
- return MACRO_NONE;
-};
-```
-A macro can include the following commands:
-
-* I() change interval of stroke in milliseconds.
-* D() press key.
-* U() release key.
-* T() type key(press and release).
-* W() wait (milliseconds).
-* END end mark.
-
-So above you can see the stroke interval changed to 255ms between each keystroke, then a bunch of keys being typed, waits a while, then the macro ends.
-
-Note: Using macros to have your keyboard send passwords for you is possible, but a bad idea.
-
-### Advanced macro functions
-
-To get more control over the keys/actions your keyboard takes, the following functions are available to you in the `action_get_macro` function block:
-
-* `record->event.pressed`
-
-This is a boolean value that can be tested to see if the switch is being pressed or released. An example of this is
-
-```c
-if (record->event.pressed) {
- // on keydown
-} else {
- // on keyup
-}
-```
-
-* `register_code(<kc>);`
-
-This sends the `<kc>` keydown event to the computer. Some examples would be `KC_ESC`, `KC_C`, `KC_4`, and even modifiers such as `KC_LSFT` and `KC_LGUI`.
-
-* `unregister_code(<kc>);`
-
-Parallel to `register_code` function, this sends the `<kc>` keyup event to the computer. If you don't use this, the key will be held down until it's sent.
-
-* `layer_on(<n>);`
-
-This will turn on the layer `<n>` - the higher layer number will always take priority. Make sure you have `KC_TRNS` for the key you're pressing on the layer you're switching to, or you'll get stick there unless you have another plan.
-
-* `layer_off(<n>);`
-
-This will turn off the layer `<n>`.
-
-* `clear_keyboard();`
-
-This will clear all mods and keys currently pressed.
-
-* `clear_mods();`
-
-This will clear all mods currently pressed.
-
-* `clear_keyboard_but_mods();`
-
-This will clear all keys besides the mods currently pressed.
-
-* `update_tri_layer(layer_1, layer_2, layer_3);`
-
-If the user attempts to activate layer 1 AND layer 2 at the same time (for example, by hitting their respective layer keys), layer 3 will be activated. Layers 1 and 2 will _also_ be activated, for the purposes of fallbacks (so a given key will fall back from 3 to 2, to 1 -- and only then to 0).
-
-#### Naming your macros
-
-If you have a bunch of macros you want to refer to from your keymap, while keeping the keymap easily readable, you can just name them like so:
-
-```
-#define AUD_OFF M(6)
-#define AUD_ON M(7)
-#define MUS_OFF M(8)
-#define MUS_ON M(9)
-#define VC_IN M(10)
-#define VC_DE M(11)
-#define PLOVER M(12)
-#define EXT_PLV M(13)
-```
-
-As was done on the [Planck default keymap](/keyboards/planck/keymaps/default/keymap.c#L33-L40)
-
-#### Timer functionality
-
-It's possible to start timers and read values for time-specific events - here's an example:
-
-```c
-static uint16_t key_timer;
-key_timer = timer_read();
-if (timer_elapsed(key_timer) < 100) {
- // do something if less than 100ms have passed
-} else {
- // do something if 100ms or more have passed
-}
-```
-
-It's best to declare the `static uint16_t key_timer;` outside of the macro block (top of file, etc).
-
-#### Example: Single-key copy/paste (hold to copy, tap to paste)
-
-With QMK, it's easy to make one key do two things, as long as one of those things is being a modifier. :) So if you want a key to act as Ctrl when held and send the letter R when tapped, that's easy: `CTL_T(KC_R)`. But what do you do when you want that key to send Ctrl-V (paste) when tapped, and Ctrl-C (copy) when held?
-
-Here's what you do:
-
-
-```
-static uint16_t key_timer;
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- switch(id) {
- case 0: {
- if (record->event.pressed) {
- key_timer = timer_read(); // if the key is being pressed, we start the timer.
- }
- else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down").
- if (timer_elapsed(key_timer) > 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap.
- return MACRO( D(LCTL), T(C), U(LCTL), END );
- }
- else {
- return MACRO( D(LCTL), T(V), U(LCTL), END );
- }
- }
- break;
- }
- }
- return MACRO_NONE;
-};
-```
-
-And then, to assign this macro to a key on your keyboard layout, you just use `M(0)` on the key you want to press for copy/paste.
-
-## Additional keycode aliases for software-implemented layouts (Colemak, Dvorak, etc)
-
-Everything is assuming you're in Qwerty (in software) by default, but there is built-in support for using a Colemak or Dvorak layout by including this at the top of your keymap:
-
- #include <keymap_colemak.h>
-
-If you use Dvorak, use `keymap_dvorak.h` instead of `keymap_colemak.h` for this line. After including this line, you will get access to:
-
- * `CM_*` for all of the Colemak-equivalent characters
- * `DV_*` for all of the Dvorak-equivalent characters
-
-These implementations assume you're using Colemak or Dvorak on your OS, not on your keyboard - this is referred to as a software-implemented layout. If your computer is in Qwerty and your keymap is in Colemak or Dvorak, this is referred to as a firmware-implemented layout, and you won't need these features.
-
-To give an example, if you're using software-implemented Colemak, and want to get an `F`, you would use `CM_F` - `KC_F` under these same circumstances would result in `T`.
-
-## Additional language support
-
-In `quantum/keymap_extras/`, you'll see various language files - these work the same way as the alternative layout ones do. Most are defined by their two letter country/language code followed by an underscore and a 4-letter abbreviation of its name. `FR_UGRV` which will result in a `ù` when using a software-implemented AZERTY layout. It's currently difficult to send such characters in just the firmware (but it's being worked on - see Unicode support).
-
-## Unicode support
-
-You can currently send 4 hex digits with your OS-specific modifier key (RALT for OSX with the "Unicode Hex Input" layout) - this is currently limited to supporting one OS at a time, and requires a recompile for switching. 8 digit hex codes are being worked on. The keycode function is `UC(n)`, where *n* is a 4 digit hexidecimal. Enable from the Makefile.
-
-## Other firmware shortcut keycodes
-
-* `RESET` - puts the MCU in DFU mode for flashing new firmware (with `make dfu`)
-* `DEBUG` - the firmware into debug mode - you'll need hid_listen to see things
-* `BL_ON` - turns the backlight on
-* `BL_OFF` - turns the backlight off
-* `BL_<n>` - sets the backlight to level *n*
-* `BL_INC` - increments the backlight level by one
-* `BL_DEC` - decrements the backlight level by one
-* `BL_TOGG` - toggles the backlight
-* `BL_STEP` - steps through the backlight levels
-
-Enable the backlight from the Makefile.
-
-# Custom Quantum functions
-
-All of these functions are available in the `*_kb()` or `*_user()` variety. `kb` ones should only be used in the `<keyboard>/<keyboard>.c` file, and `user` ones should only be used in the `keymap.c`. The keyboard ones call the user ones - it's necessary to keep these calls to allow the keymap functions to work correctly.
-
-## `void martix_init_*(void)`
-
-This function gets called when the matrix is initiated, and can contain start-up code for your keyboard/keymap.
-
-## `void matrix_scan_*(void)`
-
-This function gets called at every matrix scan, which is basically as often as the MCU can handle. Be careful what you put here, as it will get run a lot.
-
-## `bool process_record_*(uint16_t keycode, keyrecord_t *record)`
-
-This function gets called on every keypress/release, and is where you can define custom functionality. The return value is whether or not QMK should continue processing the keycode - returning `false` stops the execution.
-
-The `keycode` variable is whatever is defined in your keymap, eg `MO(1)`, `KC_L`, etc. and can be switch-cased to execute code whenever a particular code is pressed.
-
-The `record` variable contains infomation about the actual press:
-
-```
-keyrecord_t record {
- keyevent_t event {
- keypos_t key {
- uint8_t col
- uint8_t row
- }
- bool pressed
- uint16_t time
- }
-}
-```
-
-The conditional `if (record->event.pressed)` can tell if the key is being pressed or released, and you can execute code based on that.
-
-## `void led_set_*(uint8_t usb_led)`
-
-This gets called whenever there is a state change on your host LEDs (eg caps lock, scroll lock, etc). The LEDs are defined as:
-
-```
-#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
-```
-
-and can be tested against the `usb_led` with a conditional like `if (usb_led & (1<<USB_LED_CAPS_LOCK))` - if this is true, you can turn your LED one, otherwise turn it off.
-
-# Modding your keyboard
-
-## Audio output from a speaker
-
-Your keyboard can make sounds! If you've got a Planck, Preonic, or basically any keyboard that allows access to the C6 port, you can hook up a simple speaker and make it beep. You can use those beeps to indicate layer transitions, modifiers, special keys, or just to play some funky 8bit tunes.
-
-The audio code lives in [quantum/audio/audio.h](/quantum/audio/audio.h) and in the other files in the audio directory. It's enabled by default on the Planck [stock keymap](/keyboards/planck/keymaps/default/keymap.c). Here are the important bits:
-
-```
-#include "audio.h"
-```
-
-Then, lower down the file:
-
-```
-float tone_startup[][2] = {
- ED_NOTE(_E7 ),
- E__NOTE(_CS7),
- E__NOTE(_E6 ),
- E__NOTE(_A6 ),
- M__NOTE(_CS7, 20)
-};
-```
-
-This is how you write a song. Each of these lines is a note, so we have a little ditty composed of five notes here.
-
-Then, we have this chunk:
-
-```
-float tone_qwerty[][2] = SONG(QWERTY_SOUND);
-float tone_dvorak[][2] = SONG(DVORAK_SOUND);
-float tone_colemak[][2] = SONG(COLEMAK_SOUND);
-float tone_plover[][2] = SONG(PLOVER_SOUND);
-float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
-
-float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
-float goodbye[][2] = SONG(GOODBYE_SOUND);
-```
-
-Wherein we bind predefined songs (from [audio/song_list.h](/audio/song_list.h)) into named variables. This is one optimization that helps save on memory: These songs only take up memory when you reference them in your keymap, because they're essentially all preprocessor directives.
-
-So now you have something called `tone_plover` for example. How do you make it play the Plover tune, then? If you look further down the keymap, you'll see this:
-
-```
-PLAY_NOTE_ARRAY(tone_plover, false, 0); // Signature is: Song name, repeat, rest style
-```
-
-This is inside one of the macros. So when that macro executes, your keyboard plays that particular chime.
-
-"Rest style" in the method signature above (the last parameter) specifies if there's a rest (a moment of silence) between the notes.
-
-## MIDI functionalty
-
-This is still a WIP, but check out `quantum/keymap_midi.c` to see what's happening. Enable from the Makefile.
-
-## Bluetooth functionality
-
-This requires [some hardware changes](https://www.reddit.com/r/MechanicalKeyboards/comments/3psx0q/the_planck_keyboard_with_bluetooth_guide_and/?ref=search_posts), but can be enabled via the Makefile. The firmware will still output characters via USB, so be aware of this when charging via a computer. It would make sense to have a switch on the Bluefruit to turn it off at will.
-
-## International Characters on Windows
-
-[AutoHotkey](https://autohotkey.com) allows Windows users to create custom hotkeys among others.
-
-The method does not require Unicode support in the keyboard itself but depends instead of AutoHotkey running in the background.
-
-First you need to select a modifier combination that is not in use by any of your programs.
-CtrlAltWin is not used very widely and should therefore be perfect for this.
-There is a macro defined for a mod-tab combo `LCAG_T`.
-Add this mod-tab combo to a key on your keyboard, e.g.: `LCAG_T(KC_TAB)`.
-This makes the key behave like a tab key if pressed and released immediately but changes it to the modifier if used with another key.
-
-In the default script of AutoHotkey you can define custom hotkeys.
-
- <^<!<#a::Send, ä
- <^<!<#<+a::Send, Ä
-
-The hotkeys above are for the combination CtrlAltGui and CtrlAltGuiShift plus the letter a.
-AutoHotkey inserts the Text right of `Send, ` when this combination is pressed.
-
-## RGB Under Glow Mod
-
-![Planck with RGB Underglow](https://raw.githubusercontent.com/yangliu/qmk_firmware/planck-rgb/keyboards/planck/keymaps/yang/planck-with-rgb-underglow.jpg)
-
-Here is a quick demo on Youtube (with NPKC KC60) (https://www.youtube.com/watch?v=VKrpPAHlisY).
-
-For this mod, you need an unused pin wiring to DI of WS2812 strip. After wiring the VCC, GND, and DI, you can enable the underglow in your Makefile.
-
- RGBLIGHT_ENABLE = yes
-
-In order to use the underglow timer functions, you need to have `#define RGBLIGHT_TIMER` in your `config.h`, and have audio disabled (`AUDIO_ENABLE = no` in your Makefile).
-
-Please add the following options into your config.h, and set them up according your hardware configuration. These settings are for the `F4` pin by default:
-
- #define RGB_DI_PIN F4 // The pin your RGB strip is wired to
- #define RGBLIGHT_TIMER // Require for fancier stuff (not compatible with audio)
- #define RGBLED_NUM 14 // Number of LEDs
- #define RGBLIGHT_HUE_STEP 10
- #define RGBLIGHT_SAT_STEP 17
- #define RGBLIGHT_VAL_STEP 17
-
-You'll need to edit `RGB_DI_PIN` to the pin you have your `DI` on your RGB strip wired to.
-
-The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects. To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations. For details, please check this keymap. `keyboards/planck/keymaps/yang/keymap.c`
-
-### WS2812 Wiring
-
-![WS2812 Wiring](https://raw.githubusercontent.com/yangliu/qmk_firmware/planck-rgb/keyboards/planck/keymaps/yang/WS2812-wiring.jpg)
-
-Please note the USB port can only supply a limited amount of power to the keyboard (500mA by standard, however, modern computer and most usb hubs can provide 700+mA.). According to the data of NeoPixel from Adafruit, 30 WS2812 LEDs require a 5V 1A power supply, LEDs used in this mod should not more than 20.
-
-## Safety Considerations
-
-You probably don't want to "brick" your keyboard, making it impossible
-to rewrite firmware onto it. Here are some of the parameters to show
-what things are (and likely aren't) too risky.
-
-- If a keyboard map does not include RESET, then, to get into DFU
- mode, you will need to press the reset button on the PCB, which
- requires unscrewing some bits.
-- Messing with tmk_core / common files might make the keyboard
- inoperable
-- Too large a .hex file is trouble; `make dfu` will erase the block,
- test the size (oops, wrong order!), which errors out, failing to
- flash the keyboard
-- DFU tools do /not/ allow you to write into the bootloader (unless
- you throw in extra fruitsalad of options), so there is little risk
- there.
-- EEPROM has around a 100000 write cycle. You shouldn't rewrite the
- firmware repeatedly and continually; that'll burn the EEPROM
- eventually.
-
-# Porting your keyboard to QMK
-
-If your keyboard is running an Atmega chip (atmega32u4 and others), it's pretty easy to get things setup for compiling your own firmware to flash onto your board. There is a `/util/new_project.sh <keyboard>` script to help get you started - you can simply pass your keyboard's name into the script, and all of the necessary files will be created. The components of each are described below.
-
-## `/keyboards/<keyboard>/config.h`
-
-The `USB Device descriptor parameter` block contains parameters are used to uniquely identify your keyboard, but they don't really matter to the machine.
-
-Your `MATRIX_ROWS` and `MATRIX_COLS` are the numbers of rows and cols in your keyboard matrix - this may be different than the number of actual rows and columns on your keyboard. There are some tricks you can pull to increase the number of keys in a given matrix, but most keyboards are pretty straight-forward.
-
-The `MATRIX_ROW_PINS` and `MATRIX_COL_PINS` are the pins your MCU uses on each row/column. Your schematic (if you have one) will have this information on it, and the values will vary depending on your setup. This is one of the most important things to double-check in getting your keyboard setup correctly.
-
-For the `DIODE_DIRECTION`, most hand-wiring guides will instruct you to wire the diodes in the `COL2ROW` position, but it's possible that they are in the other - people coming from EasyAVR often use `ROW2COL`. Nothing will function if this is incorrect.
-
-`BACKLIGHT_PIN` is the pin that your PWM-controlled backlight (if one exists) is hooked-up to. Currently only B5, B6, and B7 are supported.
-
-`BACKLIGHT_BREATHING` is a fancier backlight feature, and uses one of the timers.
-
-`BACKLIGHT_LEVELS` is how many levels exist for your backlight - max is 15, and they are computed automatically from this number.
-
-## `/keyboards/<keyboard>/Makefile`
-
-The values at the top likely won't need to be changed, since most boards use the `atmega32u4` chip. The `BOOTLOADER_SIZE` will need to be adjusted based on your MCU type. It's defaulted to the Teensy, since that's the most common controller. Below is quoted from the `Makefile`.
-
-```
-# 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
-```
-
-At the bottom of the file, you'll find lots of features to turn on and off - all of these options should be set with `?=` to allow for the keymap overrides. `?=` only assigns if the variable was previously undefined. For the full documenation of these features, see the [Makefile options](#makefile-options).
-
-## `/keyboards/<keyboard>/readme.md`
-
-This is where you'll describe your keyboard - please write as much as you can about it! Talking about default functionality/features is useful here. Feel free to link to external pages/sites if necessary. Images can be included here as well. This file will be rendered into a webpage at qmk.fm/keyboards/<keyboard>/.
-
-## `/keyboards/<keyboard>/<keyboard>.c`
-
-This is where all of the custom logic for your keyboard goes - you may not need to put anything in this file, since a lot of things are configured automatically. All of the `*_kb()` functions are defined here. If you modify them, remember to keep the calls to `*_user()`, or things in the keymaps might not work. You can read more about the functions [here](#custom-quantum-functions-for-keyboards-and-keymaps)
-
-## `/keyboards/<keyboard>/<keyboard>.h`
-
-Here is where you can (optionally) define your `KEYMAP` function to remap your matrix into a more readable format. With ortholinear boards, this isn't always necessary, but it can help to accomodate the dead spots on your matrix, where there are keys that take up more than one space (2u, staggering, 6.25u, etc). The example shows the difference between the physical keys, and the matrix design:
-
-```
-#define KEYMAP( \
- k00, k01, k02, \
- k10, k11 \
-) \
-{ \
- { k00, k01, k02 }, \
- { k10, KC_NO, k11 }, \
-}
-```
-
-Each of the `kxx` variables needs to be unique, and usually follows the format `k<row><col>`. You can place `KC_NO` where your dead keys are in your matrix.
+* The [TMK documentation](doc/TMK_README.md). QMK is based on TMK, and this explains how it works internally.
diff --git a/testlist.mk b/testlist.mk
new file mode 100644
index 000000000..1884d6d3f
--- /dev/null
+++ b/testlist.mk
@@ -0,0 +1,13 @@
+include $(ROOT_DIR)/quantum/serial_link/tests/testlist.mk
+
+define VALIDATE_TEST_LIST
+ ifneq ($1,)
+ ifeq ($$(findstring -,$1),-)
+ $$(error Test names can't contain '-', but '$1' does)
+ else
+ $$(eval $$(call VALIDATE_TEST_LIST,$$(firstword $2),$$(wordlist 2,9999,$2)))
+ endif
+ endif
+endef
+
+$(eval $(call VALIDATE_TEST_LIST,$(firstword $(TEST_LIST)),$(wordlist 2,9999,$(TEST_LIST)))) \ No newline at end of file
diff --git a/tmk_core/avr.mk b/tmk_core/avr.mk
index 3bf2b34f8..5df539def 100644
--- a/tmk_core/avr.mk
+++ b/tmk_core/avr.mk
@@ -26,7 +26,7 @@ CFLAGS += -fno-inline-small-functions
CFLAGS += -fno-strict-aliasing
CPPFLAGS += $(COMPILEFLAGS)
-CPPFLAGS += -fno-exceptions
+CPPFLAGS += -fno-exceptions -std=c++11
LDFLAGS +=-Wl,--gc-sections
@@ -107,6 +107,10 @@ flip: $(BUILD_DIR)/$(TARGET).hex
batchisp -hardware usb -device $(MCU) -operation start reset 0
dfu: $(BUILD_DIR)/$(TARGET).hex sizeafter
+ until dfu-programmer $(MCU) get bootloader-version; do\
+ echo "Error: Bootloader not found. Trying again in 5s." ;\
+ sleep 5 ;\
+ done
ifneq (, $(findstring 0.7, $(shell dfu-programmer --version 2>&1)))
dfu-programmer $(MCU) erase --force
else
@@ -134,6 +138,11 @@ else
endif
dfu-programmer $(MCU) reset
+# Convert hex to bin.
+flashbin: $(BUILD_DIR)/$(TARGET).hex
+ $(OBJCOPY) -Iihex -Obinary $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin
+ $(COPY) $(BUILD_DIR)/$(TARGET).bin $(TARGET).bin;
+ $(COPY) $(BUILD_DIR)/$(TARGET).bin FLASH.bin;
# Generate avr-gdb config/init file which does the following:
# define the reset signal, load the target file, connect to target, and set
diff --git a/tmk_core/chibios.mk b/tmk_core/chibios.mk
index cb67ac6f2..062a712bd 100644
--- a/tmk_core/chibios.mk
+++ b/tmk_core/chibios.mk
@@ -89,9 +89,9 @@ CHIBISRC = $(STARTUPSRC) \
$(STARTUPASM) \
$(PORTASM) \
$(OSALASM)
-
-SRC += $(patsubst $(TOP_DIR)/%,%,$(CHIBISRC))
+CHIBISRC := $(patsubst $(TOP_DIR)/%,%,$(CHIBISRC))
+
EXTRAINCDIRS += $(CHIBIOS)/os/license \
$(STARTUPINC) $(KERNINC) $(PORTINC) $(OSALINC) \
$(HALINC) $(PLATFORMINC) $(BOARDINC) $(TESTINC) \
@@ -143,14 +143,6 @@ MCUFLAGS = -mcpu=$(MCU)
DEBUG = gdb
-# Define ASM defines here
-# bootloader definitions may be used in the startup .s file
-ifneq ("$(wildcard $(KEYBOARD_PATH)/bootloader_defs.h)","")
- OPT_DEFS += -include $(KEYBOARD_PATH)/bootloader_defs.h
-else ifneq ("$(wildcard $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h)","")
- OPT_DEFS += -include $(KEYBOARD_PATH)/boards/$(BOARD)/bootloader_defs.h
-endif
-
# List any extra directories to look for libraries here.
EXTRALIBDIRS = $(RULESPATH)/ld
diff --git a/tmk_core/common.mk b/tmk_core/common.mk
index aa05b9491..3c1373c08 100644
--- a/tmk_core/common.mk
+++ b/tmk_core/common.mk
@@ -5,7 +5,7 @@ else ifeq ($(PLATFORM),CHIBIOS)
PLATFORM_COMMON_DIR = $(COMMON_DIR)/chibios
endif
-SRC += $(COMMON_DIR)/host.c \
+TMK_COMMON_SRC += $(COMMON_DIR)/host.c \
$(COMMON_DIR)/keyboard.c \
$(COMMON_DIR)/action.c \
$(COMMON_DIR)/action_tapping.c \
@@ -21,101 +21,101 @@ SRC += $(COMMON_DIR)/host.c \
$(PLATFORM_COMMON_DIR)/bootloader.c \
ifeq ($(PLATFORM),AVR)
- SRC += $(PLATFORM_COMMON_DIR)/xprintf.S
+ TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/xprintf.S
endif
ifeq ($(PLATFORM),CHIBIOS)
- SRC += $(PLATFORM_COMMON_DIR)/printf.c
- SRC += $(PLATFORM_COMMON_DIR)/eeprom.c
+ TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/printf.c
+ TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/eeprom.c
endif
# Option modules
ifeq ($(strip $(BOOTMAGIC_ENABLE)), yes)
- OPT_DEFS += -DBOOTMAGIC_ENABLE
- SRC += $(COMMON_DIR)/bootmagic.c
+ TMK_COMMON_DEFS += -DBOOTMAGIC_ENABLE
+ TMK_COMMON_SRC += $(COMMON_DIR)/bootmagic.c
else
- OPT_DEFS += -DMAGIC_ENABLE
- SRC += $(COMMON_DIR)/magic.c
+ TMK_COMMON_DEFS += -DMAGIC_ENABLE
+ TMK_COMMON_SRC += $(COMMON_DIR)/magic.c
endif
ifeq ($(strip $(MOUSEKEY_ENABLE)), yes)
- SRC += $(COMMON_DIR)/mousekey.c
- OPT_DEFS += -DMOUSEKEY_ENABLE
- OPT_DEFS += -DMOUSE_ENABLE
+ TMK_COMMON_SRC += $(COMMON_DIR)/mousekey.c
+ TMK_COMMON_DEFS += -DMOUSEKEY_ENABLE
+ TMK_COMMON_DEFS += -DMOUSE_ENABLE
endif
ifeq ($(strip $(EXTRAKEY_ENABLE)), yes)
- OPT_DEFS += -DEXTRAKEY_ENABLE
+ TMK_COMMON_DEFS += -DEXTRAKEY_ENABLE
+endif
+
+ifeq ($(strip $(RAW_ENABLE)), yes)
+ TMK_COMMON_DEFS += -DRAW_ENABLE
endif
ifeq ($(strip $(CONSOLE_ENABLE)), yes)
- OPT_DEFS += -DCONSOLE_ENABLE
+ TMK_COMMON_DEFS += -DCONSOLE_ENABLE
else
- OPT_DEFS += -DNO_PRINT
- OPT_DEFS += -DNO_DEBUG
+ TMK_COMMON_DEFS += -DNO_PRINT
+ TMK_COMMON_DEFS += -DNO_DEBUG
endif
ifeq ($(strip $(COMMAND_ENABLE)), yes)
- SRC += $(COMMON_DIR)/command.c
- OPT_DEFS += -DCOMMAND_ENABLE
+ TMK_COMMON_SRC += $(COMMON_DIR)/command.c
+ TMK_COMMON_DEFS += -DCOMMAND_ENABLE
endif
ifeq ($(strip $(NKRO_ENABLE)), yes)
- OPT_DEFS += -DNKRO_ENABLE
+ TMK_COMMON_DEFS += -DNKRO_ENABLE
endif
ifeq ($(strip $(USB_6KRO_ENABLE)), yes)
- OPT_DEFS += -DUSB_6KRO_ENABLE
+ TMK_COMMON_DEFS += -DUSB_6KRO_ENABLE
endif
ifeq ($(strip $(SLEEP_LED_ENABLE)), yes)
- SRC += $(PLATFORM_COMMON_DIR)/sleep_led.c
- OPT_DEFS += -DSLEEP_LED_ENABLE
- OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+ TMK_COMMON_SRC += $(PLATFORM_COMMON_DIR)/sleep_led.c
+ TMK_COMMON_DEFS += -DSLEEP_LED_ENABLE
+ TMK_COMMON_DEFS += -DNO_SUSPEND_POWER_DOWN
endif
ifeq ($(strip $(BACKLIGHT_ENABLE)), yes)
- SRC += $(COMMON_DIR)/backlight.c
- OPT_DEFS += -DBACKLIGHT_ENABLE
+ TMK_COMMON_SRC += $(COMMON_DIR)/backlight.c
+ TMK_COMMON_DEFS += -DBACKLIGHT_ENABLE
+endif
+
+ifeq ($(strip $(ADAFRUIT_BLE_ENABLE)), yes)
+ TMK_COMMON_DEFS += -DADAFRUIT_BLE_ENABLE
endif
ifeq ($(strip $(BLUETOOTH_ENABLE)), yes)
- OPT_DEFS += -DBLUETOOTH_ENABLE
+ TMK_COMMON_DEFS += -DBLUETOOTH_ENABLE
+endif
+
+ifeq ($(strip $(ONEHAND_ENABLE)), yes)
+ TMK_COMMON_DEFS += -DONEHAND_ENABLE
endif
ifeq ($(strip $(KEYMAP_SECTION_ENABLE)), yes)
- OPT_DEFS += -DKEYMAP_SECTION_ENABLE
+ TMK_COMMON_DEFS += -DKEYMAP_SECTION_ENABLE
ifeq ($(strip $(MCU)),atmega32u2)
- EXTRALDFLAGS = -Wl,-L$(TMK_DIR),-Tldscript_keymap_avr35.x
+ TMK_COMMON_LDFLAGS = -Wl,-L$(TMK_DIR),-Tldscript_keymap_avr35.x
else ifeq ($(strip $(MCU)),atmega32u4)
- EXTRALDFLAGS = -Wl,-L$(TMK_DIR),-Tldscript_keymap_avr5.x
+ TMK_COMMON_LDFLAGS = -Wl,-L$(TMK_DIR),-Tldscript_keymap_avr5.x
else
- EXTRALDFLAGS = $(error no ldscript for keymap section)
+ TMK_COMMON_LDFLAGS = $(error no ldscript for keymap section)
endif
endif
-ifeq ($(MASTER),right)
- OPT_DEFS += -DMASTER_IS_ON_RIGHT
-else
- ifneq ($(MASTER),left)
-$(error MASTER does not have a valid value(left/right))
- endif
-endif
-
-
-# Version string
-OPT_DEFS += -DVERSION=$(GIT_VERSION)
-
# Bootloader address
ifdef STM32_BOOTLOADER_ADDRESS
- OPT_DEFS += -DSTM32_BOOTLOADER_ADDRESS=$(STM32_BOOTLOADER_ADDRESS)
+ TMK_COMMON_DEFS += -DSTM32_BOOTLOADER_ADDRESS=$(STM32_BOOTLOADER_ADDRESS)
endif
# Search Path
VPATH += $(TMK_PATH)/$(COMMON_DIR)
ifeq ($(PLATFORM),CHIBIOS)
VPATH += $(TMK_PATH)/$(COMMON_DIR)/chibios
-endif \ No newline at end of file
+endif
diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c
index be6dea2b7..d485b46c7 100644
--- a/tmk_core/common/action.c
+++ b/tmk_core/common/action.c
@@ -41,6 +41,12 @@ void action_exec(keyevent_t event)
dprint("EVENT: "); debug_event(event); dprintln();
}
+#ifdef ONEHAND_ENABLE
+ if (!IS_NOEVENT(event)) {
+ process_hand_swap(&event);
+ }
+#endif
+
keyrecord_t record = { .event = event };
#ifndef NO_ACTION_TAPPING
@@ -53,6 +59,26 @@ void action_exec(keyevent_t event)
#endif
}
+#ifdef ONEHAND_ENABLE
+bool swap_hands = false;
+
+void process_hand_swap(keyevent_t *event) {
+ static swap_state_row_t swap_state[MATRIX_ROWS];
+
+ keypos_t pos = event->key;
+ swap_state_row_t col_bit = (swap_state_row_t)1<<pos.col;
+ bool do_swap = event->pressed ? swap_hands :
+ swap_state[pos.row] & (col_bit);
+
+ if (do_swap) {
+ event->key = hand_swap_config[pos.row][pos.col];
+ swap_state[pos.row] |= col_bit;
+ } else {
+ swap_state[pos.row] &= ~(col_bit);
+ }
+}
+#endif
+
#if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS)
bool disable_action_cache = false;
@@ -129,9 +155,10 @@ void process_action(keyrecord_t *record, action_t action)
action.key.mods<<4;
if (event.pressed) {
if (mods) {
- if (IS_MOD(action.key.code)) {
+ if (IS_MOD(action.key.code) || action.key.code == KC_NO) {
// e.g. LSFT(KC_LGUI): we don't want the LSFT to be weak as it would make it useless.
- // this also makes LSFT(KC_LGUI) behave exactly the same as LGUI(KC_LSFT)
+ // This also makes LSFT(KC_LGUI) behave exactly the same as LGUI(KC_LSFT).
+ // Same applies for some keys like KC_MEH which are declared as MEH(KC_NO).
add_mods(mods);
} else {
add_weak_mods(mods);
@@ -142,7 +169,7 @@ void process_action(keyrecord_t *record, action_t action)
} else {
unregister_code(action.key.code);
if (mods) {
- if (IS_MOD(action.key.code)) {
+ if (IS_MOD(action.key.code) || action.key.code == KC_NO) {
del_mods(mods);
} else {
del_weak_mods(mods);
@@ -440,6 +467,54 @@ void process_action(keyrecord_t *record, action_t action)
#endif
case ACT_COMMAND:
break;
+#ifdef ONEHAND_ENABLE
+ case ACT_SWAP_HANDS:
+ switch (action.swap.code) {
+ case OP_SH_TOGGLE:
+ if (event.pressed) {
+ swap_hands = !swap_hands;
+ }
+ break;
+ case OP_SH_ON_OFF:
+ swap_hands = event.pressed;
+ break;
+ case OP_SH_OFF_ON:
+ swap_hands = !event.pressed;
+ break;
+ case OP_SH_ON:
+ if (!event.pressed) {
+ swap_hands = true;
+ }
+ break;
+ case OP_SH_OFF:
+ if (!event.pressed) {
+ swap_hands = false;
+ }
+ break;
+ #ifndef NO_ACTION_TAPPING
+ case OP_SH_TAP_TOGGLE:
+ /* tap toggle */
+ if (tap_count > 0) {
+ if (!event.pressed) {
+ swap_hands = !swap_hands;
+ }
+ } else {
+ swap_hands = event.pressed;
+ }
+ break;
+ default:
+ if (tap_count > 0) {
+ if (event.pressed) {
+ register_code(action.swap.code);
+ } else {
+ unregister_code(action.swap.code);
+ }
+ } else {
+ swap_hands = event.pressed;
+ }
+ #endif
+ }
+#endif
#ifndef NO_ACTION_FUNCTION
case ACT_FUNCTION:
action_function(record, action.func.id, action.func.opt);
@@ -652,6 +727,13 @@ bool is_tap_key(keypos_t key)
return true;
}
return false;
+ case ACT_SWAP_HANDS:
+ switch (action.swap.code) {
+ case 0x00 ... 0xdf:
+ case OP_SH_TAP_TOGGLE:
+ return true;
+ }
+ return false;
case ACT_MACRO:
case ACT_FUNCTION:
if (action.func.opt & FUNC_TAP) { return true; }
@@ -692,6 +774,7 @@ void debug_action(action_t action)
case ACT_MACRO: dprint("ACT_MACRO"); break;
case ACT_COMMAND: dprint("ACT_COMMAND"); break;
case ACT_FUNCTION: dprint("ACT_FUNCTION"); break;
+ case ACT_SWAP_HANDS: dprint("ACT_SWAP_HANDS"); break;
default: dprint("UNKNOWN"); break;
}
dprintf("[%X:%02X]", action.kind.param>>8, action.kind.param&0xff);
diff --git a/tmk_core/common/action.h b/tmk_core/common/action.h
index e8aa12a7c..b9bdfe642 100644
--- a/tmk_core/common/action.h
+++ b/tmk_core/common/action.h
@@ -65,6 +65,24 @@ bool process_record_quantum(keyrecord_t *record);
#if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS)
extern bool disable_action_cache;
#endif
+
+/* Code for handling one-handed key modifiers. */
+#ifdef ONEHAND_ENABLE
+extern bool swap_hands;
+extern const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS];
+#if (MATRIX_COLS <= 8)
+typedef uint8_t swap_state_row_t;
+#elif (MATRIX_COLS <= 16)
+typedef uint16_t swap_state_row_t;
+#elif (MATRIX_COLS <= 32)
+typedef uint32_t swap_state_row_t;
+#else
+#error "MATRIX_COLS: invalid value"
+#endif
+
+void process_hand_swap(keyevent_t *record);
+#endif
+
void process_record_nocache(keyrecord_t *record);
void process_record(keyrecord_t *record);
void process_action(keyrecord_t *record, action_t action);
diff --git a/tmk_core/common/action_code.h b/tmk_core/common/action_code.h
index ca729aaec..33da35f35 100644
--- a/tmk_core/common/action_code.h
+++ b/tmk_core/common/action_code.h
@@ -108,6 +108,8 @@ enum action_kind_id {
/* Other Keys */
ACT_USAGE = 0b0100,
ACT_MOUSEKEY = 0b0101,
+ /* One-hand Support */
+ ACT_SWAP_HANDS = 0b0110,
/* Layer Actions */
ACT_LAYER = 0b1000,
ACT_LAYER_TAP = 0b1010, /* Layer 0-15 */
@@ -178,6 +180,11 @@ typedef union {
uint8_t opt :4;
uint8_t kind :4;
} func;
+ struct action_swap {
+ uint8_t code :8;
+ uint8_t opt :4;
+ uint8_t kind :4;
+ } swap;
} action_t;
@@ -295,6 +302,7 @@ enum backlight_opt {
BACKLIGHT_STEP = 3,
BACKLIGHT_LEVEL = 4,
};
+
/* Macro */
#define ACTION_MACRO(id) ACTION(ACT_MACRO, (id))
#define ACTION_MACRO_TAP(id) ACTION(ACT_MACRO, FUNC_TAP<<8 | (id))
@@ -306,7 +314,7 @@ enum backlight_opt {
#define ACTION_BACKLIGHT_STEP() ACTION(ACT_BACKLIGHT, BACKLIGHT_STEP << 8)
#define ACTION_BACKLIGHT_LEVEL(level) ACTION(ACT_BACKLIGHT, BACKLIGHT_LEVEL << 8 | (level))
/* Command */
-#define ACTION_COMMAND(id, opt) ACTION(ACT_COMMAND, (opt)<<8 | (addr))
+#define ACTION_COMMAND(id, opt) ACTION(ACT_COMMAND, (opt)<<8 | (id))
/* Function */
enum function_opts {
FUNC_TAP = 0x8, /* indciates function is tappable */
@@ -314,5 +322,23 @@ enum function_opts {
#define ACTION_FUNCTION(id) ACTION(ACT_FUNCTION, (id))
#define ACTION_FUNCTION_TAP(id) ACTION(ACT_FUNCTION, FUNC_TAP<<8 | (id))
#define ACTION_FUNCTION_OPT(id, opt) ACTION(ACT_FUNCTION, (opt)<<8 | (id))
+/* OneHand Support */
+enum swap_hands_pram_tap_op {
+ OP_SH_TOGGLE = 0xF0,
+ OP_SH_TAP_TOGGLE,
+ OP_SH_ON_OFF,
+ OP_SH_OFF_ON,
+ OP_SH_OFF,
+ OP_SH_ON,
+};
+
+#define ACTION_SWAP_HANDS() ACTION_SWAP_HANDS_ON_OFF()
+#define ACTION_SWAP_HANDS_TOGGLE() ACTION(ACT_SWAP_HANDS, OP_SH_TOGGLE)
+#define ACTION_SWAP_HANDS_TAP_TOGGLE() ACTION(ACT_SWAP_HANDS, OP_SH_TAP_TOGGLE)
+#define ACTION_SWAP_HANDS_TAP_KEY(key) ACTION(ACT_SWAP_HANDS, key)
+#define ACTION_SWAP_HANDS_ON_OFF() ACTION(ACT_SWAP_HANDS, OP_SH_ON_OFF)
+#define ACTION_SWAP_HANDS_OFF_ON() ACTION(ACT_SWAP_HANDS, OP_SH_OFF_ON)
+#define ACTION_SWAP_HANDS_ON() ACTION(ACT_SWAP_HANDS, OP_SH_ON)
+#define ACTION_SWAP_HANDS_OFF() ACTION(ACT_SWAP_HANDS, OP_SH_OFF)
#endif /* ACTION_CODE_H */
diff --git a/tmk_core/common/action_layer.c b/tmk_core/common/action_layer.c
index 63fa2b5ae..a3c757964 100644
--- a/tmk_core/common/action_layer.c
+++ b/tmk_core/common/action_layer.c
@@ -111,7 +111,7 @@ void layer_debug(void)
#endif
#if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS)
-uint8_t source_layers_cache[(MATRIX_ROWS * MATRIX_COLS + 7) / 8][MAX_LAYER_BITS] = {0};
+uint8_t source_layers_cache[(MATRIX_ROWS * MATRIX_COLS + 7) / 8][MAX_LAYER_BITS] = {{0}};
void update_source_layers_cache(keypos_t key, uint8_t layer)
{
diff --git a/tmk_core/common/action_util.c b/tmk_core/common/action_util.c
index 61ff202be..cb4b25264 100644
--- a/tmk_core/common/action_util.c
+++ b/tmk_core/common/action_util.c
@@ -20,6 +20,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "action_util.h"
#include "action_layer.h"
#include "timer.h"
+#include "keycode_config.h"
+
+extern keymap_config_t keymap_config;
+
static inline void add_key_byte(uint8_t code);
static inline void del_key_byte(uint8_t code);
@@ -139,7 +143,7 @@ void send_keyboard_report(void) {
void add_key(uint8_t key)
{
#ifdef NKRO_ENABLE
- if (keyboard_protocol && keyboard_nkro) {
+ if (keyboard_protocol && keymap_config.nkro) {
add_key_bit(key);
return;
}
@@ -150,7 +154,7 @@ void add_key(uint8_t key)
void del_key(uint8_t key)
{
#ifdef NKRO_ENABLE
- if (keyboard_protocol && keyboard_nkro) {
+ if (keyboard_protocol && keymap_config.nkro) {
del_key_bit(key);
return;
}
@@ -231,7 +235,7 @@ uint8_t has_anymod(void)
uint8_t get_first_key(void)
{
#ifdef NKRO_ENABLE
- if (keyboard_protocol && keyboard_nkro) {
+ if (keyboard_protocol && keymap_config.nkro) {
uint8_t i = 0;
for (; i < KEYBOARD_REPORT_BITS && !keyboard_report->nkro.bits[i]; i++)
;
diff --git a/tmk_core/common/avr/bootloader.c b/tmk_core/common/avr/bootloader.c
index fb9bf2d1c..ad547b985 100644
--- a/tmk_core/common/avr/bootloader.c
+++ b/tmk_core/common/avr/bootloader.c
@@ -38,7 +38,7 @@
* | | | |
* = = = =
* | | 32KB-4KB | | 128KB-8KB
- * 0x6000 +---------------+ 0x1FC00 +---------------+
+ * 0x7000 +---------------+ 0x1E000 +---------------+
* | Bootloader | 4KB | Bootloader | 8KB
* 0x7FFF +---------------+ 0x1FFFF +---------------+
*
@@ -64,8 +64,8 @@
#define BOOTLOADER_START (FLASH_SIZE - BOOTLOADER_SIZE)
-/*
- * Entering the Bootloader via Software
+/*
+ * Entering the Bootloader via Software
* http://www.fourwalledcubicle.com/files/LUFA/Doc/120730/html/_page__software_bootloader_start.html
*/
#define BOOTLOADER_RESET_KEY 0xB007B007
@@ -137,7 +137,7 @@ void bootloader_jump_after_watchdog_reset(void)
#if 0
/* Jumping To The Bootloader
* http://www.pjrc.com/teensy/jump_to_bootloader.html
- *
+ *
* This method doen't work when using LUFA. idk why.
* - needs to initialize more regisers or interrupt setting?
*/
diff --git a/tmk_core/common/avr/suspend.c b/tmk_core/common/avr/suspend.c
index 8a7272bbc..0c81e8361 100644
--- a/tmk_core/common/avr/suspend.c
+++ b/tmk_core/common/avr/suspend.c
@@ -47,6 +47,7 @@ void suspend_idle(uint8_t time)
sleep_disable();
}
+#ifndef NO_SUSPEND_POWER_DOWN
/* Power down MCU with watchdog timer
* wdto: watchdog timer timeout defined in <avr/wdt.h>
* WDTO_15MS
@@ -61,6 +62,7 @@ void suspend_idle(uint8_t time)
* WDTO_8S
*/
static uint8_t wdt_timeout = 0;
+
static void power_down(uint8_t wdto)
{
#ifdef PROTOCOL_LUFA
@@ -98,19 +100,19 @@ static void power_down(uint8_t wdto)
// Disable watchdog after sleep
wdt_disable();
}
+#endif
void suspend_power_down(void)
{
+#ifndef NO_SUSPEND_POWER_DOWN
power_down(WDTO_15MS);
+#endif
}
__attribute__ ((weak)) void matrix_power_up(void) {}
__attribute__ ((weak)) void matrix_power_down(void) {}
bool suspend_wakeup_condition(void)
{
-#ifdef BACKLIGHT_ENABLE
- backlight_set(0);
-#endif
matrix_power_up();
matrix_scan();
matrix_power_down();
@@ -126,10 +128,9 @@ void suspend_wakeup_init(void)
// clear keyboard state
clear_keyboard();
#ifdef BACKLIGHT_ENABLE
- backlight_set(0);
backlight_init();
#endif
-led_set(host_keyboard_leds());
+ led_set(host_keyboard_leds());
}
#ifndef NO_SUSPEND_POWER_DOWN
diff --git a/tmk_core/common/avr/timer.c b/tmk_core/common/avr/timer.c
index 292b41c3a..84af44488 100644
--- a/tmk_core/common/avr/timer.c
+++ b/tmk_core/common/avr/timer.c
@@ -17,6 +17,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <avr/io.h>
#include <avr/interrupt.h>
+#include <util/atomic.h>
#include <stdint.h>
#include "timer_avr.h"
#include "timer.h"
@@ -24,7 +25,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// counter resolution 1ms
// NOTE: union { uint32_t timer32; struct { uint16_t dummy; uint16_t timer16; }}
-volatile uint32_t timer_count = 0;
+volatile uint32_t timer_count;
void timer_init(void)
{
@@ -52,10 +53,9 @@ void timer_init(void)
inline
void timer_clear(void)
{
- uint8_t sreg = SREG;
- cli();
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
timer_count = 0;
- SREG = sreg;
+ }
}
inline
@@ -63,10 +63,9 @@ uint16_t timer_read(void)
{
uint32_t t;
- uint8_t sreg = SREG;
- cli();
- t = timer_count;
- SREG = sreg;
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+ t = timer_count;
+ }
return (t & 0xFFFF);
}
@@ -76,10 +75,9 @@ uint32_t timer_read32(void)
{
uint32_t t;
- uint8_t sreg = SREG;
- cli();
- t = timer_count;
- SREG = sreg;
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+ t = timer_count;
+ }
return t;
}
@@ -89,10 +87,9 @@ uint16_t timer_elapsed(uint16_t last)
{
uint32_t t;
- uint8_t sreg = SREG;
- cli();
- t = timer_count;
- SREG = sreg;
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+ t = timer_count;
+ }
return TIMER_DIFF_16((t & 0xFFFF), last);
}
@@ -102,10 +99,9 @@ uint32_t timer_elapsed32(uint32_t last)
{
uint32_t t;
- uint8_t sreg = SREG;
- cli();
- t = timer_count;
- SREG = sreg;
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+ t = timer_count;
+ }
return TIMER_DIFF_32(t, last);
}
diff --git a/tmk_core/common/avr/xprintf.S b/tmk_core/common/avr/xprintf.S
index 0cec70ce2..06434b98d 100644
--- a/tmk_core/common/avr/xprintf.S
+++ b/tmk_core/common/avr/xprintf.S
@@ -1,500 +1,500 @@
-;---------------------------------------------------------------------------;
-; Extended itoa, puts, printf and atoi (C)ChaN, 2011
-;---------------------------------------------------------------------------;
-
- // Base size is 152 bytes
-#define CR_CRLF 0 // Convert \n to \r\n (+10 bytes)
-#define USE_XPRINTF 1 // Enable xprintf function (+194 bytes)
-#define USE_XSPRINTF 0 // Add xsprintf function (+78 bytes)
-#define USE_XFPRINTF 0 // Add xfprintf function (+54 bytes)
-#define USE_XATOI 0 // Enable xatoi function (+182 bytes)
-
-
-#if FLASHEND > 0x1FFFF
-#error xitoa module does not support 256K devices
-#endif
-
-.nolist
-#include <avr/io.h> // Include device specific definitions.
-.list
-
-#ifdef SPM_PAGESIZE // Recent devices have "lpm Rd,Z+" and "movw".
-.macro _LPMI reg
- lpm \reg, Z+
-.endm
-.macro _MOVW dh,dl, sh,sl
- movw \dl, \sl
-.endm
-#else // Earlier devices do not have "lpm Rd,Z+" nor "movw".
-.macro _LPMI reg
- lpm
- mov \reg, r0
- adiw ZL, 1
-.endm
-.macro _MOVW dh,dl, sh,sl
- mov \dl, \sl
- mov \dh, \sh
-.endm
-#endif
-
-
-
-;---------------------------------------------------------------------------
-; Stub function to forward to user output function
-;
-;Prototype: void xputc (char chr // a character to be output
-; );
-;Size: 12/12 words
-
-.section .bss
-.global xfunc_out ; xfunc_out must be initialized before using this module.
-xfunc_out: .ds.w 1
-.section .text
-
-
-.func xputc
-.global xputc
-xputc:
-#if CR_CRLF
- cpi r24, 10 ;LF --> CRLF
- brne 1f ;
- ldi r24, 13 ;
- rcall 1f ;
- ldi r24, 10 ;/
-1:
-#endif
- push ZH
- push ZL
- lds ZL, xfunc_out+0 ;Pointer to the registered output function.
- lds ZH, xfunc_out+1 ;/
- sbiw ZL, 0 ;Skip if null
- breq 2f ;/
- icall
-2: pop ZL
- pop ZH
- ret
-.endfunc
-
-
-
-;---------------------------------------------------------------------------
-; Direct ROM string output
-;
-;Prototype: void xputs (const char *str_p // rom string to be output
-; );
-
-.func xputs
-.global xputs
-xputs:
- _MOVW ZH,ZL, r25,r24 ; Z = pointer to rom string
-1: _LPMI r24
- cpi r24, 0
- breq 2f
- rcall xputc
- rjmp 1b
-2: ret
-.endfunc
-
-
-;---------------------------------------------------------------------------
-; Extended direct numeral string output (32bit version)
-;
-;Prototype: void xitoa (long value, // value to be output
-; char radix, // radix
-; char width); // minimum width
-;
-
-.func xitoa
-.global xitoa
-xitoa:
- ;r25:r22 = value, r20 = base, r18 = digits
- clr r31 ;r31 = stack level
- ldi r30, ' ' ;r30 = sign
- ldi r19, ' ' ;r19 = filler
- sbrs r20, 7 ;When base indicates signd format and the value
- rjmp 0f ;is minus, add a '-'.
- neg r20 ;
- sbrs r25, 7 ;
- rjmp 0f ;
- ldi r30, '-' ;
- com r22 ;
- com r23 ;
- com r24 ;
- com r25 ;
- adc r22, r1 ;
- adc r23, r1 ;
- adc r24, r1 ;
- adc r25, r1 ;/
-0: sbrs r18, 7 ;When digits indicates zero filled,
- rjmp 1f ;filler is '0'.
- neg r18 ;
- ldi r19, '0' ;/
- ;----- string conversion loop
-1: ldi r21, 32 ;r26 = r25:r22 % r20
- clr r26 ;r25:r22 /= r20
-2: lsl r22 ;
- rol r23 ;
- rol r24 ;
- rol r25 ;
- rol r26 ;
- cp r26, r20 ;
- brcs 3f ;
- sub r26, r20 ;
- inc r22 ;
-3: dec r21 ;
- brne 2b ;/
- cpi r26, 10 ;r26 is a numeral digit '0'-'F'
- brcs 4f ;
- subi r26, -7 ;
-4: subi r26, -'0' ;/
- push r26 ;Stack it
- inc r31 ;/
- cp r22, r1 ;Repeat until r25:r22 gets zero
- cpc r23, r1 ;
- cpc r24, r1 ;
- cpc r25, r1 ;
- brne 1b ;/
-
- cpi r30, '-' ;Minus sign if needed
- brne 5f ;
- push r30 ;
- inc r31 ;/
-5: cp r31, r18 ;Filler
- brcc 6f ;
- push r19 ;
- inc r31 ;
- rjmp 5b ;/
-
-6: pop r24 ;Flush stacked digits and exit
- rcall xputc ;
- dec r31 ;
- brne 6b ;/
-
- ret
-.endfunc
-
-
-
-;---------------------------------------------------------------------------;
-; Formatted string output (16/32bit version)
-;
-;Prototype:
-; void __xprintf (const char *format_p, ...);
-; void __xsprintf(char*, const char *format_p, ...);
-; void __xfprintf(void(*func)(char), const char *format_p, ...);
-;
-
-#if USE_XPRINTF
-
-.func xvprintf
-xvprintf:
- ld ZL, Y+ ;Z = pointer to format string
- ld ZH, Y+ ;/
-
-0: _LPMI r24 ;Get a format char
- cpi r24, 0 ;End of format string?
- breq 90f ;/
- cpi r24, '%' ;Is format?
- breq 20f ;/
-1: rcall xputc ;Put a normal character
- rjmp 0b ;/
-90: ret
-
-20: ldi r18, 0 ;r18: digits
- clt ;T: filler
- _LPMI r21 ;Get flags
- cpi r21, '%' ;Is a %?
- breq 1b ;/
- cpi r21, '0' ;Zero filled?
- brne 23f ;
- set ;/
-22: _LPMI r21 ;Get width
-23: cpi r21, '9'+1 ;
- brcc 24f ;
- subi r21, '0' ;
- brcs 90b ;
- lsl r18 ;
- mov r0, r18 ;
- lsl r18 ;
- lsl r18 ;
- add r18, r0 ;
- add r18, r21 ;
- rjmp 22b ;/
-
-24: brtc 25f ;get value (low word)
- neg r18 ;
-25: ld r24, Y+ ;
- ld r25, Y+ ;/
- cpi r21, 'c' ;Is type character?
- breq 1b ;/
- cpi r21, 's' ;Is type RAM string?
- breq 50f ;/
- cpi r21, 'S' ;Is type ROM string?
- breq 60f ;/
- _MOVW r23,r22,r25,r24 ;r25:r22 = value
- clr r24 ;
- clr r25 ;
- clt ;/
- cpi r21, 'l' ;Is long int?
- brne 26f ;
- ld r24, Y+ ;get value (high word)
- ld r25, Y+ ;
- set ;
- _LPMI r21 ;/
-26: cpi r21, 'd' ;Is type signed decimal?
- brne 27f ;/
- ldi r20, -10 ;
- brts 40f ;
- sbrs r23, 7 ;
- rjmp 40f ;
- ldi r24, -1 ;
- ldi r25, -1 ;
- rjmp 40f ;/
-27: cpi r21, 'u' ;Is type unsigned decimal?
- ldi r20, 10 ;
- breq 40f ;/
- cpi r21, 'X' ;Is type hexdecimal?
- ldi r20, 16 ;
- breq 40f ;/
- cpi r21, 'b' ;Is type binary?
- ldi r20, 2 ;
- breq 40f ;/
- ret ;abort
-40: push ZH ;Output the value
- push ZL ;
- rcall xitoa ;
-42: pop ZL ;
- pop ZH ;
- rjmp 0b ;/
-
-50: push ZH ;Put a string on the RAM
- push ZL
- _MOVW ZH,ZL, r25,r24
-51: ld r24, Z+
- cpi r24, 0
- breq 42b
- rcall xputc
- rjmp 51b
-
-60: push ZH ;Put a string on the ROM
- push ZL
- rcall xputs
- rjmp 42b
-.endfunc
-
-
-.func __xprintf
-.global __xprintf
-__xprintf:
- push YH
- push YL
- in YL, _SFR_IO_ADDR(SPL)
-#ifdef SPH
- in YH, _SFR_IO_ADDR(SPH)
-#else
- clr YH
-#endif
- adiw YL, 5 ;Y = pointer to arguments
- rcall xvprintf
- pop YL
- pop YH
- ret
-.endfunc
-
-
-#if USE_XSPRINTF
-
-.func __xsprintf
-putram:
- _MOVW ZH,ZL, r15,r14
- st Z+, r24
- _MOVW r15,r14, ZH,ZL
- ret
-.global __xsprintf
-__xsprintf:
- push YH
- push YL
- in YL, _SFR_IO_ADDR(SPL)
-#ifdef SPH
- in YH, _SFR_IO_ADDR(SPH)
-#else
- clr YH
-#endif
- adiw YL, 5 ;Y = pointer to arguments
- lds ZL, xfunc_out+0 ;Save registered output function
- lds ZH, xfunc_out+1 ;
- push ZL ;
- push ZH ;/
- ldi ZL, lo8(pm(putram));Set local output function
- ldi ZH, hi8(pm(putram));
- sts xfunc_out+0, ZL ;
- sts xfunc_out+1, ZH ;/
- push r15 ;Initialize pointer to string buffer
- push r14 ;
- ld r14, Y+ ;
- ld r15, Y+ ;/
- rcall xvprintf
- _MOVW ZH,ZL, r15,r14 ;Terminate string
- st Z, r1 ;
- pop r14 ;
- pop r15 ;/
- pop ZH ;Restore registered output function
- pop ZL ;
- sts xfunc_out+0, ZL ;
- sts xfunc_out+1, ZH ;/
- pop YL
- pop YH
- ret
-.endfunc
-#endif
-
-
-#if USE_XFPRINTF
-.func __xfprintf
-.global __xfprintf
-__xfprintf:
- push YH
- push YL
- in YL, _SFR_IO_ADDR(SPL)
-#ifdef SPH
- in YH, _SFR_IO_ADDR(SPH)
-#else
- clr YH
-#endif
- adiw YL, 5 ;Y = pointer to arguments
- lds ZL, xfunc_out+0 ;Save registered output function
- lds ZH, xfunc_out+1 ;
- push ZL ;
- push ZH ;/
- ld ZL, Y+ ;Set output function
- ld ZH, Y+ ;
- sts xfunc_out+0, ZL ;
- sts xfunc_out+1, ZH ;/
- rcall xvprintf
- pop ZH ;Restore registered output function
- pop ZL ;
- sts xfunc_out+0, ZL ;
- sts xfunc_out+1, ZH ;/
- pop YL
- pop YH
- ret
-.endfunc
-#endif
-
-#endif
-
-
-
-;---------------------------------------------------------------------------
-; Extended numeral string input
-;
-;Prototype:
-; char xatoi ( /* 1: Successful, 0: Failed */
-; const char **str, /* pointer to pointer to source string */
-; long *res /* result */
-; );
-;
-
-
-#if USE_XATOI
-.func xatoi
-.global xatoi
-xatoi:
- _MOVW r1, r0, r23, r22
- _MOVW XH, XL, r25, r24
- ld ZL, X+
- ld ZH, X+
- clr r18 ;r21:r18 = 0;
- clr r19 ;
- clr r20 ;
- clr r21 ;/
- clt ;T = 0;
-
- ldi r25, 10 ;r25 = 10;
- rjmp 41f ;/
-40: adiw ZL, 1 ;Z++;
-41: ld r22, Z ;r22 = *Z;
- cpi r22, ' ' ;if(r22 == ' ') continue
- breq 40b ;/
- brcs 70f ;if(r22 < ' ') error;
- cpi r22, '-' ;if(r22 == '-') {
- brne 42f ; T = 1;
- set ; continue;
- rjmp 40b ;}
-42: cpi r22, '9'+1 ;if(r22 > '9') error;
- brcc 70f ;/
- cpi r22, '0' ;if(r22 < '0') error;
- brcs 70f ;/
- brne 51f ;if(r22 > '0') cv_start;
- ldi r25, 8 ;r25 = 8;
- adiw ZL, 1 ;r22 = *(++Z);
- ld r22, Z ;/
- cpi r22, ' '+1 ;if(r22 <= ' ') exit;
- brcs 80f ;/
- cpi r22, 'b' ;if(r22 == 'b') {
- brne 43f ; r25 = 2;
- ldi r25, 2 ; cv_start;
- rjmp 50f ;}
-43: cpi r22, 'x' ;if(r22 != 'x') error;
- brne 51f ;/
- ldi r25, 16 ;r25 = 16;
-
-50: adiw ZL, 1 ;Z++;
- ld r22, Z ;r22 = *Z;
-51: cpi r22, ' '+1 ;if(r22 <= ' ') break;
- brcs 80f ;/
- cpi r22, 'a' ;if(r22 >= 'a') r22 =- 0x20;
- brcs 52f ;
- subi r22, 0x20 ;/
-52: subi r22, '0' ;if((r22 -= '0') < 0) error;
- brcs 70f ;/
- cpi r22, 10 ;if(r22 >= 10) {
- brcs 53f ; r22 -= 7;
- subi r22, 7 ; if(r22 < 10)
- cpi r22, 10 ;
- brcs 70f ;}
-53: cp r22, r25 ;if(r22 >= r25) error;
- brcc 70f ;/
-60: ldi r24, 33 ;r21:r18 *= r25;
- sub r23, r23 ;
-61: brcc 62f ;
- add r23, r25 ;
-62: lsr r23 ;
- ror r21 ;
- ror r20 ;
- ror r19 ;
- ror r18 ;
- dec r24 ;
- brne 61b ;/
- add r18, r22 ;r21:r18 += r22;
- adc r19, r24 ;
- adc r20, r24 ;
- adc r21, r24 ;/
- rjmp 50b ;repeat
-
-70: ldi r24, 0
- rjmp 81f
-80: ldi r24, 1
-81: brtc 82f
- clr r22
- com r18
- com r19
- com r20
- com r21
- adc r18, r22
- adc r19, r22
- adc r20, r22
- adc r21, r22
-82: st -X, ZH
- st -X, ZL
- _MOVW XH, XL, r1, r0
- st X+, r18
- st X+, r19
- st X+, r20
- st X+, r21
- clr r1
- ret
-.endfunc
-#endif
-
-
+;---------------------------------------------------------------------------;
+; Extended itoa, puts, printf and atoi (C)ChaN, 2011
+;---------------------------------------------------------------------------;
+
+ // Base size is 152 bytes
+#define CR_CRLF 0 // Convert \n to \r\n (+10 bytes)
+#define USE_XPRINTF 1 // Enable xprintf function (+194 bytes)
+#define USE_XSPRINTF 0 // Add xsprintf function (+78 bytes)
+#define USE_XFPRINTF 0 // Add xfprintf function (+54 bytes)
+#define USE_XATOI 0 // Enable xatoi function (+182 bytes)
+
+
+#if FLASHEND > 0x1FFFF
+#error xitoa module does not support 256K devices
+#endif
+
+.nolist
+#include <avr/io.h> // Include device specific definitions.
+.list
+
+#ifdef SPM_PAGESIZE // Recent devices have "lpm Rd,Z+" and "movw".
+.macro _LPMI reg
+ lpm \reg, Z+
+.endm
+.macro _MOVW dh,dl, sh,sl
+ movw \dl, \sl
+.endm
+#else // Earlier devices do not have "lpm Rd,Z+" nor "movw".
+.macro _LPMI reg
+ lpm
+ mov \reg, r0
+ adiw ZL, 1
+.endm
+.macro _MOVW dh,dl, sh,sl
+ mov \dl, \sl
+ mov \dh, \sh
+.endm
+#endif
+
+
+
+;---------------------------------------------------------------------------
+; Stub function to forward to user output function
+;
+;Prototype: void xputc (char chr // a character to be output
+; );
+;Size: 12/12 words
+
+.section .bss
+.global xfunc_out ; xfunc_out must be initialized before using this module.
+xfunc_out: .ds.w 1
+.section .text
+
+
+.func xputc
+.global xputc
+xputc:
+#if CR_CRLF
+ cpi r24, 10 ;LF --> CRLF
+ brne 1f ;
+ ldi r24, 13 ;
+ rcall 1f ;
+ ldi r24, 10 ;/
+1:
+#endif
+ push ZH
+ push ZL
+ lds ZL, xfunc_out+0 ;Pointer to the registered output function.
+ lds ZH, xfunc_out+1 ;/
+ sbiw ZL, 0 ;Skip if null
+ breq 2f ;/
+ icall
+2: pop ZL
+ pop ZH
+ ret
+.endfunc
+
+
+
+;---------------------------------------------------------------------------
+; Direct ROM string output
+;
+;Prototype: void xputs (const char *str_p // rom string to be output
+; );
+
+.func xputs
+.global xputs
+xputs:
+ _MOVW ZH,ZL, r25,r24 ; Z = pointer to rom string
+1: _LPMI r24
+ cpi r24, 0
+ breq 2f
+ rcall xputc
+ rjmp 1b
+2: ret
+.endfunc
+
+
+;---------------------------------------------------------------------------
+; Extended direct numeral string output (32bit version)
+;
+;Prototype: void xitoa (long value, // value to be output
+; char radix, // radix
+; char width); // minimum width
+;
+
+.func xitoa
+.global xitoa
+xitoa:
+ ;r25:r22 = value, r20 = base, r18 = digits
+ clr r31 ;r31 = stack level
+ ldi r30, ' ' ;r30 = sign
+ ldi r19, ' ' ;r19 = filler
+ sbrs r20, 7 ;When base indicates signd format and the value
+ rjmp 0f ;is minus, add a '-'.
+ neg r20 ;
+ sbrs r25, 7 ;
+ rjmp 0f ;
+ ldi r30, '-' ;
+ com r22 ;
+ com r23 ;
+ com r24 ;
+ com r25 ;
+ adc r22, r1 ;
+ adc r23, r1 ;
+ adc r24, r1 ;
+ adc r25, r1 ;/
+0: sbrs r18, 7 ;When digits indicates zero filled,
+ rjmp 1f ;filler is '0'.
+ neg r18 ;
+ ldi r19, '0' ;/
+ ;----- string conversion loop
+1: ldi r21, 32 ;r26 = r25:r22 % r20
+ clr r26 ;r25:r22 /= r20
+2: lsl r22 ;
+ rol r23 ;
+ rol r24 ;
+ rol r25 ;
+ rol r26 ;
+ cp r26, r20 ;
+ brcs 3f ;
+ sub r26, r20 ;
+ inc r22 ;
+3: dec r21 ;
+ brne 2b ;/
+ cpi r26, 10 ;r26 is a numeral digit '0'-'F'
+ brcs 4f ;
+ subi r26, -7 ;
+4: subi r26, -'0' ;/
+ push r26 ;Stack it
+ inc r31 ;/
+ cp r22, r1 ;Repeat until r25:r22 gets zero
+ cpc r23, r1 ;
+ cpc r24, r1 ;
+ cpc r25, r1 ;
+ brne 1b ;/
+
+ cpi r30, '-' ;Minus sign if needed
+ brne 5f ;
+ push r30 ;
+ inc r31 ;/
+5: cp r31, r18 ;Filler
+ brcc 6f ;
+ push r19 ;
+ inc r31 ;
+ rjmp 5b ;/
+
+6: pop r24 ;Flush stacked digits and exit
+ rcall xputc ;
+ dec r31 ;
+ brne 6b ;/
+
+ ret
+.endfunc
+
+
+
+;---------------------------------------------------------------------------;
+; Formatted string output (16/32bit version)
+;
+;Prototype:
+; void __xprintf (const char *format_p, ...);
+; void __xsprintf(char*, const char *format_p, ...);
+; void __xfprintf(void(*func)(char), const char *format_p, ...);
+;
+
+#if USE_XPRINTF
+
+.func xvprintf
+xvprintf:
+ ld ZL, Y+ ;Z = pointer to format string
+ ld ZH, Y+ ;/
+
+0: _LPMI r24 ;Get a format char
+ cpi r24, 0 ;End of format string?
+ breq 90f ;/
+ cpi r24, '%' ;Is format?
+ breq 20f ;/
+1: rcall xputc ;Put a normal character
+ rjmp 0b ;/
+90: ret
+
+20: ldi r18, 0 ;r18: digits
+ clt ;T: filler
+ _LPMI r21 ;Get flags
+ cpi r21, '%' ;Is a %?
+ breq 1b ;/
+ cpi r21, '0' ;Zero filled?
+ brne 23f ;
+ set ;/
+22: _LPMI r21 ;Get width
+23: cpi r21, '9'+1 ;
+ brcc 24f ;
+ subi r21, '0' ;
+ brcs 90b ;
+ lsl r18 ;
+ mov r0, r18 ;
+ lsl r18 ;
+ lsl r18 ;
+ add r18, r0 ;
+ add r18, r21 ;
+ rjmp 22b ;/
+
+24: brtc 25f ;get value (low word)
+ neg r18 ;
+25: ld r24, Y+ ;
+ ld r25, Y+ ;/
+ cpi r21, 'c' ;Is type character?
+ breq 1b ;/
+ cpi r21, 's' ;Is type RAM string?
+ breq 50f ;/
+ cpi r21, 'S' ;Is type ROM string?
+ breq 60f ;/
+ _MOVW r23,r22,r25,r24 ;r25:r22 = value
+ clr r24 ;
+ clr r25 ;
+ clt ;/
+ cpi r21, 'l' ;Is long int?
+ brne 26f ;
+ ld r24, Y+ ;get value (high word)
+ ld r25, Y+ ;
+ set ;
+ _LPMI r21 ;/
+26: cpi r21, 'd' ;Is type signed decimal?
+ brne 27f ;/
+ ldi r20, -10 ;
+ brts 40f ;
+ sbrs r23, 7 ;
+ rjmp 40f ;
+ ldi r24, -1 ;
+ ldi r25, -1 ;
+ rjmp 40f ;/
+27: cpi r21, 'u' ;Is type unsigned decimal?
+ ldi r20, 10 ;
+ breq 40f ;/
+ cpi r21, 'X' ;Is type hexdecimal?
+ ldi r20, 16 ;
+ breq 40f ;/
+ cpi r21, 'b' ;Is type binary?
+ ldi r20, 2 ;
+ breq 40f ;/
+ ret ;abort
+40: push ZH ;Output the value
+ push ZL ;
+ rcall xitoa ;
+42: pop ZL ;
+ pop ZH ;
+ rjmp 0b ;/
+
+50: push ZH ;Put a string on the RAM
+ push ZL
+ _MOVW ZH,ZL, r25,r24
+51: ld r24, Z+
+ cpi r24, 0
+ breq 42b
+ rcall xputc
+ rjmp 51b
+
+60: push ZH ;Put a string on the ROM
+ push ZL
+ rcall xputs
+ rjmp 42b
+.endfunc
+
+
+.func __xprintf
+.global __xprintf
+__xprintf:
+ push YH
+ push YL
+ in YL, _SFR_IO_ADDR(SPL)
+#ifdef SPH
+ in YH, _SFR_IO_ADDR(SPH)
+#else
+ clr YH
+#endif
+ adiw YL, 5 ;Y = pointer to arguments
+ rcall xvprintf
+ pop YL
+ pop YH
+ ret
+.endfunc
+
+
+#if USE_XSPRINTF
+
+.func __xsprintf
+putram:
+ _MOVW ZH,ZL, r15,r14
+ st Z+, r24
+ _MOVW r15,r14, ZH,ZL
+ ret
+.global __xsprintf
+__xsprintf:
+ push YH
+ push YL
+ in YL, _SFR_IO_ADDR(SPL)
+#ifdef SPH
+ in YH, _SFR_IO_ADDR(SPH)
+#else
+ clr YH
+#endif
+ adiw YL, 5 ;Y = pointer to arguments
+ lds ZL, xfunc_out+0 ;Save registered output function
+ lds ZH, xfunc_out+1 ;
+ push ZL ;
+ push ZH ;/
+ ldi ZL, lo8(pm(putram));Set local output function
+ ldi ZH, hi8(pm(putram));
+ sts xfunc_out+0, ZL ;
+ sts xfunc_out+1, ZH ;/
+ push r15 ;Initialize pointer to string buffer
+ push r14 ;
+ ld r14, Y+ ;
+ ld r15, Y+ ;/
+ rcall xvprintf
+ _MOVW ZH,ZL, r15,r14 ;Terminate string
+ st Z, r1 ;
+ pop r14 ;
+ pop r15 ;/
+ pop ZH ;Restore registered output function
+ pop ZL ;
+ sts xfunc_out+0, ZL ;
+ sts xfunc_out+1, ZH ;/
+ pop YL
+ pop YH
+ ret
+.endfunc
+#endif
+
+
+#if USE_XFPRINTF
+.func __xfprintf
+.global __xfprintf
+__xfprintf:
+ push YH
+ push YL
+ in YL, _SFR_IO_ADDR(SPL)
+#ifdef SPH
+ in YH, _SFR_IO_ADDR(SPH)
+#else
+ clr YH
+#endif
+ adiw YL, 5 ;Y = pointer to arguments
+ lds ZL, xfunc_out+0 ;Save registered output function
+ lds ZH, xfunc_out+1 ;
+ push ZL ;
+ push ZH ;/
+ ld ZL, Y+ ;Set output function
+ ld ZH, Y+ ;
+ sts xfunc_out+0, ZL ;
+ sts xfunc_out+1, ZH ;/
+ rcall xvprintf
+ pop ZH ;Restore registered output function
+ pop ZL ;
+ sts xfunc_out+0, ZL ;
+ sts xfunc_out+1, ZH ;/
+ pop YL
+ pop YH
+ ret
+.endfunc
+#endif
+
+#endif
+
+
+
+;---------------------------------------------------------------------------
+; Extended numeral string input
+;
+;Prototype:
+; char xatoi ( /* 1: Successful, 0: Failed */
+; const char **str, /* pointer to pointer to source string */
+; long *res /* result */
+; );
+;
+
+
+#if USE_XATOI
+.func xatoi
+.global xatoi
+xatoi:
+ _MOVW r1, r0, r23, r22
+ _MOVW XH, XL, r25, r24
+ ld ZL, X+
+ ld ZH, X+
+ clr r18 ;r21:r18 = 0;
+ clr r19 ;
+ clr r20 ;
+ clr r21 ;/
+ clt ;T = 0;
+
+ ldi r25, 10 ;r25 = 10;
+ rjmp 41f ;/
+40: adiw ZL, 1 ;Z++;
+41: ld r22, Z ;r22 = *Z;
+ cpi r22, ' ' ;if(r22 == ' ') continue
+ breq 40b ;/
+ brcs 70f ;if(r22 < ' ') error;
+ cpi r22, '-' ;if(r22 == '-') {
+ brne 42f ; T = 1;
+ set ; continue;
+ rjmp 40b ;}
+42: cpi r22, '9'+1 ;if(r22 > '9') error;
+ brcc 70f ;/
+ cpi r22, '0' ;if(r22 < '0') error;
+ brcs 70f ;/
+ brne 51f ;if(r22 > '0') cv_start;
+ ldi r25, 8 ;r25 = 8;
+ adiw ZL, 1 ;r22 = *(++Z);
+ ld r22, Z ;/
+ cpi r22, ' '+1 ;if(r22 <= ' ') exit;
+ brcs 80f ;/
+ cpi r22, 'b' ;if(r22 == 'b') {
+ brne 43f ; r25 = 2;
+ ldi r25, 2 ; cv_start;
+ rjmp 50f ;}
+43: cpi r22, 'x' ;if(r22 != 'x') error;
+ brne 51f ;/
+ ldi r25, 16 ;r25 = 16;
+
+50: adiw ZL, 1 ;Z++;
+ ld r22, Z ;r22 = *Z;
+51: cpi r22, ' '+1 ;if(r22 <= ' ') break;
+ brcs 80f ;/
+ cpi r22, 'a' ;if(r22 >= 'a') r22 =- 0x20;
+ brcs 52f ;
+ subi r22, 0x20 ;/
+52: subi r22, '0' ;if((r22 -= '0') < 0) error;
+ brcs 70f ;/
+ cpi r22, 10 ;if(r22 >= 10) {
+ brcs 53f ; r22 -= 7;
+ subi r22, 7 ; if(r22 < 10)
+ cpi r22, 10 ;
+ brcs 70f ;}
+53: cp r22, r25 ;if(r22 >= r25) error;
+ brcc 70f ;/
+60: ldi r24, 33 ;r21:r18 *= r25;
+ sub r23, r23 ;
+61: brcc 62f ;
+ add r23, r25 ;
+62: lsr r23 ;
+ ror r21 ;
+ ror r20 ;
+ ror r19 ;
+ ror r18 ;
+ dec r24 ;
+ brne 61b ;/
+ add r18, r22 ;r21:r18 += r22;
+ adc r19, r24 ;
+ adc r20, r24 ;
+ adc r21, r24 ;/
+ rjmp 50b ;repeat
+
+70: ldi r24, 0
+ rjmp 81f
+80: ldi r24, 1
+81: brtc 82f
+ clr r22
+ com r18
+ com r19
+ com r20
+ com r21
+ adc r18, r22
+ adc r19, r22
+ adc r20, r22
+ adc r21, r22
+82: st -X, ZH
+ st -X, ZL
+ _MOVW XH, XL, r1, r0
+ st X+, r18
+ st X+, r19
+ st X+, r20
+ st X+, r21
+ clr r1
+ ret
+.endfunc
+#endif
+
+
diff --git a/tmk_core/common/avr/xprintf.h b/tmk_core/common/avr/xprintf.h
index 59c6f2531..08d9f93a0 100644
--- a/tmk_core/common/avr/xprintf.h
+++ b/tmk_core/common/avr/xprintf.h
@@ -1,111 +1,111 @@
-/*---------------------------------------------------------------------------
- Extended itoa, puts and printf (C)ChaN, 2011
------------------------------------------------------------------------------*/
-
-#ifndef XPRINTF_H
-#define XPRINTF_H
-
-#include <inttypes.h>
-#include <avr/pgmspace.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern void (*xfunc_out)(uint8_t);
-#define xdev_out(func) xfunc_out = (void(*)(uint8_t))(func)
-
-/* This is a pointer to user defined output function. It must be initialized
- before using this modle.
-*/
-
-void xputc(char chr);
-
-/* This is a stub function to forward outputs to user defined output function.
- All outputs from this module are output via this function.
-*/
-
-
-/*-----------------------------------------------------------------------------*/
-void xputs(const char *string_p);
-
-/* The string placed in the ROM is forwarded to xputc() directly.
-*/
-
-
-/*-----------------------------------------------------------------------------*/
-void xitoa(long value, char radix, char width);
-
-/* Extended itoa().
-
- value radix width output
- 100 10 6 " 100"
- 100 10 -6 "000100"
- 100 10 0 "100"
- 4294967295 10 0 "4294967295"
- 4294967295 -10 0 "-1"
- 655360 16 -8 "000A0000"
- 1024 16 0 "400"
- 0x55 2 -8 "01010101"
-*/
-
-
-/*-----------------------------------------------------------------------------*/
-#define xprintf(format, ...) __xprintf(PSTR(format), ##__VA_ARGS__)
-#define xsprintf(str, format, ...) __xsprintf(str, PSTR(format), ##__VA_ARGS__)
-#define xfprintf(func, format, ...) __xfprintf(func, PSTR(format), ##__VA_ARGS__)
-
-void __xprintf(const char *format_p, ...); /* Send formatted string to the registered device */
-void __xsprintf(char*, const char *format_p, ...); /* Put formatted string to the memory */
-void __xfprintf(void(*func)(uint8_t), const char *format_p, ...); /* Send formatted string to the specified device */
-
-/* Format string is placed in the ROM. The format flags is similar to printf().
-
- %[flag][width][size]type
-
- flag
- A '0' means filled with '0' when output is shorter than width.
- ' ' is used in default. This is effective only numeral type.
- width
- Minimum width in decimal number. This is effective only numeral type.
- Default width is zero.
- size
- A 'l' means the argument is long(32bit). Default is short(16bit).
- This is effective only numeral type.
- type
- 'c' : Character, argument is the value
- 's' : String placed on the RAM, argument is the pointer
- 'S' : String placed on the ROM, argument is the pointer
- 'd' : Signed decimal, argument is the value
- 'u' : Unsigned decimal, argument is the value
- 'X' : Hexdecimal, argument is the value
- 'b' : Binary, argument is the value
- '%' : '%'
-
-*/
-
-
-/*-----------------------------------------------------------------------------*/
-char xatoi(char **str, long *ret);
-
-/* Get value of the numeral string.
-
- str
- Pointer to pointer to source string
-
- "0b11001010" binary
- "0377" octal
- "0xff800" hexdecimal
- "1250000" decimal
- "-25000" decimal
-
- ret
- Pointer to return value
-*/
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
+/*---------------------------------------------------------------------------
+ Extended itoa, puts and printf (C)ChaN, 2011
+-----------------------------------------------------------------------------*/
+
+#ifndef XPRINTF_H
+#define XPRINTF_H
+
+#include <inttypes.h>
+#include <avr/pgmspace.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern void (*xfunc_out)(uint8_t);
+#define xdev_out(func) xfunc_out = (void(*)(uint8_t))(func)
+
+/* This is a pointer to user defined output function. It must be initialized
+ before using this modle.
+*/
+
+void xputc(char chr);
+
+/* This is a stub function to forward outputs to user defined output function.
+ All outputs from this module are output via this function.
+*/
+
+
+/*-----------------------------------------------------------------------------*/
+void xputs(const char *string_p);
+
+/* The string placed in the ROM is forwarded to xputc() directly.
+*/
+
+
+/*-----------------------------------------------------------------------------*/
+void xitoa(long value, char radix, char width);
+
+/* Extended itoa().
+
+ value radix width output
+ 100 10 6 " 100"
+ 100 10 -6 "000100"
+ 100 10 0 "100"
+ 4294967295 10 0 "4294967295"
+ 4294967295 -10 0 "-1"
+ 655360 16 -8 "000A0000"
+ 1024 16 0 "400"
+ 0x55 2 -8 "01010101"
+*/
+
+
+/*-----------------------------------------------------------------------------*/
+#define xprintf(format, ...) __xprintf(PSTR(format), ##__VA_ARGS__)
+#define xsprintf(str, format, ...) __xsprintf(str, PSTR(format), ##__VA_ARGS__)
+#define xfprintf(func, format, ...) __xfprintf(func, PSTR(format), ##__VA_ARGS__)
+
+void __xprintf(const char *format_p, ...); /* Send formatted string to the registered device */
+// void __xsprintf(char*, const char *format_p, ...); /* Put formatted string to the memory */
+// void __xfprintf(void(*func)(uint8_t), const char *format_p, ...); /* Send formatted string to the specified device */
+
+/* Format string is placed in the ROM. The format flags is similar to printf().
+
+ %[flag][width][size]type
+
+ flag
+ A '0' means filled with '0' when output is shorter than width.
+ ' ' is used in default. This is effective only numeral type.
+ width
+ Minimum width in decimal number. This is effective only numeral type.
+ Default width is zero.
+ size
+ A 'l' means the argument is long(32bit). Default is short(16bit).
+ This is effective only numeral type.
+ type
+ 'c' : Character, argument is the value
+ 's' : String placed on the RAM, argument is the pointer
+ 'S' : String placed on the ROM, argument is the pointer
+ 'd' : Signed decimal, argument is the value
+ 'u' : Unsigned decimal, argument is the value
+ 'X' : Hexdecimal, argument is the value
+ 'b' : Binary, argument is the value
+ '%' : '%'
+
+*/
+
+
+/*-----------------------------------------------------------------------------*/
+char xatoi(char **str, long *ret);
+
+/* Get value of the numeral string.
+
+ str
+ Pointer to pointer to source string
+
+ "0b11001010" binary
+ "0377" octal
+ "0xff800" hexdecimal
+ "1250000" decimal
+ "-25000" decimal
+
+ ret
+ Pointer to return value
+*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
diff --git a/tmk_core/common/backlight.c b/tmk_core/common/backlight.c
index c9e8fd3fd..0e0ad2d15 100644
--- a/tmk_core/common/backlight.c
+++ b/tmk_core/common/backlight.c
@@ -36,9 +36,9 @@ void backlight_increase(void)
if(backlight_config.level < BACKLIGHT_LEVELS)
{
backlight_config.level++;
- backlight_config.enable = 1;
- eeconfig_update_backlight(backlight_config.raw);
}
+ backlight_config.enable = 1;
+ eeconfig_update_backlight(backlight_config.raw);
dprintf("backlight increase: %u\n", backlight_config.level);
backlight_set(backlight_config.level);
}
diff --git a/tmk_core/common/bootmagic.c b/tmk_core/common/bootmagic.c
index 6730a2a4a..2c6bcbae5 100644
--- a/tmk_core/common/bootmagic.c
+++ b/tmk_core/common/bootmagic.c
@@ -83,10 +83,6 @@ void bootmagic(void)
}
eeconfig_update_keymap(keymap_config.raw);
-#ifdef NKRO_ENABLE
- keyboard_nkro = keymap_config.nkro;
-#endif
-
/* default layer */
uint8_t default_layer = 0;
if (bootmagic_scan_keycode(BOOTMAGIC_KEY_DEFAULT_LAYER_0)) { default_layer |= (1<<0); }
diff --git a/tmk_core/common/command.c b/tmk_core/common/command.c
index 084c9fe15..5f29bc0b4 100644
--- a/tmk_core/common/command.c
+++ b/tmk_core/common/command.c
@@ -34,6 +34,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "command.h"
#include "backlight.h"
#include "quantum.h"
+#include "version.h"
#ifdef MOUSEKEY_ENABLE
#include "mousekey.h"
@@ -180,7 +181,7 @@ static void print_version(void)
print("VID: " STR(VENDOR_ID) "(" STR(MANUFACTURER) ") "
"PID: " STR(PRODUCT_ID) "(" STR(PRODUCT) ") "
"VER: " STR(DEVICE_VER) "\n");
- print("BUILD: " STR(VERSION) " (" __TIME__ " " __DATE__ ")\n");
+ print("BUILD: " STR(QMK_VERSION) " (" __TIME__ " " __DATE__ ")\n");
/* build options */
print("OPTIONS:"
@@ -237,7 +238,7 @@ static void print_status(void)
print_val_hex8(keyboard_protocol);
print_val_hex8(keyboard_idle);
#ifdef NKRO_ENABLE
- print_val_hex8(keyboard_nkro);
+ print_val_hex8(keymap_config.nkro);
#endif
print_val_hex32(timer_read32());
@@ -260,7 +261,10 @@ static void print_status(void)
#ifdef BOOTMAGIC_ENABLE
static void print_eeconfig(void)
{
-#ifndef NO_PRINT
+
+// Print these variables if NO_PRINT or USER_PRINT are not defined.
+#if !defined(NO_PRINT) && !defined(USER_PRINT)
+
print("default_layer: "); print_dec(eeconfig_read_default_layer()); print("\n");
debug_config_t dc;
@@ -375,9 +379,6 @@ static bool command_common(uint8_t code)
debug_enable = !debug_enable;
if (debug_enable) {
print("\ndebug: on\n");
- debug_matrix = true;
- debug_keyboard = true;
- debug_mouse = true;
} else {
print("\ndebug: off\n");
debug_matrix = false;
@@ -434,8 +435,8 @@ static bool command_common(uint8_t code)
// NKRO toggle
case MAGIC_KC(MAGIC_KEY_NKRO):
clear_keyboard(); // clear to prevent stuck keys
- keyboard_nkro = !keyboard_nkro;
- if (keyboard_nkro) {
+ keymap_config.nkro = !keymap_config.nkro;
+ if (keymap_config.nkro) {
print("NKRO: on\n");
} else {
print("NKRO: off\n");
@@ -570,7 +571,8 @@ static uint8_t mousekey_param = 0;
static void mousekey_param_print(void)
{
-#ifndef NO_PRINT
+// Print these variables if NO_PRINT or USER_PRINT are not defined.
+#if !defined(NO_PRINT) && !defined(USER_PRINT)
print("\n\t- Values -\n");
print("1: delay(*10ms): "); pdec(mk_delay); print("\n");
print("2: interval(ms): "); pdec(mk_interval); print("\n");
diff --git a/tmk_core/common/host.c b/tmk_core/common/host.c
index 11a05c2dd..e12b62216 100644
--- a/tmk_core/common/host.c
+++ b/tmk_core/common/host.c
@@ -22,11 +22,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "util.h"
#include "debug.h"
-
-#ifdef NKRO_ENABLE
-bool keyboard_nkro = true;
-#endif
-
static host_driver_t *driver;
static uint16_t last_system_report = 0;
static uint16_t last_consumer_report = 0;
diff --git a/tmk_core/common/host.h b/tmk_core/common/host.h
index 9814b10d2..aeabba710 100644
--- a/tmk_core/common/host.h
+++ b/tmk_core/common/host.h
@@ -28,10 +28,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
extern "C" {
#endif
-#ifdef NKRO_ENABLE
-extern bool keyboard_nkro;
-#endif
-
extern uint8_t keyboard_idle;
extern uint8_t keyboard_protocol;
diff --git a/tmk_core/common/host_driver.h b/tmk_core/common/host_driver.h
index edb9e5dd9..588d1c0be 100644
--- a/tmk_core/common/host_driver.h
+++ b/tmk_core/common/host_driver.h
@@ -20,7 +20,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <stdint.h>
#include "report.h"
-
+#ifdef MIDI_ENABLE
+ #include "midi.h"
+#endif
typedef struct {
uint8_t (*keyboard_leds)(void);
@@ -28,6 +30,11 @@ typedef struct {
void (*send_mouse)(report_mouse_t *);
void (*send_system)(uint16_t);
void (*send_consumer)(uint16_t);
+#ifdef MIDI_ENABLE
+ void (*usb_send_func)(MidiDevice *, uint16_t, uint8_t, uint8_t, uint8_t);
+ void (*usb_get_midi)(MidiDevice *);
+ void (*midi_usb_init)(MidiDevice *);
+#endif
} host_driver_t;
#endif
diff --git a/tmk_core/common/keyboard.c b/tmk_core/common/keyboard.c
index c46a701b3..371d93f3e 100644
--- a/tmk_core/common/keyboard.c
+++ b/tmk_core/common/keyboard.c
@@ -57,6 +57,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
# include "visualizer/visualizer.h"
#endif
+
+
#ifdef MATRIX_HAS_GHOST
static bool has_ghost_in_row(uint8_t row)
{
@@ -106,7 +108,7 @@ void keyboard_init(void) {
rgblight_init();
#endif
#if defined(NKRO_ENABLE) && defined(FORCE_NKRO)
- keyboard_nkro = true;
+ keymap_config.nkro = 1;
#endif
}
diff --git a/tmk_core/common/magic.c b/tmk_core/common/magic.c
index 194e4cc02..49617a3d1 100644
--- a/tmk_core/common/magic.c
+++ b/tmk_core/common/magic.c
@@ -27,10 +27,6 @@ void magic(void)
/* keymap config */
keymap_config.raw = eeconfig_read_keymap();
-#ifdef NKRO_ENABLE
- keyboard_nkro = keymap_config.nkro;
-#endif
-
uint8_t default_layer = 0;
default_layer = eeconfig_read_default_layer();
default_layer_set((uint32_t)default_layer);
diff --git a/tmk_core/common/mbed/xprintf.cpp b/tmk_core/common/mbed/xprintf.cpp
index 3647ece75..b1aac2c99 100644
--- a/tmk_core/common/mbed/xprintf.cpp
+++ b/tmk_core/common/mbed/xprintf.cpp
@@ -7,7 +7,7 @@
#define STRING_STACK_LIMIT 120
//TODO
-int xprintf(const char* format, ...) { return 0; }
+int __xprintf(const char* format, ...) { return 0; }
#if 0
/* mbed Serial */
diff --git a/tmk_core/common/mbed/xprintf.h b/tmk_core/common/mbed/xprintf.h
index 26bc529e5..1e7a48c06 100644
--- a/tmk_core/common/mbed/xprintf.h
+++ b/tmk_core/common/mbed/xprintf.h
@@ -7,7 +7,7 @@
extern "C" {
#endif
-int xprintf(const char *format, ...);
+int __xprintf(const char *format, ...);
#ifdef __cplusplus
}
diff --git a/tmk_core/common/print.h b/tmk_core/common/print.h
index 0368bcd4a..8836c0fc7 100644
--- a/tmk_core/common/print.h
+++ b/tmk_core/common/print.h
@@ -29,45 +29,147 @@
#include <stdbool.h>
#include "util.h"
-
+#if defined(PROTOCOL_CHIBIOS)
+#define PSTR(x) x
+#endif
#ifndef NO_PRINT
+#if defined(__AVR__) /* __AVR__ */
+
+# include "avr/xprintf.h"
+
+# ifdef USER_PRINT /* USER_PRINT */
+
+// Remove normal print defines
+# define print(s)
+# define println(s)
+# undef xprintf
+# define xprintf(fmt, ...)
+
+// Create user print defines
+# define uprint(s) xputs(PSTR(s))
+# define uprintln(s) xputs(PSTR(s "\r\n"))
+# define uprintf(fmt, ...) __xprintf(PSTR(fmt), ##__VA_ARGS__)
+
+# else /* NORMAL PRINT */
-#if defined(__AVR__)
+// Create user & normal print defines
+# define print(s) xputs(PSTR(s))
+# define println(s) xputs(PSTR(s "\r\n"))
+# define uprint(s) print(s)
+# define uprintln(s) println(s)
+# define uprintf(fmt, ...) xprintf(fmt, ...)
-#include "avr/xprintf.h"
-#define print(s) xputs(PSTR(s))
-#define println(s) xputs(PSTR(s "\r\n"))
+# endif /* USER_PRINT / NORMAL PRINT */
-#ifdef __cplusplus
+# ifdef __cplusplus
extern "C"
-#endif
+# endif
+
/* function pointer of sendchar to be used by print utility */
void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t));
-#elif defined(PROTOCOL_CHIBIOS) /* __AVR__ */
+#elif defined(PROTOCOL_CHIBIOS) /* PROTOCOL_CHIBIOS */
+
+# include "chibios/printf.h"
+
+# ifdef USER_PRINT /* USER_PRINT */
+
+// Remove normal print defines
+# define print(s)
+# define println(s)
+# define xprintf(fmt, ...)
+
+// Create user print defines
+# define uprint(s) printf(s)
+# define uprintln(s) printf(s "\r\n")
+# define uprintf printf
+
+# else /* NORMAL PRINT */
-#include "chibios/printf.h"
+// Create user & normal print defines
+# define print(s) printf(s)
+# define println(s) printf(s "\r\n")
+# define xprintf printf
+# define uprint(s) printf(s)
+# define uprintln(s) printf(s "\r\n")
+# define uprintf printf
-#define print(s) printf(s)
-#define println(s) printf(s "\r\n")
-#define xprintf printf
+# endif /* USER_PRINT / NORMAL PRINT */
-#elif defined(__arm__) /* __AVR__ */
+#elif defined(__arm__) /* __arm__ */
-#include "mbed/xprintf.h"
+# include "mbed/xprintf.h"
-#define print(s) xprintf(s)
-#define println(s) xprintf(s "\r\n")
+# ifdef USER_PRINT /* USER_PRINT */
+
+// Remove normal print defines
+# define print(s)
+# define println(s)
+# define xprintf(fmt, ...)
+
+// Create user print defines
+# define uprintf(fmt, ...) __xprintf(fmt, ...)
+# define uprint(s) xprintf(s)
+# define uprintln(s) xprintf(s "\r\n")
+
+# else /* NORMAL PRINT */
+
+// Create user & normal print defines
+# define xprintf(fmt, ...) __xprintf(fmt, ...)
+# define print(s) xprintf(s)
+# define println(s) xprintf(s "\r\n")
+# define uprint(s) print(s)
+# define uprintln(s) println(s)
+# define uprintf(fmt, ...) xprintf(fmt, ...)
+
+# endif /* USER_PRINT / NORMAL PRINT */
/* TODO: to select output destinations: UART/USBSerial */
-#define print_set_sendchar(func)
+# define print_set_sendchar(func)
+
+#endif /* __AVR__ / PROTOCOL_CHIBIOS / __arm__ */
-#endif /* __AVR__ */
+// User print disables the normal print messages in the body of QMK/TMK code and
+// is meant as a lightweight alternative to NOPRINT. Use it when you only want to do
+// a spot of debugging but lack flash resources for allowing all of the codebase to
+// print (and store their wasteful strings).
+//
+// !!! DO NOT USE USER PRINT CALLS IN THE BODY OF QMK/TMK !!!
+//
+#ifdef USER_PRINT
+
+// Disable normal print
+#define print_dec(data)
+#define print_decs(data)
+#define print_hex4(data)
+#define print_hex8(data)
+#define print_hex16(data)
+#define print_hex32(data)
+#define print_bin4(data)
+#define print_bin8(data)
+#define print_bin16(data)
+#define print_bin32(data)
+#define print_bin_reverse8(data)
+#define print_bin_reverse16(data)
+#define print_bin_reverse32(data)
+#define print_val_dec(v)
+#define print_val_decs(v)
+#define print_val_hex8(v)
+#define print_val_hex16(v)
+#define print_val_hex32(v)
+#define print_val_bin8(v)
+#define print_val_bin16(v)
+#define print_val_bin32(v)
+#define print_val_bin_reverse8(v)
+#define print_val_bin_reverse16(v)
+#define print_val_bin_reverse32(v)
+#else /* NORMAL_PRINT */
+//Enable normal print
/* decimal */
#define print_dec(i) xprintf("%u", i)
#define print_decs(i) xprintf("%d", i)
@@ -97,6 +199,39 @@ void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t));
#define print_val_bin_reverse16(v) xprintf(#v ": %016b\n", bitrev16(v))
#define print_val_bin_reverse32(v) xprintf(#v ": %032lb\n", bitrev32(v))
+#endif /* USER_PRINT / NORMAL_PRINT */
+
+// User Print
+
+/* decimal */
+#define uprint_dec(i) uprintf("%u", i)
+#define uprint_decs(i) uprintf("%d", i)
+/* hex */
+#define uprint_hex4(i) uprintf("%X", i)
+#define uprint_hex8(i) uprintf("%02X", i)
+#define uprint_hex16(i) uprintf("%04X", i)
+#define uprint_hex32(i) uprintf("%08lX", i)
+/* binary */
+#define uprint_bin4(i) uprintf("%04b", i)
+#define uprint_bin8(i) uprintf("%08b", i)
+#define uprint_bin16(i) uprintf("%016b", i)
+#define uprint_bin32(i) uprintf("%032lb", i)
+#define uprint_bin_reverse8(i) uprintf("%08b", bitrev(i))
+#define uprint_bin_reverse16(i) uprintf("%016b", bitrev16(i))
+#define uprint_bin_reverse32(i) uprintf("%032lb", bitrev32(i))
+/* print value utility */
+#define uprint_val_dec(v) uprintf(#v ": %u\n", v)
+#define uprint_val_decs(v) uprintf(#v ": %d\n", v)
+#define uprint_val_hex8(v) uprintf(#v ": %X\n", v)
+#define uprint_val_hex16(v) uprintf(#v ": %02X\n", v)
+#define uprint_val_hex32(v) uprintf(#v ": %04lX\n", v)
+#define uprint_val_bin8(v) uprintf(#v ": %08b\n", v)
+#define uprint_val_bin16(v) uprintf(#v ": %016b\n", v)
+#define uprint_val_bin32(v) uprintf(#v ": %032lb\n", v)
+#define uprint_val_bin_reverse8(v) uprintf(#v ": %08b\n", bitrev(v))
+#define uprint_val_bin_reverse16(v) uprintf(#v ": %016b\n", bitrev16(v))
+#define uprint_val_bin_reverse32(v) uprintf(#v ": %032lb\n", bitrev32(v))
+
#else /* NO_PRINT */
#define xprintf(fmt, ...)
@@ -141,5 +276,4 @@ void print_set_sendchar(int8_t (*print_sendchar_func)(uint8_t));
#define pbin_reverse(data) print_bin_reverse8(data)
#define pbin_reverse16(data) print_bin_reverse16(data)
-
#endif
diff --git a/tmk_core/common/raw_hid.h b/tmk_core/common/raw_hid.h
new file mode 100644
index 000000000..86da02fd1
--- /dev/null
+++ b/tmk_core/common/raw_hid.h
@@ -0,0 +1,8 @@
+#ifndef _RAW_HID_H_
+#define _RAW_HID_H_
+
+void raw_hid_receive( uint8_t *data, uint8_t length );
+
+void raw_hid_send( uint8_t *data, uint8_t length );
+
+#endif
diff --git a/tmk_core/common/virtser.h b/tmk_core/common/virtser.h
new file mode 100644
index 000000000..74891b6ae
--- /dev/null
+++ b/tmk_core/common/virtser.h
@@ -0,0 +1,10 @@
+#ifndef _VIRTSER_H_
+#define _VIRTSER_H_
+
+/* Define this function in your code to process incoming bytes */
+void virtser_recv(const uint8_t ch);
+
+/* Call this to send a character over the Virtual Serial Device */
+void virtser_send(const uint8_t byte);
+
+#endif
diff --git a/tmk_core/native.mk b/tmk_core/native.mk
new file mode 100644
index 000000000..50232ee9b
--- /dev/null
+++ b/tmk_core/native.mk
@@ -0,0 +1,24 @@
+CC = gcc
+OBJCOPY =
+OBJDUMP =
+SIZE =
+AR =
+NM =
+HEX =
+EEP =
+BIN =
+
+
+COMPILEFLAGS += -funsigned-char
+COMPILEFLAGS += -funsigned-bitfields
+COMPILEFLAGS += -ffunction-sections
+COMPILEFLAGS += -fdata-sections
+COMPILEFLAGS += -fshort-enums
+
+CFLAGS += $(COMPILEFLAGS)
+CFLAGS += -fno-inline-small-functions
+CFLAGS += -fno-strict-aliasing
+
+CPPFLAGS += $(COMPILEFLAGS)
+CPPFLAGS += -fno-exceptions
+CPPFLAGS += -std=gnu++11 \ No newline at end of file
diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c
index e2c9d9bf1..d0c72c46c 100644
--- a/tmk_core/protocol/chibios/usb_main.c
+++ b/tmk_core/protocol/chibios/usb_main.c
@@ -28,6 +28,12 @@
#include "led.h"
#endif
+#ifdef NKRO_ENABLE
+ #include "keycode_config.h"
+
+ extern keymap_config_t keymap_config;
+#endif
+
/* ---------------------------------------------------------
* Global interface variables and declarations
* ---------------------------------------------------------
@@ -39,9 +45,6 @@ uint16_t keyboard_led_stats __attribute__((aligned(2))) = 0;
volatile uint16_t keyboard_idle_count = 0;
static virtual_timer_t keyboard_idle_timer;
static void keyboard_idle_timer_cb(void *arg);
-#ifdef NKRO_ENABLE
-extern bool keyboard_nkro;
-#endif /* NKRO_ENABLE */
report_keyboard_t keyboard_report_sent = {{0}};
#ifdef MOUSE_ENABLE
@@ -943,8 +946,8 @@ static bool usb_request_hook_cb(USBDriver *usbp) {
if((usbp->setup[4] == KBD_INTERFACE) && (usbp->setup[5] == 0)) { /* wIndex */
keyboard_protocol = ((usbp->setup[2]) != 0x00); /* LSB(wValue) */
#ifdef NKRO_ENABLE
- keyboard_nkro = !!keyboard_protocol;
- if(!keyboard_nkro && keyboard_idle) {
+ keymap_config.nkro = !!keyboard_protocol;
+ if(!keymap_config.nkro && keyboard_idle) {
#else /* NKRO_ENABLE */
if(keyboard_idle) {
#endif /* NKRO_ENABLE */
@@ -962,7 +965,7 @@ static bool usb_request_hook_cb(USBDriver *usbp) {
keyboard_idle = usbp->setup[3]; /* MSB(wValue) */
/* arm the timer */
#ifdef NKRO_ENABLE
- if(!keyboard_nkro && keyboard_idle) {
+ if(!keymap_config.nkro && keyboard_idle) {
#else /* NKRO_ENABLE */
if(keyboard_idle) {
#endif /* NKRO_ENABLE */
@@ -1089,7 +1092,7 @@ static void keyboard_idle_timer_cb(void *arg) {
}
#ifdef NKRO_ENABLE
- if(!keyboard_nkro && keyboard_idle) {
+ if(!keymap_config.nkro && keyboard_idle) {
#else /* NKRO_ENABLE */
if(keyboard_idle) {
#endif /* NKRO_ENABLE */
@@ -1122,7 +1125,7 @@ void send_keyboard(report_keyboard_t *report) {
osalSysUnlock();
#ifdef NKRO_ENABLE
- if(keyboard_nkro) { /* NKRO protocol */
+ if(keymap_config.nkro) { /* NKRO protocol */
/* need to wait until the previous packet has made it through */
/* can rewrite this using the synchronous API, then would wait
* until *after* the packet has been transmitted. I think
diff --git a/tmk_core/protocol/iwrap/suart.S b/tmk_core/protocol/iwrap/suart.S
index 1b0290963..a873515e1 100644
--- a/tmk_core/protocol/iwrap/suart.S
+++ b/tmk_core/protocol/iwrap/suart.S
@@ -1,156 +1,156 @@
-;---------------------------------------------------------------------------;
-; Software implemented UART module ;
-; (C)ChaN, 2005 (http://elm-chan.org/) ;
-;---------------------------------------------------------------------------;
-; Bit rate settings:
-;
-; 1MHz 2MHz 4MHz 6MHz 8MHz 10MHz 12MHz 16MHz 20MHz
-; 2.4kbps 138 - - - - - - - -
-; 4.8kbps 68 138 - - - - - - -
-; 9.6kbps 33 68 138 208 - - - - -
-; 19.2kbps - 33 68 102 138 173 208 - -
-; 38.4kbps - - 33 50 68 85 102 138 172
-; 57.6kbps - - 21 33 44 56 68 91 114
-; 115.2kbps - - - - 21 27 33 44 56
-
-.nolist
-#include <avr/io.h>
-.list
-
-#define BPS 102 /* Bit delay. (see above table) */
-#define BIDIR 0 /* 0:Separated Tx/Rx, 1:Shared Tx/Rx */
-
-#define OUT_1 sbi _SFR_IO_ADDR(SUART_OUT_PORT), SUART_OUT_BIT /* Output 1 */
-#define OUT_0 cbi _SFR_IO_ADDR(SUART_OUT_PORT), SUART_OUT_BIT /* Output 0 */
-#define SKIP_IN_1 sbis _SFR_IO_ADDR(SUART_IN_PIN), SUART_IN_BIT /* Skip if 1 */
-#define SKIP_IN_0 sbic _SFR_IO_ADDR(SUART_IN_PIN), SUART_IN_BIT /* Skip if 0 */
-
-
-
-#ifdef SPM_PAGESIZE
-.macro _LPMI reg
- lpm \reg, Z+
-.endm
-.macro _MOVW dh,dl, sh,sl
- movw \dl, \sl
-.endm
-#else
-.macro _LPMI reg
- lpm
- mov \reg, r0
- adiw ZL, 1
-.endm
-.macro _MOVW dh,dl, sh,sl
- mov \dl, \sl
- mov \dh, \sh
-.endm
-#endif
-
-
-
-;---------------------------------------------------------------------------;
-; Transmit a byte in serial format of N81
-;
-;Prototype: void xmit (uint8_t data);
-;Size: 16 words
-
-.global xmit
-.func xmit
-xmit:
-#if BIDIR
- ldi r23, BPS-1 ;Pre-idle time for bidirectional data line
-5: dec r23 ;
- brne 5b ;/
-#endif
- in r0, _SFR_IO_ADDR(SREG) ;Save flags
-
- com r24 ;C = start bit
- ldi r25, 10 ;Bit counter
- cli ;Start critical section
-
-1: ldi r23, BPS-1 ;----- Bit transferring loop
-2: dec r23 ;Wait for a bit time
- brne 2b ;/
- brcs 3f ;MISO = bit to be sent
- OUT_1 ;
-3: brcc 4f ;
- OUT_0 ;/
-4: lsr r24 ;Get next bit into C
- dec r25 ;All bits sent?
- brne 1b ; no, coutinue
-
- out _SFR_IO_ADDR(SREG), r0 ;End of critical section
- ret
-.endfunc
-
-
-
-;---------------------------------------------------------------------------;
-; Receive a byte
-;
-;Prototype: uint8_t rcvr (void);
-;Size: 19 words
-
-.global rcvr
-.func rcvr
-rcvr:
- in r0, _SFR_IO_ADDR(SREG) ;Save flags
-
- ldi r24, 0x80 ;Receiving shift reg
- cli ;Start critical section
-
-1: SKIP_IN_1 ;Wait for idle
- rjmp 1b
-2: SKIP_IN_0 ;Wait for start bit
- rjmp 2b
- ldi r25, BPS/2 ;Wait for half bit time
-3: dec r25
- brne 3b
-
-4: ldi r25, BPS ;----- Bit receiving loop
-5: dec r25 ;Wait for a bit time
- brne 5b ;/
- lsr r24 ;Next bit
- SKIP_IN_0 ;Get a data bit into r24.7
- ori r24, 0x80
- brcc 4b ;All bits received? no, continue
-
- out _SFR_IO_ADDR(SREG), r0 ;End of critical section
- ret
-.endfunc
-
-
-; Not wait for start bit. This should be called after detecting start bit.
-.global recv
-.func recv
-recv:
- in r0, _SFR_IO_ADDR(SREG) ;Save flags
-
- ldi r24, 0x80 ;Receiving shift reg
- cli ;Start critical section
-
-;1: SKIP_IN_1 ;Wait for idle
-; rjmp 1b
-;2: SKIP_IN_0 ;Wait for start bit
-; rjmp 2b
- ldi r25, BPS/2 ;Wait for half bit time
-3: dec r25
- brne 3b
-
-4: ldi r25, BPS ;----- Bit receiving loop
-5: dec r25 ;Wait for a bit time
- brne 5b ;/
- lsr r24 ;Next bit
- SKIP_IN_0 ;Get a data bit into r24.7
- ori r24, 0x80
- brcc 4b ;All bits received? no, continue
-
- ldi r25, BPS/2 ;Wait for half bit time
-6: dec r25
- brne 6b
-7: SKIP_IN_1 ;Wait for stop bit
- rjmp 7b
-
- out _SFR_IO_ADDR(SREG), r0 ;End of critical section
- ret
-.endfunc
+;---------------------------------------------------------------------------;
+; Software implemented UART module ;
+; (C)ChaN, 2005 (http://elm-chan.org/) ;
+;---------------------------------------------------------------------------;
+; Bit rate settings:
+;
+; 1MHz 2MHz 4MHz 6MHz 8MHz 10MHz 12MHz 16MHz 20MHz
+; 2.4kbps 138 - - - - - - - -
+; 4.8kbps 68 138 - - - - - - -
+; 9.6kbps 33 68 138 208 - - - - -
+; 19.2kbps - 33 68 102 138 173 208 - -
+; 38.4kbps - - 33 50 68 85 102 138 172
+; 57.6kbps - - 21 33 44 56 68 91 114
+; 115.2kbps - - - - 21 27 33 44 56
+
+.nolist
+#include <avr/io.h>
+.list
+
+#define BPS 102 /* Bit delay. (see above table) */
+#define BIDIR 0 /* 0:Separated Tx/Rx, 1:Shared Tx/Rx */
+
+#define OUT_1 sbi _SFR_IO_ADDR(SUART_OUT_PORT), SUART_OUT_BIT /* Output 1 */
+#define OUT_0 cbi _SFR_IO_ADDR(SUART_OUT_PORT), SUART_OUT_BIT /* Output 0 */
+#define SKIP_IN_1 sbis _SFR_IO_ADDR(SUART_IN_PIN), SUART_IN_BIT /* Skip if 1 */
+#define SKIP_IN_0 sbic _SFR_IO_ADDR(SUART_IN_PIN), SUART_IN_BIT /* Skip if 0 */
+
+
+
+#ifdef SPM_PAGESIZE
+.macro _LPMI reg
+ lpm \reg, Z+
+.endm
+.macro _MOVW dh,dl, sh,sl
+ movw \dl, \sl
+.endm
+#else
+.macro _LPMI reg
+ lpm
+ mov \reg, r0
+ adiw ZL, 1
+.endm
+.macro _MOVW dh,dl, sh,sl
+ mov \dl, \sl
+ mov \dh, \sh
+.endm
+#endif
+
+
+
+;---------------------------------------------------------------------------;
+; Transmit a byte in serial format of N81
+;
+;Prototype: void xmit (uint8_t data);
+;Size: 16 words
+
+.global xmit
+.func xmit
+xmit:
+#if BIDIR
+ ldi r23, BPS-1 ;Pre-idle time for bidirectional data line
+5: dec r23 ;
+ brne 5b ;/
+#endif
+ in r0, _SFR_IO_ADDR(SREG) ;Save flags
+
+ com r24 ;C = start bit
+ ldi r25, 10 ;Bit counter
+ cli ;Start critical section
+
+1: ldi r23, BPS-1 ;----- Bit transferring loop
+2: dec r23 ;Wait for a bit time
+ brne 2b ;/
+ brcs 3f ;MISO = bit to be sent
+ OUT_1 ;
+3: brcc 4f ;
+ OUT_0 ;/
+4: lsr r24 ;Get next bit into C
+ dec r25 ;All bits sent?
+ brne 1b ; no, coutinue
+
+ out _SFR_IO_ADDR(SREG), r0 ;End of critical section
+ ret
+.endfunc
+
+
+
+;---------------------------------------------------------------------------;
+; Receive a byte
+;
+;Prototype: uint8_t rcvr (void);
+;Size: 19 words
+
+.global rcvr
+.func rcvr
+rcvr:
+ in r0, _SFR_IO_ADDR(SREG) ;Save flags
+
+ ldi r24, 0x80 ;Receiving shift reg
+ cli ;Start critical section
+
+1: SKIP_IN_1 ;Wait for idle
+ rjmp 1b
+2: SKIP_IN_0 ;Wait for start bit
+ rjmp 2b
+ ldi r25, BPS/2 ;Wait for half bit time
+3: dec r25
+ brne 3b
+
+4: ldi r25, BPS ;----- Bit receiving loop
+5: dec r25 ;Wait for a bit time
+ brne 5b ;/
+ lsr r24 ;Next bit
+ SKIP_IN_0 ;Get a data bit into r24.7
+ ori r24, 0x80
+ brcc 4b ;All bits received? no, continue
+
+ out _SFR_IO_ADDR(SREG), r0 ;End of critical section
+ ret
+.endfunc
+
+
+; Not wait for start bit. This should be called after detecting start bit.
+.global recv
+.func recv
+recv:
+ in r0, _SFR_IO_ADDR(SREG) ;Save flags
+
+ ldi r24, 0x80 ;Receiving shift reg
+ cli ;Start critical section
+
+;1: SKIP_IN_1 ;Wait for idle
+; rjmp 1b
+;2: SKIP_IN_0 ;Wait for start bit
+; rjmp 2b
+ ldi r25, BPS/2 ;Wait for half bit time
+3: dec r25
+ brne 3b
+
+4: ldi r25, BPS ;----- Bit receiving loop
+5: dec r25 ;Wait for a bit time
+ brne 5b ;/
+ lsr r24 ;Next bit
+ SKIP_IN_0 ;Get a data bit into r24.7
+ ori r24, 0x80
+ brcc 4b ;All bits received? no, continue
+
+ ldi r25, BPS/2 ;Wait for half bit time
+6: dec r25
+ brne 6b
+7: SKIP_IN_1 ;Wait for stop bit
+ rjmp 7b
+
+ out _SFR_IO_ADDR(SREG), r0 ;End of critical section
+ ret
+.endfunc
diff --git a/tmk_core/protocol/iwrap/suart.h b/tmk_core/protocol/iwrap/suart.h
index 72725b998..7d92be069 100644
--- a/tmk_core/protocol/iwrap/suart.h
+++ b/tmk_core/protocol/iwrap/suart.h
@@ -1,8 +1,8 @@
-#ifndef SUART
-#define SUART
-
-void xmit(uint8_t);
-uint8_t rcvr(void);
-uint8_t recv(void);
-
-#endif /* SUART */
+#ifndef SUART
+#define SUART
+
+void xmit(uint8_t);
+uint8_t rcvr(void);
+uint8_t recv(void);
+
+#endif /* SUART */
diff --git a/tmk_core/protocol/iwrap/wd.h b/tmk_core/protocol/iwrap/wd.h
index 99058f033..12395bf69 100644
--- a/tmk_core/protocol/iwrap/wd.h
+++ b/tmk_core/protocol/iwrap/wd.h
@@ -1,159 +1,159 @@
-/* This is from http://www.mtcnet.net/~henryvm/wdt/ */
-#ifndef _AVR_WD_H_
-#define _AVR_WD_H_
-
-#include <avr/io.h>
-
-/*
-Copyright (c) 2009, Curt Van Maanen
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-
-include usage-
- #include "wd.h" //if in same directory as project
- #include <avr/wd.h> //if wd.h is in avr directory
-
-set watchdog modes and prescale
-
-usage-
- WD_SET(mode,[timeout]); //prescale always set
-
-modes-
- WD_OFF disabled
- WD_RST normal reset mode
- WD_IRQ interrupt only mode (if supported)
- WD_RST_IRQ interrupt+reset mode (if supported)
-
-timeout-
- WDTO_15MS default if no timeout provided
- WDTO_30MS
- WDTO_60MS
- WDTO_120MS
- WDTO_250MS
- WDTO_500MS
- WDTO_1S
- WDTO_2S
- WDTO_4S (if supported)
- WDTO_8S (if supported)
-
-examples-
- WD_SET(WD_RST,WDTO_1S); //reset mode, 1s timeout
- WD_SET(WD_OFF); //watchdog disabled (if not fused on)
- WD_SET(WD_RST); //reset mode, 15ms (default timeout)
- WD_SET(WD_IRQ,WDTO_120MS); //interrupt only mode, 120ms timeout
- WD_SET(WD_RST_IRQ,WDTO_2S); //interrupt+reset mode, 2S timeout
-
-
-for enhanced watchdogs, if the watchdog is not being used WDRF should be
-cleared on every power up or reset, along with disabling the watchdog-
- WD_DISABLE(); //clear WDRF, then turn off watchdog
-
-*/
-
-//reset registers to the same name (MCUCSR)
-#if !defined(MCUCSR)
-#define MCUCSR MCUSR
-#endif
-
-//watchdog registers to the same name (WDTCSR)
-#if !defined(WDTCSR)
-#define WDTCSR WDTCR
-#endif
-
-//if enhanced watchdog, define irq values, create disable macro
-#if defined(WDIF)
-#define WD_IRQ 0xC0
-#define WD_RST_IRQ 0xC8
-#define WD_DISABLE() do{ \
- MCUCSR &= ~(1<<WDRF); \
- WD_SET(WD_OFF); \
- }while(0)
-#endif
-
-//all watchdogs
-#define WD_RST 8
-#define WD_OFF 0
-
-//prescale values
-#define WDTO_15MS 0
-#define WDTO_30MS 1
-#define WDTO_60MS 2
-#define WDTO_120MS 3
-#define WDTO_250MS 4
-#define WDTO_500MS 5
-#define WDTO_1S 6
-#define WDTO_2S 7
-
-//prescale values for avrs with WDP3
-#if defined(WDP3)
-#define WDTO_4S 0x20
-#define WDTO_8S 0x21
-#endif
-
-//watchdog reset
-#define WDR() __asm__ __volatile__("wdr")
-
-//avr reset using watchdog
-#define WD_AVR_RESET() do{ \
- __asm__ __volatile__("cli"); \
- WD_SET_UNSAFE(WD_RST); \
- while(1); \
- }while(0)
-
-/*set the watchdog-
-1. save SREG
-2. turn off irq's
-3. reset watchdog timer
-4. enable watchdog change
-5. write watchdog value
-6. restore SREG (restoring irq status)
-*/
-#define WD_SET(val,...) \
- __asm__ __volatile__( \
- "in __tmp_reg__,__SREG__" "\n\t" \
- "cli" "\n\t" \
- "wdr" "\n\t" \
- "sts %[wdreg],%[wden]" "\n\t" \
- "sts %[wdreg],%[wdval]" "\n\t" \
- "out __SREG__,__tmp_reg__" "\n\t" \
- : \
- : [wdreg] "M" (&WDTCSR), \
- [wden] "r" ((uint8_t)(0x18)), \
- [wdval] "r" ((uint8_t)(val|(__VA_ARGS__+0))) \
- : "r0" \
-)
-
-/*set the watchdog when I bit in SREG known to be clear-
-1. reset watchdog timer
-2. enable watchdog change
-5. write watchdog value
-*/
-#define WD_SET_UNSAFE(val,...) \
- __asm__ __volatile__( \
- "wdr" "\n\t" \
- "sts %[wdreg],%[wden]" "\n\t" \
- "sts %[wdreg],%[wdval]" "\n\t" \
- : \
- : [wdreg] "M" (&WDTCSR), \
- [wden] "r" ((uint8_t)(0x18)), \
- [wdval] "r" ((uint8_t)(val|(__VA_ARGS__+0))) \
-)
-
-
-//for compatibility with avr/wdt.h
-#define wdt_enable(val) WD_SET(WD_RST,val)
-#define wdt_disable() WD_SET(WD_OFF)
-
-
-#endif /* _AVR_WD_H_ */
+/* This is from http://www.mtcnet.net/~henryvm/wdt/ */
+#ifndef _AVR_WD_H_
+#define _AVR_WD_H_
+
+#include <avr/io.h>
+
+/*
+Copyright (c) 2009, Curt Van Maanen
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+
+include usage-
+ #include "wd.h" //if in same directory as project
+ #include <avr/wd.h> //if wd.h is in avr directory
+
+set watchdog modes and prescale
+
+usage-
+ WD_SET(mode,[timeout]); //prescale always set
+
+modes-
+ WD_OFF disabled
+ WD_RST normal reset mode
+ WD_IRQ interrupt only mode (if supported)
+ WD_RST_IRQ interrupt+reset mode (if supported)
+
+timeout-
+ WDTO_15MS default if no timeout provided
+ WDTO_30MS
+ WDTO_60MS
+ WDTO_120MS
+ WDTO_250MS
+ WDTO_500MS
+ WDTO_1S
+ WDTO_2S
+ WDTO_4S (if supported)
+ WDTO_8S (if supported)
+
+examples-
+ WD_SET(WD_RST,WDTO_1S); //reset mode, 1s timeout
+ WD_SET(WD_OFF); //watchdog disabled (if not fused on)
+ WD_SET(WD_RST); //reset mode, 15ms (default timeout)
+ WD_SET(WD_IRQ,WDTO_120MS); //interrupt only mode, 120ms timeout
+ WD_SET(WD_RST_IRQ,WDTO_2S); //interrupt+reset mode, 2S timeout
+
+
+for enhanced watchdogs, if the watchdog is not being used WDRF should be
+cleared on every power up or reset, along with disabling the watchdog-
+ WD_DISABLE(); //clear WDRF, then turn off watchdog
+
+*/
+
+//reset registers to the same name (MCUCSR)
+#if !defined(MCUCSR)
+#define MCUCSR MCUSR
+#endif
+
+//watchdog registers to the same name (WDTCSR)
+#if !defined(WDTCSR)
+#define WDTCSR WDTCR
+#endif
+
+//if enhanced watchdog, define irq values, create disable macro
+#if defined(WDIF)
+#define WD_IRQ 0xC0
+#define WD_RST_IRQ 0xC8
+#define WD_DISABLE() do{ \
+ MCUCSR &= ~(1<<WDRF); \
+ WD_SET(WD_OFF); \
+ }while(0)
+#endif
+
+//all watchdogs
+#define WD_RST 8
+#define WD_OFF 0
+
+//prescale values
+#define WDTO_15MS 0
+#define WDTO_30MS 1
+#define WDTO_60MS 2
+#define WDTO_120MS 3
+#define WDTO_250MS 4
+#define WDTO_500MS 5
+#define WDTO_1S 6
+#define WDTO_2S 7
+
+//prescale values for avrs with WDP3
+#if defined(WDP3)
+#define WDTO_4S 0x20
+#define WDTO_8S 0x21
+#endif
+
+//watchdog reset
+#define WDR() __asm__ __volatile__("wdr")
+
+//avr reset using watchdog
+#define WD_AVR_RESET() do{ \
+ __asm__ __volatile__("cli"); \
+ WD_SET_UNSAFE(WD_RST); \
+ while(1); \
+ }while(0)
+
+/*set the watchdog-
+1. save SREG
+2. turn off irq's
+3. reset watchdog timer
+4. enable watchdog change
+5. write watchdog value
+6. restore SREG (restoring irq status)
+*/
+#define WD_SET(val,...) \
+ __asm__ __volatile__( \
+ "in __tmp_reg__,__SREG__" "\n\t" \
+ "cli" "\n\t" \
+ "wdr" "\n\t" \
+ "sts %[wdreg],%[wden]" "\n\t" \
+ "sts %[wdreg],%[wdval]" "\n\t" \
+ "out __SREG__,__tmp_reg__" "\n\t" \
+ : \
+ : [wdreg] "M" (&WDTCSR), \
+ [wden] "r" ((uint8_t)(0x18)), \
+ [wdval] "r" ((uint8_t)(val|(__VA_ARGS__+0))) \
+ : "r0" \
+)
+
+/*set the watchdog when I bit in SREG known to be clear-
+1. reset watchdog timer
+2. enable watchdog change
+5. write watchdog value
+*/
+#define WD_SET_UNSAFE(val,...) \
+ __asm__ __volatile__( \
+ "wdr" "\n\t" \
+ "sts %[wdreg],%[wden]" "\n\t" \
+ "sts %[wdreg],%[wdval]" "\n\t" \
+ : \
+ : [wdreg] "M" (&WDTCSR), \
+ [wden] "r" ((uint8_t)(0x18)), \
+ [wdval] "r" ((uint8_t)(val|(__VA_ARGS__+0))) \
+)
+
+
+//for compatibility with avr/wdt.h
+#define wdt_enable(val) WD_SET(WD_RST,val)
+#define wdt_disable() WD_SET(WD_OFF)
+
+
+#endif /* _AVR_WD_H_ */
diff --git a/tmk_core/protocol/lufa.mk b/tmk_core/protocol/lufa.mk
index 0eeace44e..151d26cbc 100644
--- a/tmk_core/protocol/lufa.mk
+++ b/tmk_core/protocol/lufa.mk
@@ -21,11 +21,19 @@ ifeq ($(strip $(MIDI_ENABLE)), yes)
include $(TMK_PATH)/protocol/midi.mk
endif
+ifeq ($(strip $(ADAFRUIT_BLE_ENABLE)), yes)
+ LUFA_SRC += $(LUFA_DIR)/adafruit_ble.cpp
+endif
+
ifeq ($(strip $(BLUETOOTH_ENABLE)), yes)
LUFA_SRC += $(LUFA_DIR)/bluetooth.c \
$(TMK_DIR)/protocol/serial_uart.c
endif
+ifeq ($(strip $(VIRTSER_ENABLE)), yes)
+ LUFA_SRC += $(LUFA_ROOT_PATH)/Drivers/USB/Class/Device/CDCClassDevice.c
+endif
+
SRC += $(LUFA_SRC)
# Search Path
diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/asf.xml b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/asf.xml
index 72f3ff04c..02e7063c6 100644
--- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/asf.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/CDC/asf.xml
@@ -1,161 +1,161 @@
-<asf xmlversion="1.0">
- <project caption="CDC Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.128_4" force-caption="true" workspace-name="lufa_cdc_128kb_4kb_">
- <require idref="lufa.bootloaders.cdc"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="at90usb1287"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0x1F000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>
-
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
- </project>
-
- <project caption="CDC Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.64_4" force-caption="true" workspace-name="lufa_cdc_64kb_4kb_">
- <require idref="lufa.bootloaders.cdc"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="at90usb647"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0xF000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>
-
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
- </project>
-
- <project caption="CDC Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.32_4" force-caption="true" workspace-name="lufa_cdc_32kb_4kb_">
- <require idref="lufa.bootloaders.cdc"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="atmega32u4"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0x7000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
-
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
- </project>
-
- <project caption="CDC Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.16_4" force-caption="true" workspace-name="lufa_cdc_16kb_4kb_">
- <require idref="lufa.bootloaders.cdc"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="atmega16u2"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0x3000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>
-
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
- </project>
-
- <project caption="CDC Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.8_4" force-caption="true" workspace-name="lufa_cdc_8kb_4kb_">
- <require idref="lufa.bootloaders.cdc"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="atmega8u2"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0x1000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>
-
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
- </project>
-
- <module type="application" id="lufa.bootloaders.cdc" caption="CDC Bootloader">
- <info type="description" value="summary">
- CDC Class Bootloader, capable of reprogramming a device using avrdude or other AVR109 protocol compliant software when plugged into a host.
- </info>
-
- <info type="gui-flag" value="move-to-root"/>
-
- <info type="keyword" value="Technology">
- <keyword value="Bootloaders"/>
- <keyword value="USB Device"/>
- </info>
-
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <build type="include-path" value="."/>
- <build type="c-source" value="BootloaderCDC.c"/>
- <build type="header-file" value="BootloaderCDC.h"/>
- <build type="c-source" value="Descriptors.c"/>
- <build type="header-file" value="Descriptors.h"/>
- <build type="c-source" value="BootloaderAPI.c"/>
- <build type="header-file" value="BootloaderAPI.h"/>
- <build type="asm-source" value="BootloaderAPITable.S"/>
-
- <build type="module-config" subtype="path" value="Config"/>
- <build type="header-file" value="Config/LUFAConfig.h"/>
- <build type="header-file" value="Config/AppConfig.h"/>
-
- <build type="distribute" subtype="user-file" value="doxyfile"/>
- <build type="distribute" subtype="user-file" value="BootloaderCDC.txt"/>
- <build type="distribute" subtype="user-file" value="LUFA CDC Bootloader.inf"/>
-
- <require idref="lufa.common"/>
- <require idref="lufa.platform"/>
- <require idref="lufa.drivers.usb"/>
- <require idref="lufa.drivers.board"/>
- <require idref="lufa.drivers.board.leds"/>
- </module>
-</asf>
+<asf xmlversion="1.0">
+ <project caption="CDC Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.128_4" force-caption="true" workspace-name="lufa_cdc_128kb_4kb_">
+ <require idref="lufa.bootloaders.cdc"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="at90usb1287"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0x1F000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>
+
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+ </project>
+
+ <project caption="CDC Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.64_4" force-caption="true" workspace-name="lufa_cdc_64kb_4kb_">
+ <require idref="lufa.bootloaders.cdc"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="at90usb647"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0xF000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>
+
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+ </project>
+
+ <project caption="CDC Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.32_4" force-caption="true" workspace-name="lufa_cdc_32kb_4kb_">
+ <require idref="lufa.bootloaders.cdc"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="atmega32u4"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0x7000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
+
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+ </project>
+
+ <project caption="CDC Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.16_4" force-caption="true" workspace-name="lufa_cdc_16kb_4kb_">
+ <require idref="lufa.bootloaders.cdc"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="atmega16u2"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0x3000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>
+
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+ </project>
+
+ <project caption="CDC Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.8_4" force-caption="true" workspace-name="lufa_cdc_8kb_4kb_">
+ <require idref="lufa.bootloaders.cdc"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="atmega8u2"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0x1000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>
+
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+ </project>
+
+ <module type="application" id="lufa.bootloaders.cdc" caption="CDC Bootloader">
+ <info type="description" value="summary">
+ CDC Class Bootloader, capable of reprogramming a device using avrdude or other AVR109 protocol compliant software when plugged into a host.
+ </info>
+
+ <info type="gui-flag" value="move-to-root"/>
+
+ <info type="keyword" value="Technology">
+ <keyword value="Bootloaders"/>
+ <keyword value="USB Device"/>
+ </info>
+
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="include-path" value="."/>
+ <build type="c-source" value="BootloaderCDC.c"/>
+ <build type="header-file" value="BootloaderCDC.h"/>
+ <build type="c-source" value="Descriptors.c"/>
+ <build type="header-file" value="Descriptors.h"/>
+ <build type="c-source" value="BootloaderAPI.c"/>
+ <build type="header-file" value="BootloaderAPI.h"/>
+ <build type="asm-source" value="BootloaderAPITable.S"/>
+
+ <build type="module-config" subtype="path" value="Config"/>
+ <build type="header-file" value="Config/LUFAConfig.h"/>
+ <build type="header-file" value="Config/AppConfig.h"/>
+
+ <build type="distribute" subtype="user-file" value="doxyfile"/>
+ <build type="distribute" subtype="user-file" value="BootloaderCDC.txt"/>
+ <build type="distribute" subtype="user-file" value="LUFA CDC Bootloader.inf"/>
+
+ <require idref="lufa.common"/>
+ <require idref="lufa.platform"/>
+ <require idref="lufa.drivers.usb"/>
+ <require idref="lufa.drivers.board"/>
+ <require idref="lufa.drivers.board.leds"/>
+ </module>
+</asf>
diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/DFU/asf.xml b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/DFU/asf.xml
index 6f3312b76..f56aba69f 100644
--- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/DFU/asf.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/DFU/asf.xml
@@ -1,156 +1,156 @@
-<asf xmlversion="1.0">
- <project caption="DFU Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.128_4" force-caption="true" workspace-name="lufa_dfu_128kb_4kb_">
- <require idref="lufa.bootloaders.dfu"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="at90usb1287"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0x1F000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>
-
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
- </project>
-
- <project caption="DFU Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.64_4" force-caption="true" workspace-name="lufa_dfu_64kb_4kb_">
- <require idref="lufa.bootloaders.dfu"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="at90usb647"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0xF000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>
-
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
- </project>
-
- <project caption="DFU Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.32_4" force-caption="true" workspace-name="lufa_dfu_32kb_4kb_">
- <require idref="lufa.bootloaders.dfu"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="atmega32u4"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0x7000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
-
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
- </project>
-
- <project caption="DFU Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.16_4" force-caption="true" workspace-name="lufa_dfu_16kb_4kb_">
- <require idref="lufa.bootloaders.dfu"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="atmega16u2"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0x3000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>
-
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
- </project>
-
- <project caption="DFU Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.8_4" force-caption="true" workspace-name="lufa_dfu_8kb_4kb_">
- <require idref="lufa.bootloaders.dfu"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="atmega8u2"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0x1000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>
-
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
- </project>
-
- <module type="application" id="lufa.bootloaders.dfu" caption="DFU Bootloader">
- <info type="description" value="summary">
- DFU Class Bootloader, capable of reprogramming a device using the Atmel FLIP or other AVR DFU programming software when plugged into a host.
- </info>
-
- <info type="gui-flag" value="move-to-root"/>
-
- <info type="keyword" value="Technology">
- <keyword value="Bootloaders"/>
- <keyword value="USB Device"/>
- </info>
-
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <build type="include-path" value="."/>
- <build type="c-source" value="BootloaderDFU.c"/>
- <build type="header-file" value="BootloaderDFU.h"/>
- <build type="c-source" value="Descriptors.c"/>
- <build type="header-file" value="Descriptors.h"/>
- <build type="c-source" value="BootloaderAPI.c"/>
- <build type="header-file" value="BootloaderAPI.h"/>
- <build type="asm-source" value="BootloaderAPITable.S"/>
-
- <build type="module-config" subtype="path" value="Config"/>
- <build type="header-file" value="Config/LUFAConfig.h"/>
- <build type="header-file" value="Config/AppConfig.h"/>
-
- <build type="distribute" subtype="user-file" value="doxyfile"/>
- <build type="distribute" subtype="user-file" value="BootloaderDFU.txt"/>
-
- <require idref="lufa.common"/>
- <require idref="lufa.platform"/>
- <require idref="lufa.drivers.usb"/>
- <require idref="lufa.drivers.board"/>
- <require idref="lufa.drivers.board.leds"/>
- </module>
-</asf>
+<asf xmlversion="1.0">
+ <project caption="DFU Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.128_4" force-caption="true" workspace-name="lufa_dfu_128kb_4kb_">
+ <require idref="lufa.bootloaders.dfu"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="at90usb1287"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0x1F000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>
+
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+ </project>
+
+ <project caption="DFU Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.64_4" force-caption="true" workspace-name="lufa_dfu_64kb_4kb_">
+ <require idref="lufa.bootloaders.dfu"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="at90usb647"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0xF000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>
+
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+ </project>
+
+ <project caption="DFU Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.32_4" force-caption="true" workspace-name="lufa_dfu_32kb_4kb_">
+ <require idref="lufa.bootloaders.dfu"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="atmega32u4"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0x7000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
+
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+ </project>
+
+ <project caption="DFU Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.16_4" force-caption="true" workspace-name="lufa_dfu_16kb_4kb_">
+ <require idref="lufa.bootloaders.dfu"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="atmega16u2"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0x3000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>
+
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+ </project>
+
+ <project caption="DFU Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.8_4" force-caption="true" workspace-name="lufa_dfu_8kb_4kb_">
+ <require idref="lufa.bootloaders.dfu"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="atmega8u2"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0x1000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>
+
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+ </project>
+
+ <module type="application" id="lufa.bootloaders.dfu" caption="DFU Bootloader">
+ <info type="description" value="summary">
+ DFU Class Bootloader, capable of reprogramming a device using the Atmel FLIP or other AVR DFU programming software when plugged into a host.
+ </info>
+
+ <info type="gui-flag" value="move-to-root"/>
+
+ <info type="keyword" value="Technology">
+ <keyword value="Bootloaders"/>
+ <keyword value="USB Device"/>
+ </info>
+
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="include-path" value="."/>
+ <build type="c-source" value="BootloaderDFU.c"/>
+ <build type="header-file" value="BootloaderDFU.h"/>
+ <build type="c-source" value="Descriptors.c"/>
+ <build type="header-file" value="Descriptors.h"/>
+ <build type="c-source" value="BootloaderAPI.c"/>
+ <build type="header-file" value="BootloaderAPI.h"/>
+ <build type="asm-source" value="BootloaderAPITable.S"/>
+
+ <build type="module-config" subtype="path" value="Config"/>
+ <build type="header-file" value="Config/LUFAConfig.h"/>
+ <build type="header-file" value="Config/AppConfig.h"/>
+
+ <build type="distribute" subtype="user-file" value="doxyfile"/>
+ <build type="distribute" subtype="user-file" value="BootloaderDFU.txt"/>
+
+ <require idref="lufa.common"/>
+ <require idref="lufa.platform"/>
+ <require idref="lufa.drivers.usb"/>
+ <require idref="lufa.drivers.board"/>
+ <require idref="lufa.drivers.board.leds"/>
+ </module>
+</asf>
diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/HID/asf.xml b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/HID/asf.xml
index 9394b1353..c67b9419e 100644
--- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/HID/asf.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/HID/asf.xml
@@ -1,123 +1,123 @@
-<asf xmlversion="1.0">
- <project caption="HID Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.128_4" force-caption="true" workspace-name="lufa_hid_128kb_4kb_">
- <require idref="lufa.bootloaders.hid"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="at90usb1287"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0x1F000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>
- </project>
-
- <project caption="HID Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.64_4" force-caption="true" workspace-name="lufa_hid_64kb_4kb_">
- <require idref="lufa.bootloaders.hid"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="at90usb647"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0xF000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>
- </project>
-
- <project caption="HID Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.32_4" force-caption="true" workspace-name="lufa_hid_32kb_4kb_">
- <require idref="lufa.bootloaders.hid"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="atmega32u4"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0x7000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
- </project>
-
- <project caption="HID Bootloader - 16KB FLASH / 2KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.16_2" force-caption="true" workspace-name="lufa_hid_16kb_2kb_">
- <require idref="lufa.bootloaders.hid"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="atmega16u2"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0x3800"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0x3800"/>
- </project>
-
- <project caption="HID Bootloader - 8KB FLASH / 2KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.8_2" force-caption="true" workspace-name="lufa_hid_8kb_2kb_">
- <require idref="lufa.bootloaders.hid"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="atmega8u2"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0x1800"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0x1800"/>
- </project>
-
- <module type="application" id="lufa.bootloaders.hid" caption="HID Bootloader">
- <info type="description" value="summary">
- HID Class Bootloader, capable of reprogramming a device via a custom cross-platform command line utility when plugged into a host.
- </info>
-
- <info type="gui-flag" value="move-to-root"/>
-
- <info type="keyword" value="Technology">
- <keyword value="Bootloaders"/>
- <keyword value="USB Device"/>
- </info>
-
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <build type="include-path" value="."/>
- <build type="c-source" value="BootloaderHID.c"/>
- <build type="header-file" value="BootloaderHID.h"/>
- <build type="c-source" value="Descriptors.c"/>
- <build type="header-file" value="Descriptors.h"/>
-
- <build type="module-config" subtype="path" value="Config"/>
- <build type="header-file" value="Config/LUFAConfig.h"/>
-
- <build type="distribute" subtype="user-file" value="doxyfile"/>
- <build type="distribute" subtype="user-file" value="BootloaderHID.txt"/>
- <build type="distribute" subtype="directory" value="HostLoaderApp"/>
- <build type="distribute" subtype="directory" value="HostLoaderApp_Python"/>
-
- <require idref="lufa.common"/>
- <require idref="lufa.platform"/>
- <require idref="lufa.drivers.usb"/>
- <require idref="lufa.drivers.board"/>
- <require idref="lufa.drivers.board.leds"/>
- </module>
-</asf>
+<asf xmlversion="1.0">
+ <project caption="HID Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.128_4" force-caption="true" workspace-name="lufa_hid_128kb_4kb_">
+ <require idref="lufa.bootloaders.hid"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="at90usb1287"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0x1F000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>
+ </project>
+
+ <project caption="HID Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.64_4" force-caption="true" workspace-name="lufa_hid_64kb_4kb_">
+ <require idref="lufa.bootloaders.hid"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="at90usb647"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0xF000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>
+ </project>
+
+ <project caption="HID Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.32_4" force-caption="true" workspace-name="lufa_hid_32kb_4kb_">
+ <require idref="lufa.bootloaders.hid"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="atmega32u4"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0x7000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
+ </project>
+
+ <project caption="HID Bootloader - 16KB FLASH / 2KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.16_2" force-caption="true" workspace-name="lufa_hid_16kb_2kb_">
+ <require idref="lufa.bootloaders.hid"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="atmega16u2"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0x3800"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0x3800"/>
+ </project>
+
+ <project caption="HID Bootloader - 8KB FLASH / 2KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.8_2" force-caption="true" workspace-name="lufa_hid_8kb_2kb_">
+ <require idref="lufa.bootloaders.hid"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="atmega8u2"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0x1800"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0x1800"/>
+ </project>
+
+ <module type="application" id="lufa.bootloaders.hid" caption="HID Bootloader">
+ <info type="description" value="summary">
+ HID Class Bootloader, capable of reprogramming a device via a custom cross-platform command line utility when plugged into a host.
+ </info>
+
+ <info type="gui-flag" value="move-to-root"/>
+
+ <info type="keyword" value="Technology">
+ <keyword value="Bootloaders"/>
+ <keyword value="USB Device"/>
+ </info>
+
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="include-path" value="."/>
+ <build type="c-source" value="BootloaderHID.c"/>
+ <build type="header-file" value="BootloaderHID.h"/>
+ <build type="c-source" value="Descriptors.c"/>
+ <build type="header-file" value="Descriptors.h"/>
+
+ <build type="module-config" subtype="path" value="Config"/>
+ <build type="header-file" value="Config/LUFAConfig.h"/>
+
+ <build type="distribute" subtype="user-file" value="doxyfile"/>
+ <build type="distribute" subtype="user-file" value="BootloaderHID.txt"/>
+ <build type="distribute" subtype="directory" value="HostLoaderApp"/>
+ <build type="distribute" subtype="directory" value="HostLoaderApp_Python"/>
+
+ <require idref="lufa.common"/>
+ <require idref="lufa.platform"/>
+ <require idref="lufa.drivers.usb"/>
+ <require idref="lufa.drivers.board"/>
+ <require idref="lufa.drivers.board.leds"/>
+ </module>
+</asf>
diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/BootloaderAPITable.S b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/BootloaderAPITable.S
index 6844d4b01..91fc94966 100644
--- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/BootloaderAPITable.S
+++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/BootloaderAPITable.S
@@ -1,102 +1,102 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2014.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
- Permission to use, copy, modify, distribute, and sell this
- software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaims all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-#if AUX_BOOT_SECTION_SIZE > 0
-#warning Using a AUX bootloader section in addition to the defined bootloader space (see documentation).
-
-; Trampoline to jump over the AUX bootloader section to the start of the bootloader,
-; on devices where an AUX bootloader section is used.
-.section .boot_aux_trampoline, "ax"
-.global Boot_AUX_Trampoline
-Boot_AUX_Trampoline:
- jmp BOOT_START_ADDR
-#endif
-
-; Trampolines to actual API implementations if the target address is outside the
-; range of a rjmp instruction (can happen with large bootloader sections)
-.section .apitable_trampolines, "ax"
-.global BootloaderAPI_Trampolines
-BootloaderAPI_Trampolines:
-
- BootloaderAPI_ErasePage_Trampoline:
- jmp BootloaderAPI_ErasePage
- BootloaderAPI_WritePage_Trampoline:
- jmp BootloaderAPI_WritePage
- BootloaderAPI_FillWord_Trampoline:
- jmp BootloaderAPI_FillWord
- BootloaderAPI_ReadSignature_Trampoline:
- jmp BootloaderAPI_ReadSignature
- BootloaderAPI_ReadFuse_Trampoline:
- jmp BootloaderAPI_ReadFuse
- BootloaderAPI_ReadLock_Trampoline:
- jmp BootloaderAPI_ReadLock
- BootloaderAPI_WriteLock_Trampoline:
- jmp BootloaderAPI_WriteLock
- BootloaderAPI_UNUSED1:
- ret
- BootloaderAPI_UNUSED2:
- ret
- BootloaderAPI_UNUSED3:
- ret
- BootloaderAPI_UNUSED4:
- ret
- BootloaderAPI_UNUSED5:
- ret
-
-
-
-; API function jump table
-.section .apitable_jumptable, "ax"
-.global BootloaderAPI_JumpTable
-BootloaderAPI_JumpTable:
-
- rjmp BootloaderAPI_ErasePage_Trampoline
- rjmp BootloaderAPI_WritePage_Trampoline
- rjmp BootloaderAPI_FillWord_Trampoline
- rjmp BootloaderAPI_ReadSignature_Trampoline
- rjmp BootloaderAPI_ReadFuse_Trampoline
- rjmp BootloaderAPI_ReadLock_Trampoline
- rjmp BootloaderAPI_WriteLock_Trampoline
- rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1
- rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2
- rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3
- rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4
- rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5
-
-
-
-; Bootloader table signatures and information
-.section .apitable_signatures, "ax"
-.global BootloaderAPI_Signatures
-BootloaderAPI_Signatures:
-
- .long BOOT_START_ADDR ; Start address of the bootloader
- .word 0xDF30 ; Signature for the MS class bootloader, V1
- .word 0xDCFB ; Signature for a LUFA class bootloader
+/*
+ LUFA Library
+ Copyright (C) Dean Camera, 2014.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+*/
+
+/*
+ Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+ Permission to use, copy, modify, distribute, and sell this
+ software and its documentation for any purpose is hereby granted
+ without fee, provided that the above copyright notice appear in
+ all copies and that both that the copyright notice and this
+ permission notice and warranty disclaimer appear in supporting
+ documentation, and that the name of the author not be used in
+ advertising or publicity pertaining to distribution of the
+ software without specific, written prior permission.
+
+ The author disclaims all warranties with regard to this
+ software, including all implied warranties of merchantability
+ and fitness. In no event shall the author be liable for any
+ special, indirect or consequential damages or any damages
+ whatsoever resulting from loss of use, data or profits, whether
+ in an action of contract, negligence or other tortious action,
+ arising out of or in connection with the use or performance of
+ this software.
+*/
+
+#if AUX_BOOT_SECTION_SIZE > 0
+#warning Using a AUX bootloader section in addition to the defined bootloader space (see documentation).
+
+; Trampoline to jump over the AUX bootloader section to the start of the bootloader,
+; on devices where an AUX bootloader section is used.
+.section .boot_aux_trampoline, "ax"
+.global Boot_AUX_Trampoline
+Boot_AUX_Trampoline:
+ jmp BOOT_START_ADDR
+#endif
+
+; Trampolines to actual API implementations if the target address is outside the
+; range of a rjmp instruction (can happen with large bootloader sections)
+.section .apitable_trampolines, "ax"
+.global BootloaderAPI_Trampolines
+BootloaderAPI_Trampolines:
+
+ BootloaderAPI_ErasePage_Trampoline:
+ jmp BootloaderAPI_ErasePage
+ BootloaderAPI_WritePage_Trampoline:
+ jmp BootloaderAPI_WritePage
+ BootloaderAPI_FillWord_Trampoline:
+ jmp BootloaderAPI_FillWord
+ BootloaderAPI_ReadSignature_Trampoline:
+ jmp BootloaderAPI_ReadSignature
+ BootloaderAPI_ReadFuse_Trampoline:
+ jmp BootloaderAPI_ReadFuse
+ BootloaderAPI_ReadLock_Trampoline:
+ jmp BootloaderAPI_ReadLock
+ BootloaderAPI_WriteLock_Trampoline:
+ jmp BootloaderAPI_WriteLock
+ BootloaderAPI_UNUSED1:
+ ret
+ BootloaderAPI_UNUSED2:
+ ret
+ BootloaderAPI_UNUSED3:
+ ret
+ BootloaderAPI_UNUSED4:
+ ret
+ BootloaderAPI_UNUSED5:
+ ret
+
+
+
+; API function jump table
+.section .apitable_jumptable, "ax"
+.global BootloaderAPI_JumpTable
+BootloaderAPI_JumpTable:
+
+ rjmp BootloaderAPI_ErasePage_Trampoline
+ rjmp BootloaderAPI_WritePage_Trampoline
+ rjmp BootloaderAPI_FillWord_Trampoline
+ rjmp BootloaderAPI_ReadSignature_Trampoline
+ rjmp BootloaderAPI_ReadFuse_Trampoline
+ rjmp BootloaderAPI_ReadLock_Trampoline
+ rjmp BootloaderAPI_WriteLock_Trampoline
+ rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1
+ rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2
+ rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3
+ rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4
+ rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5
+
+
+
+; Bootloader table signatures and information
+.section .apitable_signatures, "ax"
+.global BootloaderAPI_Signatures
+BootloaderAPI_Signatures:
+
+ .long BOOT_START_ADDR ; Start address of the bootloader
+ .word 0xDF30 ; Signature for the MS class bootloader, V1
+ .word 0xDCFB ; Signature for a LUFA class bootloader
diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/asf.xml b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/asf.xml
index f1d550d1e..700ffa26f 100644
--- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/asf.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/asf.xml
@@ -1,156 +1,156 @@
-<asf xmlversion="1.0">
- <project caption="Mass Storage Bootloader - 128KB FLASH / 8KB Boot - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.128_8" force-caption="true" workspace-name="lufa_ms_128kb_8kb_">
- <require idref="lufa.bootloaders.mass_storage"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="at90usb1287"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0x1E000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0x1E000"/>
-
- <build type="define" name="AUX_BOOT_SECTION_SIZE" value="0"/>
-
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
- </project>
-
- <project caption="Mass Storage Bootloader - 64KB FLASH / 8KB Boot - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.64_8" force-caption="true" workspace-name="lufa_ms_64kb_8kb_">
- <require idref="lufa.bootloaders.mass_storage"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="at90usb647"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0xE000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0xE000"/>
-
- <build type="define" name="AUX_BOOT_SECTION_SIZE" value="0"/>
-
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
- </project>
-
- <project caption="Mass Storage Bootloader - 32KB FLASH / 4KB Boot (2KB AUX) - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.32_4" force-caption="true" workspace-name="lufa_ms_32kb_4kb_">
- <require idref="lufa.bootloaders.mass_storage"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="atmega32u4"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0x7000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
-
- <build type="define" name="AUX_BOOT_SECTION_SIZE" value="2048"/>
- <build type="linker-config" subtype="flags" value="--section-start=.boot_aux=0x6810"/>
- <build type="linker-config" subtype="flags" value="--section-start=.boot_aux_trampoline=0x6800"/>
- <build type="linker-config" subtype="flags" value="--undefined=Boot_AUX_Trampoline"/>
-
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
- </project>
-
- <project caption="Mass Storage Bootloader - 16KB FLASH / 4KB Boot (2KB AUX) - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.16_4" force-caption="true" workspace-name="lufa_ms_16kb_4kb_">
- <require idref="lufa.bootloaders.mass_storage"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="atmega16u2"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0x3000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>
-
- <build type="define" name="AUX_BOOT_SECTION_SIZE" value="2048"/>
- <build type="linker-config" subtype="flags" value="--section-start=.boot_aux=0x2810"/>
- <build type="linker-config" subtype="flags" value="--section-start=.boot_aux_trampoline=0x2800"/>
- <build type="linker-config" subtype="flags" value="--undefined=Boot_AUX_Trampoline"/>
-
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
- </project>
-
- <module type="application" id="lufa.bootloaders.mass_storage" caption="Mass Storage Bootloader">
- <info type="description" value="summary">
- Mass Storage Class Bootloader, capable of reprogramming a device via binary BIN files copied to the virtual FAT12 file-system it creates when plugged into a host.
- </info>
-
- <info type="gui-flag" value="move-to-root"/>
-
- <info type="keyword" value="Technology">
- <keyword value="Bootloaders"/>
- <keyword value="USB Device"/>
- </info>
-
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <build type="include-path" value="."/>
- <build type="c-source" value="BootloaderMassStorage.c"/>
- <build type="header-file" value="BootloaderMassStorage.h"/>
- <build type="c-source" value="Descriptors.c"/>
- <build type="header-file" value="Descriptors.h"/>
- <build type="c-source" value="BootloaderAPI.c"/>
- <build type="header-file" value="BootloaderAPI.h"/>
- <build type="asm-source" value="BootloaderAPITable.S"/>
-
- <build type="module-config" subtype="path" value="Config"/>
- <build type="header-file" value="Config/LUFAConfig.h"/>
- <build type="header-file" value="Config/AppConfig.h"/>
-
- <build type="include-path" value="Lib"/>
- <build type="header-file" value="Lib/VirtualFAT.h"/>
- <build type="c-source" value="Lib/VirtualFAT.c"/>
- <build type="header-file" value="Lib/SCSI.h"/>
- <build type="c-source" value="Lib/SCSI.c"/>
-
- <build type="distribute" subtype="user-file" value="doxyfile"/>
- <build type="distribute" subtype="user-file" value="BootloaderMassStorage.txt"/>
-
- <require idref="lufa.common"/>
- <require idref="lufa.platform"/>
- <require idref="lufa.drivers.usb"/>
- <require idref="lufa.drivers.board"/>
- <require idref="lufa.drivers.board.leds"/>
- </module>
-</asf>
+<asf xmlversion="1.0">
+ <project caption="Mass Storage Bootloader - 128KB FLASH / 8KB Boot - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.128_8" force-caption="true" workspace-name="lufa_ms_128kb_8kb_">
+ <require idref="lufa.bootloaders.mass_storage"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="at90usb1287"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0x1E000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0x1E000"/>
+
+ <build type="define" name="AUX_BOOT_SECTION_SIZE" value="0"/>
+
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+ </project>
+
+ <project caption="Mass Storage Bootloader - 64KB FLASH / 8KB Boot - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.64_8" force-caption="true" workspace-name="lufa_ms_64kb_8kb_">
+ <require idref="lufa.bootloaders.mass_storage"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="at90usb647"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0xE000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0xE000"/>
+
+ <build type="define" name="AUX_BOOT_SECTION_SIZE" value="0"/>
+
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+ </project>
+
+ <project caption="Mass Storage Bootloader - 32KB FLASH / 4KB Boot (2KB AUX) - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.32_4" force-caption="true" workspace-name="lufa_ms_32kb_4kb_">
+ <require idref="lufa.bootloaders.mass_storage"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="atmega32u4"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0x7000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
+
+ <build type="define" name="AUX_BOOT_SECTION_SIZE" value="2048"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.boot_aux=0x6810"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.boot_aux_trampoline=0x6800"/>
+ <build type="linker-config" subtype="flags" value="--undefined=Boot_AUX_Trampoline"/>
+
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+ </project>
+
+ <project caption="Mass Storage Bootloader - 16KB FLASH / 4KB Boot (2KB AUX) - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.16_4" force-caption="true" workspace-name="lufa_ms_16kb_4kb_">
+ <require idref="lufa.bootloaders.mass_storage"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="atmega16u2"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0x3000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>
+
+ <build type="define" name="AUX_BOOT_SECTION_SIZE" value="2048"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.boot_aux=0x2810"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.boot_aux_trampoline=0x2800"/>
+ <build type="linker-config" subtype="flags" value="--undefined=Boot_AUX_Trampoline"/>
+
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+ </project>
+
+ <module type="application" id="lufa.bootloaders.mass_storage" caption="Mass Storage Bootloader">
+ <info type="description" value="summary">
+ Mass Storage Class Bootloader, capable of reprogramming a device via binary BIN files copied to the virtual FAT12 file-system it creates when plugged into a host.
+ </info>
+
+ <info type="gui-flag" value="move-to-root"/>
+
+ <info type="keyword" value="Technology">
+ <keyword value="Bootloaders"/>
+ <keyword value="USB Device"/>
+ </info>
+
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="include-path" value="."/>
+ <build type="c-source" value="BootloaderMassStorage.c"/>
+ <build type="header-file" value="BootloaderMassStorage.h"/>
+ <build type="c-source" value="Descriptors.c"/>
+ <build type="header-file" value="Descriptors.h"/>
+ <build type="c-source" value="BootloaderAPI.c"/>
+ <build type="header-file" value="BootloaderAPI.h"/>
+ <build type="asm-source" value="BootloaderAPITable.S"/>
+
+ <build type="module-config" subtype="path" value="Config"/>
+ <build type="header-file" value="Config/LUFAConfig.h"/>
+ <build type="header-file" value="Config/AppConfig.h"/>
+
+ <build type="include-path" value="Lib"/>
+ <build type="header-file" value="Lib/VirtualFAT.h"/>
+ <build type="c-source" value="Lib/VirtualFAT.c"/>
+ <build type="header-file" value="Lib/SCSI.h"/>
+ <build type="c-source" value="Lib/SCSI.c"/>
+
+ <build type="distribute" subtype="user-file" value="doxyfile"/>
+ <build type="distribute" subtype="user-file" value="BootloaderMassStorage.txt"/>
+
+ <require idref="lufa.common"/>
+ <require idref="lufa.platform"/>
+ <require idref="lufa.drivers.usb"/>
+ <require idref="lufa.drivers.board"/>
+ <require idref="lufa.drivers.board.leds"/>
+ </module>
+</asf>
diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/makefile b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/makefile
index 91bb4038e..a0edb2c4f 100644
--- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/makefile
+++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/MassStorage/makefile
@@ -1,68 +1,68 @@
-#
-# LUFA Library
-# Copyright (C) Dean Camera, 2014.
-#
-# dean [at] fourwalledcubicle [dot] com
-# www.lufa-lib.org
-#
-# --------------------------------------
-# LUFA Project Makefile.
-# --------------------------------------
-
-# Run "make help" for target help.
-
-MCU = at90usb1287
-ARCH = AVR8
-BOARD = USBKEY
-F_CPU = 8000000
-F_USB = $(F_CPU)
-OPTIMIZATION = s
-TARGET = BootloaderMassStorage
-SRC = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S Lib/SCSI.c Lib/VirtualFAT.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
-LUFA_PATH = ../../LUFA
-CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)
-LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)
-
-# Flash size and bootloader section sizes of the target, in KB. These must
-# match the target's total FLASH size and the bootloader size set in the
-# device's fuses.
-FLASH_SIZE_KB = 128
-BOOT_SECTION_SIZE_KB = 8
-
-# Bootloader address calculation formulas
-# Do not modify these macros, but rather modify the dependent values above.
-CALC_ADDRESS_IN_HEX = $(shell printf "0x%X" $$(( $(1) )) )
-BOOT_START_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )
-BOOT_SEC_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )
-
-# Bootloader linker section flags for relocating the API table sections to
-# known FLASH addresses - these should not normally be user-edited.
-BOOT_SECTION_LD_FLAG = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2))
-BOOT_API_LD_FLAGS = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96)
-BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable, BootloaderAPI_JumpTable, 32)
-BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures, BootloaderAPI_Signatures, 8)
-
-# Check if the bootloader needs an AUX section, located before the real bootloader section to store some of the
-# bootloader code. This is required for 32KB and smaller devices, where the actual bootloader is 6KB but the maximum
-# bootloader section size is 4KB. The actual usable application space will be reduced by 6KB for these devices.
-ifeq ($(BOOT_SECTION_SIZE_KB),8)
- CC_FLAGS += -DAUX_BOOT_SECTION_SIZE=0
-else
- AUX_BOOT_SECTION_SIZE_KB = (6 - $(BOOT_SECTION_SIZE_KB))
-
- CC_FLAGS += -DAUX_BOOT_SECTION_SIZE='($(AUX_BOOT_SECTION_SIZE_KB) * 1024)'
- LD_FLAGS += -Wl,--section-start=.boot_aux=$(call BOOT_SEC_OFFSET, (($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024 - 16))
- LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .boot_aux_trampoline, Boot_AUX_Trampoline, ($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024)
-endif
-
-# Default target
-all:
-
-# Include LUFA build script makefiles
-include $(LUFA_PATH)/Build/lufa_core.mk
-include $(LUFA_PATH)/Build/lufa_sources.mk
-include $(LUFA_PATH)/Build/lufa_build.mk
-include $(LUFA_PATH)/Build/lufa_cppcheck.mk
-include $(LUFA_PATH)/Build/lufa_doxygen.mk
-include $(LUFA_PATH)/Build/lufa_avrdude.mk
-include $(LUFA_PATH)/Build/lufa_atprogram.mk
+#
+# LUFA Library
+# Copyright (C) Dean Camera, 2014.
+#
+# dean [at] fourwalledcubicle [dot] com
+# www.lufa-lib.org
+#
+# --------------------------------------
+# LUFA Project Makefile.
+# --------------------------------------
+
+# Run "make help" for target help.
+
+MCU = at90usb1287
+ARCH = AVR8
+BOARD = USBKEY
+F_CPU = 8000000
+F_USB = $(F_CPU)
+OPTIMIZATION = s
+TARGET = BootloaderMassStorage
+SRC = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S Lib/SCSI.c Lib/VirtualFAT.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
+LUFA_PATH = ../../LUFA
+CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)
+LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)
+
+# Flash size and bootloader section sizes of the target, in KB. These must
+# match the target's total FLASH size and the bootloader size set in the
+# device's fuses.
+FLASH_SIZE_KB = 128
+BOOT_SECTION_SIZE_KB = 8
+
+# Bootloader address calculation formulas
+# Do not modify these macros, but rather modify the dependent values above.
+CALC_ADDRESS_IN_HEX = $(shell printf "0x%X" $$(( $(1) )) )
+BOOT_START_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )
+BOOT_SEC_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )
+
+# Bootloader linker section flags for relocating the API table sections to
+# known FLASH addresses - these should not normally be user-edited.
+BOOT_SECTION_LD_FLAG = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2))
+BOOT_API_LD_FLAGS = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96)
+BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable, BootloaderAPI_JumpTable, 32)
+BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures, BootloaderAPI_Signatures, 8)
+
+# Check if the bootloader needs an AUX section, located before the real bootloader section to store some of the
+# bootloader code. This is required for 32KB and smaller devices, where the actual bootloader is 6KB but the maximum
+# bootloader section size is 4KB. The actual usable application space will be reduced by 6KB for these devices.
+ifeq ($(BOOT_SECTION_SIZE_KB),8)
+ CC_FLAGS += -DAUX_BOOT_SECTION_SIZE=0
+else
+ AUX_BOOT_SECTION_SIZE_KB = (6 - $(BOOT_SECTION_SIZE_KB))
+
+ CC_FLAGS += -DAUX_BOOT_SECTION_SIZE='($(AUX_BOOT_SECTION_SIZE_KB) * 1024)'
+ LD_FLAGS += -Wl,--section-start=.boot_aux=$(call BOOT_SEC_OFFSET, (($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024 - 16))
+ LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .boot_aux_trampoline, Boot_AUX_Trampoline, ($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024)
+endif
+
+# Default target
+all:
+
+# Include LUFA build script makefiles
+include $(LUFA_PATH)/Build/lufa_core.mk
+include $(LUFA_PATH)/Build/lufa_sources.mk
+include $(LUFA_PATH)/Build/lufa_build.mk
+include $(LUFA_PATH)/Build/lufa_cppcheck.mk
+include $(LUFA_PATH)/Build/lufa_doxygen.mk
+include $(LUFA_PATH)/Build/lufa_avrdude.mk
+include $(LUFA_PATH)/Build/lufa_atprogram.mk
diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/BootloaderAPITable.S b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/BootloaderAPITable.S
index ec499b74e..88c51da82 100644
--- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/BootloaderAPITable.S
+++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/BootloaderAPITable.S
@@ -1,91 +1,91 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2014.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
- Permission to use, copy, modify, distribute, and sell this
- software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaims all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-; Trampolines to actual API implementations if the target address is outside the
-; range of a rjmp instruction (can happen with large bootloader sections)
-.section .apitable_trampolines, "ax"
-.global BootloaderAPI_Trampolines
-BootloaderAPI_Trampolines:
-
- BootloaderAPI_ErasePage_Trampoline:
- jmp BootloaderAPI_ErasePage
- BootloaderAPI_WritePage_Trampoline:
- jmp BootloaderAPI_WritePage
- BootloaderAPI_FillWord_Trampoline:
- jmp BootloaderAPI_FillWord
- BootloaderAPI_ReadSignature_Trampoline:
- jmp BootloaderAPI_ReadSignature
- BootloaderAPI_ReadFuse_Trampoline:
- jmp BootloaderAPI_ReadFuse
- BootloaderAPI_ReadLock_Trampoline:
- jmp BootloaderAPI_ReadLock
- BootloaderAPI_WriteLock_Trampoline:
- jmp BootloaderAPI_WriteLock
- BootloaderAPI_UNUSED1:
- ret
- BootloaderAPI_UNUSED2:
- ret
- BootloaderAPI_UNUSED3:
- ret
- BootloaderAPI_UNUSED4:
- ret
- BootloaderAPI_UNUSED5:
- ret
-
-
-
-; API function jump table
-.section .apitable_jumptable, "ax"
-.global BootloaderAPI_JumpTable
-BootloaderAPI_JumpTable:
-
- rjmp BootloaderAPI_ErasePage_Trampoline
- rjmp BootloaderAPI_WritePage_Trampoline
- rjmp BootloaderAPI_FillWord_Trampoline
- rjmp BootloaderAPI_ReadSignature_Trampoline
- rjmp BootloaderAPI_ReadFuse_Trampoline
- rjmp BootloaderAPI_ReadLock_Trampoline
- rjmp BootloaderAPI_WriteLock_Trampoline
- rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1
- rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2
- rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3
- rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4
- rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5
-
-
-
-; Bootloader table signatures and information
-.section .apitable_signatures, "ax"
-.global BootloaderAPI_Signatures
-BootloaderAPI_Signatures:
-
- .long BOOT_START_ADDR ; Start address of the bootloader
- .word 0xDF20 ; Signature for the Printer class bootloader
- .word 0xDCFB ; Signature for a LUFA class bootloader
+/*
+ LUFA Library
+ Copyright (C) Dean Camera, 2014.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+*/
+
+/*
+ Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+ Permission to use, copy, modify, distribute, and sell this
+ software and its documentation for any purpose is hereby granted
+ without fee, provided that the above copyright notice appear in
+ all copies and that both that the copyright notice and this
+ permission notice and warranty disclaimer appear in supporting
+ documentation, and that the name of the author not be used in
+ advertising or publicity pertaining to distribution of the
+ software without specific, written prior permission.
+
+ The author disclaims all warranties with regard to this
+ software, including all implied warranties of merchantability
+ and fitness. In no event shall the author be liable for any
+ special, indirect or consequential damages or any damages
+ whatsoever resulting from loss of use, data or profits, whether
+ in an action of contract, negligence or other tortious action,
+ arising out of or in connection with the use or performance of
+ this software.
+*/
+
+; Trampolines to actual API implementations if the target address is outside the
+; range of a rjmp instruction (can happen with large bootloader sections)
+.section .apitable_trampolines, "ax"
+.global BootloaderAPI_Trampolines
+BootloaderAPI_Trampolines:
+
+ BootloaderAPI_ErasePage_Trampoline:
+ jmp BootloaderAPI_ErasePage
+ BootloaderAPI_WritePage_Trampoline:
+ jmp BootloaderAPI_WritePage
+ BootloaderAPI_FillWord_Trampoline:
+ jmp BootloaderAPI_FillWord
+ BootloaderAPI_ReadSignature_Trampoline:
+ jmp BootloaderAPI_ReadSignature
+ BootloaderAPI_ReadFuse_Trampoline:
+ jmp BootloaderAPI_ReadFuse
+ BootloaderAPI_ReadLock_Trampoline:
+ jmp BootloaderAPI_ReadLock
+ BootloaderAPI_WriteLock_Trampoline:
+ jmp BootloaderAPI_WriteLock
+ BootloaderAPI_UNUSED1:
+ ret
+ BootloaderAPI_UNUSED2:
+ ret
+ BootloaderAPI_UNUSED3:
+ ret
+ BootloaderAPI_UNUSED4:
+ ret
+ BootloaderAPI_UNUSED5:
+ ret
+
+
+
+; API function jump table
+.section .apitable_jumptable, "ax"
+.global BootloaderAPI_JumpTable
+BootloaderAPI_JumpTable:
+
+ rjmp BootloaderAPI_ErasePage_Trampoline
+ rjmp BootloaderAPI_WritePage_Trampoline
+ rjmp BootloaderAPI_FillWord_Trampoline
+ rjmp BootloaderAPI_ReadSignature_Trampoline
+ rjmp BootloaderAPI_ReadFuse_Trampoline
+ rjmp BootloaderAPI_ReadLock_Trampoline
+ rjmp BootloaderAPI_WriteLock_Trampoline
+ rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1
+ rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2
+ rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3
+ rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4
+ rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5
+
+
+
+; Bootloader table signatures and information
+.section .apitable_signatures, "ax"
+.global BootloaderAPI_Signatures
+BootloaderAPI_Signatures:
+
+ .long BOOT_START_ADDR ; Start address of the bootloader
+ .word 0xDF20 ; Signature for the Printer class bootloader
+ .word 0xDCFB ; Signature for a LUFA class bootloader
diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/asf.xml b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/asf.xml
index 86a56911e..b5c0c6b3a 100644
--- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/asf.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/asf.xml
@@ -1,159 +1,159 @@
-<asf xmlversion="1.0">
- <project caption="Printer Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.128_4" force-caption="true" workspace-name="lufa_printer_128kb_4kb_">
- <require idref="lufa.bootloaders.printer"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="at90usb1287"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0x1F000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>
-
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
- </project>
-
- <project caption="Printer Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.64_4" force-caption="true" workspace-name="lufa_printer_64kb_4kb_">
- <require idref="lufa.bootloaders.printer"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="at90usb647"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0xF000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>
-
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
- </project>
-
- <project caption="Printer Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.32_4" force-caption="true" workspace-name="lufa_printer_32kb_4kb_">
- <require idref="lufa.bootloaders.printer"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="atmega32u4"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0x7000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
-
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
- </project>
-
- <project caption="Printer Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.16_4" force-caption="true" workspace-name="lufa_printer_16kb_4kb_">
- <require idref="lufa.bootloaders.printer"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="atmega16u2"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0x3000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>
-
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
- </project>
-
- <project caption="Printer Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.8_4" force-caption="true" workspace-name="lufa_printer_8kb_4kb_">
- <require idref="lufa.bootloaders.printer"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8"/>
-
- <device-support value="atmega8u2"/>
- <config name="lufa.drivers.board.name" value="none"/>
-
- <config name="config.compiler.optimization.level" value="size"/>
-
- <build type="define" name="F_CPU" value="16000000UL"/>
- <build type="define" name="F_USB" value="16000000UL"/>
-
- <build type="define" name="BOOT_START_ADDR" value="0x1000"/>
- <build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>
-
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
- <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>
- <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
- </project>
-
- <module type="application" id="lufa.bootloaders.printer" caption="Printer Bootloader">
- <info type="description" value="summary">
- Printer Class Bootloader, capable of reprogramming a device by "printing" new HEX files to the virtual Plain-Text printer it creates when plugged into a host.
- </info>
-
- <info type="gui-flag" value="move-to-root"/>
-
- <info type="keyword" value="Technology">
- <keyword value="Bootloaders"/>
- <keyword value="USB Device"/>
- </info>
-
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <build type="include-path" value="."/>
- <build type="c-source" value="BootloaderPrinter.c"/>
- <build type="header-file" value="BootloaderPrinter.h"/>
- <build type="c-source" value="Descriptors.c"/>
- <build type="header-file" value="Descriptors.h"/>
- <build type="c-source" value="BootloaderAPI.c"/>
- <build type="header-file" value="BootloaderAPI.h"/>
- <build type="asm-source" value="BootloaderAPITable.S"/>
-
- <build type="module-config" subtype="path" value="Config"/>
- <build type="header-file" value="Config/LUFAConfig.h"/>
-
- <build type="distribute" subtype="user-file" value="doxyfile"/>
- <build type="distribute" subtype="user-file" value="BootloaderPrinter.txt"/>
-
- <require idref="lufa.common"/>
- <require idref="lufa.platform"/>
- <require idref="lufa.drivers.usb"/>
- <require idref="lufa.drivers.board"/>
- <require idref="lufa.drivers.board.leds"/>
- </module>
-</asf>
+<asf xmlversion="1.0">
+ <project caption="Printer Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.128_4" force-caption="true" workspace-name="lufa_printer_128kb_4kb_">
+ <require idref="lufa.bootloaders.printer"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="at90usb1287"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0x1F000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>
+
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+ </project>
+
+ <project caption="Printer Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.64_4" force-caption="true" workspace-name="lufa_printer_64kb_4kb_">
+ <require idref="lufa.bootloaders.printer"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="at90usb647"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0xF000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>
+
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+ </project>
+
+ <project caption="Printer Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.32_4" force-caption="true" workspace-name="lufa_printer_32kb_4kb_">
+ <require idref="lufa.bootloaders.printer"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="atmega32u4"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0x7000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
+
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+ </project>
+
+ <project caption="Printer Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.16_4" force-caption="true" workspace-name="lufa_printer_16kb_4kb_">
+ <require idref="lufa.bootloaders.printer"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="atmega16u2"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0x3000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>
+
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+ </project>
+
+ <project caption="Printer Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.8_4" force-caption="true" workspace-name="lufa_printer_8kb_4kb_">
+ <require idref="lufa.bootloaders.printer"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8"/>
+
+ <device-support value="atmega8u2"/>
+ <config name="lufa.drivers.board.name" value="none"/>
+
+ <config name="config.compiler.optimization.level" value="size"/>
+
+ <build type="define" name="F_CPU" value="16000000UL"/>
+ <build type="define" name="F_USB" value="16000000UL"/>
+
+ <build type="define" name="BOOT_START_ADDR" value="0x1000"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>
+
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
+ <build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>
+ <build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
+ </project>
+
+ <module type="application" id="lufa.bootloaders.printer" caption="Printer Bootloader">
+ <info type="description" value="summary">
+ Printer Class Bootloader, capable of reprogramming a device by "printing" new HEX files to the virtual Plain-Text printer it creates when plugged into a host.
+ </info>
+
+ <info type="gui-flag" value="move-to-root"/>
+
+ <info type="keyword" value="Technology">
+ <keyword value="Bootloaders"/>
+ <keyword value="USB Device"/>
+ </info>
+
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="include-path" value="."/>
+ <build type="c-source" value="BootloaderPrinter.c"/>
+ <build type="header-file" value="BootloaderPrinter.h"/>
+ <build type="c-source" value="Descriptors.c"/>
+ <build type="header-file" value="Descriptors.h"/>
+ <build type="c-source" value="BootloaderAPI.c"/>
+ <build type="header-file" value="BootloaderAPI.h"/>
+ <build type="asm-source" value="BootloaderAPITable.S"/>
+
+ <build type="module-config" subtype="path" value="Config"/>
+ <build type="header-file" value="Config/LUFAConfig.h"/>
+
+ <build type="distribute" subtype="user-file" value="doxyfile"/>
+ <build type="distribute" subtype="user-file" value="BootloaderPrinter.txt"/>
+
+ <require idref="lufa.common"/>
+ <require idref="lufa.platform"/>
+ <require idref="lufa.drivers.usb"/>
+ <require idref="lufa.drivers.board"/>
+ <require idref="lufa.drivers.board.leds"/>
+ </module>
+</asf>
diff --git a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/makefile b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/makefile
index 0716c3bbe..0db035de3 100644
--- a/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/makefile
+++ b/tmk_core/protocol/lufa/LUFA-git/Bootloaders/Printer/makefile
@@ -1,55 +1,55 @@
-#
-# LUFA Library
-# Copyright (C) Dean Camera, 2014.
-#
-# dean [at] fourwalledcubicle [dot] com
-# www.lufa-lib.org
-#
-# --------------------------------------
-# LUFA Project Makefile.
-# --------------------------------------
-
-# Run "make help" for target help.
-
-MCU = at90usb1287
-ARCH = AVR8
-BOARD = USBKEY
-F_CPU = 8000000
-F_USB = $(F_CPU)
-OPTIMIZATION = s
-TARGET = BootloaderPrinter
-SRC = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
-LUFA_PATH = ../../LUFA
-CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)
-LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)
-
-# Flash size and bootloader section sizes of the target, in KB. These must
-# match the target's total FLASH size and the bootloader size set in the
-# device's fuses.
-FLASH_SIZE_KB = 128
-BOOT_SECTION_SIZE_KB = 8
-
-# Bootloader address calculation formulas
-# Do not modify these macros, but rather modify the dependent values above.
-CALC_ADDRESS_IN_HEX = $(shell printf "0x%X" $$(( $(1) )) )
-BOOT_START_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )
-BOOT_SEC_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )
-
-# Bootloader linker section flags for relocating the API table sections to
-# known FLASH addresses - these should not normally be user-edited.
-BOOT_SECTION_LD_FLAG = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2))
-BOOT_API_LD_FLAGS = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96)
-BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable, BootloaderAPI_JumpTable, 32)
-BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures, BootloaderAPI_Signatures, 8)
-
-# Default target
-all:
-
-# Include LUFA build script makefiles
-include $(LUFA_PATH)/Build/lufa_core.mk
-include $(LUFA_PATH)/Build/lufa_sources.mk
-include $(LUFA_PATH)/Build/lufa_build.mk
-include $(LUFA_PATH)/Build/lufa_cppcheck.mk
-include $(LUFA_PATH)/Build/lufa_doxygen.mk
-include $(LUFA_PATH)/Build/lufa_avrdude.mk
-include $(LUFA_PATH)/Build/lufa_atprogram.mk
+#
+# LUFA Library
+# Copyright (C) Dean Camera, 2014.
+#
+# dean [at] fourwalledcubicle [dot] com
+# www.lufa-lib.org
+#
+# --------------------------------------
+# LUFA Project Makefile.
+# --------------------------------------
+
+# Run "make help" for target help.
+
+MCU = at90usb1287
+ARCH = AVR8
+BOARD = USBKEY
+F_CPU = 8000000
+F_USB = $(F_CPU)
+OPTIMIZATION = s
+TARGET = BootloaderPrinter
+SRC = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
+LUFA_PATH = ../../LUFA
+CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)
+LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)
+
+# Flash size and bootloader section sizes of the target, in KB. These must
+# match the target's total FLASH size and the bootloader size set in the
+# device's fuses.
+FLASH_SIZE_KB = 128
+BOOT_SECTION_SIZE_KB = 8
+
+# Bootloader address calculation formulas
+# Do not modify these macros, but rather modify the dependent values above.
+CALC_ADDRESS_IN_HEX = $(shell printf "0x%X" $$(( $(1) )) )
+BOOT_START_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )
+BOOT_SEC_OFFSET = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )
+
+# Bootloader linker section flags for relocating the API table sections to
+# known FLASH addresses - these should not normally be user-edited.
+BOOT_SECTION_LD_FLAG = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2))
+BOOT_API_LD_FLAGS = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96)
+BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable, BootloaderAPI_JumpTable, 32)
+BOOT_API_LD_FLAGS += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures, BootloaderAPI_Signatures, 8)
+
+# Default target
+all:
+
+# Include LUFA build script makefiles
+include $(LUFA_PATH)/Build/lufa_core.mk
+include $(LUFA_PATH)/Build/lufa_sources.mk
+include $(LUFA_PATH)/Build/lufa_build.mk
+include $(LUFA_PATH)/Build/lufa_cppcheck.mk
+include $(LUFA_PATH)/Build/lufa_doxygen.mk
+include $(LUFA_PATH)/Build/lufa_avrdude.mk
+include $(LUFA_PATH)/Build/lufa_atprogram.mk
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/Build/HID_EEPROM_Loader/makefile b/tmk_core/protocol/lufa/LUFA-git/LUFA/Build/HID_EEPROM_Loader/makefile
index 9fd188c93..e839ba6b1 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/Build/HID_EEPROM_Loader/makefile
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/Build/HID_EEPROM_Loader/makefile
@@ -1,42 +1,42 @@
-#
-# LUFA Library
-# Copyright (C) Dean Camera, 2014.
-#
-# dean [at] fourwalledcubicle [dot] com
-# www.lufa-lib.org
-#
-# --------------------------------------
-# LUFA Project Makefile.
-# --------------------------------------
-
-# Run "make help" for target help.
-
-MCU = at90usb1287
-ARCH = AVR8
-F_CPU = 1000000
-F_USB = $(F_CPU)
-OPTIMIZATION = s
-TARGET = HID_EEPROM_Loader
-SRC = $(TARGET).c
-LUFA_PATH = ../../../LUFA
-CC_FLAGS =
-LD_FLAGS =
-OBJECT_FILES = InputEEData.o
-
-# Default target
-all:
-
-# Determine the AVR sub-architecture of the build main application object file
-FIND_AVR_SUBARCH = avr$(shell avr-objdump -f $(TARGET).o | grep architecture | cut -d':' -f3 | cut -d',' -f1)
-
-# Create a linkable object file with the input binary EEPROM data stored in the FLASH section
-InputEEData.o: InputEEData.bin $(TARGET).o $(MAKEFILE_LIST)
- @echo $(MSG_OBJCPY_CMD) Converting \"$<\" to a object file \"$@\"
- avr-objcopy -I binary -O elf32-avr -B $(call FIND_AVR_SUBARCH) --rename-section .data=.progmem.data,contents,alloc,readonly,data $< $@
-
-# Include LUFA build script makefiles
-include $(LUFA_PATH)/Build/lufa_core.mk
-include $(LUFA_PATH)/Build/lufa_build.mk
-include $(LUFA_PATH)/Build/lufa_cppcheck.mk
-include $(LUFA_PATH)/Build/lufa_doxygen.mk
-include $(LUFA_PATH)/Build/lufa_hid.mk
+#
+# LUFA Library
+# Copyright (C) Dean Camera, 2014.
+#
+# dean [at] fourwalledcubicle [dot] com
+# www.lufa-lib.org
+#
+# --------------------------------------
+# LUFA Project Makefile.
+# --------------------------------------
+
+# Run "make help" for target help.
+
+MCU = at90usb1287
+ARCH = AVR8
+F_CPU = 1000000
+F_USB = $(F_CPU)
+OPTIMIZATION = s
+TARGET = HID_EEPROM_Loader
+SRC = $(TARGET).c
+LUFA_PATH = ../../../LUFA
+CC_FLAGS =
+LD_FLAGS =
+OBJECT_FILES = InputEEData.o
+
+# Default target
+all:
+
+# Determine the AVR sub-architecture of the build main application object file
+FIND_AVR_SUBARCH = avr$(shell avr-objdump -f $(TARGET).o | grep architecture | cut -d':' -f3 | cut -d',' -f1)
+
+# Create a linkable object file with the input binary EEPROM data stored in the FLASH section
+InputEEData.o: InputEEData.bin $(TARGET).o $(MAKEFILE_LIST)
+ @echo $(MSG_OBJCPY_CMD) Converting \"$<\" to a object file \"$@\"
+ avr-objcopy -I binary -O elf32-avr -B $(call FIND_AVR_SUBARCH) --rename-section .data=.progmem.data,contents,alloc,readonly,data $< $@
+
+# Include LUFA build script makefiles
+include $(LUFA_PATH)/Build/lufa_core.mk
+include $(LUFA_PATH)/Build/lufa_build.mk
+include $(LUFA_PATH)/Build/lufa_cppcheck.mk
+include $(LUFA_PATH)/Build/lufa_doxygen.mk
+include $(LUFA_PATH)/Build/lufa_hid.mk
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/asf.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/asf.xml
index fd65db283..e952714e1 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/asf.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/DeviceTemplate/asf.xml
@@ -1,55 +1,55 @@
-<asf xmlversion="1.0">
- <project caption="USB Device Template" id="lufa.templates.device.project.avr8">
- <require idref="lufa.templates.device"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8_template"/>
-
- <device-support value="at90usb1287"/>
- <config name="lufa.drivers.board.name" value="usbkey"/>
-
- <build type="define" name="F_CPU" value="8000000UL"/>
- <build type="define" name="F_USB" value="8000000UL"/>
- </project>
-
- <project caption="USB Device Template" id="lufa.templates.device.project.xmega">
- <require idref="lufa.templates.device"/>
- <require idref="lufa.boards.dummy.xmega"/>
- <generator value="as5_8_template"/>
-
- <device-support value="atxmega256a3bu"/>
- <config name="lufa.drivers.board.name" value="a3bu_xplained"/>
-
- <build type="define" name="F_CPU" value="32000000UL"/>
- <build type="define" name="F_USB" value="48000000UL"/>
- </project>
-
- <module type="application" id="lufa.templates.device" caption="USB Device Template">
- <info type="description" value="summary">
- Template for a LUFA USB device mode application.
- </info>
-
- <info type="gui-flag" value="move-to-root"/>
-
- <info type="keyword" value="Technology">
- <keyword value="USB Device"/>
- <keyword value="Template Projects"/>
- </info>
-
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <build type="c-source" value="DeviceApplication.c"/>
- <build type="c-source" value="Descriptors.c"/>
- <build type="header-file" value="DeviceApplication.h"/>
- <build type="header-file" value="Descriptors.h"/>
-
- <build type="module-config" subtype="path" value=".."/>
- <build type="header-file" value="../LUFAConfig.h"/>
-
- <require idref="lufa.common"/>
- <require idref="lufa.platform"/>
- <require idref="lufa.drivers.usb"/>
- <require idref="lufa.drivers.board"/>
- </module>
-</asf>
+<asf xmlversion="1.0">
+ <project caption="USB Device Template" id="lufa.templates.device.project.avr8">
+ <require idref="lufa.templates.device"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8_template"/>
+
+ <device-support value="at90usb1287"/>
+ <config name="lufa.drivers.board.name" value="usbkey"/>
+
+ <build type="define" name="F_CPU" value="8000000UL"/>
+ <build type="define" name="F_USB" value="8000000UL"/>
+ </project>
+
+ <project caption="USB Device Template" id="lufa.templates.device.project.xmega">
+ <require idref="lufa.templates.device"/>
+ <require idref="lufa.boards.dummy.xmega"/>
+ <generator value="as5_8_template"/>
+
+ <device-support value="atxmega256a3bu"/>
+ <config name="lufa.drivers.board.name" value="a3bu_xplained"/>
+
+ <build type="define" name="F_CPU" value="32000000UL"/>
+ <build type="define" name="F_USB" value="48000000UL"/>
+ </project>
+
+ <module type="application" id="lufa.templates.device" caption="USB Device Template">
+ <info type="description" value="summary">
+ Template for a LUFA USB device mode application.
+ </info>
+
+ <info type="gui-flag" value="move-to-root"/>
+
+ <info type="keyword" value="Technology">
+ <keyword value="USB Device"/>
+ <keyword value="Template Projects"/>
+ </info>
+
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="c-source" value="DeviceApplication.c"/>
+ <build type="c-source" value="Descriptors.c"/>
+ <build type="header-file" value="DeviceApplication.h"/>
+ <build type="header-file" value="Descriptors.h"/>
+
+ <build type="module-config" subtype="path" value=".."/>
+ <build type="header-file" value="../LUFAConfig.h"/>
+
+ <require idref="lufa.common"/>
+ <require idref="lufa.platform"/>
+ <require idref="lufa.drivers.usb"/>
+ <require idref="lufa.drivers.board"/>
+ </module>
+</asf>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/HostTemplate/asf.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/HostTemplate/asf.xml
index c1996ec71..c3860c056 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/HostTemplate/asf.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/CodeTemplates/HostTemplate/asf.xml
@@ -1,41 +1,41 @@
-<asf xmlversion="1.0">
- <project caption="USB Host Template" id="lufa.templates.host.project">
- <require idref="lufa.templates.host"/>
- <require idref="lufa.boards.dummy.avr8"/>
- <generator value="as5_8_template"/>
-
- <device-support value="at90usb1287"/>
- <config name="lufa.drivers.board.name" value="usbkey"/>
-
- <build type="define" name="F_CPU" value="8000000UL"/>
- <build type="define" name="F_USB" value="8000000UL"/>
- </project>
-
- <module type="application" id="lufa.templates.host" caption="USB Host Template">
- <info type="description" value="summary">
- Template for a LUFA USB host mode application.
- </info>
-
- <info type="gui-flag" value="move-to-root"/>
-
- <info type="keyword" value="Technology">
- <keyword value="USB Host"/>
- <keyword value="Template Projects"/>
- </info>
-
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <build type="c-source" value="HostApplication.c"/>
- <build type="header-file" value="HostApplication.h"/>
-
- <build type="module-config" subtype="path" value=".."/>
- <build type="header-file" value="../LUFAConfig.h"/>
-
- <require idref="lufa.common"/>
- <require idref="lufa.platform"/>
- <require idref="lufa.drivers.usb"/>
- <require idref="lufa.drivers.board"/>
- </module>
-</asf>
+<asf xmlversion="1.0">
+ <project caption="USB Host Template" id="lufa.templates.host.project">
+ <require idref="lufa.templates.host"/>
+ <require idref="lufa.boards.dummy.avr8"/>
+ <generator value="as5_8_template"/>
+
+ <device-support value="at90usb1287"/>
+ <config name="lufa.drivers.board.name" value="usbkey"/>
+
+ <build type="define" name="F_CPU" value="8000000UL"/>
+ <build type="define" name="F_USB" value="8000000UL"/>
+ </project>
+
+ <module type="application" id="lufa.templates.host" caption="USB Host Template">
+ <info type="description" value="summary">
+ Template for a LUFA USB host mode application.
+ </info>
+
+ <info type="gui-flag" value="move-to-root"/>
+
+ <info type="keyword" value="Technology">
+ <keyword value="USB Host"/>
+ <keyword value="Template Projects"/>
+ </info>
+
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="c-source" value="HostApplication.c"/>
+ <build type="header-file" value="HostApplication.h"/>
+
+ <build type="module-config" subtype="path" value=".."/>
+ <build type="header-file" value="../LUFAConfig.h"/>
+
+ <require idref="lufa.common"/>
+ <require idref="lufa.platform"/>
+ <require idref="lufa.drivers.usb"/>
+ <require idref="lufa.drivers.board"/>
+ </module>
+</asf>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/DoxygenPages/BuildSystem.txt b/tmk_core/protocol/lufa/LUFA-git/LUFA/DoxygenPages/BuildSystem.txt
index 7ddfa1be3..0ae1dd678 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/DoxygenPages/BuildSystem.txt
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/DoxygenPages/BuildSystem.txt
@@ -1,975 +1,975 @@
-/** \file
- *
- * This file contains special DoxyGen information for the generation of the main page and other special
- * documentation pages. It is not a project source file.
- */
-
-/** \page Page_BuildSystem The LUFA Build System
- *
- * \section Sec_BuildSystem_Overview Overview of the LUFA Build System
- * The LUFA build system is an attempt at making a set of re-usable, modular build make files which
- * can be referenced in a LUFA powered project, to minimize the amount of code required in an
- * application makefile. The system is written in GNU Make, and each module is independent of
- * one-another.
- *
- * For details on the prerequisites needed for Linux and Windows machines to be able to use the LUFA
- * build system, see \ref Sec_CompilingApps_Prerequisites.
- *
- * To use a LUFA build system module, simply add an include to your project makefile. All user projects
- * should at a minimum include \ref Page_BuildModule_CORE for base functionality:
- * \code
- * include $(LUFA_PATH)/Build/lufa_core.mk
- * \endcode
- *
- * Once included in your project makefile, the associated build module targets will be added to your
- * project's build makefile targets automatically. To call a build target, run <tt>make {TARGET_NAME}</tt>
- * from the command line, substituting in the appropriate target name.
- *
- * \see \ref Sec_ConfiguringApps_AppMakefileParams for a copy of the sample LUFA project makefile.
- *
- * Each build module may have one or more mandatory parameters (GNU Make variables) which <i>must</i>
- * be supplied in the project makefile for the module to work, and one or more optional parameters which
- * may be defined and which will assume a sensible default if not.
- *
- * \section SSec_BuildSystem_Modules Available Modules
- *
- * The following modules are included in this LUFA release:
- *
- * \li \subpage Page_BuildModule_ATPROGRAM - Device Programming
- * \li \subpage Page_BuildModule_AVRDUDE - Device Programming
- * \li \subpage Page_BuildModule_BUILD - Compiling/Assembling/Linking
- * \li \subpage Page_BuildModule_CORE - Core Build System Functions
- * \li \subpage Page_BuildModule_CPPCHECK - Static Code Analysis
- * \li \subpage Page_BuildModule_DFU - Device Programming
- * \li \subpage Page_BuildModule_DOXYGEN - Automated Source Code Documentation
- * \li \subpage Page_BuildModule_HID - Device Programming
- * \li \subpage Page_BuildModule_SOURCES - LUFA Module Source Code Variables
- *
- * If you have problems building using the LUFA build system, see \subpage Page_BuildTroubleshooting for resolution steps.
- */
-
- /** \page Page_BuildModule_BUILD The BUILD build module
- *
- * The BUILD LUFA build system module, providing targets for the compilation,
- * assembling and linking of an application from source code into binary files
- * suitable for programming into a target device, using the GCC compiler.
- *
- * To use this module in your application makefile, add the following code:
- * \code
- * include $(LUFA_PATH)/Build/lufa_build.mk
- * \endcode
- *
- * \section SSec_BuildModule_BUILD_Requirements Requirements
- * This module requires the the architecture appropriate binaries of the GCC compiler are available in your
- * system's <b>PATH</b> variable. The GCC compiler and associated toolchain is distributed in Atmel AVR Studio
- * 5.x and Atmel Studio 6.x installation directories, as well as in many third party distribution packages.
- *
- * \section SSec_BuildModule_BUILD_Targets Targets
- *
- * <table>
- * <tr>
- * <td><tt>size</tt></td>
- * <td>Display size of the compiled application FLASH and SRAM segments.</td>
- * </tr>
- * <tr>
- * <td><tt>symbol-sizes</tt></td>
- * <td>Display a size-sorted list of symbols from the compiled application, in decimal bytes.</td>
- * </tr>
- * <tr>
- * <td><tt>lib</tt></td>
- * <td>Build and archive all source files into a library A binary file.</td>
- * </tr>
- * <tr>
- * <td><tt>all</tt></td>
- * <td>Build and link the application into ELF debug and HEX binary files.</td>
- * </tr>
- * <tr>
- * <td><tt>elf</tt></td>
- * <td>Build and link the application into an ELF debug file.</td>
- * </tr>
- * <tr>
- * <td><tt>bin</tt></td>
- * <td>Build and link the application and produce a BIN binary file.</td>
- * </tr>
- * <tr>
- * <td><tt>hex</tt></td>
- * <td>Build and link the application and produce HEX and EEP binary files.</td>
- * </tr>
- * <tr>
- * <td><tt>lss</tt></td>
- * <td>Build and link the application and produce a LSS source code/assembly code mixed listing file.</td>
- * </tr>
- * <tr>
- * <td><tt>clean</tt></td>
- * <td>Remove all intermediary files and binary output files.</td>
- * </tr>
- * <tr>
- * <td><tt>mostlyclean</tt></td>
- * <td>Remove all intermediary files but preserve any binary output files.</td>
- * </tr>
- * <tr>
- * <td><tt><i>&lt;filename&gt;</i>.s</tt></td>
- * <td>Create an assembly listing of a given input C/C++ source file.</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_BUILD_MandatoryParams Mandatory Parameters
- *
- * <table>
- * <tr>
- * <td><tt>TARGET</tt></td>
- * <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
- * </tr>
- * <tr>
- * <td><tt>ARCH</tt></td>
- * <td>Architecture of the target processor (see \ref Page_DeviceSupport).</td>
- * </tr>
- * <tr>
- * <td><tt>MCU</tt></td>
- * <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
- * </tr>
- * <tr>
- * <td><tt>SRC</tt></td>
- * <td>List of relative or absolute paths to the application C (.c), C++ (.cpp) and Assembly (.S) source files.</td>
- * </tr>
- * <tr>
- * <td><tt>F_USB</tt></td>
- * <td>Speed in Hz of the input clock frequency to the target's USB controller.</td>
- * </tr>
- * <tr>
- * <td><tt>LUFA_PATH</tt></td>
- * <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_BUILD_OptionalParams Optional Parameters
- *
- * <table>
- * <tr>
- * <td><tt>BOARD</tt></td>
- * <td>LUFA board hardware drivers to use (see \ref Page_DeviceSupport).</td>
- * </tr>
- * <tr>
- * <td><tt>OPTIMIZATION</tt></td>
- * <td>Optimization level to use when compiling source files (see GCC manual).</td>
- * </tr>
- * <tr>
- * <td><tt>C_STANDARD</tt></td>
- * <td>Version of the C standard to apply when compiling C++ source files (see GCC manual).</td>
- * </tr>
- * <tr>
- * <td><tt>CPP_STANDARD</tt></td>
- * <td>Version of the C++ standard to apply when compiling C++ source files (see GCC manual).</td>
- * </tr>
- * <tr>
- * <td><tt>DEBUG_FORMAT</tt></td>
- * <td>Format of the debug information to embed in the generated object files (see GCC manual).</td>
- * </tr>
- * <tr>
- * <td><tt>DEBUG_LEVEL</tt></td>
- * <td>Level of the debugging information to embed in the generated object files (see GCC manual).</td>
- * </tr>
- * <tr>
- * <td><tt>F_CPU</tt></td>
- * <td>Speed of the processor CPU clock, in Hz.</td>
- * </tr>
- * <tr>
- * <td><tt>C_FLAGS</tt></td>
- * <td>Flags to pass to the C compiler only, after the automatically generated flags.</td>
- * </tr>
- * <tr>
- * <td><tt>CPP_FLAGS</tt></td>
- * <td>Flags to pass to the C++ compiler only, after the automatically generated flags.</td>
- * </tr>
- * <tr>
- * <td><tt>ASM_FLAGS</tt></td>
- * <td>Flags to pass to the assembler only, after the automatically generated flags.</td>
- * </tr>
- * <tr>
- * <td><tt>CC_FLAGS</tt></td>
- * <td>Common flags to pass to the C/C++ compiler and assembler, after the automatically generated flags.</td>
- * </tr>
- * <tr>
- * <td><tt>COMPILER_PATH</tt></td>
- * <td>Directory where the C/C++ toolchain is located, if not available in the system <tt>PATH</tt>.</td>
- * </tr>
- * <tr>
- * <td><tt>LD_FLAGS</tt></td>
- * <td>Flags to pass to the linker, after the automatically generated flags.</td>
- * </tr>
- * <tr>
- * <td><tt>LINKER_RELAXATIONS</tt></td>
- * <td>Enables or disables linker relaxations when linking the application binary. This can reduce the total size
- * of the application by replacing full \c CALL instructions with smaller \c RCALL instructions where possible.
- * \note On some unpatched versions of binutils, this can cause link failures in some circumstances. If you
- * receive a link error <tt>relocation truncated to fit: R_AVR_13_PCREL</tt>, disable this setting.</td>
- * </tr>
- * <tr>
- * <td><tt>OBJDIR</tt></td>
- * <td>Directory to place the generated object and dependency files. If set to "." the same folder as the source file will be used.
- * \note When this option is enabled, all source filenames <b>must</b> be unique.</td>
- * </tr>
- * <tr>
- * <td><tt>OBJECT_FILES</tt></td>
- * <td>List of additional object files that should be linked into the resulting binary.</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_BUILD_ProvidedVariables Module Provided Variables
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_BUILD_ProvidedMacros Module Provided Macros
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- */
-
-/** \page Page_BuildModule_CORE The CORE build module
- *
- * The core LUFA build system module, providing common build system help and information targets.
- *
- * To use this module in your application makefile, add the following code:
- * \code
- * include $(LUFA_PATH)/Build/lufa_core.mk
- * \endcode
- *
- * \section SSec_BuildModule_CORE_Requirements Requirements
- * This module has no requirements outside a standard *nix shell like environment; the <tt>sh</tt>
- * shell, GNU <tt>make</tt> and *nix CoreUtils (<tt>echo</tt>, <tt>printf</tt>, etc.).
- *
- * \section SSec_BuildModule_CORE_Targets Targets
- *
- * <table>
- * <tr>
- * <td><tt>help</tt></td>
- * <td>Display build system help and configuration information.</td>
- * </tr>
- * <tr>
- * <td><tt>list_targets</tt></td>
- * <td>List all available build targets from the build system.</td>
- * </tr>
- * <tr>
- * <td><tt>list_modules</tt></td>
- * <td>List all available build modules from the build system.</td>
- * </tr>
- * <tr>
- * <td><tt>list_mandatory</tt></td>
- * <td>List all mandatory parameters required by the included modules.</td>
- * </tr>
- * <tr>
- * <td><tt>list_optional</tt></td>
- * <td>List all optional parameters required by the included modules.</td>
- * </tr>
- * <tr>
- * <td><tt>list_provided</tt></td>
- * <td>List all variables provided by the included modules.</td>
- * </tr>
- * <tr>
- * <td><tt>list_macros</tt></td>
- * <td>List all macros provided by the included modules.</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_CORE_MandatoryParams Mandatory Parameters
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_CORE_OptionalParams Optional Parameters
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_CORE_ProvidedVariables Module Provided Variables
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_CORE_ProvidedMacros Module Provided Macros
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- */
-
-/** \page Page_BuildModule_ATPROGRAM The ATPROGRAM build module
- *
- * The ATPROGRAM programming utility LUFA build system module, providing targets to reprogram an
- * Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.
- *
- * To use this module in your application makefile, add the following code:
- * \code
- * include $(LUFA_PATH)/Build/lufa_atprogram.mk
- * \endcode
- *
- * \section SSec_BuildModule_ATPROGRAM_Requirements Requirements
- * This module requires the <tt>atprogram.exe</tt> utility to be available in your system's <b>PATH</b>
- * variable. The <tt>atprogram.exe</tt> utility is distributed in Atmel AVR Studio 5.x and Atmel Studio 6.x
- * inside the application install folder's "\atbackend" subdirectory.
- *
- * \section SSec_BuildModule_ATPROGRAM_Targets Targets
- *
- * <table>
- * <tr>
- * <td><tt>atprogram</tt></td>
- * <td>Program the device FLASH memory with the application's executable data.</td>
- * </tr>
- * <tr>
- * <td><tt>atprogram-ee</tt></td>
- * <td>Program the device EEPROM memory with the application's EEPROM data.</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_ATPROGRAM_MandatoryParams Mandatory Parameters
- *
- * <table>
- * <tr>
- * <td><tt>MCU</tt></td>
- * <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
- * </tr>
- * <tr>
- * <td><tt>TARGET</tt></td>
- * <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_ATPROGRAM_OptionalParams Optional Parameters
- *
- * <table>
- * <tr>
- * <td><tt>ATPROGRAM_PROGRAMMER</tt></td>
- * <td>Name of the Atmel programmer or debugger tool to communicate with (e.g. <tt>jtagice3</tt>).</td>
- * </tr>
- * <tr>
- * <td><tt>ATPROGRAM_INTERFACE</tt></td>
- * <td>Name of the programming interface to use when programming the target (e.g. <tt>spi</tt>).</td>
- * </tr>
- * <tr>
- * <td><tt>ATPROGRAM_PORT</tt></td>
- * <td>Name of the communication port to use when when programming with a serially connected tool (e.g. <tt>COM2</tt>).</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_ATPROGRAM_ProvidedVariables Module Provided Variables
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_ATPROGRAM_ProvidedMacros Module Provided Macros
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- */
-
-/** \page Page_BuildModule_AVRDUDE The AVRDUDE build module
- *
- * The AVRDUDE programming utility LUFA build system module, providing targets to reprogram an
- * Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.
- *
- * To use this module in your application makefile, add the following code:
- * \code
- * include $(LUFA_PATH)/Build/lufa_avrdude.mk
- * \endcode
- *
- * \section SSec_BuildModule_AVRDUDE_Requirements Requirements
- * This module requires the <tt>avrdude</tt> utility to be available in your system's <b>PATH</b>
- * variable. The <tt>avrdude</tt> utility is distributed in the old WinAVR project releases for
- * Windows (<a>http://winavr.sourceforge.net</a>) or can be installed on *nix systems via the project's
- * source code (<a>https://savannah.nongnu.org/projects/avrdude</a>) or through the package manager.
- *
- * \section SSec_BuildModule_AVRDUDE_Targets Targets
- *
- * <table>
- * <tr>
- * <td><tt>avrdude</tt></td>
- * <td>Program the device FLASH memory with the application's executable data.</td>
- * </tr>
- * <tr>
- * <td><tt>avrdude-ee</tt></td>
- * <td>Program the device EEPROM memory with the application's EEPROM data.</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_AVRDUDE_MandatoryParams Mandatory Parameters
- *
- * <table>
- * <tr>
- * <td><tt>MCU</tt></td>
- * <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
- * </tr>
- * <tr>
- * <td><tt>TARGET</tt></td>
- * <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_AVRDUDE_OptionalParams Optional Parameters
- *
- * <table>
- * <tr>
- * <td><tt>AVRDUDE_PROGRAMMER</tt></td>
- * <td>Name of the programmer or debugger tool to communicate with (e.g. <tt>jtagicemkii</tt>).</td>
- * </tr>
- * <tr>
- * <td><tt>AVRDUDE_PORT</tt></td>
- * <td>Name of the communication port to use when when programming with the connected tool (e.g. <tt>COM2</tt>, <tt>/dev/ttyUSB0</tt> or <tt>usb</tt>).</td>
- * </tr>
- * <tr>
- * <td><tt>AVRDUDE_FLAGS</tt></td>
- * <td>Additional flags to pass to avrdude when programming, applied after the automatically generated flags.</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_AVRDUDE_ProvidedVariables Module Provided Variables
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_AVRDUDE_ProvidedMacros Module Provided Macros
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- */
-
- /** \page Page_BuildModule_CPPCHECK The CPPCHECK build module
- *
- * The CPPCHECK programming utility LUFA build system module, providing targets to statically
- * analyze C and C++ source code for errors and performance/style issues.
- *
- * To use this module in your application makefile, add the following code:
- * \code
- * include $(LUFA_PATH)/Build/lufa_cppcheck.mk
- * \endcode
- *
- * \section SSec_BuildModule_CPPCHECK_Requirements Requirements
- * This module requires the <tt>cppcheck</tt> utility to be available in your system's <b>PATH</b>
- * variable. The <tt>cppcheck</tt> utility is distributed through the project's home page
- * (<a>http://cppcheck.sourceforge.net</a>) for Windows, and can be installed on *nix systems via
- * the project's source code or through the package manager.
- *
- * \section SSec_BuildModule_CPPCHECK_Targets Targets
- *
- * <table>
- * <tr>
- * <td><tt>cppcheck</tt></td>
- * <td>Statically analyze the project source code for issues.</td>
- * </tr>
- * <tr>
- * <td><tt>cppcheck-config</tt></td>
- * <td>Check the <tt>cppcheck</tt> configuration - scan source code and warn about missing header files and other issues.</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_CPPCHECK_MandatoryParams Mandatory Parameters
- *
- * <table>
- * <tr>
- * <td><tt>SRC</tt></td>
- * <td>List of source files to statically analyze.</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_CPPCHECK_OptionalParams Optional Parameters
- *
- * <table>
- * <tr>
- * <td><tt>CPPCHECK_INCLUDES</tt></td>
- * <td>Path of extra directories to check when attemting to resolve C/C++ header file includes.</td>
- * </tr>
- * <tr>
- * <td><tt>CPPCHECK_EXCLUDES</tt></td>
- * <td>Paths or path fragments to exclude when analyzing.</td>
- * </tr>
- * <tr>
- * <td><tt>CPPCHECK_MSG_TEMPLATE</tt></td>
- * <td>Output message template to use when printing errors, warnings and information (see <tt>cppcheck</tt> documentation).</td>
- * </tr>
- * <tr>
- * <td><tt>CPPCHECK_ENABLE</tt></td>
- * <td>Analysis rule categories to enable (see <tt>cppcheck</tt> documentation).</td>
- * </tr>
- * <tr>
- * <td><tt>CPPCHECK_SUPPRESS</tt></td>
- * <td>Specific analysis rules to suppress (see <tt>cppcheck</tt> documentation).</td>
- * </tr>
- * <tr>
- * <td><tt>CPPCHECK_FAIL_ON_WARNING</tt></td>
- * <td>Set to <b>Y</b> to fail the analysis job with an error exit code if warnings are found, <b>N</b> to continue without failing.</td>
- * </tr>
- * <tr>
- * <td><tt>CPPCHECK_QUIET</tt></td>
- * <td>Set to <b>Y</b> to suppress all output except warnings and errors, <b>N</b> to show verbose output information.</td>
- * </tr>
- * <tr>
- * <td><tt>CPPCHECK_FLAGS</tt></td>
- * <td>Extra flags to pass to <tt>cppcheck</tt>, after the automatically generated flags.</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_CPPCHECK_ProvidedVariables Module Provided Variables
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_CPPCHECK_ProvidedMacros Module Provided Macros
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- */
-
- /** \page Page_BuildModule_DFU The DFU build module
- *
- * The DFU programming utility LUFA build system module, providing targets to reprogram an
- * Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.
- * This module requires a DFU class bootloader to be running in the target, compatible with
- * the DFU bootloader protocol as published by Atmel.
- *
- * To use this module in your application makefile, add the following code:
- * \code
- * include $(LUFA_PATH)/Build/lufa_dfu.mk
- * \endcode
- *
- * \section SSec_BuildModule_DFU_Requirements Requirements
- * This module requires either the <tt>batchisp</tt> utility from Atmel's FLIP utility, or the open
- * source <tt>dfu-programmer</tt> utility (<a>http://dfu-programmer.sourceforge.net/</a>) to be
- * available in your system's <b>PATH</b> variable. On *nix systems the <tt>dfu-programmer</tt> utility
- * can be installed via the project's source code or through the package manager.
- *
- * \section SSec_BuildModule_DFU_Targets Targets
- *
- * <table>
- * <tr>
- * <td><tt>dfu</tt></td>
- * <td>Program the device FLASH memory with the application's executable data using <tt>dfu-programmer</tt>.</td>
- * </tr>
- * <tr>
- * <td><tt>dfu-ee</tt></td>
- * <td>Program the device EEPROM memory with the application's EEPROM data using <tt>dfu-programmer</tt>.</td>
- * </tr>
- * <tr>
- * <td><tt>flip</tt></td>
- * <td>Program the device FLASH memory with the application's executable data using <tt>batchisp</tt>.</td>
- * </tr>
- * <tr>
- * <td><tt>flip-ee</tt></td>
- * <td>Program the device EEPROM memory with the application's EEPROM data using <tt>batchisp</tt>.</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_DFU_MandatoryParams Mandatory Parameters
- *
- * <table>
- * <tr>
- * <td><tt>MCU</tt></td>
- * <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
- * </tr>
- * <tr>
- * <td><tt>TARGET</tt></td>
- * <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_DFU_OptionalParams Optional Parameters
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_DFU_ProvidedVariables Module Provided Variables
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_DFU_ProvidedMacros Module Provided Macros
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- */
-
- /** \page Page_BuildModule_DOXYGEN The DOXYGEN build module
- *
- * The DOXYGEN code documentation utility LUFA build system module, providing targets to generate
- * project HTML and other format documentation from a set of source files that include special
- * Doxygen comments.
- *
- * To use this module in your application makefile, add the following code:
- * \code
- * include $(LUFA_PATH)/Build/lufa_doxygen.mk
- * \endcode
- *
- * \section SSec_BuildModule_DOXYGEN_Requirements Requirements
- * This module requires the <tt>doxygen</tt> utility from the Doxygen website
- * (<a>http://www.doxygen.org/</a>) to be available in your system's <b>PATH</b> variable. On *nix
- * systems the <tt>doxygen</tt> utility can be installed via the project's source code or through
- * the package manager.
- *
- * \section SSec_BuildModule_DOXYGEN_Targets Targets
- *
- * <table>
- * <tr>
- * <td><tt>doxygen</tt></td>
- * <td>Generate project documentation.</td>
- * </tr>
- * <tr>
- * <td><tt>doxygen_create</tt></td>
- * <td>Create a new Doxygen configuration file using the latest template.</td>
- * </tr>
- * <tr>
- * <td><tt>doxygen_upgrade</tt></td>
- * <td>Upgrade an existing Doxygen configuration file to the latest template</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_DOXYGEN_MandatoryParams Mandatory Parameters
- *
- * <table>
- * <tr>
- * <td><tt>LUFA_PATH</tt></td>
- * <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_DOXYGEN_OptionalParams Optional Parameters
- *
- * <table>
- * <tr>
- * <td><tt>DOXYGEN_CONF</tt></td>
- * <td>Name and path of the base Doxygen configuration file for the project.</td>
- * </tr>
- * <tr>
- * <td><tt>DOXYGEN_FAIL_ON_WARNING</tt></td>
- * <td>Set to <b>Y</b> to fail the generation with an error exit code if warnings are found other than unsupported configuration parameters, <b>N</b> to continue without failing.</td>
- * </tr>
- * <tr>
- * <td><tt>DOXYGEN_OVERRIDE_PARAMS</tt></td>
- * <td>Extra Doxygen configuration parameters to apply, overriding the corresponding config entry in the project's configuration file (e.g. <tt>QUIET=YES</tt>).</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_DOXYGEN_ProvidedVariables Module Provided Variables
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_DOXYGEN_ProvidedMacros Module Provided Macros
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- */
-
- /** \page Page_BuildModule_HID The HID build module
- *
- * The HID programming utility LUFA build system module, providing targets to reprogram an
- * Atmel processor's FLASH memory with a project's compiled binary output file. This module
- * requires a HID class bootloader to be running in the target, using a protocol compatible
- * with the PJRC "HalfKay" protocol (<a>http://www.pjrc.com/teensy/halfkay_protocol.html</a>).
- *
- * To use this module in your application makefile, add the following code:
- * \code
- * include $(LUFA_PATH)/Build/lufa_hid.mk
- * \endcode
- *
- * \section SSec_BuildModule_HID_Requirements Requirements
- * This module requires either the <tt>hid_bootloader_cli</tt> utility from the included LUFA HID
- * class bootloader API subdirectory, or the <tt>teensy_loader_cli</tt> utility from PJRC
- * (<a>http://www.pjrc.com/teensy/loader_cli.html</a>) to be available in your system's <b>PATH</b>
- * variable.
- *
- * \section SSec_BuildModule_HID_Targets Targets
- *
- * <table>
- * <tr>
- * <td><tt>hid</tt></td>
- * <td>Program the device FLASH memory with the application's executable data using <tt>hid_bootloader_cli</tt>.</td>
- * </tr>
- * <tr>
- * <td><tt>hid-ee</tt></td>
- * <td>Program the device EEPROM memory with the application's EEPROM data using <tt>hid_bootloader_cli</tt> and
- * a temporary AVR application programmed into the target's FLASH.
- * \note This will erase the currently loaded application in the target.</td>
- * </tr>
- * <tr>
- * <td><tt>teensy</tt></td>
- * <td>Program the device FLASH memory with the application's executable data using <tt>teensy_loader_cli</tt>.</td>
- * </tr>
- * <tr>
- * <td><tt>teensy-ee</tt></td>
- * <td>Program the device EEPROM memory with the application's EEPROM data using <tt>teensy_loader_cli</tt> and
- * a temporary AVR application programmed into the target's FLASH.
- * \note This will erase the currently loaded application in the target.</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_HID_MandatoryParams Mandatory Parameters
- *
- * <table>
- * <tr>
- * <td><tt>MCU</tt></td>
- * <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
- * </tr>
- * <tr>
- * <td><tt>TARGET</tt></td>
- * <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_HID_OptionalParams Optional Parameters
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_HID_ProvidedVariables Module Provided Variables
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_HID_ProvidedMacros Module Provided Macros
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- */
-
- /** \page Page_BuildModule_SOURCES The SOURCES build module
- *
- * The SOURCES LUFA build system module, providing variables listing the various LUFA source files
- * required to be build by a project for a given LUFA module. This module gives a way to reference
- * LUFA source files symbolically, so that changes to the library structure do not break the library
- * makefile.
- *
- * To use this module in your application makefile, add the following code:
- * \code
- * include $(LUFA_PATH)/Build/lufa_sources.mk
- * \endcode
- *
- * \section SSec_BuildModule_SOURCES_Requirements Requirements
- * None.
- *
- * \section SSec_BuildModule_SOURCES_Targets Targets
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_SOURCES_MandatoryParams Mandatory Parameters
- *
- * <table>
- * <tr>
- * <td><tt>LUFA_PATH</tt></td>
- * <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>
- * </tr>
- * <tr>
- * <td><tt>ARCH</tt></td>
- * <td>Architecture of the target processor (see \ref Page_DeviceSupport).</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_SOURCES_OptionalParams Optional Parameters
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_SOURCES_ProvidedVariables Module Provided Variables
- *
- * <table>
- * <tr>
- * <td><tt>LUFA_SRC_USB</tt></td>
- * <td>List of LUFA USB driver source files.</td>
- * </tr>
- * <tr>
- * <td><tt>LUFA_SRC_USBCLASS</tt></td>
- * <td>List of LUFA USB Class driver source files.</td>
- * </tr>
- * <tr>
- * <td><tt>LUFA_SRC_TEMPERATURE</tt></td>
- * <td>List of LUFA temperature sensor driver source files.</td>
- * </tr>
- * <tr>
- * <td><tt>LUFA_SRC_SERIAL</tt></td>
- * <td>List of LUFA Serial U(S)ART driver source files.</td>
- * </tr>
- * <tr>
- * <td><tt>LUFA_SRC_TWI</tt></td>
- * <td>List of LUFA TWI driver source files.</td>
- * </tr>
- * <tr>
- * <td><tt>LUFA_SRC_PLATFORM</tt></td>
- * <td>List of LUFA architecture specific platform management source files.</td>
- * </tr>
- * </table>
- *
- * \section SSec_BuildModule_SOURCES_ProvidedMacros Module Provided Macros
- *
- * <table>
- * <tr>
- * <td><i>None</i></td>
- * </tr>
- * </table>
- */
-
-/** \page Page_BuildTroubleshooting Troubleshooting Information
- *
- * LUFA uses a lot of advanced features of the AVR-GCC compiler, linker, and surrounding binaries. This can sometimes lead to problems compiling applications if one of these
- * features is buggy in the version of the tools used in a build environment. Missing utilities and incorrectly set makefile configuration options can also result in different
- * errors being produced when compilation or other operations are attempted. The table below lists a set of commonly encountered errors and their resolutions.
- *
- * <table>
- * <tr>
- * <th>Problem</th>
- * <th>Resolution</th>
- * </tr>
- * <tr>
- * <td>Error &quot;<b><tt>relocation truncated to fit: R_AVR_13_PCREL against symbol <i>{X}</i></tt></b>&quot; shown when compiling.</td>
- * <td>Try compiling with the setting <tt>LINKER_RELAXATIONS=N</tt> in your LUFA Build System 2.0 makefile, or remove the line <tt>-Wl,--relax</tt>
- * from other makefiles. Alternatively, make sure you have the latest version of the Atmel Toolchain installed for your system.</td>
- * </tr>
- * <tr>
- * <td>Error &quot;<b><tt>error: ld terminated with signal 11 [Segmentation fault]</tt></b>&quot; shown when compiling.</td>
- * <td>Try compiling with the setting <tt>DEBUG_LEVEL=2</tt> in your LUFA Build System 2.0 makefile, or make sure you are using <tt>binutils</tt> version 2.22 or later.</td>
- * </tr>
- * <tr>
- * <td>Error &quot;<b><tt>EMERGENCY ABORT: INFINITE RECURSION DETECTED</tt></b>&quot; shown when compiling.</td>
- * <td>Make sure you are using an up to date version of GNU Make when compiling. This error is a safety system added to the mid-level makefiles, to prevent an issue with
- * GNU make or other variants of Make causing an infinitely recursive build.</td>
- * </tr>
- * <tr>
- * <td>Error &quot;<b><tt>Unsupported architecture &quot;<i>{X}</i>&quot;</tt></b>&quot; shown when compiling.</td>
- * <td>Ensure your makefile's <tt>ARCH</tt> setting is set to one of the architecture names (case-sensitive) supported by the version of LUFA you are compiling against.</td>
- * </tr>
- * <tr>
- * <td>Error &quot;<b><tt>Makefile <i>{X}</i> value not set</tt></b>&quot; shown when compiling.</td>
- * <td>The specified Makefile value was not configured in your project's makefile or on the command line, and the nominated setting is required by one or more LUFA
- * build system modules. Define the value in your project makefile and try again.</td>
- * </tr>
- * <tr>
- * <td>Error &quot;<b><tt>Makefile <i>{X}</i> option cannot be blank</tt></b>&quot; shown when compiling.</td>
- * <td>The specified Makefile value was configured in your project's makefile or on the command line, but was set to an empty value. For the nominated configuration
- * option, an empty value is not allowed. Define the nominated setting to a correct non-blank value and try again.</td>
- * </tr>
- * <tr>
- * <td>Error &quot;<b><tt>Makefile <i>{X}</i> option must be Y or N</tt></b>&quot; shown when compiling.</td>
- * <td>The specified Makefile value was configured in your project's makefile or on the command line, but was set to a value other than a Y (for "Yes") or "N" (for "No").
- * This configuration option is required to be one of the aforementioned boolean values, and other values are invalid. Set this option to either Y or N and try again.</td>
- * </tr>
- * <tr>
- * <td>Error &quot;<b><tt>Unknown input source file formats: <i>{X}</i></tt></b>&quot; shown when compiling.</td>
- * <td>The nominated source files, specified in your project's makefile in the <tt>SRC</tt> configuration option, has an extension that the LUFA build system does not
- * recognise. The file extensions are case sensitive, and must be one of the supported formats (<tt>*.c</tt>, <tt>*.cpp</tt> or <tt>*.S</tt>).</td>
- * </tr>
- * <tr>
- * <td>Error &quot;<b><tt>Cannot build with OBJDIR parameter set - one or more object file name is not unique</tt></b>&quot; shown when compiling.</td>
- * <td>When a project is built with a non-empty <tt>OBJDIR</tt> object directory name set, all input source files must have unique names, excluding extension and path.
- * This means that input files that are named identically and differ only by their path or extension are invalid when this mode is used.</td>
- * </tr>
- * <tr>
- * <td>Error &quot;<b><tt>Source file does not exist: <i>{X}</i></tt></b>&quot; shown when compiling.</td>
- * <td>The nominated input source file, specified in the user project's <tt>SRC</tt> parameter, could not be found. Ensure the source file exists and the absolute or
- * relative path given in the user project makefile is correct and try again.</td>
- * </tr>
- * <tr>
- * <td>Error &quot;<b><tt>Doxygen configuration file <i>{X}</i> does not exist</tt></b>&quot; shown when upgrading a Doxygen configuration file.</td>
- * <td>The nominated Doxygen configuration file, specified in the user project's <tt>DOXYGEN_CONF</tt> parameter, could not be found. Ensure the configuration file exists
- * and the absolute or relative path given in the user project makefile is correct and try again, or run the appropriate makefile target to generate a new configuration
- * file.</td>
- * </tr>
- * <tr>
- * <td>Error &quot;<b><tt>avr-gcc: error: unrecognized option '<i>{X}</i>'</tt></b>&quot; shown when compiling.</td>
- * <td>An unrecognised option was supplied to the compiler, usually in the <tt>C_FLAGS</tt>, <tt>CPP_FLAGS</tt>, <tt>ASM_FLAGS</tt> or <tt>CC_FLAGS</tt> configuration
- * options. The nominated compiler switch may be invalid, or unsupported by the version of AVR-GCC on the host system. Remove the unrecognised flag if invalid, or
- * upgrade to the latest AVR-GCC. If the option is a valid linker option, use the prefix "-Wl," to ensure it is passed to the linker correctly.</td>
- * </tr>
- * <tr>
- * <td>Error &quot;<b><tt>makefile:{X}: {Y}.mk: No such file or directory</tt></b>&quot; shown when make is invoked.</td>
- * <td>The path to the nominated makefile module was incorrect. This usually indicates that the makefile <tt>LUFA_PATH</tt> option is not set to a valid relative or
- * absolute path to the LUFA library core.</td>
- * </tr>
- * <tr>
- * <td>Error &quot;<b><tt>fatal error: LUFAConfig.h: No such file or directory</tt></b>&quot; shown when compiling.</td>
- * <td>The <tt>USE_LUFA_CONFIG_HEADER</tt> compile time option was set in the user project makefile, but the user supplied <tt>LUFAConfig.h</tt> header could not be
- * found. Ensure that the directory that contains this configuration file is correctly passed to the compiler via the -I switch in the makefile <tt>CC_FLAGS</tt>
- * parameter.</td>
- * </tr>
- * <tr>
- * <td>Error &quot;<b><tt>ld.exe: section .apitable_trampolines loaded at <i>{X}</i> overlaps section .text</tt></b>&quot; shown when compiling a bootloader.</td>
- * <td>The bootloader is compiling too large for the given <tt>FLASH_SIZE_KB</tt> and <tt>BOOT_SECTION_SIZE_KB</tt> parameters set in the bootloader makefile. This
- * usually indicates that these values are incorrect for the specified device the bootloader is targeting. If these values are correct, a newer version of the
- * compiler may need to be used to ensure that the bootloader is built within the section size constraints of the target device.</td>
- * </tr>
- * <tr>
- * <td>Error &quot;<b><tt>unknown MCU '<i>{X}</i>' specified</tt></b>&quot; shown when compiling.</td>
- * <td>The specified microcontroller device model name set in the user application's makefile as the <tt>MCU</tt> parameter is incorrect, or unsupported by the
- * version of the compiler being used. Make sure the model name is correct, or upgrade to the latest Atmel Toolchain to obtain newer device support.</td>
- * </tr>
- * <tr>
- * <td>Error &quot;<b><tt>undefined reference to `<i>{X}</i>'</tt></b>&quot; shown when compiling.</td>
- * <td>This is usually caused by a missing source file in the user application's <tt>SRC</tt> configuration parameter. If the indicated symbol is one from the LUFA
- * library, you may be missing a LUFA source makefile module (see \ref Page_BuildModule_SOURCES).</td>
- * </tr>
- * </table>
- *
- * For troubleshooting other errors you encounter, please see \ref Sec_ProjectHelp.
- */
+/** \file
+ *
+ * This file contains special DoxyGen information for the generation of the main page and other special
+ * documentation pages. It is not a project source file.
+ */
+
+/** \page Page_BuildSystem The LUFA Build System
+ *
+ * \section Sec_BuildSystem_Overview Overview of the LUFA Build System
+ * The LUFA build system is an attempt at making a set of re-usable, modular build make files which
+ * can be referenced in a LUFA powered project, to minimize the amount of code required in an
+ * application makefile. The system is written in GNU Make, and each module is independent of
+ * one-another.
+ *
+ * For details on the prerequisites needed for Linux and Windows machines to be able to use the LUFA
+ * build system, see \ref Sec_CompilingApps_Prerequisites.
+ *
+ * To use a LUFA build system module, simply add an include to your project makefile. All user projects
+ * should at a minimum include \ref Page_BuildModule_CORE for base functionality:
+ * \code
+ * include $(LUFA_PATH)/Build/lufa_core.mk
+ * \endcode
+ *
+ * Once included in your project makefile, the associated build module targets will be added to your
+ * project's build makefile targets automatically. To call a build target, run <tt>make {TARGET_NAME}</tt>
+ * from the command line, substituting in the appropriate target name.
+ *
+ * \see \ref Sec_ConfiguringApps_AppMakefileParams for a copy of the sample LUFA project makefile.
+ *
+ * Each build module may have one or more mandatory parameters (GNU Make variables) which <i>must</i>
+ * be supplied in the project makefile for the module to work, and one or more optional parameters which
+ * may be defined and which will assume a sensible default if not.
+ *
+ * \section SSec_BuildSystem_Modules Available Modules
+ *
+ * The following modules are included in this LUFA release:
+ *
+ * \li \subpage Page_BuildModule_ATPROGRAM - Device Programming
+ * \li \subpage Page_BuildModule_AVRDUDE - Device Programming
+ * \li \subpage Page_BuildModule_BUILD - Compiling/Assembling/Linking
+ * \li \subpage Page_BuildModule_CORE - Core Build System Functions
+ * \li \subpage Page_BuildModule_CPPCHECK - Static Code Analysis
+ * \li \subpage Page_BuildModule_DFU - Device Programming
+ * \li \subpage Page_BuildModule_DOXYGEN - Automated Source Code Documentation
+ * \li \subpage Page_BuildModule_HID - Device Programming
+ * \li \subpage Page_BuildModule_SOURCES - LUFA Module Source Code Variables
+ *
+ * If you have problems building using the LUFA build system, see \subpage Page_BuildTroubleshooting for resolution steps.
+ */
+
+ /** \page Page_BuildModule_BUILD The BUILD build module
+ *
+ * The BUILD LUFA build system module, providing targets for the compilation,
+ * assembling and linking of an application from source code into binary files
+ * suitable for programming into a target device, using the GCC compiler.
+ *
+ * To use this module in your application makefile, add the following code:
+ * \code
+ * include $(LUFA_PATH)/Build/lufa_build.mk
+ * \endcode
+ *
+ * \section SSec_BuildModule_BUILD_Requirements Requirements
+ * This module requires the the architecture appropriate binaries of the GCC compiler are available in your
+ * system's <b>PATH</b> variable. The GCC compiler and associated toolchain is distributed in Atmel AVR Studio
+ * 5.x and Atmel Studio 6.x installation directories, as well as in many third party distribution packages.
+ *
+ * \section SSec_BuildModule_BUILD_Targets Targets
+ *
+ * <table>
+ * <tr>
+ * <td><tt>size</tt></td>
+ * <td>Display size of the compiled application FLASH and SRAM segments.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>symbol-sizes</tt></td>
+ * <td>Display a size-sorted list of symbols from the compiled application, in decimal bytes.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>lib</tt></td>
+ * <td>Build and archive all source files into a library A binary file.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>all</tt></td>
+ * <td>Build and link the application into ELF debug and HEX binary files.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>elf</tt></td>
+ * <td>Build and link the application into an ELF debug file.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>bin</tt></td>
+ * <td>Build and link the application and produce a BIN binary file.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>hex</tt></td>
+ * <td>Build and link the application and produce HEX and EEP binary files.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>lss</tt></td>
+ * <td>Build and link the application and produce a LSS source code/assembly code mixed listing file.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>clean</tt></td>
+ * <td>Remove all intermediary files and binary output files.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>mostlyclean</tt></td>
+ * <td>Remove all intermediary files but preserve any binary output files.</td>
+ * </tr>
+ * <tr>
+ * <td><tt><i>&lt;filename&gt;</i>.s</tt></td>
+ * <td>Create an assembly listing of a given input C/C++ source file.</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_BUILD_MandatoryParams Mandatory Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><tt>TARGET</tt></td>
+ * <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>ARCH</tt></td>
+ * <td>Architecture of the target processor (see \ref Page_DeviceSupport).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>MCU</tt></td>
+ * <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>SRC</tt></td>
+ * <td>List of relative or absolute paths to the application C (.c), C++ (.cpp) and Assembly (.S) source files.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>F_USB</tt></td>
+ * <td>Speed in Hz of the input clock frequency to the target's USB controller.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>LUFA_PATH</tt></td>
+ * <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_BUILD_OptionalParams Optional Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><tt>BOARD</tt></td>
+ * <td>LUFA board hardware drivers to use (see \ref Page_DeviceSupport).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>OPTIMIZATION</tt></td>
+ * <td>Optimization level to use when compiling source files (see GCC manual).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>C_STANDARD</tt></td>
+ * <td>Version of the C standard to apply when compiling C++ source files (see GCC manual).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>CPP_STANDARD</tt></td>
+ * <td>Version of the C++ standard to apply when compiling C++ source files (see GCC manual).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>DEBUG_FORMAT</tt></td>
+ * <td>Format of the debug information to embed in the generated object files (see GCC manual).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>DEBUG_LEVEL</tt></td>
+ * <td>Level of the debugging information to embed in the generated object files (see GCC manual).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>F_CPU</tt></td>
+ * <td>Speed of the processor CPU clock, in Hz.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>C_FLAGS</tt></td>
+ * <td>Flags to pass to the C compiler only, after the automatically generated flags.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>CPP_FLAGS</tt></td>
+ * <td>Flags to pass to the C++ compiler only, after the automatically generated flags.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>ASM_FLAGS</tt></td>
+ * <td>Flags to pass to the assembler only, after the automatically generated flags.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>CC_FLAGS</tt></td>
+ * <td>Common flags to pass to the C/C++ compiler and assembler, after the automatically generated flags.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>COMPILER_PATH</tt></td>
+ * <td>Directory where the C/C++ toolchain is located, if not available in the system <tt>PATH</tt>.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>LD_FLAGS</tt></td>
+ * <td>Flags to pass to the linker, after the automatically generated flags.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>LINKER_RELAXATIONS</tt></td>
+ * <td>Enables or disables linker relaxations when linking the application binary. This can reduce the total size
+ * of the application by replacing full \c CALL instructions with smaller \c RCALL instructions where possible.
+ * \note On some unpatched versions of binutils, this can cause link failures in some circumstances. If you
+ * receive a link error <tt>relocation truncated to fit: R_AVR_13_PCREL</tt>, disable this setting.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>OBJDIR</tt></td>
+ * <td>Directory to place the generated object and dependency files. If set to "." the same folder as the source file will be used.
+ * \note When this option is enabled, all source filenames <b>must</b> be unique.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>OBJECT_FILES</tt></td>
+ * <td>List of additional object files that should be linked into the resulting binary.</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_BUILD_ProvidedVariables Module Provided Variables
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_BUILD_ProvidedMacros Module Provided Macros
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ */
+
+/** \page Page_BuildModule_CORE The CORE build module
+ *
+ * The core LUFA build system module, providing common build system help and information targets.
+ *
+ * To use this module in your application makefile, add the following code:
+ * \code
+ * include $(LUFA_PATH)/Build/lufa_core.mk
+ * \endcode
+ *
+ * \section SSec_BuildModule_CORE_Requirements Requirements
+ * This module has no requirements outside a standard *nix shell like environment; the <tt>sh</tt>
+ * shell, GNU <tt>make</tt> and *nix CoreUtils (<tt>echo</tt>, <tt>printf</tt>, etc.).
+ *
+ * \section SSec_BuildModule_CORE_Targets Targets
+ *
+ * <table>
+ * <tr>
+ * <td><tt>help</tt></td>
+ * <td>Display build system help and configuration information.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>list_targets</tt></td>
+ * <td>List all available build targets from the build system.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>list_modules</tt></td>
+ * <td>List all available build modules from the build system.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>list_mandatory</tt></td>
+ * <td>List all mandatory parameters required by the included modules.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>list_optional</tt></td>
+ * <td>List all optional parameters required by the included modules.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>list_provided</tt></td>
+ * <td>List all variables provided by the included modules.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>list_macros</tt></td>
+ * <td>List all macros provided by the included modules.</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_CORE_MandatoryParams Mandatory Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_CORE_OptionalParams Optional Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_CORE_ProvidedVariables Module Provided Variables
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_CORE_ProvidedMacros Module Provided Macros
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ */
+
+/** \page Page_BuildModule_ATPROGRAM The ATPROGRAM build module
+ *
+ * The ATPROGRAM programming utility LUFA build system module, providing targets to reprogram an
+ * Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.
+ *
+ * To use this module in your application makefile, add the following code:
+ * \code
+ * include $(LUFA_PATH)/Build/lufa_atprogram.mk
+ * \endcode
+ *
+ * \section SSec_BuildModule_ATPROGRAM_Requirements Requirements
+ * This module requires the <tt>atprogram.exe</tt> utility to be available in your system's <b>PATH</b>
+ * variable. The <tt>atprogram.exe</tt> utility is distributed in Atmel AVR Studio 5.x and Atmel Studio 6.x
+ * inside the application install folder's "\atbackend" subdirectory.
+ *
+ * \section SSec_BuildModule_ATPROGRAM_Targets Targets
+ *
+ * <table>
+ * <tr>
+ * <td><tt>atprogram</tt></td>
+ * <td>Program the device FLASH memory with the application's executable data.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>atprogram-ee</tt></td>
+ * <td>Program the device EEPROM memory with the application's EEPROM data.</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_ATPROGRAM_MandatoryParams Mandatory Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><tt>MCU</tt></td>
+ * <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>TARGET</tt></td>
+ * <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_ATPROGRAM_OptionalParams Optional Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><tt>ATPROGRAM_PROGRAMMER</tt></td>
+ * <td>Name of the Atmel programmer or debugger tool to communicate with (e.g. <tt>jtagice3</tt>).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>ATPROGRAM_INTERFACE</tt></td>
+ * <td>Name of the programming interface to use when programming the target (e.g. <tt>spi</tt>).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>ATPROGRAM_PORT</tt></td>
+ * <td>Name of the communication port to use when when programming with a serially connected tool (e.g. <tt>COM2</tt>).</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_ATPROGRAM_ProvidedVariables Module Provided Variables
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_ATPROGRAM_ProvidedMacros Module Provided Macros
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ */
+
+/** \page Page_BuildModule_AVRDUDE The AVRDUDE build module
+ *
+ * The AVRDUDE programming utility LUFA build system module, providing targets to reprogram an
+ * Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.
+ *
+ * To use this module in your application makefile, add the following code:
+ * \code
+ * include $(LUFA_PATH)/Build/lufa_avrdude.mk
+ * \endcode
+ *
+ * \section SSec_BuildModule_AVRDUDE_Requirements Requirements
+ * This module requires the <tt>avrdude</tt> utility to be available in your system's <b>PATH</b>
+ * variable. The <tt>avrdude</tt> utility is distributed in the old WinAVR project releases for
+ * Windows (<a>http://winavr.sourceforge.net</a>) or can be installed on *nix systems via the project's
+ * source code (<a>https://savannah.nongnu.org/projects/avrdude</a>) or through the package manager.
+ *
+ * \section SSec_BuildModule_AVRDUDE_Targets Targets
+ *
+ * <table>
+ * <tr>
+ * <td><tt>avrdude</tt></td>
+ * <td>Program the device FLASH memory with the application's executable data.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>avrdude-ee</tt></td>
+ * <td>Program the device EEPROM memory with the application's EEPROM data.</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_AVRDUDE_MandatoryParams Mandatory Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><tt>MCU</tt></td>
+ * <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>TARGET</tt></td>
+ * <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_AVRDUDE_OptionalParams Optional Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><tt>AVRDUDE_PROGRAMMER</tt></td>
+ * <td>Name of the programmer or debugger tool to communicate with (e.g. <tt>jtagicemkii</tt>).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>AVRDUDE_PORT</tt></td>
+ * <td>Name of the communication port to use when when programming with the connected tool (e.g. <tt>COM2</tt>, <tt>/dev/ttyUSB0</tt> or <tt>usb</tt>).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>AVRDUDE_FLAGS</tt></td>
+ * <td>Additional flags to pass to avrdude when programming, applied after the automatically generated flags.</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_AVRDUDE_ProvidedVariables Module Provided Variables
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_AVRDUDE_ProvidedMacros Module Provided Macros
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ */
+
+ /** \page Page_BuildModule_CPPCHECK The CPPCHECK build module
+ *
+ * The CPPCHECK programming utility LUFA build system module, providing targets to statically
+ * analyze C and C++ source code for errors and performance/style issues.
+ *
+ * To use this module in your application makefile, add the following code:
+ * \code
+ * include $(LUFA_PATH)/Build/lufa_cppcheck.mk
+ * \endcode
+ *
+ * \section SSec_BuildModule_CPPCHECK_Requirements Requirements
+ * This module requires the <tt>cppcheck</tt> utility to be available in your system's <b>PATH</b>
+ * variable. The <tt>cppcheck</tt> utility is distributed through the project's home page
+ * (<a>http://cppcheck.sourceforge.net</a>) for Windows, and can be installed on *nix systems via
+ * the project's source code or through the package manager.
+ *
+ * \section SSec_BuildModule_CPPCHECK_Targets Targets
+ *
+ * <table>
+ * <tr>
+ * <td><tt>cppcheck</tt></td>
+ * <td>Statically analyze the project source code for issues.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>cppcheck-config</tt></td>
+ * <td>Check the <tt>cppcheck</tt> configuration - scan source code and warn about missing header files and other issues.</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_CPPCHECK_MandatoryParams Mandatory Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><tt>SRC</tt></td>
+ * <td>List of source files to statically analyze.</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_CPPCHECK_OptionalParams Optional Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><tt>CPPCHECK_INCLUDES</tt></td>
+ * <td>Path of extra directories to check when attemting to resolve C/C++ header file includes.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>CPPCHECK_EXCLUDES</tt></td>
+ * <td>Paths or path fragments to exclude when analyzing.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>CPPCHECK_MSG_TEMPLATE</tt></td>
+ * <td>Output message template to use when printing errors, warnings and information (see <tt>cppcheck</tt> documentation).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>CPPCHECK_ENABLE</tt></td>
+ * <td>Analysis rule categories to enable (see <tt>cppcheck</tt> documentation).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>CPPCHECK_SUPPRESS</tt></td>
+ * <td>Specific analysis rules to suppress (see <tt>cppcheck</tt> documentation).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>CPPCHECK_FAIL_ON_WARNING</tt></td>
+ * <td>Set to <b>Y</b> to fail the analysis job with an error exit code if warnings are found, <b>N</b> to continue without failing.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>CPPCHECK_QUIET</tt></td>
+ * <td>Set to <b>Y</b> to suppress all output except warnings and errors, <b>N</b> to show verbose output information.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>CPPCHECK_FLAGS</tt></td>
+ * <td>Extra flags to pass to <tt>cppcheck</tt>, after the automatically generated flags.</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_CPPCHECK_ProvidedVariables Module Provided Variables
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_CPPCHECK_ProvidedMacros Module Provided Macros
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ */
+
+ /** \page Page_BuildModule_DFU The DFU build module
+ *
+ * The DFU programming utility LUFA build system module, providing targets to reprogram an
+ * Atmel processor FLASH and EEPROM memories with a project's compiled binary output files.
+ * This module requires a DFU class bootloader to be running in the target, compatible with
+ * the DFU bootloader protocol as published by Atmel.
+ *
+ * To use this module in your application makefile, add the following code:
+ * \code
+ * include $(LUFA_PATH)/Build/lufa_dfu.mk
+ * \endcode
+ *
+ * \section SSec_BuildModule_DFU_Requirements Requirements
+ * This module requires either the <tt>batchisp</tt> utility from Atmel's FLIP utility, or the open
+ * source <tt>dfu-programmer</tt> utility (<a>http://dfu-programmer.sourceforge.net/</a>) to be
+ * available in your system's <b>PATH</b> variable. On *nix systems the <tt>dfu-programmer</tt> utility
+ * can be installed via the project's source code or through the package manager.
+ *
+ * \section SSec_BuildModule_DFU_Targets Targets
+ *
+ * <table>
+ * <tr>
+ * <td><tt>dfu</tt></td>
+ * <td>Program the device FLASH memory with the application's executable data using <tt>dfu-programmer</tt>.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>dfu-ee</tt></td>
+ * <td>Program the device EEPROM memory with the application's EEPROM data using <tt>dfu-programmer</tt>.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>flip</tt></td>
+ * <td>Program the device FLASH memory with the application's executable data using <tt>batchisp</tt>.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>flip-ee</tt></td>
+ * <td>Program the device EEPROM memory with the application's EEPROM data using <tt>batchisp</tt>.</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_DFU_MandatoryParams Mandatory Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><tt>MCU</tt></td>
+ * <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>TARGET</tt></td>
+ * <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_DFU_OptionalParams Optional Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_DFU_ProvidedVariables Module Provided Variables
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_DFU_ProvidedMacros Module Provided Macros
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ */
+
+ /** \page Page_BuildModule_DOXYGEN The DOXYGEN build module
+ *
+ * The DOXYGEN code documentation utility LUFA build system module, providing targets to generate
+ * project HTML and other format documentation from a set of source files that include special
+ * Doxygen comments.
+ *
+ * To use this module in your application makefile, add the following code:
+ * \code
+ * include $(LUFA_PATH)/Build/lufa_doxygen.mk
+ * \endcode
+ *
+ * \section SSec_BuildModule_DOXYGEN_Requirements Requirements
+ * This module requires the <tt>doxygen</tt> utility from the Doxygen website
+ * (<a>http://www.doxygen.org/</a>) to be available in your system's <b>PATH</b> variable. On *nix
+ * systems the <tt>doxygen</tt> utility can be installed via the project's source code or through
+ * the package manager.
+ *
+ * \section SSec_BuildModule_DOXYGEN_Targets Targets
+ *
+ * <table>
+ * <tr>
+ * <td><tt>doxygen</tt></td>
+ * <td>Generate project documentation.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>doxygen_create</tt></td>
+ * <td>Create a new Doxygen configuration file using the latest template.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>doxygen_upgrade</tt></td>
+ * <td>Upgrade an existing Doxygen configuration file to the latest template</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_DOXYGEN_MandatoryParams Mandatory Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><tt>LUFA_PATH</tt></td>
+ * <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_DOXYGEN_OptionalParams Optional Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><tt>DOXYGEN_CONF</tt></td>
+ * <td>Name and path of the base Doxygen configuration file for the project.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>DOXYGEN_FAIL_ON_WARNING</tt></td>
+ * <td>Set to <b>Y</b> to fail the generation with an error exit code if warnings are found other than unsupported configuration parameters, <b>N</b> to continue without failing.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>DOXYGEN_OVERRIDE_PARAMS</tt></td>
+ * <td>Extra Doxygen configuration parameters to apply, overriding the corresponding config entry in the project's configuration file (e.g. <tt>QUIET=YES</tt>).</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_DOXYGEN_ProvidedVariables Module Provided Variables
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_DOXYGEN_ProvidedMacros Module Provided Macros
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ */
+
+ /** \page Page_BuildModule_HID The HID build module
+ *
+ * The HID programming utility LUFA build system module, providing targets to reprogram an
+ * Atmel processor's FLASH memory with a project's compiled binary output file. This module
+ * requires a HID class bootloader to be running in the target, using a protocol compatible
+ * with the PJRC "HalfKay" protocol (<a>http://www.pjrc.com/teensy/halfkay_protocol.html</a>).
+ *
+ * To use this module in your application makefile, add the following code:
+ * \code
+ * include $(LUFA_PATH)/Build/lufa_hid.mk
+ * \endcode
+ *
+ * \section SSec_BuildModule_HID_Requirements Requirements
+ * This module requires either the <tt>hid_bootloader_cli</tt> utility from the included LUFA HID
+ * class bootloader API subdirectory, or the <tt>teensy_loader_cli</tt> utility from PJRC
+ * (<a>http://www.pjrc.com/teensy/loader_cli.html</a>) to be available in your system's <b>PATH</b>
+ * variable.
+ *
+ * \section SSec_BuildModule_HID_Targets Targets
+ *
+ * <table>
+ * <tr>
+ * <td><tt>hid</tt></td>
+ * <td>Program the device FLASH memory with the application's executable data using <tt>hid_bootloader_cli</tt>.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>hid-ee</tt></td>
+ * <td>Program the device EEPROM memory with the application's EEPROM data using <tt>hid_bootloader_cli</tt> and
+ * a temporary AVR application programmed into the target's FLASH.
+ * \note This will erase the currently loaded application in the target.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>teensy</tt></td>
+ * <td>Program the device FLASH memory with the application's executable data using <tt>teensy_loader_cli</tt>.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>teensy-ee</tt></td>
+ * <td>Program the device EEPROM memory with the application's EEPROM data using <tt>teensy_loader_cli</tt> and
+ * a temporary AVR application programmed into the target's FLASH.
+ * \note This will erase the currently loaded application in the target.</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_HID_MandatoryParams Mandatory Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><tt>MCU</tt></td>
+ * <td>Name of the Atmel processor model (e.g. <tt>at90usb1287</tt>).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>TARGET</tt></td>
+ * <td>Name of the application output file prefix (e.g. <tt>TestApplication</tt>).</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_HID_OptionalParams Optional Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_HID_ProvidedVariables Module Provided Variables
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_HID_ProvidedMacros Module Provided Macros
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ */
+
+ /** \page Page_BuildModule_SOURCES The SOURCES build module
+ *
+ * The SOURCES LUFA build system module, providing variables listing the various LUFA source files
+ * required to be build by a project for a given LUFA module. This module gives a way to reference
+ * LUFA source files symbolically, so that changes to the library structure do not break the library
+ * makefile.
+ *
+ * To use this module in your application makefile, add the following code:
+ * \code
+ * include $(LUFA_PATH)/Build/lufa_sources.mk
+ * \endcode
+ *
+ * \section SSec_BuildModule_SOURCES_Requirements Requirements
+ * None.
+ *
+ * \section SSec_BuildModule_SOURCES_Targets Targets
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_SOURCES_MandatoryParams Mandatory Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><tt>LUFA_PATH</tt></td>
+ * <td>Path to the LUFA library core, either relative or absolute (e.g. <tt>../LUFA-000000/LUFA/</tt>).</td>
+ * </tr>
+ * <tr>
+ * <td><tt>ARCH</tt></td>
+ * <td>Architecture of the target processor (see \ref Page_DeviceSupport).</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_SOURCES_OptionalParams Optional Parameters
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_SOURCES_ProvidedVariables Module Provided Variables
+ *
+ * <table>
+ * <tr>
+ * <td><tt>LUFA_SRC_USB</tt></td>
+ * <td>List of LUFA USB driver source files.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>LUFA_SRC_USBCLASS</tt></td>
+ * <td>List of LUFA USB Class driver source files.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>LUFA_SRC_TEMPERATURE</tt></td>
+ * <td>List of LUFA temperature sensor driver source files.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>LUFA_SRC_SERIAL</tt></td>
+ * <td>List of LUFA Serial U(S)ART driver source files.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>LUFA_SRC_TWI</tt></td>
+ * <td>List of LUFA TWI driver source files.</td>
+ * </tr>
+ * <tr>
+ * <td><tt>LUFA_SRC_PLATFORM</tt></td>
+ * <td>List of LUFA architecture specific platform management source files.</td>
+ * </tr>
+ * </table>
+ *
+ * \section SSec_BuildModule_SOURCES_ProvidedMacros Module Provided Macros
+ *
+ * <table>
+ * <tr>
+ * <td><i>None</i></td>
+ * </tr>
+ * </table>
+ */
+
+/** \page Page_BuildTroubleshooting Troubleshooting Information
+ *
+ * LUFA uses a lot of advanced features of the AVR-GCC compiler, linker, and surrounding binaries. This can sometimes lead to problems compiling applications if one of these
+ * features is buggy in the version of the tools used in a build environment. Missing utilities and incorrectly set makefile configuration options can also result in different
+ * errors being produced when compilation or other operations are attempted. The table below lists a set of commonly encountered errors and their resolutions.
+ *
+ * <table>
+ * <tr>
+ * <th>Problem</th>
+ * <th>Resolution</th>
+ * </tr>
+ * <tr>
+ * <td>Error &quot;<b><tt>relocation truncated to fit: R_AVR_13_PCREL against symbol <i>{X}</i></tt></b>&quot; shown when compiling.</td>
+ * <td>Try compiling with the setting <tt>LINKER_RELAXATIONS=N</tt> in your LUFA Build System 2.0 makefile, or remove the line <tt>-Wl,--relax</tt>
+ * from other makefiles. Alternatively, make sure you have the latest version of the Atmel Toolchain installed for your system.</td>
+ * </tr>
+ * <tr>
+ * <td>Error &quot;<b><tt>error: ld terminated with signal 11 [Segmentation fault]</tt></b>&quot; shown when compiling.</td>
+ * <td>Try compiling with the setting <tt>DEBUG_LEVEL=2</tt> in your LUFA Build System 2.0 makefile, or make sure you are using <tt>binutils</tt> version 2.22 or later.</td>
+ * </tr>
+ * <tr>
+ * <td>Error &quot;<b><tt>EMERGENCY ABORT: INFINITE RECURSION DETECTED</tt></b>&quot; shown when compiling.</td>
+ * <td>Make sure you are using an up to date version of GNU Make when compiling. This error is a safety system added to the mid-level makefiles, to prevent an issue with
+ * GNU make or other variants of Make causing an infinitely recursive build.</td>
+ * </tr>
+ * <tr>
+ * <td>Error &quot;<b><tt>Unsupported architecture &quot;<i>{X}</i>&quot;</tt></b>&quot; shown when compiling.</td>
+ * <td>Ensure your makefile's <tt>ARCH</tt> setting is set to one of the architecture names (case-sensitive) supported by the version of LUFA you are compiling against.</td>
+ * </tr>
+ * <tr>
+ * <td>Error &quot;<b><tt>Makefile <i>{X}</i> value not set</tt></b>&quot; shown when compiling.</td>
+ * <td>The specified Makefile value was not configured in your project's makefile or on the command line, and the nominated setting is required by one or more LUFA
+ * build system modules. Define the value in your project makefile and try again.</td>
+ * </tr>
+ * <tr>
+ * <td>Error &quot;<b><tt>Makefile <i>{X}</i> option cannot be blank</tt></b>&quot; shown when compiling.</td>
+ * <td>The specified Makefile value was configured in your project's makefile or on the command line, but was set to an empty value. For the nominated configuration
+ * option, an empty value is not allowed. Define the nominated setting to a correct non-blank value and try again.</td>
+ * </tr>
+ * <tr>
+ * <td>Error &quot;<b><tt>Makefile <i>{X}</i> option must be Y or N</tt></b>&quot; shown when compiling.</td>
+ * <td>The specified Makefile value was configured in your project's makefile or on the command line, but was set to a value other than a Y (for "Yes") or "N" (for "No").
+ * This configuration option is required to be one of the aforementioned boolean values, and other values are invalid. Set this option to either Y or N and try again.</td>
+ * </tr>
+ * <tr>
+ * <td>Error &quot;<b><tt>Unknown input source file formats: <i>{X}</i></tt></b>&quot; shown when compiling.</td>
+ * <td>The nominated source files, specified in your project's makefile in the <tt>SRC</tt> configuration option, has an extension that the LUFA build system does not
+ * recognise. The file extensions are case sensitive, and must be one of the supported formats (<tt>*.c</tt>, <tt>*.cpp</tt> or <tt>*.S</tt>).</td>
+ * </tr>
+ * <tr>
+ * <td>Error &quot;<b><tt>Cannot build with OBJDIR parameter set - one or more object file name is not unique</tt></b>&quot; shown when compiling.</td>
+ * <td>When a project is built with a non-empty <tt>OBJDIR</tt> object directory name set, all input source files must have unique names, excluding extension and path.
+ * This means that input files that are named identically and differ only by their path or extension are invalid when this mode is used.</td>
+ * </tr>
+ * <tr>
+ * <td>Error &quot;<b><tt>Source file does not exist: <i>{X}</i></tt></b>&quot; shown when compiling.</td>
+ * <td>The nominated input source file, specified in the user project's <tt>SRC</tt> parameter, could not be found. Ensure the source file exists and the absolute or
+ * relative path given in the user project makefile is correct and try again.</td>
+ * </tr>
+ * <tr>
+ * <td>Error &quot;<b><tt>Doxygen configuration file <i>{X}</i> does not exist</tt></b>&quot; shown when upgrading a Doxygen configuration file.</td>
+ * <td>The nominated Doxygen configuration file, specified in the user project's <tt>DOXYGEN_CONF</tt> parameter, could not be found. Ensure the configuration file exists
+ * and the absolute or relative path given in the user project makefile is correct and try again, or run the appropriate makefile target to generate a new configuration
+ * file.</td>
+ * </tr>
+ * <tr>
+ * <td>Error &quot;<b><tt>avr-gcc: error: unrecognized option '<i>{X}</i>'</tt></b>&quot; shown when compiling.</td>
+ * <td>An unrecognised option was supplied to the compiler, usually in the <tt>C_FLAGS</tt>, <tt>CPP_FLAGS</tt>, <tt>ASM_FLAGS</tt> or <tt>CC_FLAGS</tt> configuration
+ * options. The nominated compiler switch may be invalid, or unsupported by the version of AVR-GCC on the host system. Remove the unrecognised flag if invalid, or
+ * upgrade to the latest AVR-GCC. If the option is a valid linker option, use the prefix "-Wl," to ensure it is passed to the linker correctly.</td>
+ * </tr>
+ * <tr>
+ * <td>Error &quot;<b><tt>makefile:{X}: {Y}.mk: No such file or directory</tt></b>&quot; shown when make is invoked.</td>
+ * <td>The path to the nominated makefile module was incorrect. This usually indicates that the makefile <tt>LUFA_PATH</tt> option is not set to a valid relative or
+ * absolute path to the LUFA library core.</td>
+ * </tr>
+ * <tr>
+ * <td>Error &quot;<b><tt>fatal error: LUFAConfig.h: No such file or directory</tt></b>&quot; shown when compiling.</td>
+ * <td>The <tt>USE_LUFA_CONFIG_HEADER</tt> compile time option was set in the user project makefile, but the user supplied <tt>LUFAConfig.h</tt> header could not be
+ * found. Ensure that the directory that contains this configuration file is correctly passed to the compiler via the -I switch in the makefile <tt>CC_FLAGS</tt>
+ * parameter.</td>
+ * </tr>
+ * <tr>
+ * <td>Error &quot;<b><tt>ld.exe: section .apitable_trampolines loaded at <i>{X}</i> overlaps section .text</tt></b>&quot; shown when compiling a bootloader.</td>
+ * <td>The bootloader is compiling too large for the given <tt>FLASH_SIZE_KB</tt> and <tt>BOOT_SECTION_SIZE_KB</tt> parameters set in the bootloader makefile. This
+ * usually indicates that these values are incorrect for the specified device the bootloader is targeting. If these values are correct, a newer version of the
+ * compiler may need to be used to ensure that the bootloader is built within the section size constraints of the target device.</td>
+ * </tr>
+ * <tr>
+ * <td>Error &quot;<b><tt>unknown MCU '<i>{X}</i>' specified</tt></b>&quot; shown when compiling.</td>
+ * <td>The specified microcontroller device model name set in the user application's makefile as the <tt>MCU</tt> parameter is incorrect, or unsupported by the
+ * version of the compiler being used. Make sure the model name is correct, or upgrade to the latest Atmel Toolchain to obtain newer device support.</td>
+ * </tr>
+ * <tr>
+ * <td>Error &quot;<b><tt>undefined reference to `<i>{X}</i>'</tt></b>&quot; shown when compiling.</td>
+ * <td>This is usually caused by a missing source file in the user application's <tt>SRC</tt> configuration parameter. If the indicated symbol is one from the LUFA
+ * library, you may be missing a LUFA source makefile module (see \ref Page_BuildModule_SOURCES).</td>
+ * </tr>
+ * </table>
+ *
+ * For troubleshooting other errors you encounter, please see \ref Sec_ProjectHelp.
+ */
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/mshelp/placeholder.txt b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/mshelp/placeholder.txt
index 486e9a427..a34fd58df 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/mshelp/placeholder.txt
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/mshelp/placeholder.txt
@@ -1 +1 @@
-Copy the Microsoft HV1 Docbook transform contents into this directory (i.e. with the XSLT files in the current folder). The HV1 transform proposal can be found at http://sourceforge.net/tracker/?func=detail&aid=3610290&group_id=21935&atid=373750 .
+Copy the Microsoft HV1 Docbook transform contents into this directory (i.e. with the XSLT files in the current folder). The HV1 transform proposal can be found at http://sourceforge.net/tracker/?func=detail&aid=3610290&group_id=21935&atid=373750 .
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/placeholder.txt b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/placeholder.txt
index c017acfd7..dd69b7e0b 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/placeholder.txt
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/Docbook/placeholder.txt
@@ -1 +1 @@
-Copy the Docbook XSLT docbook-xsl-1.78.1 release contents into this directory (i.e. with the root Docbook files in the current folder). The Docbook releases can be found at http://sourceforge.net/projects/docbook/files/docbook-xsl/ .
+Copy the Docbook XSLT docbook-xsl-1.78.1 release contents into this directory (i.e. with the root Docbook files in the current folder). The Docbook releases can be found at http://sourceforge.net/projects/docbook/files/docbook-xsl/ .
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_hv1_transform.xslt b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_hv1_transform.xslt
index ee8a38340..8aa4a9413 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_hv1_transform.xslt
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_hv1_transform.xslt
@@ -1,45 +1,45 @@
-<!--
- LUFA Library
- Copyright (C) Dean Camera, 2013.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
--->
-
-<!-- Docbook XML to Microsoft Help Viewer 1.0 transform file -->
-
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
-
- <xsl:import href="../Docbook/mshelp/docbook.xsl"/>
-
- <xsl:output method="xml" indent="no"/>
-
- <xsl:template match="emphasis[@role = 'keyword' or @role = 'keywordtype' or @role = 'keywordflow']">
- <span class="hl-keyword" style="color: #0079C1">
- <xsl:apply-templates/>
- </span>
- </xsl:template>
-
- <xsl:template match="emphasis[@role = 'stringliteral' or @role = 'charliteral']">
- <span class="hl-string" style="color: #800000">
- <xsl:apply-templates/>
- </span>
- </xsl:template>
-
- <xsl:template match="emphasis[@role = 'comment']">
- <em class="hl-comment" style="color: #008000">
- <xsl:apply-templates/>
- </em>
- </xsl:template>
-
- <xsl:template match="emphasis[@role = 'preprocessor']">
- <span class="hl-preprocessor" style="color: #A000A0">
- <xsl:apply-templates/>
- </span>
- </xsl:template>
-
- <xsl:template match="emphasis[@role = 'normal' and ancestor::programlisting]">
- <xsl:apply-templates />
- </xsl:template>
-
-</xsl:stylesheet>
+<!--
+ LUFA Library
+ Copyright (C) Dean Camera, 2013.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+-->
+
+<!-- Docbook XML to Microsoft Help Viewer 1.0 transform file -->
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+ <xsl:import href="../Docbook/mshelp/docbook.xsl"/>
+
+ <xsl:output method="xml" indent="no"/>
+
+ <xsl:template match="emphasis[@role = 'keyword' or @role = 'keywordtype' or @role = 'keywordflow']">
+ <span class="hl-keyword" style="color: #0079C1">
+ <xsl:apply-templates/>
+ </span>
+ </xsl:template>
+
+ <xsl:template match="emphasis[@role = 'stringliteral' or @role = 'charliteral']">
+ <span class="hl-string" style="color: #800000">
+ <xsl:apply-templates/>
+ </span>
+ </xsl:template>
+
+ <xsl:template match="emphasis[@role = 'comment']">
+ <em class="hl-comment" style="color: #008000">
+ <xsl:apply-templates/>
+ </em>
+ </xsl:template>
+
+ <xsl:template match="emphasis[@role = 'preprocessor']">
+ <span class="hl-preprocessor" style="color: #A000A0">
+ <xsl:apply-templates/>
+ </span>
+ </xsl:template>
+
+ <xsl:template match="emphasis[@role = 'normal' and ancestor::programlisting]">
+ <xsl:apply-templates />
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_studio_help_styling.css b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_studio_help_styling.css
index 49eb7e970..0b6ccbd8c 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_studio_help_styling.css
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/HV1/lufa_studio_help_styling.css
@@ -1,53 +1,53 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2013.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-.programlisting {
- display: block;
- margin-left: 15px;
- padding: 10px;
- background-color: #f4f4f4;
- border: 1px solid #aaaaaa;
- font-family: "Consolas", "Courier New", sans-serif;
- }
-
- code {
- background-color: #f4f4f4;
- font-family: "Consolas", "Courier New", sans-serif;
- }
-
-.note, .warning, .tip {
- display: block;
- margin-left: 15px;
- padding-left: 10px;
- padding-bottom: 5px;
- background-color: #f4f4f4;
- border: 1px solid #aaaaaa;
-}
-
-table {
- border: 1px solid #aaaaaa;
- border-collapse: collapse;
- margin-left: 15px;
- font-size: 10pt;
-}
-
-table thead {
- background-color: #f4f4f4;
-}
-
-table thead th {
- padding: 5px;
-}
-
-table tbody td {
- padding: 5px;
-}
-
-ul {
- padding-left: 20px;
-}
+/*
+ LUFA Library
+ Copyright (C) Dean Camera, 2013.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+*/
+
+.programlisting {
+ display: block;
+ margin-left: 15px;
+ padding: 10px;
+ background-color: #f4f4f4;
+ border: 1px solid #aaaaaa;
+ font-family: "Consolas", "Courier New", sans-serif;
+ }
+
+ code {
+ background-color: #f4f4f4;
+ font-family: "Consolas", "Courier New", sans-serif;
+ }
+
+.note, .warning, .tip {
+ display: block;
+ margin-left: 15px;
+ padding-left: 10px;
+ padding-bottom: 5px;
+ background-color: #f4f4f4;
+ border: 1px solid #aaaaaa;
+}
+
+table {
+ border: 1px solid #aaaaaa;
+ border-collapse: collapse;
+ margin-left: 15px;
+ font-size: 10pt;
+}
+
+table thead {
+ background-color: #f4f4f4;
+}
+
+table thead th {
+ padding: 5px;
+}
+
+table tbody td {
+ padding: 5px;
+}
+
+ul {
+ padding-left: 20px;
+}
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/[Content_Types].xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/[Content_Types].xml
index 05ef8b6ba..112d16994 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/[Content_Types].xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/[Content_Types].xml
@@ -1,13 +1,13 @@
-<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
- <Default Extension="vsixmanifest" ContentType="text/xml"/>
- <Default Extension="cache" ContentType="text/xml"/>
- <Default Extension="png" ContentType="application/octet-stream"/>
- <Default Extension="txt" ContentType="text/plain"/>
- <Default Extension="xml" ContentType="text/xml"/>
- <Default Extension="zip" ContentType="application/octet-stream"/>
- <Default Extension="dll" ContentType="application/octet-stream" />
- <Default Extension="pkgdef" ContentType="text/plain" />
- <Default Extension="htm" ContentType="text/html" />
- <Default Extension="msha" ContentType="text/html" />
- <Default Extension="mshc" ContentType="application/octet-stream"/>
-</Types>
+<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
+ <Default Extension="vsixmanifest" ContentType="text/xml"/>
+ <Default Extension="cache" ContentType="text/xml"/>
+ <Default Extension="png" ContentType="application/octet-stream"/>
+ <Default Extension="txt" ContentType="text/plain"/>
+ <Default Extension="xml" ContentType="text/xml"/>
+ <Default Extension="zip" ContentType="application/octet-stream"/>
+ <Default Extension="dll" ContentType="application/octet-stream" />
+ <Default Extension="pkgdef" ContentType="text/plain" />
+ <Default Extension="htm" ContentType="text/html" />
+ <Default Extension="msha" ContentType="text/html" />
+ <Default Extension="mshc" ContentType="application/octet-stream"/>
+</Types>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/asf-manifest.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/asf-manifest.xml
index 794fd689e..bd969518a 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/asf-manifest.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/asf-manifest.xml
@@ -1,18 +1,18 @@
-<AsfContentProvider Version="1.0.0">
- <Identifier Id="0e160d5c-e331-48d9-850b-e0387912171b">
- <Org>FourWalledCubicle</Org>
- <ShortName>LUFA</ShortName>
- <Author>Dean Camera</Author>
- <Description/>
- <FollowFolderStructure>True</FollowFolderStructure>
- </Identifier>
- <AsfContent Type="zip" Path="contents.zip">
- <Content>
- <Version>0</Version>
- <HelpURL/>
- <Locator/>
- <DbXMLPath>content.xml.cache</DbXMLPath>
- <Description/>
- </Content>
- </AsfContent>
-</AsfContentProvider>
+<AsfContentProvider Version="1.0.0">
+ <Identifier Id="0e160d5c-e331-48d9-850b-e0387912171b">
+ <Org>FourWalledCubicle</Org>
+ <ShortName>LUFA</ShortName>
+ <Author>Dean Camera</Author>
+ <Description/>
+ <FollowFolderStructure>True</FollowFolderStructure>
+ </Identifier>
+ <AsfContent Type="zip" Path="contents.zip">
+ <Content>
+ <Version>0</Version>
+ <HelpURL/>
+ <Locator/>
+ <DbXMLPath>content.xml.cache</DbXMLPath>
+ <Description/>
+ </Content>
+ </AsfContent>
+</AsfContentProvider>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/extension.vsixmanifest b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/extension.vsixmanifest
index ea6edeb25..847501744 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/extension.vsixmanifest
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/extension.vsixmanifest
@@ -1,33 +1,33 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010">
- <Identifier Id="FourWalledCubicle.LUFA.0e160d5c-e331-48d9-850b-e0387912171b">
- <Name>LUFA Library</Name>
- <Author>Dean Camera</Author>
- <Version>0</Version>
- <MoreInfoUrl>http://www.lufa-lib.org</MoreInfoUrl>
- <Description xml:space="preserve">LUFA, the Lightweight USB Framework for AVRs.</Description>
-
- <License>License.txt</License>
- <Icon>LUFA_thumb.png</Icon>
- <PreviewImage>LUFA.png</PreviewImage>
-
- <SupportedProducts>
- <IsolatedShell Version="6.1">AtmelStudio</IsolatedShell>
- <IsolatedShell Version="6.2">AtmelStudio</IsolatedShell>
- </SupportedProducts>
-
- <SupportedFrameworkRuntimeEdition MinVersion="4.0" MaxVersion="4.5"/>
- <Locale>1033</Locale>
-
- <AllUsers>false</AllUsers>
- </Identifier>
-
- <References/>
-
- <Content>
- <VsPackage>LUFA.pkgdef</VsPackage>
- <CustomExtension Type="MSHelp">helpcontentsetup.msha</CustomExtension>
- <CustomExtension Type="asf-manifest">asf-manifest.xml</CustomExtension>
- </Content>
-</Vsix>
+<?xml version="1.0" encoding="utf-8"?>
+
+<Vsix xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2010">
+ <Identifier Id="FourWalledCubicle.LUFA.0e160d5c-e331-48d9-850b-e0387912171b">
+ <Name>LUFA Library</Name>
+ <Author>Dean Camera</Author>
+ <Version>0</Version>
+ <MoreInfoUrl>http://www.lufa-lib.org</MoreInfoUrl>
+ <Description xml:space="preserve">LUFA, the Lightweight USB Framework for AVRs.</Description>
+
+ <License>License.txt</License>
+ <Icon>LUFA_thumb.png</Icon>
+ <PreviewImage>LUFA.png</PreviewImage>
+
+ <SupportedProducts>
+ <IsolatedShell Version="6.1">AtmelStudio</IsolatedShell>
+ <IsolatedShell Version="6.2">AtmelStudio</IsolatedShell>
+ </SupportedProducts>
+
+ <SupportedFrameworkRuntimeEdition MinVersion="4.0" MaxVersion="4.5"/>
+ <Locale>1033</Locale>
+
+ <AllUsers>false</AllUsers>
+ </Identifier>
+
+ <References/>
+
+ <Content>
+ <VsPackage>LUFA.pkgdef</VsPackage>
+ <CustomExtension Type="MSHelp">helpcontentsetup.msha</CustomExtension>
+ <CustomExtension Type="asf-manifest">asf-manifest.xml</CustomExtension>
+ </Content>
+</Vsix>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/generate_caches.py b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/generate_caches.py
index c51cff400..eb4b71efd 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/generate_caches.py
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/VSIX/generate_caches.py
@@ -1,38 +1,38 @@
-"""
- LUFA Library
- Copyright (C) Dean Camera, 2013.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-"""
-
-import sys
-sys.path.append("ProjectGenerator")
-
-
-def show_message(message):
- print("[Project Generator] %s" % message)
- sys.stdout.flush()
-
-
-def main(lufa_root_path):
- try:
- from asf_avrstudio5_interface import PythonFacade
- except ImportError:
- print("Fatal Error: The ASF project generator is missing.")
- return 1
-
- p = PythonFacade(lufa_root_path)
-
- show_message("Checking database sanity...")
- p.check_extension_database_sanity(lufa_root_path)
-
- show_message("Building cache files...")
- p.generate_extension_cache_files(lufa_root_path)
-
- show_message("Cache files created.")
- return 0
-
-
-if __name__ == "__main__":
- sys.exit(main(sys.argv[1]))
+"""
+ LUFA Library
+ Copyright (C) Dean Camera, 2013.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+"""
+
+import sys
+sys.path.append("ProjectGenerator")
+
+
+def show_message(message):
+ print("[Project Generator] %s" % message)
+ sys.stdout.flush()
+
+
+def main(lufa_root_path):
+ try:
+ from asf_avrstudio5_interface import PythonFacade
+ except ImportError:
+ print("Fatal Error: The ASF project generator is missing.")
+ return 1
+
+ p = PythonFacade(lufa_root_path)
+
+ show_message("Checking database sanity...")
+ p.check_extension_database_sanity(lufa_root_path)
+
+ show_message("Building cache files...")
+ p.generate_extension_cache_files(lufa_root_path)
+
+ show_message("Cache files created.")
+ return 0
+
+
+if __name__ == "__main__":
+ sys.exit(main(sys.argv[1]))
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa.xml
index 28afdda58..86cfc0409 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa.xml
@@ -1,96 +1,96 @@
-<!--
- LUFA Library
- Copyright (C) Dean Camera, 2013.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
--->
-
-<!-- Atmel Studio framework integration file -->
-
-<lufa>
- <extension-container>
- <extension uuid="0e160d5c-e331-48d9-850b-e0387912171b" org="FourWalledCubicle" shortname="LUFA" version="" fullname="Lightweight USB Framework for AVRs (LUFA)">
- <author name="Dean Camera" website="http://www.lufa-lib.org/" email="dean@fourwalledcubicle.com"/>
- <description>Lightweight USB Framework for AVRs (LUFA), a USB software stack/framework.</description>
- <icon-image path="LUFA/DoxygenPages/Images/LUFA_thumb.png"/>
- <preview-image path="LUFA/DoxygenPages/Images/LUFA.png"/>
- <license caption="LUFA License" path="LUFA/License.txt"/>
- <release-notes caption="LUFA Information" url="http://www.lufa-lib.org"/>
- <online-help>
- <index-page caption="LUFA Documentation" url="http://www.lufa-lib.org/documentation/"/>
- <module-help-page scheme="append" baseurl="http://www.lufa-lib.org/documentation/"/>
- <module-guide-page scheme="append" baseurl="http://www.lufa-lib.org/documentation/"/>
- </online-help>
- <dependencies/>
- </extension>
- </extension-container>
-
- <asf>
- <device-alias-map name="lufa_avr8">
- <device-support value="at90usb82"/>
- <device-support value="atmega8u2"/>
- <device-support value="at90usb162"/>
- <device-support value="atmega16u2"/>
- <device-support value="atmega16u4"/>
- <device-support value="atmega32u2"/>
- <device-support value="atmega32u4"/>
- <device-support value="at90usb646"/>
- <device-support value="at90usb647"/>
- <device-support value="at90usb1286"/>
- <device-support value="at90usb1287"/>
- </device-alias-map>
-
- <device-alias-map name="lufa_xmega">
- <device-support value="atxmega16a4u"/>
- <device-support value="atxmega32a4u"/>
- <device-support value="atxmega64a4u"/>
- <device-support value="atxmega128a4u"/>
- <device-support value="atxmega64a3u"/>
- <device-support value="atxmega128a3u"/>
- <device-support value="atxmega192a3u"/>
- <device-support value="atxmega256a3u"/>
- <device-support value="atxmega256a3bu"/>
- <device-support value="atxmega128a1u"/>
- <device-support value="atxmega64b3"/>
- <device-support value="atxmega128b3"/>
- <device-support value="atxmega64b1"/>
- <device-support value="atxmega128b1"/>
- <device-support value="atxmega64c3"/>
- <device-support value="atxmega128c3"/>
- <!-- <device-support value="atxmega192c3"/> Wait for ASFP-3339 merge and release before enabling -->
- <device-support value="atxmega256c3"/>
- <device-support value="atxmega384c3"/>
- <device-support value="atxmega16c4"/>
- </device-alias-map>
-
- <device-alias-map name="lufa_uc3">
- <device-support value="at32uc3a364"/>
- <device-support value="at32uc3a364s"/>
- <device-support value="at32uc3a464"/>
- <device-support value="at32uc3a464s"/>
- <device-support value="at32uc3b064"/>
- <device-support value="at32uc3b164"/>
- <device-support value="at32uc3a0128"/>
- <device-support value="at32uc3a1128"/>
- <device-support value="at32uc3a3128"/>
- <device-support value="at32uc3a3128s"/>
- <device-support value="at32uc3a4128"/>
- <device-support value="at32uc3a4128s"/>
- <device-support value="at32uc3b0128"/>
- <device-support value="at32uc3b1128"/>
- <device-support value="at32uc3a0256"/>
- <device-support value="at32uc3a1256"/>
- <device-support value="at32uc3a3256"/>
- <device-support value="at32uc3a3256s"/>
- <device-support value="at32uc3a4256"/>
- <device-support value="at32uc3a4256s"/>
- <device-support value="at32uc3b0256"/>
- <device-support value="at32uc3b1256"/>
- <device-support value="at32uc3a0512"/>
- <device-support value="at32uc3a1512"/>
- <device-support value="at32uc3b0512"/>
- <device-support value="at32uc3b1512"/>
- </device-alias-map>
- </asf>
-</lufa>
+<!--
+ LUFA Library
+ Copyright (C) Dean Camera, 2013.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+ <extension-container>
+ <extension uuid="0e160d5c-e331-48d9-850b-e0387912171b" org="FourWalledCubicle" shortname="LUFA" version="" fullname="Lightweight USB Framework for AVRs (LUFA)">
+ <author name="Dean Camera" website="http://www.lufa-lib.org/" email="dean@fourwalledcubicle.com"/>
+ <description>Lightweight USB Framework for AVRs (LUFA), a USB software stack/framework.</description>
+ <icon-image path="LUFA/DoxygenPages/Images/LUFA_thumb.png"/>
+ <preview-image path="LUFA/DoxygenPages/Images/LUFA.png"/>
+ <license caption="LUFA License" path="LUFA/License.txt"/>
+ <release-notes caption="LUFA Information" url="http://www.lufa-lib.org"/>
+ <online-help>
+ <index-page caption="LUFA Documentation" url="http://www.lufa-lib.org/documentation/"/>
+ <module-help-page scheme="append" baseurl="http://www.lufa-lib.org/documentation/"/>
+ <module-guide-page scheme="append" baseurl="http://www.lufa-lib.org/documentation/"/>
+ </online-help>
+ <dependencies/>
+ </extension>
+ </extension-container>
+
+ <asf>
+ <device-alias-map name="lufa_avr8">
+ <device-support value="at90usb82"/>
+ <device-support value="atmega8u2"/>
+ <device-support value="at90usb162"/>
+ <device-support value="atmega16u2"/>
+ <device-support value="atmega16u4"/>
+ <device-support value="atmega32u2"/>
+ <device-support value="atmega32u4"/>
+ <device-support value="at90usb646"/>
+ <device-support value="at90usb647"/>
+ <device-support value="at90usb1286"/>
+ <device-support value="at90usb1287"/>
+ </device-alias-map>
+
+ <device-alias-map name="lufa_xmega">
+ <device-support value="atxmega16a4u"/>
+ <device-support value="atxmega32a4u"/>
+ <device-support value="atxmega64a4u"/>
+ <device-support value="atxmega128a4u"/>
+ <device-support value="atxmega64a3u"/>
+ <device-support value="atxmega128a3u"/>
+ <device-support value="atxmega192a3u"/>
+ <device-support value="atxmega256a3u"/>
+ <device-support value="atxmega256a3bu"/>
+ <device-support value="atxmega128a1u"/>
+ <device-support value="atxmega64b3"/>
+ <device-support value="atxmega128b3"/>
+ <device-support value="atxmega64b1"/>
+ <device-support value="atxmega128b1"/>
+ <device-support value="atxmega64c3"/>
+ <device-support value="atxmega128c3"/>
+ <!-- <device-support value="atxmega192c3"/> Wait for ASFP-3339 merge and release before enabling -->
+ <device-support value="atxmega256c3"/>
+ <device-support value="atxmega384c3"/>
+ <device-support value="atxmega16c4"/>
+ </device-alias-map>
+
+ <device-alias-map name="lufa_uc3">
+ <device-support value="at32uc3a364"/>
+ <device-support value="at32uc3a364s"/>
+ <device-support value="at32uc3a464"/>
+ <device-support value="at32uc3a464s"/>
+ <device-support value="at32uc3b064"/>
+ <device-support value="at32uc3b164"/>
+ <device-support value="at32uc3a0128"/>
+ <device-support value="at32uc3a1128"/>
+ <device-support value="at32uc3a3128"/>
+ <device-support value="at32uc3a3128s"/>
+ <device-support value="at32uc3a4128"/>
+ <device-support value="at32uc3a4128s"/>
+ <device-support value="at32uc3b0128"/>
+ <device-support value="at32uc3b1128"/>
+ <device-support value="at32uc3a0256"/>
+ <device-support value="at32uc3a1256"/>
+ <device-support value="at32uc3a3256"/>
+ <device-support value="at32uc3a3256s"/>
+ <device-support value="at32uc3a4256"/>
+ <device-support value="at32uc3a4256s"/>
+ <device-support value="at32uc3b0256"/>
+ <device-support value="at32uc3b1256"/>
+ <device-support value="at32uc3a0512"/>
+ <device-support value="at32uc3a1512"/>
+ <device-support value="at32uc3b0512"/>
+ <device-support value="at32uc3b1512"/>
+ </device-alias-map>
+ </asf>
+</lufa>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_common.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_common.xml
index 9e17b188b..c2ef7af4c 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_common.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_common.xml
@@ -1,34 +1,34 @@
-<!--
- LUFA Library
- Copyright (C) Dean Camera, 2013.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
--->
-
-<!-- Atmel Studio framework integration file -->
-
-<lufa>
- <asf>
- <module type="service" id="lufa.common" caption="LUFA Common Infrastructure">
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <info type="gui-flag" value="hidden"/>
- <build type="doxygen-entry-point" value="Group_Common"/>
-
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Version.h"/>
- <build type="distribute" subtype="license" value="License.txt"/>
-
- <build type="header-file" subtype="api" value="Common/Common.h"/>
- <build type="header-file" value="Common/Architectures.h"/>
- <build type="header-file" value="Common/ArchitectureSpecific.h"/>
- <build type="header-file" value="Common/Attributes.h"/>
- <build type="header-file" value="Common/BoardTypes.h"/>
- <build type="header-file" value="Common/CompilerSpecific.h"/>
- <build type="header-file" value="Common/Endianness.h"/>
- </module>
- </asf>
-</lufa>
+<!--
+ LUFA Library
+ Copyright (C) Dean Camera, 2013.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+ <asf>
+ <module type="service" id="lufa.common" caption="LUFA Common Infrastructure">
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <info type="gui-flag" value="hidden"/>
+ <build type="doxygen-entry-point" value="Group_Common"/>
+
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Version.h"/>
+ <build type="distribute" subtype="license" value="License.txt"/>
+
+ <build type="header-file" subtype="api" value="Common/Common.h"/>
+ <build type="header-file" value="Common/Architectures.h"/>
+ <build type="header-file" value="Common/ArchitectureSpecific.h"/>
+ <build type="header-file" value="Common/Attributes.h"/>
+ <build type="header-file" value="Common/BoardTypes.h"/>
+ <build type="header-file" value="Common/CompilerSpecific.h"/>
+ <build type="header-file" value="Common/Endianness.h"/>
+ </module>
+ </asf>
+</lufa>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board.xml
index 3677d2003..e150aa645 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board.xml
@@ -1,114 +1,114 @@
-<!--
- LUFA Library
- Copyright (C) Dean Camera, 2013.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
--->
-
-<!-- Atmel Studio framework integration file -->
-
-<lufa>
- <asf>
- <board id="lufa.boards.dummy.avr8" vendor="LUFA" caption="AVR8 Architecture">
- <device-support value="mega"/>
-
- <require idref="lufa.drivers.board"/>
- <require idref="lufa.drivers.board.info"/>
- </board>
-
- <board id="lufa.boards.dummy.xmega" vendor="LUFA" caption="XMEGA Architecture">
- <device-support value="xmega"/>
-
- <require idref="lufa.drivers.board"/>
- <require idref="lufa.drivers.board.info"/>
- </board>
-
- <board id="lufa.boards.dummy.uc3" vendor="LUFA" caption="UC3 Architecture">
- <device-support value="uc3"/>
-
- <require idref="lufa.drivers.board"/>
- <require idref="lufa.drivers.board.info"/>
- </board>
-
- <module type="driver" id="lufa.drivers.board.info" caption="LUFA Board Hardware Information Driver">
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <build type="doxygen-entry-point" value="Group_BoardInfo"/>
-
- <require idref="lufa.common"/>
-
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Drivers/Board/Board.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board.leds" caption="LUFA Board LED Driver">
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <build type="doxygen-entry-point" value="Group_LEDs"/>
-
- <require idref="lufa.common"/>
-
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Drivers/Board/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board.buttons" caption="LUFA Board Buttons Driver">
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <build type="doxygen-entry-point" value="Group_Buttons"/>
-
- <require idref="lufa.common"/>
-
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Drivers/Board/Buttons.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board.dataflash" caption="LUFA Board Dataflash Driver">
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <build type="doxygen-entry-point" value="Group_Dataflash"/>
-
- <require idref="lufa.common"/>
-
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Drivers/Board/Dataflash.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board.joystick" caption="LUFA Board Joystick Driver">
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <build type="doxygen-entry-point" value="Group_Joystick"/>
-
- <require idref="lufa.common"/>
-
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Drivers/Board/Joystick.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board.temperature" caption="LUFA Board Temperature Sensor Driver">
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <build type="doxygen-entry-point" value="Group_Temperature"/>
-
- <require idref="lufa.common"/>
- <require idref="lufa.drivers.peripheral.adc"/>
-
- <build type="c-source" value="Drivers/Board/Temperature.c"/>
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Drivers/Board/Temperature.h"/>
- </module>
- </asf>
-</lufa>
+<!--
+ LUFA Library
+ Copyright (C) Dean Camera, 2013.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+ <asf>
+ <board id="lufa.boards.dummy.avr8" vendor="LUFA" caption="AVR8 Architecture">
+ <device-support value="mega"/>
+
+ <require idref="lufa.drivers.board"/>
+ <require idref="lufa.drivers.board.info"/>
+ </board>
+
+ <board id="lufa.boards.dummy.xmega" vendor="LUFA" caption="XMEGA Architecture">
+ <device-support value="xmega"/>
+
+ <require idref="lufa.drivers.board"/>
+ <require idref="lufa.drivers.board.info"/>
+ </board>
+
+ <board id="lufa.boards.dummy.uc3" vendor="LUFA" caption="UC3 Architecture">
+ <device-support value="uc3"/>
+
+ <require idref="lufa.drivers.board"/>
+ <require idref="lufa.drivers.board.info"/>
+ </board>
+
+ <module type="driver" id="lufa.drivers.board.info" caption="LUFA Board Hardware Information Driver">
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="doxygen-entry-point" value="Group_BoardInfo"/>
+
+ <require idref="lufa.common"/>
+
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Drivers/Board/Board.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board.leds" caption="LUFA Board LED Driver">
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="doxygen-entry-point" value="Group_LEDs"/>
+
+ <require idref="lufa.common"/>
+
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Drivers/Board/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board.buttons" caption="LUFA Board Buttons Driver">
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="doxygen-entry-point" value="Group_Buttons"/>
+
+ <require idref="lufa.common"/>
+
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Drivers/Board/Buttons.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board.dataflash" caption="LUFA Board Dataflash Driver">
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="doxygen-entry-point" value="Group_Dataflash"/>
+
+ <require idref="lufa.common"/>
+
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Drivers/Board/Dataflash.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board.joystick" caption="LUFA Board Joystick Driver">
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="doxygen-entry-point" value="Group_Joystick"/>
+
+ <require idref="lufa.common"/>
+
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Drivers/Board/Joystick.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board.temperature" caption="LUFA Board Temperature Sensor Driver">
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="doxygen-entry-point" value="Group_Temperature"/>
+
+ <require idref="lufa.common"/>
+ <require idref="lufa.drivers.peripheral.adc"/>
+
+ <build type="c-source" value="Drivers/Board/Temperature.c"/>
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Drivers/Board/Temperature.h"/>
+ </module>
+ </asf>
+</lufa>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board_names.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board_names.xml
index 4b099920b..ab7e03e4e 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board_names.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_board_names.xml
@@ -1,853 +1,853 @@
-<!--
- LUFA Library
- Copyright (C) Dean Camera, 2013.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
--->
-
-<!-- Atmel Studio framework integration file -->
-
-<lufa>
- <asf>
- <select-by-config id="lufa.drivers.board" name="lufa.drivers.board.name" default="none" caption="LUFA Board Support">
- <info type="description" value="summary">
- Board hardware (LEDs, Buttons, etc.) drivers for the preconfigured LUFA boards. Note that only the boards
- compatible with the currently selected device will be shown.
-
- To disable all hardware drivers silently, use NONE. To supply customer drivers, use USER (see manual).
- </info>
-
- <module type="driver" id="lufa.drivers.board#none" caption="Board Support - None">
- <device-support value="avr"/>
- <build type="define" name="BOARD" value="BOARD_NONE"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#user" caption="Board Support - User Supplied">
- <device-support value="avr"/>
- <build type="define" name="BOARD" value="BOARD_USER"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#adafruit_u4" caption="Board Support - ADAFRUITU4">
- <build type="doxygen-entry-point" value="Group_BoardInfo_ADAFRUITU4"/>
-
- <device-support value="atmega32u4"/>
- <build type="define" name="BOARD" value="BOARD_ADAFRUITU4"/>
-
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/ADAFRUITU4/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/ADAFRUITU4/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#atavrusbrf01" caption="Board Support - ATAVRUSBRF01">
- <build type="doxygen-entry-point" value="Group_BoardInfo_ATAVRUSBRF01"/>
-
- <device-support value="at90usb1287"/>
- <build type="define" name="BOARD" value="BOARD_ATAVRUSBRF01"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#benito" caption="Board Support - BENITO">
- <build type="doxygen-entry-point" value="Group_BoardInfo_BENITO"/>
-
- <device-support value="at90usb162"/>
- <build type="define" name="BOARD" value="BOARD_BENITO"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/BENITO/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/BENITO/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/BENITO/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#big_multio" caption="Board Support - BIGMULTIO">
- <build type="doxygen-entry-point" value="Group_BoardInfo_BIGMULTIO"/>
-
- <device-support value="atmega32u4"/>
- <build type="define" name="BOARD" value="BOARD_BIGMULTIO"/>
-
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/BIGMULTIO/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/BIGMULTIO/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#blackcat" caption="Board Support - BLACKCAT">
- <build type="doxygen-entry-point" value="Group_BoardInfo_BLACKCAT"/>
-
- <device-support value="at90usb162"/>
- <build type="define" name="BOARD" value="BOARD_BLACKCAT"/>
-
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/BLACKCAT/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/BLACKCAT/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#bui" caption="Board Support - BUI">
- <build type="doxygen-entry-point" value="Group_BoardInfo_BUI"/>
-
- <device-support value="at90usb646"/>
- <build type="define" name="BOARD" value="BOARD_BUI"/>
-
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/BUI/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/BUI/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#bumbleb" caption="Board Support - BUMBLEB">
- <build type="doxygen-entry-point" value="Group_BoardInfo_BUMBLEB"/>
-
- <device-support value="at90usb162"/>
- <build type="define" name="BOARD" value="BOARD_BUMBLEB"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.leds"/>
- <require idref="lufa.drivers.board.joystick"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Joystick.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#culv3" caption="Board Support - CULV3">
- <build type="doxygen-entry-point" value="Group_BoardInfo_CULV3"/>
-
- <device-support value="atmega32u4"/>
- <build type="define" name="BOARD" value="BOARD_CULV3"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/CULV3/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/CULV3/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/CULV3/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#duce" caption="Board Support - DUCE">
- <build type="doxygen-entry-point" value="Group_BoardInfo_DUCE"/>
-
- <device-support value="atmega32u2"/>
- <build type="define" name="BOARD" value="BOARD_DUCE"/>
-
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/DUCE/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/DUCE/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#evk527" caption="Board Support - EVK527">
- <build type="doxygen-entry-point" value="Group_BoardInfo_EVK527"/>
-
- <device-support value="atmega32u4"/>
- <build type="define" name="BOARD" value="BOARD_EVK527"/>
-
- <require idref="lufa.drivers.misc.at45db321c"/>
- <require idref="lufa.drivers.peripheral.spi"/>
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.dataflash"/>
- <require idref="lufa.drivers.board.joystick"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/EVK527/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/EVK527/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/EVK527/Dataflash.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/EVK527/Joystick.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/EVK527/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#jm_db_u2" caption="Board Support - JMDBU2">
- <build type="doxygen-entry-point" value="Group_BoardInfo_JMDBU2"/>
-
- <device-support value="atmega32u2"/>
- <build type="define" name="BOARD" value="BOARD_JMDBU2"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/JMDBU2/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/JMDBU2/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/JMDBU2/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#leonardo" caption="Board Support - LEONARDO">
- <build type="doxygen-entry-point" value="Group_BoardInfo_LEONARDO"/>
-
- <device-support value="atmega32u4"/>
- <build type="define" name="BOARD" value="BOARD_LEONARDO"/>
-
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/LEONARDO/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/LEONARDO/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#maximus" caption="Board Support - MAXIMUS">
- <build type="doxygen-entry-point" value="Group_BoardInfo_MAXIMUS"/>
-
- <device-support value="at90usb162"/>
- <build type="define" name="BOARD" value="BOARD_MAXIMUS"/>
-
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/MAXIMUS/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/MAXIMUS/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#micropendous_32u2" caption="Board Support - MICROPENDOUS_32U2">
- <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_32U2"/>
-
- <device-support value="atmega32u2"/>
- <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_32U2"/>
-
- <require idref="lufa.drivers.board.leds"/>
- <require idref="lufa.drivers.board.buttons"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#micropendous_a" caption="Board Support - MICROPENDOUS_A">
- <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_A"/>
-
- <device-support value="at90usb1287"/>
- <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_A"/>
-
- <require idref="lufa.drivers.board.buttons"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#micropendous_1" caption="Board Support - MICROPENDOUS_1">
- <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_1"/>
-
- <device-support value="at90usb162"/>
- <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_1"/>
-
- <require idref="lufa.drivers.board.buttons"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#micropendous_2" caption="Board Support - MICROPENDOUS_2">
- <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_2"/>
-
- <device-support value="atmega32u4"/>
- <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_2"/>
-
- <require idref="lufa.drivers.board.buttons"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#micropendous_3" caption="Board Support - MICROPENDOUS_3">
- <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_3"/>
-
- <device-support value="at90usb1287"/>
- <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_3"/>
-
- <require idref="lufa.drivers.board.buttons"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#micropendous_4" caption="Board Support - MICROPENDOUS_4">
- <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_4"/>
-
- <device-support value="at90usb1287"/>
- <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_4"/>
-
- <require idref="lufa.drivers.board.buttons"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#micropendous_dip" caption="Board Support - MICROPENDOUS_DIP">
- <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_DIP"/>
-
- <device-support value="at90usb1287"/>
- <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_DIP"/>
-
- <require idref="lufa.drivers.board.buttons"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#micropendous_rev1" caption="Board Support - MICROPENDOUS_REV1">
- <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_REV1"/>
-
- <device-support value="at90usb1287"/>
- <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_REV1"/>
-
- <require idref="lufa.drivers.board.leds"/>
- <require idref="lufa.drivers.board.buttons"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#micropendous_rev2" caption="Board Support - MICROPENDOUS_REV2">
- <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_REV2"/>
-
- <device-support value="at90usb1287"/>
- <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_REV2"/>
-
- <require idref="lufa.drivers.board.leds"/>
- <require idref="lufa.drivers.board.buttons"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#microsin_162" caption="Board Support - MICROSIN162">
- <build type="doxygen-entry-point" value="Group_BoardInfo_MICROSIN162"/>
-
- <device-support value="atmega162"/>
- <build type="define" name="BOARD" value="BOARD_MICROSIN162"/>
-
- <require idref="lufa.drivers.board.leds"/>
- <require idref="lufa.drivers.board.buttons"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/LEDs.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/Buttons.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#minimus" caption="Board Support - MINIMUS">
- <build type="doxygen-entry-point" value="Group_BoardInfo_MINIMUS"/>
-
- <device-support value="atmega32u2"/>
- <build type="define" name="BOARD" value="BOARD_MINIMUS"/>
-
- <require idref="lufa.drivers.board.leds"/>
- <require idref="lufa.drivers.board.buttons"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/MINIMUS/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/MINIMUS/LEDs.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/MINIMUS/Buttons.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#multio" caption="Board Support - MULTIO">
- <build type="doxygen-entry-point" value="Group_BoardInfo_MULTIO"/>
-
- <device-support value="at90usb162"/>
- <build type="define" name="BOARD" value="BOARD_MULTIO"/>
-
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/MULTIO/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/MULTIO/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#olimex_162" caption="Board Support - OLIMEX162">
- <build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEX162"/>
-
- <device-support value="at90usb162"/>
- <build type="define" name="BOARD" value="BOARD_OLIMEX162"/>
-
- <require idref="lufa.drivers.board.leds"/>
- <require idref="lufa.drivers.board.buttons"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/LEDs.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/Buttons.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#olimex_32u4" caption="Board Support - OLIMEX32U4">
- <build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEX32U4"/>
-
- <device-support value="atmega32u4"/>
- <build type="define" name="BOARD" value="BOARD_OLIMEX32U4"/>
-
- <require idref="lufa.drivers.board.leds"/>
- <require idref="lufa.drivers.board.buttons"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/LEDs.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/Buttons.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#olimex_isp_mkii" caption="Board Support - OLIMEXISPMK2">
- <build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEXISPMK2"/>
-
- <device-support value="at90usb162"/>
- <build type="define" name="BOARD" value="BOARD_OLIMEXISPMK2"/>
-
- <require idref="lufa.drivers.board.leds"/>
- <require idref="lufa.drivers.board.buttons"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/LEDs.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/Buttons.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#olimex_t32u4" caption="Board Support - OLIMEX_T32U4">
- <build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEXT32U4"/>
-
- <device-support value="atmega32u4"/>
- <build type="define" name="BOARD" value="BOARD_OLIMEXT32U4"/>
-
- <require idref="lufa.drivers.board.leds"/>
- <require idref="lufa.drivers.board.buttons"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/LEDs.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/Buttons.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#rzusbstick" caption="Board Support - RZUSBSTICK">
- <build type="doxygen-entry-point" value="Group_BoardInfo_RZUSBSTICK"/>
-
- <device-support value="at90usb1287"/>
- <build type="define" name="BOARD" value="BOARD_RZUSBSTICK"/>
-
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/RZUSBSTICK/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/RZUSBSTICK/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#sparkfun_8u2" caption="Board Support - SPARKFUN8U2">
- <build type="doxygen-entry-point" value="Group_BoardInfo_SPARKFUN8U2"/>
-
- <device-support value="atmega8u2"/>
- <build type="define" name="BOARD" value="BOARD_SPARKFUN8U2"/>
-
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/SPARKFUN8U2/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/SPARKFUN8U2/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#stk525" caption="Board Support - STK525">
- <build type="doxygen-entry-point" value="Group_BoardInfo_STK525"/>
-
- <device-support value="at90usb1287"/>
- <device-support value="at90usb1286"/>
- <device-support value="at90usb647"/>
- <device-support value="at90usb646"/>
- <build type="define" name="BOARD" value="BOARD_STK525"/>
-
- <require idref="lufa.drivers.misc.at45db321c"/>
- <require idref="lufa.drivers.peripheral.spi"/>
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.dataflash"/>
- <require idref="lufa.drivers.board.joystick"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/STK525/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/STK525/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/STK525/Dataflash.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/STK525/Joystick.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/STK525/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#stk526" caption="Board Support - STK526">
- <build type="doxygen-entry-point" value="Group_BoardInfo_STK526"/>
-
- <device-support value="at90usb162"/>
- <device-support value="at90usb82"/>
- <device-support value="atmega32u2"/>
- <device-support value="atmega16u2"/>
- <device-support value="atmega8u2"/>
- <build type="define" name="BOARD" value="BOARD_STK526"/>
-
- <require idref="lufa.drivers.misc.at45db642d"/>
- <require idref="lufa.drivers.peripheral.spi"/>
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.dataflash"/>
- <require idref="lufa.drivers.board.joystick"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/STK526/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/STK526/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/STK526/Dataflash.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/STK526/Joystick.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/STK526/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#teensy" caption="Board Support - TEENSY">
- <build type="doxygen-entry-point" value="Group_BoardInfo_TEENSY"/>
-
- <device-support value="at90usb162"/>
- <build type="define" name="BOARD" value="BOARD_TEENSY"/>
-
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/TEENSY/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/TEENSY/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#teensy2" caption="Board Support - TEENSY2">
- <build type="doxygen-entry-point" value="Group_BoardInfo_TEENSY2"/>
-
- <device-support value="at90usb646"/>
- <build type="define" name="BOARD" value="BOARD_TEENSY2"/>
-
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/TEENSY/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/TEENSY/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#tul" caption="Board Support - TUL">
- <build type="doxygen-entry-point" value="Group_BoardInfo_TUL"/>
-
- <device-support value="atmega32u4"/>
- <build type="define" name="BOARD" value="BOARD_TUL"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/TUL/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/TUL/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/TUL/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#udip" caption="Board Support - UDIP">
- <build type="doxygen-entry-point" value="Group_BoardInfo_UDIP"/>
-
- <device-support value="atmega32u2"/>
- <build type="define" name="BOARD" value="BOARD_UDIP"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/UDIP/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/UDIP/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/UDIP/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#uno" caption="Board Support - UNO">
- <build type="doxygen-entry-point" value="Group_BoardInfo_UNO"/>
-
- <device-support value="atmega8u2"/>
- <device-support value="atmega16u2"/>
- <build type="define" name="BOARD" value="BOARD_UNO"/>
-
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/UNO/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/UNO/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#usb2ax" caption="Board Support - USB2AX">
- <build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX"/>
-
- <device-support value="atmega32u2"/>
- <build type="define" name="BOARD" value="BOARD_USB2AX"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#usb2ax_v3" caption="Board Support - USB2AX_V3">
- <build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX_V3"/>
-
- <device-support value="atmega32u2"/>
- <build type="define" name="BOARD" value="BOARD_USB2AX_V3"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#usb2ax_v3_1" caption="Board Support - USB2AX_V31">
- <build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX_V31"/>
-
- <device-support value="atmega32u2"/>
- <build type="define" name="BOARD" value="BOARD_USB2AX_V31"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#usbfoo" caption="Board Support - USBFOO">
- <build type="doxygen-entry-point" value="Group_BoardInfo_USBFOO"/>
-
- <device-support value="atmega162"/>
- <build type="define" name="BOARD" value="BOARD_USBFOO"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/USBFOO/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/USBFOO/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/USBFOO/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#usbkey" caption="Board Support - USBKEY">
- <build type="doxygen-entry-point" value="Group_BoardInfo_USBKEY"/>
-
- <device-support value="at90usb1287"/>
- <build type="define" name="BOARD" value="BOARD_USBKEY"/>
-
- <require idref="lufa.drivers.misc.at45db642d"/>
- <require idref="lufa.drivers.peripheral.spi"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.dataflash"/>
- <require idref="lufa.drivers.board.joystick"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/USBKEY/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/USBKEY/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/USBKEY/Dataflash.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/USBKEY/Joystick.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/USBKEY/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#usbtiny_mkii" caption="Board Support - USBTINYMKII">
- <build type="doxygen-entry-point" value="Group_BoardInfo_USBTINYMKII"/>
-
- <device-support value="at90usb162"/>
- <build type="define" name="BOARD" value="BOARD_USBTINYMKII"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/LEDs.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#xplain_rev1" caption="Board Support - XPLAIN (HW Rev 1)">
- <build type="doxygen-entry-point" value="Group_BoardInfo_XPLAIN_REV1"/>
-
- <device-support value="at90usb1287"/>
-
- <require idref="lufa.drivers.misc.at45db642d"/>
- <require idref="lufa.drivers.peripheral.spi"/>
- <require idref="lufa.drivers.board.dataflash"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Dataflash.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/LEDs.h"/>
-
- <build type="define" name="BOARD" value="BOARD_XPLAIN_REV1"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#xplain" caption="Board Support - XPLAIN (HW Rev 2+)">
- <build type="doxygen-entry-point" value="Group_BoardInfo_XPLAIN"/>
-
- <device-support value="at90usb1287"/>
-
- <require idref="lufa.drivers.misc.at45db642d"/>
- <require idref="lufa.drivers.peripheral.spi"/>
- <require idref="lufa.drivers.board.dataflash"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Dataflash.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/LEDs.h"/>
-
- <build type="define" name="BOARD" value="BOARD_XPLAIN"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#a3bu_xplained" caption="Board Support - A3BU_XPLAINED">
- <build type="doxygen-entry-point" value="Group_BoardInfo_A3BU_XPLAINED"/>
-
- <device-support value="atxmega256a3bu"/>
-
- <require idref="lufa.drivers.misc.at45db642d"/>
- <require idref="lufa.drivers.peripheral.usart_spi"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.dataflash"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Board.h"/>
- <build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Dataflash.h"/>
- <build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/LEDs.h"/>
-
- <build type="define" name="BOARD" value="BOARD_A3BU_XPLAINED"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#b1_xplained" caption="Board Support - B1_XPLAINED">
- <build type="doxygen-entry-point" value="Group_BoardInfo_B1_XPLAINED"/>
-
- <device-support value="atxmega128b1"/>
-
- <require idref="lufa.drivers.misc.at45db642d"/>
- <require idref="lufa.drivers.peripheral.usart_spi"/>
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.dataflash"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Board.h"/>
- <build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Dataflash.h"/>
- <build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/LEDs.h"/>
-
- <build type="define" name="BOARD" value="BOARD_B1_XPLAINED"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#evk1100" caption="Board Support - EVK1100">
- <build type="doxygen-entry-point" value="Group_BoardInfo_EVK1100"/>
-
- <device-support value="at32uc3a0512"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.joystick"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/UC3/EVK1100/Board.h"/>
- <build type="header-file" value="Drivers/Board/UC3/EVK1100/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/UC3/EVK1100/Joystick.h"/>
- <build type="header-file" value="Drivers/Board/UC3/EVK1100/LEDs.h"/>
-
- <build type="define" name="BOARD" value="BOARD_EVK1100"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#evk1101" caption="Board Support - EVK1101">
- <build type="doxygen-entry-point" value="Group_BoardInfo_EVK1101"/>
-
- <device-support value="at32uc3b0256"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.joystick"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/UC3/EVK1101/Board.h"/>
- <build type="header-file" value="Drivers/Board/UC3/EVK1101/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/UC3/EVK1101/Joystick.h"/>
- <build type="header-file" value="Drivers/Board/UC3/EVK1101/LEDs.h"/>
-
- <build type="define" name="BOARD" value="BOARD_EVK1101"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#evk1104" caption="Board Support - EVK1104">
- <build type="doxygen-entry-point" value="Group_BoardInfo_EVK1104"/>
-
- <device-support value="at32uc3a3256"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/UC3/EVK1104/Board.h"/>
- <build type="header-file" value="Drivers/Board/UC3/EVK1104/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/UC3/EVK1104/LEDs.h"/>
-
- <build type="define" name="BOARD" value="BOARD_EVK1104"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#uc3a3_xplained" caption="Board Support - UC3A3_XPLAINED">
- <build type="doxygen-entry-point" value="Group_BoardInfo_UC3_A3_XPLAINED"/>
-
- <device-support value="at32uc3a3256"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/Board.h"/>
- <build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/LEDs.h"/>
-
- <build type="define" name="BOARD" value="BOARD_UC3A3_XPLAINED"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#stange_isp" caption="Board Support - STANGE_ISP">
- <build type="doxygen-entry-point" value="Group_BoardInfo_STANGE_ISP"/>
-
- <device-support value="at90usb162"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/LEDs.h"/>
-
- <build type="define" name="BOARD" value="BOARD_STANGE_ISP"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#c3_xplained" caption="Board Support - C3_XPLAINED">
- <build type="doxygen-entry-point" value="Group_BoardInfo_C3_XPLAINED"/>
-
- <device-support value="atxmega384c3"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/Board.h"/>
- <build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/LEDs.h"/>
-
- <build type="define" name="BOARD" value="BOARD_C3_XPLAINED"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#u2s" caption="Board Support - U2S">
- <build type="doxygen-entry-point" value="Group_BoardInfo_U2S"/>
-
- <device-support value="atmega32u2"/>
-
- <require idref="lufa.drivers.board.buttons"/>
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/U2S/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/U2S/Buttons.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/U2S/LEDs.h"/>
-
- <build type="define" name="BOARD" value="BOARD_U2S"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#yun" caption="Board Support - YUN">
- <build type="doxygen-entry-point" value="Group_BoardInfo_YUN"/>
-
- <device-support value="atmega32u4"/>
-
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/YUN/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/YUN/LEDs.h"/>
-
- <build type="define" name="BOARD" value="BOARD_YUN"/>
- </module>
-
- <module type="driver" id="lufa.drivers.board#yun" caption="Board Support - MICRO">
- <build type="doxygen-entry-point" value="Group_BoardInfo_MICRO"/>
-
- <device-support value="atmega32u4"/>
-
- <require idref="lufa.drivers.board.leds"/>
-
- <build type="header-file" value="Drivers/Board/AVR8/MICRO/Board.h"/>
- <build type="header-file" value="Drivers/Board/AVR8/MICRO/LEDs.h"/>
-
- <build type="define" name="BOARD" value="BOARD_MICRO"/>
- </module>
- </select-by-config>
- </asf>
-</lufa>
+<!--
+ LUFA Library
+ Copyright (C) Dean Camera, 2013.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+ <asf>
+ <select-by-config id="lufa.drivers.board" name="lufa.drivers.board.name" default="none" caption="LUFA Board Support">
+ <info type="description" value="summary">
+ Board hardware (LEDs, Buttons, etc.) drivers for the preconfigured LUFA boards. Note that only the boards
+ compatible with the currently selected device will be shown.
+
+ To disable all hardware drivers silently, use NONE. To supply customer drivers, use USER (see manual).
+ </info>
+
+ <module type="driver" id="lufa.drivers.board#none" caption="Board Support - None">
+ <device-support value="avr"/>
+ <build type="define" name="BOARD" value="BOARD_NONE"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#user" caption="Board Support - User Supplied">
+ <device-support value="avr"/>
+ <build type="define" name="BOARD" value="BOARD_USER"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#adafruit_u4" caption="Board Support - ADAFRUITU4">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_ADAFRUITU4"/>
+
+ <device-support value="atmega32u4"/>
+ <build type="define" name="BOARD" value="BOARD_ADAFRUITU4"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/ADAFRUITU4/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/ADAFRUITU4/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#atavrusbrf01" caption="Board Support - ATAVRUSBRF01">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_ATAVRUSBRF01"/>
+
+ <device-support value="at90usb1287"/>
+ <build type="define" name="BOARD" value="BOARD_ATAVRUSBRF01"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/ATAVRUSBRF01/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#benito" caption="Board Support - BENITO">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_BENITO"/>
+
+ <device-support value="at90usb162"/>
+ <build type="define" name="BOARD" value="BOARD_BENITO"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/BENITO/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/BENITO/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/BENITO/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#big_multio" caption="Board Support - BIGMULTIO">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_BIGMULTIO"/>
+
+ <device-support value="atmega32u4"/>
+ <build type="define" name="BOARD" value="BOARD_BIGMULTIO"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/BIGMULTIO/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/BIGMULTIO/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#blackcat" caption="Board Support - BLACKCAT">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_BLACKCAT"/>
+
+ <device-support value="at90usb162"/>
+ <build type="define" name="BOARD" value="BOARD_BLACKCAT"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/BLACKCAT/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/BLACKCAT/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#bui" caption="Board Support - BUI">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_BUI"/>
+
+ <device-support value="at90usb646"/>
+ <build type="define" name="BOARD" value="BOARD_BUI"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/BUI/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/BUI/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#bumbleb" caption="Board Support - BUMBLEB">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_BUMBLEB"/>
+
+ <device-support value="at90usb162"/>
+ <build type="define" name="BOARD" value="BOARD_BUMBLEB"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.leds"/>
+ <require idref="lufa.drivers.board.joystick"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/Joystick.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/BUMBLEB/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#culv3" caption="Board Support - CULV3">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_CULV3"/>
+
+ <device-support value="atmega32u4"/>
+ <build type="define" name="BOARD" value="BOARD_CULV3"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/CULV3/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/CULV3/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/CULV3/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#duce" caption="Board Support - DUCE">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_DUCE"/>
+
+ <device-support value="atmega32u2"/>
+ <build type="define" name="BOARD" value="BOARD_DUCE"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/DUCE/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/DUCE/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#evk527" caption="Board Support - EVK527">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_EVK527"/>
+
+ <device-support value="atmega32u4"/>
+ <build type="define" name="BOARD" value="BOARD_EVK527"/>
+
+ <require idref="lufa.drivers.misc.at45db321c"/>
+ <require idref="lufa.drivers.peripheral.spi"/>
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.dataflash"/>
+ <require idref="lufa.drivers.board.joystick"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/EVK527/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/EVK527/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/EVK527/Dataflash.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/EVK527/Joystick.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/EVK527/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#jm_db_u2" caption="Board Support - JMDBU2">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_JMDBU2"/>
+
+ <device-support value="atmega32u2"/>
+ <build type="define" name="BOARD" value="BOARD_JMDBU2"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/JMDBU2/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/JMDBU2/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/JMDBU2/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#leonardo" caption="Board Support - LEONARDO">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_LEONARDO"/>
+
+ <device-support value="atmega32u4"/>
+ <build type="define" name="BOARD" value="BOARD_LEONARDO"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/LEONARDO/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/LEONARDO/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#maximus" caption="Board Support - MAXIMUS">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_MAXIMUS"/>
+
+ <device-support value="at90usb162"/>
+ <build type="define" name="BOARD" value="BOARD_MAXIMUS"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/MAXIMUS/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/MAXIMUS/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#micropendous_32u2" caption="Board Support - MICROPENDOUS_32U2">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_32U2"/>
+
+ <device-support value="atmega32u2"/>
+ <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_32U2"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+ <require idref="lufa.drivers.board.buttons"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#micropendous_a" caption="Board Support - MICROPENDOUS_A">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_A"/>
+
+ <device-support value="at90usb1287"/>
+ <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_A"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#micropendous_1" caption="Board Support - MICROPENDOUS_1">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_1"/>
+
+ <device-support value="at90usb162"/>
+ <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_1"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#micropendous_2" caption="Board Support - MICROPENDOUS_2">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_2"/>
+
+ <device-support value="atmega32u4"/>
+ <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_2"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#micropendous_3" caption="Board Support - MICROPENDOUS_3">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_3"/>
+
+ <device-support value="at90usb1287"/>
+ <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_3"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#micropendous_4" caption="Board Support - MICROPENDOUS_4">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_4"/>
+
+ <device-support value="at90usb1287"/>
+ <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_4"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#micropendous_dip" caption="Board Support - MICROPENDOUS_DIP">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_DIP"/>
+
+ <device-support value="at90usb1287"/>
+ <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_DIP"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#micropendous_rev1" caption="Board Support - MICROPENDOUS_REV1">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_REV1"/>
+
+ <device-support value="at90usb1287"/>
+ <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_REV1"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+ <require idref="lufa.drivers.board.buttons"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#micropendous_rev2" caption="Board Support - MICROPENDOUS_REV2">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_MICROPENDOUS_REV2"/>
+
+ <device-support value="at90usb1287"/>
+ <build type="define" name="BOARD" value="BOARD_MICROPENDOUS_REV2"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+ <require idref="lufa.drivers.board.buttons"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/LEDs.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/MICROPENDOUS/Buttons.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#microsin_162" caption="Board Support - MICROSIN162">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_MICROSIN162"/>
+
+ <device-support value="atmega162"/>
+ <build type="define" name="BOARD" value="BOARD_MICROSIN162"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+ <require idref="lufa.drivers.board.buttons"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/LEDs.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/MICROSIN162/Buttons.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#minimus" caption="Board Support - MINIMUS">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_MINIMUS"/>
+
+ <device-support value="atmega32u2"/>
+ <build type="define" name="BOARD" value="BOARD_MINIMUS"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+ <require idref="lufa.drivers.board.buttons"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/MINIMUS/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/MINIMUS/LEDs.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/MINIMUS/Buttons.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#multio" caption="Board Support - MULTIO">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_MULTIO"/>
+
+ <device-support value="at90usb162"/>
+ <build type="define" name="BOARD" value="BOARD_MULTIO"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/MULTIO/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/MULTIO/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#olimex_162" caption="Board Support - OLIMEX162">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEX162"/>
+
+ <device-support value="at90usb162"/>
+ <build type="define" name="BOARD" value="BOARD_OLIMEX162"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+ <require idref="lufa.drivers.board.buttons"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/LEDs.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/OLIMEX162/Buttons.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#olimex_32u4" caption="Board Support - OLIMEX32U4">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEX32U4"/>
+
+ <device-support value="atmega32u4"/>
+ <build type="define" name="BOARD" value="BOARD_OLIMEX32U4"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+ <require idref="lufa.drivers.board.buttons"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/LEDs.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/OLIMEX32U4/Buttons.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#olimex_isp_mkii" caption="Board Support - OLIMEXISPMK2">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEXISPMK2"/>
+
+ <device-support value="at90usb162"/>
+ <build type="define" name="BOARD" value="BOARD_OLIMEXISPMK2"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+ <require idref="lufa.drivers.board.buttons"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/LEDs.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/OLIMEXISPMK2/Buttons.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#olimex_t32u4" caption="Board Support - OLIMEX_T32U4">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_OLIMEXT32U4"/>
+
+ <device-support value="atmega32u4"/>
+ <build type="define" name="BOARD" value="BOARD_OLIMEXT32U4"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+ <require idref="lufa.drivers.board.buttons"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/LEDs.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/OLIMEXT32U4/Buttons.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#rzusbstick" caption="Board Support - RZUSBSTICK">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_RZUSBSTICK"/>
+
+ <device-support value="at90usb1287"/>
+ <build type="define" name="BOARD" value="BOARD_RZUSBSTICK"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/RZUSBSTICK/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/RZUSBSTICK/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#sparkfun_8u2" caption="Board Support - SPARKFUN8U2">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_SPARKFUN8U2"/>
+
+ <device-support value="atmega8u2"/>
+ <build type="define" name="BOARD" value="BOARD_SPARKFUN8U2"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/SPARKFUN8U2/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/SPARKFUN8U2/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#stk525" caption="Board Support - STK525">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_STK525"/>
+
+ <device-support value="at90usb1287"/>
+ <device-support value="at90usb1286"/>
+ <device-support value="at90usb647"/>
+ <device-support value="at90usb646"/>
+ <build type="define" name="BOARD" value="BOARD_STK525"/>
+
+ <require idref="lufa.drivers.misc.at45db321c"/>
+ <require idref="lufa.drivers.peripheral.spi"/>
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.dataflash"/>
+ <require idref="lufa.drivers.board.joystick"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/STK525/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/STK525/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/STK525/Dataflash.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/STK525/Joystick.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/STK525/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#stk526" caption="Board Support - STK526">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_STK526"/>
+
+ <device-support value="at90usb162"/>
+ <device-support value="at90usb82"/>
+ <device-support value="atmega32u2"/>
+ <device-support value="atmega16u2"/>
+ <device-support value="atmega8u2"/>
+ <build type="define" name="BOARD" value="BOARD_STK526"/>
+
+ <require idref="lufa.drivers.misc.at45db642d"/>
+ <require idref="lufa.drivers.peripheral.spi"/>
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.dataflash"/>
+ <require idref="lufa.drivers.board.joystick"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/STK526/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/STK526/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/STK526/Dataflash.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/STK526/Joystick.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/STK526/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#teensy" caption="Board Support - TEENSY">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_TEENSY"/>
+
+ <device-support value="at90usb162"/>
+ <build type="define" name="BOARD" value="BOARD_TEENSY"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/TEENSY/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/TEENSY/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#teensy2" caption="Board Support - TEENSY2">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_TEENSY2"/>
+
+ <device-support value="at90usb646"/>
+ <build type="define" name="BOARD" value="BOARD_TEENSY2"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/TEENSY/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/TEENSY/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#tul" caption="Board Support - TUL">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_TUL"/>
+
+ <device-support value="atmega32u4"/>
+ <build type="define" name="BOARD" value="BOARD_TUL"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/TUL/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/TUL/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/TUL/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#udip" caption="Board Support - UDIP">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_UDIP"/>
+
+ <device-support value="atmega32u2"/>
+ <build type="define" name="BOARD" value="BOARD_UDIP"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/UDIP/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/UDIP/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/UDIP/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#uno" caption="Board Support - UNO">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_UNO"/>
+
+ <device-support value="atmega8u2"/>
+ <device-support value="atmega16u2"/>
+ <build type="define" name="BOARD" value="BOARD_UNO"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/UNO/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/UNO/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#usb2ax" caption="Board Support - USB2AX">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX"/>
+
+ <device-support value="atmega32u2"/>
+ <build type="define" name="BOARD" value="BOARD_USB2AX"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#usb2ax_v3" caption="Board Support - USB2AX_V3">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX_V3"/>
+
+ <device-support value="atmega32u2"/>
+ <build type="define" name="BOARD" value="BOARD_USB2AX_V3"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#usb2ax_v3_1" caption="Board Support - USB2AX_V31">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_USB2AX_V31"/>
+
+ <device-support value="atmega32u2"/>
+ <build type="define" name="BOARD" value="BOARD_USB2AX_V31"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/USB2AX/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/USB2AX/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#usbfoo" caption="Board Support - USBFOO">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_USBFOO"/>
+
+ <device-support value="atmega162"/>
+ <build type="define" name="BOARD" value="BOARD_USBFOO"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/USBFOO/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/USBFOO/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/USBFOO/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#usbkey" caption="Board Support - USBKEY">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_USBKEY"/>
+
+ <device-support value="at90usb1287"/>
+ <build type="define" name="BOARD" value="BOARD_USBKEY"/>
+
+ <require idref="lufa.drivers.misc.at45db642d"/>
+ <require idref="lufa.drivers.peripheral.spi"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.dataflash"/>
+ <require idref="lufa.drivers.board.joystick"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/USBKEY/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/USBKEY/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/USBKEY/Dataflash.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/USBKEY/Joystick.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/USBKEY/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#usbtiny_mkii" caption="Board Support - USBTINYMKII">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_USBTINYMKII"/>
+
+ <device-support value="at90usb162"/>
+ <build type="define" name="BOARD" value="BOARD_USBTINYMKII"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/USBTINYMKII/LEDs.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#xplain_rev1" caption="Board Support - XPLAIN (HW Rev 1)">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_XPLAIN_REV1"/>
+
+ <device-support value="at90usb1287"/>
+
+ <require idref="lufa.drivers.misc.at45db642d"/>
+ <require idref="lufa.drivers.peripheral.spi"/>
+ <require idref="lufa.drivers.board.dataflash"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Dataflash.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/LEDs.h"/>
+
+ <build type="define" name="BOARD" value="BOARD_XPLAIN_REV1"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#xplain" caption="Board Support - XPLAIN (HW Rev 2+)">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_XPLAIN"/>
+
+ <device-support value="at90usb1287"/>
+
+ <require idref="lufa.drivers.misc.at45db642d"/>
+ <require idref="lufa.drivers.peripheral.spi"/>
+ <require idref="lufa.drivers.board.dataflash"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/Dataflash.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/XPLAIN/LEDs.h"/>
+
+ <build type="define" name="BOARD" value="BOARD_XPLAIN"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#a3bu_xplained" caption="Board Support - A3BU_XPLAINED">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_A3BU_XPLAINED"/>
+
+ <device-support value="atxmega256a3bu"/>
+
+ <require idref="lufa.drivers.misc.at45db642d"/>
+ <require idref="lufa.drivers.peripheral.usart_spi"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.dataflash"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Board.h"/>
+ <build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/Dataflash.h"/>
+ <build type="header-file" value="Drivers/Board/XMEGA/A3BU_XPLAINED/LEDs.h"/>
+
+ <build type="define" name="BOARD" value="BOARD_A3BU_XPLAINED"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#b1_xplained" caption="Board Support - B1_XPLAINED">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_B1_XPLAINED"/>
+
+ <device-support value="atxmega128b1"/>
+
+ <require idref="lufa.drivers.misc.at45db642d"/>
+ <require idref="lufa.drivers.peripheral.usart_spi"/>
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.dataflash"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Board.h"/>
+ <build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/Dataflash.h"/>
+ <build type="header-file" value="Drivers/Board/XMEGA/B1_XPLAINED/LEDs.h"/>
+
+ <build type="define" name="BOARD" value="BOARD_B1_XPLAINED"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#evk1100" caption="Board Support - EVK1100">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_EVK1100"/>
+
+ <device-support value="at32uc3a0512"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.joystick"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/UC3/EVK1100/Board.h"/>
+ <build type="header-file" value="Drivers/Board/UC3/EVK1100/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/UC3/EVK1100/Joystick.h"/>
+ <build type="header-file" value="Drivers/Board/UC3/EVK1100/LEDs.h"/>
+
+ <build type="define" name="BOARD" value="BOARD_EVK1100"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#evk1101" caption="Board Support - EVK1101">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_EVK1101"/>
+
+ <device-support value="at32uc3b0256"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.joystick"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/UC3/EVK1101/Board.h"/>
+ <build type="header-file" value="Drivers/Board/UC3/EVK1101/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/UC3/EVK1101/Joystick.h"/>
+ <build type="header-file" value="Drivers/Board/UC3/EVK1101/LEDs.h"/>
+
+ <build type="define" name="BOARD" value="BOARD_EVK1101"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#evk1104" caption="Board Support - EVK1104">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_EVK1104"/>
+
+ <device-support value="at32uc3a3256"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/UC3/EVK1104/Board.h"/>
+ <build type="header-file" value="Drivers/Board/UC3/EVK1104/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/UC3/EVK1104/LEDs.h"/>
+
+ <build type="define" name="BOARD" value="BOARD_EVK1104"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#uc3a3_xplained" caption="Board Support - UC3A3_XPLAINED">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_UC3_A3_XPLAINED"/>
+
+ <device-support value="at32uc3a3256"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/Board.h"/>
+ <build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/UC3/UC3A3_XPLAINED/LEDs.h"/>
+
+ <build type="define" name="BOARD" value="BOARD_UC3A3_XPLAINED"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#stange_isp" caption="Board Support - STANGE_ISP">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_STANGE_ISP"/>
+
+ <device-support value="at90usb162"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/STANGE_ISP/LEDs.h"/>
+
+ <build type="define" name="BOARD" value="BOARD_STANGE_ISP"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#c3_xplained" caption="Board Support - C3_XPLAINED">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_C3_XPLAINED"/>
+
+ <device-support value="atxmega384c3"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/Board.h"/>
+ <build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/XMEGA/C3_XPLAINED/LEDs.h"/>
+
+ <build type="define" name="BOARD" value="BOARD_C3_XPLAINED"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#u2s" caption="Board Support - U2S">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_U2S"/>
+
+ <device-support value="atmega32u2"/>
+
+ <require idref="lufa.drivers.board.buttons"/>
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/U2S/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/U2S/Buttons.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/U2S/LEDs.h"/>
+
+ <build type="define" name="BOARD" value="BOARD_U2S"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#yun" caption="Board Support - YUN">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_YUN"/>
+
+ <device-support value="atmega32u4"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/YUN/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/YUN/LEDs.h"/>
+
+ <build type="define" name="BOARD" value="BOARD_YUN"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.board#yun" caption="Board Support - MICRO">
+ <build type="doxygen-entry-point" value="Group_BoardInfo_MICRO"/>
+
+ <device-support value="atmega32u4"/>
+
+ <require idref="lufa.drivers.board.leds"/>
+
+ <build type="header-file" value="Drivers/Board/AVR8/MICRO/Board.h"/>
+ <build type="header-file" value="Drivers/Board/AVR8/MICRO/LEDs.h"/>
+
+ <build type="define" name="BOARD" value="BOARD_MICRO"/>
+ </module>
+ </select-by-config>
+ </asf>
+</lufa>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_misc.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_misc.xml
index 8680ca2df..4311ae87b 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_misc.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_misc.xml
@@ -1,57 +1,57 @@
-<!--
- LUFA Library
- Copyright (C) Dean Camera, 2013.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
--->
-
-<!-- Atmel Studio framework integration file -->
-
-<lufa>
- <asf>
- <module type="component" id="lufa.drivers.misc.at45db321c" caption="LUFA AT45DB321C Dataflash Commands">
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <build type="doxygen-entry-point" value="Group_AT45DB321C"/>
-
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Drivers/Misc/AT45DB321C.h"/>
- </module>
-
- <module type="component" id="lufa.drivers.misc.at45db642d" caption="LUFA AT45DB642D Dataflash Commands">
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <build type="doxygen-entry-point" value="Group_AT45DB321C"/>
-
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Drivers/Misc/AT45DB642D.h"/>
- </module>
-
- <module type="service" id="lufa.drivers.misc.ringbuffer" caption="LUFA Ring Buffer">
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <build type="doxygen-entry-point" value="Group_RingBuff"/>
-
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Drivers/Misc/RingBuffer.h"/>
- </module>
-
- <module type="service" id="lufa.drivers.misc.ansi" caption="LUFA ANSI Terminal Commands">
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <build type="doxygen-entry-point" value="Group_Terminal"/>
-
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Drivers/Misc/TerminalCodes.h"/>
- </module>
- </asf>
+<!--
+ LUFA Library
+ Copyright (C) Dean Camera, 2013.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+ <asf>
+ <module type="component" id="lufa.drivers.misc.at45db321c" caption="LUFA AT45DB321C Dataflash Commands">
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="doxygen-entry-point" value="Group_AT45DB321C"/>
+
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Drivers/Misc/AT45DB321C.h"/>
+ </module>
+
+ <module type="component" id="lufa.drivers.misc.at45db642d" caption="LUFA AT45DB642D Dataflash Commands">
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="doxygen-entry-point" value="Group_AT45DB321C"/>
+
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Drivers/Misc/AT45DB642D.h"/>
+ </module>
+
+ <module type="service" id="lufa.drivers.misc.ringbuffer" caption="LUFA Ring Buffer">
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="doxygen-entry-point" value="Group_RingBuff"/>
+
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Drivers/Misc/RingBuffer.h"/>
+ </module>
+
+ <module type="service" id="lufa.drivers.misc.ansi" caption="LUFA ANSI Terminal Commands">
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="doxygen-entry-point" value="Group_Terminal"/>
+
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Drivers/Misc/TerminalCodes.h"/>
+ </module>
+ </asf>
</lufa> \ No newline at end of file
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_peripheral.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_peripheral.xml
index 3a982e565..76ea516db 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_peripheral.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_peripheral.xml
@@ -1,198 +1,198 @@
-<!--
- LUFA Library
- Copyright (C) Dean Camera, 2013.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
--->
-
-<!-- Atmel Studio framework integration file -->
-
-<lufa>
- <asf>
- <select-by-device id="lufa.drivers.peripheral.usart" caption="LUFA USART Driver">
- <module type="driver" id="lufa.drivers.peripheral.usart#avr8" caption="LUFA USART Driver - AVR8">
- <device-support-alias value="lufa_avr8"/>
-
- <build type="doxygen-entry-point" value="Group_Serial"/>
-
- <require idref="lufa.common"/>
- <require idref="lufa.drivers.misc.ansi"/>
-
- <build type="c-source" value="Drivers/Peripheral/AVR8/Serial_AVR8.c"/>
- <build type="header-file" value="Drivers/Peripheral/AVR8/Serial_AVR8.h"/>
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Drivers/Peripheral/Serial.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.peripheral.usart#xmega" caption="LUFA USART Driver - AVR8">
- <device-support-alias value="lufa_xmega"/>
-
- <build type="doxygen-entry-point" value="Group_Serial"/>
-
- <require idref="lufa.common"/>
- <require idref="lufa.drivers.misc.ansi"/>
-
- <build type="c-source" value="Drivers/Peripheral/XMEGA/Serial_XMEGA.c"/>
- <build type="header-file" value="Drivers/Peripheral/XMEGA/Serial_XMEGA.h"/>
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Drivers/Peripheral/Serial.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.peripheral.usart#uc3" caption="LUFA USART Driver - UC3">
- <device-support-alias value="lufa_uc3"/>
-
- <build type="doxygen-entry-point" value="Group_Serial"/>
-
- <require idref="lufa.common"/>
- <require idref="lufa.drivers.misc.ansi"/>
-
- <info type="gui-flag" value="hidden"/>
- </module>
- </select-by-device>
-
- <select-by-device id="lufa.drivers.peripheral.spi" caption="LUFA SPI Driver">
- <module type="driver" id="lufa.drivers.peripheral.spi#avr8" caption="LUFA SPI Driver - AVR8">
- <device-support-alias value="lufa_avr8"/>
-
- <build type="doxygen-entry-point" value="Group_SPI"/>
-
- <require idref="lufa.common"/>
-
- <build type="header-file" value="Drivers/Peripheral/AVR8/SPI_AVR8.h"/>
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Drivers/Peripheral/SPI.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.peripheral.spi#xmega" caption="LUFA SPI Driver - XMEGA">
- <device-support-alias value="lufa_xmega"/>
-
- <build type="doxygen-entry-point" value="Group_SPI"/>
-
- <require idref="lufa.common"/>
-
- <build type="header-file" value="Drivers/Peripheral/XMEGA/SPI_XMEGA.h"/>
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Drivers/Peripheral/SPI.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.peripheral.spi#uc3" caption="LUFA SPI Driver - UC3">
- <device-support-alias value="lufa_uc3"/>
-
- <build type="doxygen-entry-point" value="Group_SPI"/>
-
- <require idref="lufa.common"/>
-
- <info type="gui-flag" value="hidden"/>
- </module>
- </select-by-device>
-
- <select-by-device id="lufa.drivers.peripheral.usart_spi" caption="LUFA USART SPI Driver">
- <module type="driver" id="lufa.drivers.peripheral.usart_spi#avr8" caption="LUFA USART SPI Driver - AVR8">
- <device-support-alias value="lufa_avr8"/>
-
- <build type="doxygen-entry-point" value="Group_SerialSPI"/>
-
- <require idref="lufa.common"/>
-
- <build type="header-file" value="Drivers/Peripheral/AVR8/SerialSPI_AVR8.h"/>
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Drivers/Peripheral/SerialSPI.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.peripheral.usart_spi#xmega" caption="LUFA USART SPI Driver - XMEGA">
- <device-support-alias value="lufa_xmega"/>
-
- <build type="doxygen-entry-point" value="Group_SerialSPI"/>
-
- <require idref="lufa.common"/>
-
- <build type="header-file" value="Drivers/Peripheral/XMEGA/SerialSPI_XMEGA.h"/>
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Drivers/Peripheral/SerialSPI.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.peripheral.usart_spi#uc3" caption="LUFA USART SPI Driver - UC3">
- <device-support-alias value="lufa_uc3"/>
-
- <build type="doxygen-entry-point" value="Group_SerialSPI"/>
-
- <require idref="lufa.common"/>
-
- <info type="gui-flag" value="hidden"/>
- </module>
- </select-by-device>
-
- <select-by-device id="lufa.drivers.peripheral.twi" caption="LUFA TWI Master Driver">
- <module type="driver" id="lufa.drivers.peripheral.twi#avr8" caption="LUFA TWI Master Driver - AVR8">
- <device-support-alias value="lufa_avr8"/>
-
- <build type="doxygen-entry-point" value="Group_TWI"/>
-
- <require idref="lufa.common"/>
-
- <build type="c-source" value="Drivers/Peripheral/AVR8/TWI_AVR8.c"/>
- <build type="header-file" value="Drivers/Peripheral/AVR8/TWI_AVR8.h"/>
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Drivers/Peripheral/TWI.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.peripheral.twi#xmega" caption="LUFA TWI Master Driver - XMEGA">
- <device-support-alias value="lufa_xmega"/>
-
- <build type="doxygen-entry-point" value="Group_TWI"/>
-
- <require idref="lufa.common"/>
-
- <build type="c-source" value="Drivers/Peripheral/XMEGA/TWI_XMEGA.c"/>
- <build type="header-file" value="Drivers/Peripheral/XMEGA/TWI_XMEGA.h"/>
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Drivers/Peripheral/TWI.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.peripheral.twi#uc3" caption="LUFA TWI Master Driver - UC3">
- <device-support-alias value="lufa_uc3"/>
-
- <build type="doxygen-entry-point" value="Group_TWI"/>
-
- <require idref="lufa.common"/>
-
- <info type="gui-flag" value="hidden"/>
- </module>
- </select-by-device>
-
- <select-by-device id="lufa.drivers.peripheral.adc" caption="LUFA ADC Driver">
- <module type="driver" id="lufa.drivers.peripheral.adc#avr8" caption="LUFA ADC Driver - AVR8">
- <device-support-alias value="lufa_avr8"/>
-
- <build type="doxygen-entry-point" value="Group_ADC"/>
-
- <require idref="lufa.common"/>
-
- <build type="header-file" value="Drivers/Peripheral/AVR8/ADC_AVR8.h"/>
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Drivers/Peripheral/ADC.h"/>
- </module>
-
- <module type="driver" id="lufa.drivers.peripheral.adc#xmega" caption="LUFA ADC Driver - XMEGA">
- <device-support-alias value="lufa_xmega"/>
-
- <build type="doxygen-entry-point" value="Group_ADC"/>
-
- <require idref="lufa.common"/>
-
- <info type="gui-flag" value="hidden"/>
- </module>
-
- <module type="driver" id="lufa.drivers.peripheral.adc#uc3" caption="LUFA ADC Driver - UC3">
- <device-support-alias value="lufa_uc3"/>
-
- <build type="doxygen-entry-point" value="Group_ADC"/>
-
- <require idref="lufa.common"/>
-
- <info type="gui-flag" value="hidden"/>
- </module>
- </select-by-device>
- </asf>
-</lufa>
+<!--
+ LUFA Library
+ Copyright (C) Dean Camera, 2013.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+ <asf>
+ <select-by-device id="lufa.drivers.peripheral.usart" caption="LUFA USART Driver">
+ <module type="driver" id="lufa.drivers.peripheral.usart#avr8" caption="LUFA USART Driver - AVR8">
+ <device-support-alias value="lufa_avr8"/>
+
+ <build type="doxygen-entry-point" value="Group_Serial"/>
+
+ <require idref="lufa.common"/>
+ <require idref="lufa.drivers.misc.ansi"/>
+
+ <build type="c-source" value="Drivers/Peripheral/AVR8/Serial_AVR8.c"/>
+ <build type="header-file" value="Drivers/Peripheral/AVR8/Serial_AVR8.h"/>
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Drivers/Peripheral/Serial.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.peripheral.usart#xmega" caption="LUFA USART Driver - AVR8">
+ <device-support-alias value="lufa_xmega"/>
+
+ <build type="doxygen-entry-point" value="Group_Serial"/>
+
+ <require idref="lufa.common"/>
+ <require idref="lufa.drivers.misc.ansi"/>
+
+ <build type="c-source" value="Drivers/Peripheral/XMEGA/Serial_XMEGA.c"/>
+ <build type="header-file" value="Drivers/Peripheral/XMEGA/Serial_XMEGA.h"/>
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Drivers/Peripheral/Serial.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.peripheral.usart#uc3" caption="LUFA USART Driver - UC3">
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="doxygen-entry-point" value="Group_Serial"/>
+
+ <require idref="lufa.common"/>
+ <require idref="lufa.drivers.misc.ansi"/>
+
+ <info type="gui-flag" value="hidden"/>
+ </module>
+ </select-by-device>
+
+ <select-by-device id="lufa.drivers.peripheral.spi" caption="LUFA SPI Driver">
+ <module type="driver" id="lufa.drivers.peripheral.spi#avr8" caption="LUFA SPI Driver - AVR8">
+ <device-support-alias value="lufa_avr8"/>
+
+ <build type="doxygen-entry-point" value="Group_SPI"/>
+
+ <require idref="lufa.common"/>
+
+ <build type="header-file" value="Drivers/Peripheral/AVR8/SPI_AVR8.h"/>
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Drivers/Peripheral/SPI.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.peripheral.spi#xmega" caption="LUFA SPI Driver - XMEGA">
+ <device-support-alias value="lufa_xmega"/>
+
+ <build type="doxygen-entry-point" value="Group_SPI"/>
+
+ <require idref="lufa.common"/>
+
+ <build type="header-file" value="Drivers/Peripheral/XMEGA/SPI_XMEGA.h"/>
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Drivers/Peripheral/SPI.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.peripheral.spi#uc3" caption="LUFA SPI Driver - UC3">
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="doxygen-entry-point" value="Group_SPI"/>
+
+ <require idref="lufa.common"/>
+
+ <info type="gui-flag" value="hidden"/>
+ </module>
+ </select-by-device>
+
+ <select-by-device id="lufa.drivers.peripheral.usart_spi" caption="LUFA USART SPI Driver">
+ <module type="driver" id="lufa.drivers.peripheral.usart_spi#avr8" caption="LUFA USART SPI Driver - AVR8">
+ <device-support-alias value="lufa_avr8"/>
+
+ <build type="doxygen-entry-point" value="Group_SerialSPI"/>
+
+ <require idref="lufa.common"/>
+
+ <build type="header-file" value="Drivers/Peripheral/AVR8/SerialSPI_AVR8.h"/>
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Drivers/Peripheral/SerialSPI.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.peripheral.usart_spi#xmega" caption="LUFA USART SPI Driver - XMEGA">
+ <device-support-alias value="lufa_xmega"/>
+
+ <build type="doxygen-entry-point" value="Group_SerialSPI"/>
+
+ <require idref="lufa.common"/>
+
+ <build type="header-file" value="Drivers/Peripheral/XMEGA/SerialSPI_XMEGA.h"/>
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Drivers/Peripheral/SerialSPI.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.peripheral.usart_spi#uc3" caption="LUFA USART SPI Driver - UC3">
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="doxygen-entry-point" value="Group_SerialSPI"/>
+
+ <require idref="lufa.common"/>
+
+ <info type="gui-flag" value="hidden"/>
+ </module>
+ </select-by-device>
+
+ <select-by-device id="lufa.drivers.peripheral.twi" caption="LUFA TWI Master Driver">
+ <module type="driver" id="lufa.drivers.peripheral.twi#avr8" caption="LUFA TWI Master Driver - AVR8">
+ <device-support-alias value="lufa_avr8"/>
+
+ <build type="doxygen-entry-point" value="Group_TWI"/>
+
+ <require idref="lufa.common"/>
+
+ <build type="c-source" value="Drivers/Peripheral/AVR8/TWI_AVR8.c"/>
+ <build type="header-file" value="Drivers/Peripheral/AVR8/TWI_AVR8.h"/>
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Drivers/Peripheral/TWI.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.peripheral.twi#xmega" caption="LUFA TWI Master Driver - XMEGA">
+ <device-support-alias value="lufa_xmega"/>
+
+ <build type="doxygen-entry-point" value="Group_TWI"/>
+
+ <require idref="lufa.common"/>
+
+ <build type="c-source" value="Drivers/Peripheral/XMEGA/TWI_XMEGA.c"/>
+ <build type="header-file" value="Drivers/Peripheral/XMEGA/TWI_XMEGA.h"/>
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Drivers/Peripheral/TWI.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.peripheral.twi#uc3" caption="LUFA TWI Master Driver - UC3">
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="doxygen-entry-point" value="Group_TWI"/>
+
+ <require idref="lufa.common"/>
+
+ <info type="gui-flag" value="hidden"/>
+ </module>
+ </select-by-device>
+
+ <select-by-device id="lufa.drivers.peripheral.adc" caption="LUFA ADC Driver">
+ <module type="driver" id="lufa.drivers.peripheral.adc#avr8" caption="LUFA ADC Driver - AVR8">
+ <device-support-alias value="lufa_avr8"/>
+
+ <build type="doxygen-entry-point" value="Group_ADC"/>
+
+ <require idref="lufa.common"/>
+
+ <build type="header-file" value="Drivers/Peripheral/AVR8/ADC_AVR8.h"/>
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Drivers/Peripheral/ADC.h"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.peripheral.adc#xmega" caption="LUFA ADC Driver - XMEGA">
+ <device-support-alias value="lufa_xmega"/>
+
+ <build type="doxygen-entry-point" value="Group_ADC"/>
+
+ <require idref="lufa.common"/>
+
+ <info type="gui-flag" value="hidden"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.peripheral.adc#uc3" caption="LUFA ADC Driver - UC3">
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="doxygen-entry-point" value="Group_ADC"/>
+
+ <require idref="lufa.common"/>
+
+ <info type="gui-flag" value="hidden"/>
+ </module>
+ </select-by-device>
+ </asf>
+</lufa>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb.xml
index 7ff4b3949..263c411df 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb.xml
@@ -1,32 +1,32 @@
-<!--
- LUFA Library
- Copyright (C) Dean Camera, 2013.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
--->
-
-<!-- Atmel Studio framework integration file -->
-
-<lufa>
- <asf>
- <module type="driver" id="lufa.drivers.usb" caption="LUFA USB Driver">
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <build type="doxygen-entry-point" value="Group_USB"/>
-
- <build type="define" name="USE_LUFA_CONFIG_HEADER" value=""/>
- <build type="module-config" subtype="path" value="CodeTemplates"/>
- <build type="module-config" subtype="required-header-file" value="LUFAConfig.h"/>
-
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Drivers/USB/USB.h"/>
-
- <require idref="lufa.common"/>
- <require idref="lufa.drivers.usb.class"/>
- <require idref="lufa.drivers.usb.core"/>
- </module>
- </asf>
+<!--
+ LUFA Library
+ Copyright (C) Dean Camera, 2013.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+ <asf>
+ <module type="driver" id="lufa.drivers.usb" caption="LUFA USB Driver">
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="doxygen-entry-point" value="Group_USB"/>
+
+ <build type="define" name="USE_LUFA_CONFIG_HEADER" value=""/>
+ <build type="module-config" subtype="path" value="CodeTemplates"/>
+ <build type="module-config" subtype="required-header-file" value="LUFAConfig.h"/>
+
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Drivers/USB/USB.h"/>
+
+ <require idref="lufa.common"/>
+ <require idref="lufa.drivers.usb.class"/>
+ <require idref="lufa.drivers.usb.core"/>
+ </module>
+ </asf>
</lufa> \ No newline at end of file
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_class.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_class.xml
index cd18bf10e..67ab760d3 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_class.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_class.xml
@@ -1,32 +1,32 @@
-<!--
- LUFA Library
- Copyright (C) Dean Camera, 2013.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
--->
-
-<!-- Atmel Studio framework integration file -->
-
-<lufa>
- <asf>
- <module type="service" id="lufa.drivers.usb.class" caption="LUFA USB Class Drivers">
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <info type="gui-flag" value="hidden"/>
- <build type="doxygen-entry-point" value="Group_USBClassDrivers"/>
-
- <require idref="lufa.drivers.usb.class.android"/>
- <require idref="lufa.drivers.usb.class.audio"/>
- <require idref="lufa.drivers.usb.class.cdc"/>
- <require idref="lufa.drivers.usb.class.hid"/>
- <require idref="lufa.drivers.usb.class.ms"/>
- <require idref="lufa.drivers.usb.class.midi"/>
- <require idref="lufa.drivers.usb.class.printer"/>
- <require idref="lufa.drivers.usb.class.rndis"/>
- <require idref="lufa.drivers.usb.class.si"/>
- </module>
- </asf>
-</lufa>
+<!--
+ LUFA Library
+ Copyright (C) Dean Camera, 2013.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+ <asf>
+ <module type="service" id="lufa.drivers.usb.class" caption="LUFA USB Class Drivers">
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <info type="gui-flag" value="hidden"/>
+ <build type="doxygen-entry-point" value="Group_USBClassDrivers"/>
+
+ <require idref="lufa.drivers.usb.class.android"/>
+ <require idref="lufa.drivers.usb.class.audio"/>
+ <require idref="lufa.drivers.usb.class.cdc"/>
+ <require idref="lufa.drivers.usb.class.hid"/>
+ <require idref="lufa.drivers.usb.class.ms"/>
+ <require idref="lufa.drivers.usb.class.midi"/>
+ <require idref="lufa.drivers.usb.class.printer"/>
+ <require idref="lufa.drivers.usb.class.rndis"/>
+ <require idref="lufa.drivers.usb.class.si"/>
+ </module>
+ </asf>
+</lufa>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core.xml
index 58f8917ef..58a0b388f 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core.xml
@@ -1,85 +1,85 @@
-<!--
- LUFA Library
- Copyright (C) Dean Camera, 2013.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
--->
-
-<!-- Atmel Studio framework integration file -->
-
-<lufa>
- <asf>
- <module type="driver" id="lufa.drivers.usb.core.common" caption="LUFA USB Core Driver - Common">
- <device-support-alias value="lufa_avr8"/>
- <device-support-alias value="lufa_xmega"/>
- <device-support-alias value="lufa_uc3"/>
-
- <build type="doxygen-entry-point" value="Group_USBManagement"/>
-
- <info type="gui-flag" value="hidden"/>
-
- <build type="header-file" value="Drivers/USB/Core/Device.h"/>
- <build type="header-file" value="Drivers/USB/Core/Endpoint.h"/>
- <build type="header-file" value="Drivers/USB/Core/Host.h"/>
- <build type="header-file" value="Drivers/USB/Core/Pipe.h"/>
- <build type="header-file" value="Drivers/USB/Core/OTG.h"/>
- <build type="header-file" value="Drivers/USB/Core/USBController.h"/>
- <build type="header-file" value="Drivers/USB/Core/USBInterrupt.h"/>
- <build type="header-file" value="Drivers/USB/Core/EndpointStream.h"/>
- <build type="header-file" value="Drivers/USB/Core/PipeStream.h"/>
- <build type="c-source" value="Drivers/USB/Core/ConfigDescriptors.c"/>
- <build type="header-file" value="Drivers/USB/Core/ConfigDescriptors.h"/>
- <build type="c-source" value="Drivers/USB/Core/DeviceStandardReq.c"/>
- <build type="header-file" value="Drivers/USB/Core/DeviceStandardReq.h"/>
- <build type="c-source" value="Drivers/USB/Core/Events.c"/>
- <build type="header-file" value="Drivers/USB/Core/Events.h"/>
- <build type="c-source" value="Drivers/USB/Core/HostStandardReq.c"/>
- <build type="header-file" value="Drivers/USB/Core/HostStandardReq.h"/>
- <build type="c-source" value="Drivers/USB/Core/USBTask.c"/>
- <build type="header-file" value="Drivers/USB/Core/USBTask.h"/>
- <build type="header-file" value="Drivers/USB/Core/USBMode.h"/>
- <build type="header-file" value="Drivers/USB/Core/StdDescriptors.h"/>
- <build type="header-file" value="Drivers/USB/Core/StdRequestType.h"/>
-
- <build type="c-source" value="Drivers/USB/Class/Common/HIDParser.c"/>
- <build type="header-file" value="Drivers/USB/Class/Common/HIDParser.h"/>
- <build type="header-file" value="Drivers/USB/Class/Common/HIDReportData.h"/>
- </module>
-
- <select-by-device id="lufa.drivers.usb.core" caption="LUFA USB Core Driver">
- <module type="driver" id="lufa.drivers.usb.core#avr8" caption="LUFA USB Core Driver - AVR8">
- <device-support-alias value="lufa_avr8"/>
-
- <info type="gui-flag" value="hidden"/>
-
- <build type="doxygen-entry-point" value="Group_USBManagement_AVR8"/>
-
- <require idref="lufa.drivers.usb.core.common"/>
- <require idref="lufa.drivers.usb.core.avr8"/>
- </module>
-
- <module type="driver" id="lufa.drivers.usb.core#xmega" caption="LUFA USB Core Driver - XMEGA">
- <device-support-alias value="lufa_xmega"/>
-
- <info type="gui-flag" value="hidden"/>
-
- <build type="doxygen-entry-point" value="Group_USBManagement_XMEGA"/>
-
- <require idref="lufa.drivers.usb.core.common"/>
- <require idref="lufa.drivers.usb.core.xmega"/>
- </module>
-
- <module type="driver" id="lufa.drivers.usb.core#uc3" caption="LUFA USB Core Driver - UC3">
- <device-support-alias value="lufa_uc3"/>
-
- <info type="gui-flag" value="hidden"/>
-
- <build type="doxygen-entry-point" value="Group_USBManagement_UC3"/>
-
- <require idref="lufa.drivers.usb.core.common"/>
- <require idref="lufa.drivers.usb.core.uc3"/>
- </module>
- </select-by-device>
- </asf>
-</lufa>
+<!--
+ LUFA Library
+ Copyright (C) Dean Camera, 2013.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+ <asf>
+ <module type="driver" id="lufa.drivers.usb.core.common" caption="LUFA USB Core Driver - Common">
+ <device-support-alias value="lufa_avr8"/>
+ <device-support-alias value="lufa_xmega"/>
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="doxygen-entry-point" value="Group_USBManagement"/>
+
+ <info type="gui-flag" value="hidden"/>
+
+ <build type="header-file" value="Drivers/USB/Core/Device.h"/>
+ <build type="header-file" value="Drivers/USB/Core/Endpoint.h"/>
+ <build type="header-file" value="Drivers/USB/Core/Host.h"/>
+ <build type="header-file" value="Drivers/USB/Core/Pipe.h"/>
+ <build type="header-file" value="Drivers/USB/Core/OTG.h"/>
+ <build type="header-file" value="Drivers/USB/Core/USBController.h"/>
+ <build type="header-file" value="Drivers/USB/Core/USBInterrupt.h"/>
+ <build type="header-file" value="Drivers/USB/Core/EndpointStream.h"/>
+ <build type="header-file" value="Drivers/USB/Core/PipeStream.h"/>
+ <build type="c-source" value="Drivers/USB/Core/ConfigDescriptors.c"/>
+ <build type="header-file" value="Drivers/USB/Core/ConfigDescriptors.h"/>
+ <build type="c-source" value="Drivers/USB/Core/DeviceStandardReq.c"/>
+ <build type="header-file" value="Drivers/USB/Core/DeviceStandardReq.h"/>
+ <build type="c-source" value="Drivers/USB/Core/Events.c"/>
+ <build type="header-file" value="Drivers/USB/Core/Events.h"/>
+ <build type="c-source" value="Drivers/USB/Core/HostStandardReq.c"/>
+ <build type="header-file" value="Drivers/USB/Core/HostStandardReq.h"/>
+ <build type="c-source" value="Drivers/USB/Core/USBTask.c"/>
+ <build type="header-file" value="Drivers/USB/Core/USBTask.h"/>
+ <build type="header-file" value="Drivers/USB/Core/USBMode.h"/>
+ <build type="header-file" value="Drivers/USB/Core/StdDescriptors.h"/>
+ <build type="header-file" value="Drivers/USB/Core/StdRequestType.h"/>
+
+ <build type="c-source" value="Drivers/USB/Class/Common/HIDParser.c"/>
+ <build type="header-file" value="Drivers/USB/Class/Common/HIDParser.h"/>
+ <build type="header-file" value="Drivers/USB/Class/Common/HIDReportData.h"/>
+ </module>
+
+ <select-by-device id="lufa.drivers.usb.core" caption="LUFA USB Core Driver">
+ <module type="driver" id="lufa.drivers.usb.core#avr8" caption="LUFA USB Core Driver - AVR8">
+ <device-support-alias value="lufa_avr8"/>
+
+ <info type="gui-flag" value="hidden"/>
+
+ <build type="doxygen-entry-point" value="Group_USBManagement_AVR8"/>
+
+ <require idref="lufa.drivers.usb.core.common"/>
+ <require idref="lufa.drivers.usb.core.avr8"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.usb.core#xmega" caption="LUFA USB Core Driver - XMEGA">
+ <device-support-alias value="lufa_xmega"/>
+
+ <info type="gui-flag" value="hidden"/>
+
+ <build type="doxygen-entry-point" value="Group_USBManagement_XMEGA"/>
+
+ <require idref="lufa.drivers.usb.core.common"/>
+ <require idref="lufa.drivers.usb.core.xmega"/>
+ </module>
+
+ <module type="driver" id="lufa.drivers.usb.core#uc3" caption="LUFA USB Core Driver - UC3">
+ <device-support-alias value="lufa_uc3"/>
+
+ <info type="gui-flag" value="hidden"/>
+
+ <build type="doxygen-entry-point" value="Group_USBManagement_UC3"/>
+
+ <require idref="lufa.drivers.usb.core.common"/>
+ <require idref="lufa.drivers.usb.core.uc3"/>
+ </module>
+ </select-by-device>
+ </asf>
+</lufa>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_avr8.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_avr8.xml
index 166b9257a..4688f05f9 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_avr8.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_avr8.xml
@@ -1,43 +1,43 @@
-<!--
- LUFA Library
- Copyright (C) Dean Camera, 2013.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
--->
-
-<!-- Atmel Studio framework integration file -->
-
-<lufa>
- <asf>
- <module type="driver" id="lufa.drivers.usb.core.avr8" caption="LUFA USB Core Driver for AVR8">
- <device-support-alias value="lufa_avr8"/>
-
- <info type="gui-flag" value="hidden"/>
-
- <build type="doxygen-entry-point" value="Group_USBManagement_AVR8"/>
-
- <build type="c-source" value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_R.c"/>
- <build type="c-source" value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_W.c"/>
- <build type="c-source" value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_RW.c"/>
- <build type="c-source" value="Drivers/USB/Core/AVR8/Template/Template_Pipe_RW.c"/>
- <build type="c-source" value="Drivers/USB/Core/AVR8/Device_AVR8.c"/>
- <build type="header-file" value="Drivers/USB/Core/AVR8/Device_AVR8.h"/>
- <build type="c-source" value="Drivers/USB/Core/AVR8/Endpoint_AVR8.c"/>
- <build type="header-file" value="Drivers/USB/Core/AVR8/Endpoint_AVR8.h"/>
- <build type="c-source" value="Drivers/USB/Core/AVR8/Host_AVR8.c"/>
- <build type="header-file" value="Drivers/USB/Core/AVR8/Host_AVR8.h"/>
- <build type="c-source" value="Drivers/USB/Core/AVR8/Pipe_AVR8.c"/>
- <build type="header-file" value="Drivers/USB/Core/AVR8/Pipe_AVR8.h"/>
- <build type="header-file" value="Drivers/USB/Core/AVR8/OTG_AVR8.h"/>
- <build type="c-source" value="Drivers/USB/Core/AVR8/USBController_AVR8.c"/>
- <build type="header-file" value="Drivers/USB/Core/AVR8/USBController_AVR8.h"/>
- <build type="c-source" value="Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c"/>
- <build type="header-file" value="Drivers/USB/Core/AVR8/USBInterrupt_AVR8.h"/>
- <build type="c-source" value="Drivers/USB/Core/AVR8/EndpointStream_AVR8.c"/>
- <build type="header-file" value="Drivers/USB/Core/AVR8/EndpointStream_AVR8.h"/>
- <build type="c-source" value="Drivers/USB/Core/AVR8/PipeStream_AVR8.c"/>
- <build type="header-file" value="Drivers/USB/Core/AVR8/PipeStream_AVR8.h"/>
- </module>
- </asf>
-</lufa>
+<!--
+ LUFA Library
+ Copyright (C) Dean Camera, 2013.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+ <asf>
+ <module type="driver" id="lufa.drivers.usb.core.avr8" caption="LUFA USB Core Driver for AVR8">
+ <device-support-alias value="lufa_avr8"/>
+
+ <info type="gui-flag" value="hidden"/>
+
+ <build type="doxygen-entry-point" value="Group_USBManagement_AVR8"/>
+
+ <build type="c-source" value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_R.c"/>
+ <build type="c-source" value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_W.c"/>
+ <build type="c-source" value="Drivers/USB/Core/AVR8/Template/Template_Endpoint_RW.c"/>
+ <build type="c-source" value="Drivers/USB/Core/AVR8/Template/Template_Pipe_RW.c"/>
+ <build type="c-source" value="Drivers/USB/Core/AVR8/Device_AVR8.c"/>
+ <build type="header-file" value="Drivers/USB/Core/AVR8/Device_AVR8.h"/>
+ <build type="c-source" value="Drivers/USB/Core/AVR8/Endpoint_AVR8.c"/>
+ <build type="header-file" value="Drivers/USB/Core/AVR8/Endpoint_AVR8.h"/>
+ <build type="c-source" value="Drivers/USB/Core/AVR8/Host_AVR8.c"/>
+ <build type="header-file" value="Drivers/USB/Core/AVR8/Host_AVR8.h"/>
+ <build type="c-source" value="Drivers/USB/Core/AVR8/Pipe_AVR8.c"/>
+ <build type="header-file" value="Drivers/USB/Core/AVR8/Pipe_AVR8.h"/>
+ <build type="header-file" value="Drivers/USB/Core/AVR8/OTG_AVR8.h"/>
+ <build type="c-source" value="Drivers/USB/Core/AVR8/USBController_AVR8.c"/>
+ <build type="header-file" value="Drivers/USB/Core/AVR8/USBController_AVR8.h"/>
+ <build type="c-source" value="Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c"/>
+ <build type="header-file" value="Drivers/USB/Core/AVR8/USBInterrupt_AVR8.h"/>
+ <build type="c-source" value="Drivers/USB/Core/AVR8/EndpointStream_AVR8.c"/>
+ <build type="header-file" value="Drivers/USB/Core/AVR8/EndpointStream_AVR8.h"/>
+ <build type="c-source" value="Drivers/USB/Core/AVR8/PipeStream_AVR8.c"/>
+ <build type="header-file" value="Drivers/USB/Core/AVR8/PipeStream_AVR8.h"/>
+ </module>
+ </asf>
+</lufa>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_uc3.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_uc3.xml
index 7e0540cda..2e7185f24 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_uc3.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_uc3.xml
@@ -1,42 +1,42 @@
-<!--
- LUFA Library
- Copyright (C) Dean Camera, 2013.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
--->
-
-<!-- Atmel Studio framework integration file -->
-
-<lufa>
- <asf>
- <module type="driver" id="lufa.drivers.usb.core.uc3" caption="LUFA USB Core Driver for UC3">
- <device-support-alias value="lufa_uc3"/>
-
- <info type="gui-flag" value="hidden"/>
-
- <build type="doxygen-entry-point" value="Group_USBManagement_UC3"/>
-
- <build type="c-source" value="Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_R.c"/>
- <build type="c-source" value="Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_W.c"/>
- <build type="c-source" value="Drivers/USB/Core/UC3/Template/Template_Endpoint_RW.c"/>
- <build type="c-source" value="Drivers/USB/Core/UC3/Template/Template_Pipe_RW.c"/>
- <build type="c-source" value="Drivers/USB/Core/UC3/Device_UC3.c"/>
- <build type="header-file" value="Drivers/USB/Core/UC3/Device_UC3.h"/>
- <build type="c-source" value="Drivers/USB/Core/UC3/Endpoint_UC3.c"/>
- <build type="header-file" value="Drivers/USB/Core/UC3/Endpoint_UC3.h"/>
- <build type="c-source" value="Drivers/USB/Core/UC3/Host_UC3.c"/>
- <build type="header-file" value="Drivers/USB/Core/UC3/Host_UC3.h"/>
- <build type="c-source" value="Drivers/USB/Core/UC3/Pipe_UC3.c"/>
- <build type="header-file" value="Drivers/USB/Core/UC3/Pipe_UC3.h"/>
- <build type="c-source" value="Drivers/USB/Core/UC3/USBController_UC3.c"/>
- <build type="header-file" value="Drivers/USB/Core/UC3/USBController_UC3.h"/>
- <build type="c-source" value="Drivers/USB/Core/UC3/USBInterrupt_UC3.c"/>
- <build type="header-file" value="Drivers/USB/Core/UC3/USBInterrupt_UC3.h"/>
- <build type="c-source" value="Drivers/USB/Core/UC3/EndpointStream_UC3.c"/>
- <build type="header-file" value="Drivers/USB/Core/UC3/EndpointStream_UC3.h"/>
- <build type="c-source" value="Drivers/USB/Core/UC3/PipeStream_UC3.c"/>
- <build type="header-file" value="Drivers/USB/Core/UC3/PipeStream_UC3.h"/>
- </module>
- </asf>
-</lufa>
+<!--
+ LUFA Library
+ Copyright (C) Dean Camera, 2013.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+ <asf>
+ <module type="driver" id="lufa.drivers.usb.core.uc3" caption="LUFA USB Core Driver for UC3">
+ <device-support-alias value="lufa_uc3"/>
+
+ <info type="gui-flag" value="hidden"/>
+
+ <build type="doxygen-entry-point" value="Group_USBManagement_UC3"/>
+
+ <build type="c-source" value="Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_R.c"/>
+ <build type="c-source" value="Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_W.c"/>
+ <build type="c-source" value="Drivers/USB/Core/UC3/Template/Template_Endpoint_RW.c"/>
+ <build type="c-source" value="Drivers/USB/Core/UC3/Template/Template_Pipe_RW.c"/>
+ <build type="c-source" value="Drivers/USB/Core/UC3/Device_UC3.c"/>
+ <build type="header-file" value="Drivers/USB/Core/UC3/Device_UC3.h"/>
+ <build type="c-source" value="Drivers/USB/Core/UC3/Endpoint_UC3.c"/>
+ <build type="header-file" value="Drivers/USB/Core/UC3/Endpoint_UC3.h"/>
+ <build type="c-source" value="Drivers/USB/Core/UC3/Host_UC3.c"/>
+ <build type="header-file" value="Drivers/USB/Core/UC3/Host_UC3.h"/>
+ <build type="c-source" value="Drivers/USB/Core/UC3/Pipe_UC3.c"/>
+ <build type="header-file" value="Drivers/USB/Core/UC3/Pipe_UC3.h"/>
+ <build type="c-source" value="Drivers/USB/Core/UC3/USBController_UC3.c"/>
+ <build type="header-file" value="Drivers/USB/Core/UC3/USBController_UC3.h"/>
+ <build type="c-source" value="Drivers/USB/Core/UC3/USBInterrupt_UC3.c"/>
+ <build type="header-file" value="Drivers/USB/Core/UC3/USBInterrupt_UC3.h"/>
+ <build type="c-source" value="Drivers/USB/Core/UC3/EndpointStream_UC3.c"/>
+ <build type="header-file" value="Drivers/USB/Core/UC3/EndpointStream_UC3.h"/>
+ <build type="c-source" value="Drivers/USB/Core/UC3/PipeStream_UC3.c"/>
+ <build type="header-file" value="Drivers/USB/Core/UC3/PipeStream_UC3.h"/>
+ </module>
+ </asf>
+</lufa>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_xmega.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_xmega.xml
index 9e9f4f6a1..c79a0f5b5 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_xmega.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_drivers_usb_core_xmega.xml
@@ -1,36 +1,36 @@
-<!--
- LUFA Library
- Copyright (C) Dean Camera, 2013.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
--->
-
-<!-- Atmel Studio framework integration file -->
-
-<lufa>
- <asf>
- <module type="driver" id="lufa.drivers.usb.core.xmega" caption="LUFA USB Core Driver for XMEGA">
- <device-support-alias value="lufa_xmega"/>
-
- <info type="gui-flag" value="hidden"/>
-
- <build type="doxygen-entry-point" value="Group_USBManagement_XMEGA"/>
-
- <build type="c-source" value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_R.c"/>
- <build type="c-source" value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_W.c"/>
- <build type="c-source" value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_RW.c"/>
- <build type="c-source" value="Drivers/USB/Core/XMEGA/Device_XMEGA.c"/>
- <build type="header-file" value="Drivers/USB/Core/XMEGA/Device_XMEGA.h"/>
- <build type="c-source" value="Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c"/>
- <build type="header-file" value="Drivers/USB/Core/XMEGA/Endpoint_XMEGA.h"/>
- <build type="c-source" value="Drivers/USB/Core/XMEGA/Pipe_XMEGA.c"/>
- <build type="c-source" value="Drivers/USB/Core/XMEGA/USBController_XMEGA.c"/>
- <build type="header-file" value="Drivers/USB/Core/XMEGA/USBController_XMEGA.h"/>
- <build type="c-source" value="Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.c"/>
- <build type="header-file" value="Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.h"/>
- <build type="c-source" value="Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.c"/>
- <build type="header-file" value="Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.h"/>
- </module>
- </asf>
-</lufa>
+<!--
+ LUFA Library
+ Copyright (C) Dean Camera, 2013.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+ <asf>
+ <module type="driver" id="lufa.drivers.usb.core.xmega" caption="LUFA USB Core Driver for XMEGA">
+ <device-support-alias value="lufa_xmega"/>
+
+ <info type="gui-flag" value="hidden"/>
+
+ <build type="doxygen-entry-point" value="Group_USBManagement_XMEGA"/>
+
+ <build type="c-source" value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_R.c"/>
+ <build type="c-source" value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_W.c"/>
+ <build type="c-source" value="Drivers/USB/Core/XMEGA/Template/Template_Endpoint_RW.c"/>
+ <build type="c-source" value="Drivers/USB/Core/XMEGA/Device_XMEGA.c"/>
+ <build type="header-file" value="Drivers/USB/Core/XMEGA/Device_XMEGA.h"/>
+ <build type="c-source" value="Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c"/>
+ <build type="header-file" value="Drivers/USB/Core/XMEGA/Endpoint_XMEGA.h"/>
+ <build type="c-source" value="Drivers/USB/Core/XMEGA/Pipe_XMEGA.c"/>
+ <build type="c-source" value="Drivers/USB/Core/XMEGA/USBController_XMEGA.c"/>
+ <build type="header-file" value="Drivers/USB/Core/XMEGA/USBController_XMEGA.h"/>
+ <build type="c-source" value="Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.c"/>
+ <build type="header-file" value="Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.h"/>
+ <build type="c-source" value="Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.c"/>
+ <build type="header-file" value="Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.h"/>
+ </module>
+ </asf>
+</lufa>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform.xml
index 02c7463ee..4ee51f6ee 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform.xml
@@ -1,60 +1,60 @@
-<!--
- LUFA Library
- Copyright (C) Dean Camera, 2013.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
--->
-
-<!-- Atmel Studio framework integration file -->
-
-<lufa>
- <asf>
- <select-by-device id="lufa.platform" caption="LUFA Platform Specific Support">
- <module type="service" id="lufa.platform#avr8" caption="LUFA Platform Specific Support - AVR8">
- <device-support-alias value="lufa_avr8"/>
-
- <build type="define" name="ARCH" value="ARCH_AVR8"/>
-
- <build type="doxygen-entry-point" value="Group_PlatformDrivers"/>
-
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Platform/Platform.h"/>
-
- <require idref="lufa.common"/>
- </module>
-
- <module type="service" id="lufa.platform#xmega" caption="LUFA Platform Specific Support - XMEGA">
- <device-support-alias value="lufa_xmega"/>
-
- <build type="define" name="ARCH" value="ARCH_XMEGA"/>
-
- <build type="doxygen-entry-point" value="Group_PlatformDrivers"/>
-
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Platform/Platform.h"/>
-
- <build type="distribute" value="Platform/XMEGA/XMEGAExperimentalInfo.txt" subtype="license"/>
-
- <require idref="lufa.platform.xmega"/>
- <require idref="lufa.common"/>
- </module>
-
- <module type="service" id="lufa.platform#uc3" caption="LUFA Platform Specific Support - UC3">
- <device-support-alias value="lufa_uc3"/>
-
- <build type="define" name="ARCH" value="ARCH_UC3"/>
-
- <build type="doxygen-entry-point" value="Group_PlatformDrivers"/>
-
- <build type="include-path" value=".."/>
- <build type="header-file" subtype="api" value="Platform/Platform.h"/>
-
- <build type="distribute" value="Platform/UC3/UC3ExperimentalInfo.txt" subtype="license"/>
-
- <require idref="lufa.platform.uc3"/>
- <require idref="lufa.common"/>
- </module>
- </select-by-device>
- </asf>
-</lufa>
+<!--
+ LUFA Library
+ Copyright (C) Dean Camera, 2013.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+ <asf>
+ <select-by-device id="lufa.platform" caption="LUFA Platform Specific Support">
+ <module type="service" id="lufa.platform#avr8" caption="LUFA Platform Specific Support - AVR8">
+ <device-support-alias value="lufa_avr8"/>
+
+ <build type="define" name="ARCH" value="ARCH_AVR8"/>
+
+ <build type="doxygen-entry-point" value="Group_PlatformDrivers"/>
+
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Platform/Platform.h"/>
+
+ <require idref="lufa.common"/>
+ </module>
+
+ <module type="service" id="lufa.platform#xmega" caption="LUFA Platform Specific Support - XMEGA">
+ <device-support-alias value="lufa_xmega"/>
+
+ <build type="define" name="ARCH" value="ARCH_XMEGA"/>
+
+ <build type="doxygen-entry-point" value="Group_PlatformDrivers"/>
+
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Platform/Platform.h"/>
+
+ <build type="distribute" value="Platform/XMEGA/XMEGAExperimentalInfo.txt" subtype="license"/>
+
+ <require idref="lufa.platform.xmega"/>
+ <require idref="lufa.common"/>
+ </module>
+
+ <module type="service" id="lufa.platform#uc3" caption="LUFA Platform Specific Support - UC3">
+ <device-support-alias value="lufa_uc3"/>
+
+ <build type="define" name="ARCH" value="ARCH_UC3"/>
+
+ <build type="doxygen-entry-point" value="Group_PlatformDrivers"/>
+
+ <build type="include-path" value=".."/>
+ <build type="header-file" subtype="api" value="Platform/Platform.h"/>
+
+ <build type="distribute" value="Platform/UC3/UC3ExperimentalInfo.txt" subtype="license"/>
+
+ <require idref="lufa.platform.uc3"/>
+ <require idref="lufa.common"/>
+ </module>
+ </select-by-device>
+ </asf>
+</lufa>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_uc3.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_uc3.xml
index a488c4b83..98017b08a 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_uc3.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_uc3.xml
@@ -1,26 +1,26 @@
-<!--
- LUFA Library
- Copyright (C) Dean Camera, 2013.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
--->
-
-<!-- Atmel Studio framework integration file -->
-
-<lufa>
- <asf>
- <module type="driver" id="lufa.platform.uc3" caption="LUFA UC3 Platform Drivers">
- <device-support-alias value="lufa_uc3"/>
-
- <info type="gui-flag" value="hidden"/>
-
- <build type="doxygen-entry-point" value="Group_PlatformDrivers_UC3"/>
-
- <build type="header-file" value="Platform/UC3/ClockManagement.h"/>
- <build type="header-file" value="Platform/UC3/InterruptManagement.h"/>
- <build type="c-source" value="Platform/UC3/InterruptManagement.c"/>
- <build type="asm-source" value="Platform/UC3/Exception.S"/>
- </module>
- </asf>
-</lufa>
+<!--
+ LUFA Library
+ Copyright (C) Dean Camera, 2013.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+ <asf>
+ <module type="driver" id="lufa.platform.uc3" caption="LUFA UC3 Platform Drivers">
+ <device-support-alias value="lufa_uc3"/>
+
+ <info type="gui-flag" value="hidden"/>
+
+ <build type="doxygen-entry-point" value="Group_PlatformDrivers_UC3"/>
+
+ <build type="header-file" value="Platform/UC3/ClockManagement.h"/>
+ <build type="header-file" value="Platform/UC3/InterruptManagement.h"/>
+ <build type="c-source" value="Platform/UC3/InterruptManagement.c"/>
+ <build type="asm-source" value="Platform/UC3/Exception.S"/>
+ </module>
+ </asf>
+</lufa>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_xmega.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_xmega.xml
index 1674a77b0..e613fe520 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_xmega.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_platform_xmega.xml
@@ -1,23 +1,23 @@
-<!--
- LUFA Library
- Copyright (C) Dean Camera, 2013.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
--->
-
-<!-- Atmel Studio framework integration file -->
-
-<lufa>
- <asf xmlversion="1.0">
- <module type="driver" id="lufa.platform.xmega" caption="LUFA XMEGA Platform Drivers">
- <device-support-alias value="lufa_xmega"/>
-
- <info type="gui-flag" value="hidden"/>
-
- <build type="doxygen-entry-point" value="Group_PlatformDrivers_XMEGA"/>
-
- <build type="header-file" value="Platform/XMEGA/ClockManagement.h"/>
- </module>
- </asf>
-</lufa>
+<!--
+ LUFA Library
+ Copyright (C) Dean Camera, 2013.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+ <asf xmlversion="1.0">
+ <module type="driver" id="lufa.platform.xmega" caption="LUFA XMEGA Platform Drivers">
+ <device-support-alias value="lufa_xmega"/>
+
+ <info type="gui-flag" value="hidden"/>
+
+ <build type="doxygen-entry-point" value="Group_PlatformDrivers_XMEGA"/>
+
+ <build type="header-file" value="Platform/XMEGA/ClockManagement.h"/>
+ </module>
+ </asf>
+</lufa>
diff --git a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_toolchain.xml b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_toolchain.xml
index 031c8a2be..a76b6d0d3 100644
--- a/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_toolchain.xml
+++ b/tmk_core/protocol/lufa/LUFA-git/LUFA/StudioIntegration/lufa_toolchain.xml
@@ -1,43 +1,43 @@
-<!--
- LUFA Library
- Copyright (C) Dean Camera, 2013.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
--->
-
-<!-- Atmel Studio framework integration file -->
-
-<lufa>
- <asf>
- <select-by-device id="common.utils.toolchain_config" caption="Toolchain configuration defaults">
- <module type="build-specific" id="common.utils.toolchain_config#avr" caption="Toolchain configuration defaults for 8-bit AVR">
- <info type="gui-flag" value="hidden"/>
- <device-support value="avr"/>
-
- <toolchain-config name="avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned" value="True" toolchain="avrgcc"/>
- <toolchain-config name="avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned" value="True" toolchain="avrgcc"/>
- <toolchain-config name="avrgcc.compiler.optimization.OtherFlags" value="-fdata-sections" toolchain="avrgcc"/>
- <toolchain-config name="avrgcc.compiler.optimization.PrepareFunctionsForGarbageCollection" value="True" toolchain="avrgcc"/>
- <toolchain-config name="avrgcc.compiler.warnings.AllWarnings" value="True" toolchain="avrgcc"/>
- <toolchain-config name="avrgcc.compiler.miscellaneous.OtherFlags" value="-mrelax -std=gnu99 -fno-strict-aliasing -fno-jump-tables" toolchain="avrgcc"/>
- <toolchain-config name="avrgcc.linker.optimization.GarbageCollectUnusedSections" value="True" toolchain="avrgcc"/>
- <toolchain-config name="avrgcc.linker.optimization.RelaxBranches" value="True" toolchain="avrgcc"/>
- </module>
- </select-by-device>
-
- <module type="build-specific" id="common.utils.toolchain_config#uc3" caption="Toolchain configuration defaults for 32-bit AVR">
- <info type="gui-flag" value="hidden"/>
- <device-support value="uc3"/>
-
- <toolchain-config name="avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned" value="True" toolchain="avr32gcc"/>
- <toolchain-config name="avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned" value="True" toolchain="avr32gcc"/>
- <toolchain-config name="avr32gcc.compiler.optimization.OtherFlags" value="-fdata-sections" toolchain="avr32gcc"/>
- <toolchain-config name="avr32gcc.compiler.optimization.PrepareFunctionsForGarbageCollection" value="True" toolchain="avr32gcc"/>
- <toolchain-config name="avr32gcc.compiler.warnings.AllWarnings" value="True" toolchain="avr32gcc"/>
- <toolchain-config name="avr32gcc.compiler.miscellaneous.OtherFlags" value="-mrelax -std=gnu99 -fno-strict-aliasing -mno-cond-exec-before-reload" toolchain="avr32gcc"/>
- <toolchain-config name="avr32gcc.linker.optimization.GarbageCollectUnusedSections" value="True" toolchain="avr32gcc"/>
- <toolchain-config name="avr32gcc.linker.optimization.RelaxBranches" value="True" toolchain="avr32gcc"/>
- </module>
- </asf>
-</lufa>
+<!--
+ LUFA Library
+ Copyright (C) Dean Camera, 2013.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+-->
+
+<!-- Atmel Studio framework integration file -->
+
+<lufa>
+ <asf>
+ <select-by-device id="common.utils.toolchain_config" caption="Toolchain configuration defaults">
+ <module type="build-specific" id="common.utils.toolchain_config#avr" caption="Toolchain configuration defaults for 8-bit AVR">
+ <info type="gui-flag" value="hidden"/>
+ <device-support value="avr"/>
+
+ <toolchain-config name="avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned" value="True" toolchain="avrgcc"/>
+ <toolchain-config name="avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned" value="True" toolchain="avrgcc"/>
+ <toolchain-config name="avrgcc.compiler.optimization.OtherFlags" value="-fdata-sections" toolchain="avrgcc"/>
+ <toolchain-config name="avrgcc.compiler.optimization.PrepareFunctionsForGarbageCollection" value="True" toolchain="avrgcc"/>
+ <toolchain-config name="avrgcc.compiler.warnings.AllWarnings" value="True" toolchain="avrgcc"/>
+ <toolchain-config name="avrgcc.compiler.miscellaneous.OtherFlags" value="-mrelax -std=gnu99 -fno-strict-aliasing -fno-jump-tables" toolchain="avrgcc"/>
+ <toolchain-config name="avrgcc.linker.optimization.GarbageCollectUnusedSections" value="True" toolchain="avrgcc"/>
+ <toolchain-config name="avrgcc.linker.optimization.RelaxBranches" value="True" toolchain="avrgcc"/>
+ </module>
+ </select-by-device>
+
+ <module type="build-specific" id="common.utils.toolchain_config#uc3" caption="Toolchain configuration defaults for 32-bit AVR">
+ <info type="gui-flag" value="hidden"/>
+ <device-support value="uc3"/>
+
+ <toolchain-config name="avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned" value="True" toolchain="avr32gcc"/>
+ <toolchain-config name="avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned" value="True" toolchain="avr32gcc"/>
+ <toolchain-config name="avr32gcc.compiler.optimization.OtherFlags" value="-fdata-sections" toolchain="avr32gcc"/>
+ <toolchain-config name="avr32gcc.compiler.optimization.PrepareFunctionsForGarbageCollection" value="True" toolchain="avr32gcc"/>
+ <toolchain-config name="avr32gcc.compiler.warnings.AllWarnings" value="True" toolchain="avr32gcc"/>
+ <toolchain-config name="avr32gcc.compiler.miscellaneous.OtherFlags" value="-mrelax -std=gnu99 -fno-strict-aliasing -mno-cond-exec-before-reload" toolchain="avr32gcc"/>
+ <toolchain-config name="avr32gcc.linker.optimization.GarbageCollectUnusedSections" value="True" toolchain="avr32gcc"/>
+ <toolchain-config name="avr32gcc.linker.optimization.RelaxBranches" value="True" toolchain="avr32gcc"/>
+ </module>
+ </asf>
+</lufa>
diff --git a/tmk_core/protocol/lufa/adafruit_ble.cpp b/tmk_core/protocol/lufa/adafruit_ble.cpp
new file mode 100644
index 000000000..fd6edd42c
--- /dev/null
+++ b/tmk_core/protocol/lufa/adafruit_ble.cpp
@@ -0,0 +1,805 @@
+#include "adafruit_ble.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <alloca.h>
+#include <util/delay.h>
+#include <util/atomic.h>
+#include "debug.h"
+#include "pincontrol.h"
+#include "timer.h"
+#include "action_util.h"
+#include "ringbuffer.hpp"
+#include <string.h>
+
+// These are the pin assignments for the 32u4 boards.
+// You may define them to something else in your config.h
+// if yours is wired up differently.
+#ifndef AdafruitBleResetPin
+#define AdafruitBleResetPin D4
+#endif
+
+#ifndef AdafruitBleCSPin
+#define AdafruitBleCSPin B4
+#endif
+
+#ifndef AdafruitBleIRQPin
+#define AdafruitBleIRQPin E6
+#endif
+
+
+#define SAMPLE_BATTERY
+#define ConnectionUpdateInterval 1000 /* milliseconds */
+
+static struct {
+ bool is_connected;
+ bool initialized;
+ bool configured;
+
+#define ProbedEvents 1
+#define UsingEvents 2
+ bool event_flags;
+
+#ifdef SAMPLE_BATTERY
+ uint16_t last_battery_update;
+ uint32_t vbat;
+#endif
+ uint16_t last_connection_update;
+} state;
+
+// Commands are encoded using SDEP and sent via SPI
+// https://github.com/adafruit/Adafruit_BluefruitLE_nRF51/blob/master/SDEP.md
+
+#define SdepMaxPayload 16
+struct sdep_msg {
+ uint8_t type;
+ uint8_t cmd_low;
+ uint8_t cmd_high;
+ struct __attribute__((packed)) {
+ uint8_t len:7;
+ uint8_t more:1;
+ };
+ uint8_t payload[SdepMaxPayload];
+} __attribute__((packed));
+
+// The recv latency is relatively high, so when we're hammering keys quickly,
+// we want to avoid waiting for the responses in the matrix loop. We maintain
+// a short queue for that. Since there is quite a lot of space overhead for
+// the AT command representation wrapped up in SDEP, we queue the minimal
+// information here.
+
+enum queue_type {
+ QTKeyReport, // 1-byte modifier + 6-byte key report
+ QTConsumer, // 16-bit key code
+#ifdef MOUSE_ENABLE
+ QTMouseMove, // 4-byte mouse report
+#endif
+};
+
+struct queue_item {
+ enum queue_type queue_type;
+ uint16_t added;
+ union __attribute__((packed)) {
+ struct __attribute__((packed)) {
+ uint8_t modifier;
+ uint8_t keys[6];
+ } key;
+
+ uint16_t consumer;
+ struct __attribute__((packed)) {
+ int8_t x, y, scroll, pan;
+ } mousemove;
+ };
+};
+
+// Items that we wish to send
+static RingBuffer<queue_item, 40> send_buf;
+// Pending response; while pending, we can't send any more requests.
+// This records the time at which we sent the command for which we
+// are expecting a response.
+static RingBuffer<uint16_t, 2> resp_buf;
+
+static bool process_queue_item(struct queue_item *item, uint16_t timeout);
+
+enum sdep_type {
+ SdepCommand = 0x10,
+ SdepResponse = 0x20,
+ SdepAlert = 0x40,
+ SdepError = 0x80,
+ SdepSlaveNotReady = 0xfe, // Try again later
+ SdepSlaveOverflow = 0xff, // You read more data than is available
+};
+
+enum ble_cmd {
+ BleInitialize = 0xbeef,
+ BleAtWrapper = 0x0a00,
+ BleUartTx = 0x0a01,
+ BleUartRx = 0x0a02,
+};
+
+enum ble_system_event_bits {
+ BleSystemConnected = 0,
+ BleSystemDisconnected = 1,
+ BleSystemUartRx = 8,
+ BleSystemMidiRx = 10,
+};
+
+// The SDEP.md file says 2MHz but the web page and the sample driver
+// both use 4MHz
+#define SpiBusSpeed 4000000
+
+#define SdepTimeout 150 /* milliseconds */
+#define SdepShortTimeout 10 /* milliseconds */
+#define SdepBackOff 25 /* microseconds */
+#define BatteryUpdateInterval 10000 /* milliseconds */
+
+static bool at_command(const char *cmd, char *resp, uint16_t resplen,
+ bool verbose, uint16_t timeout = SdepTimeout);
+static bool at_command_P(const char *cmd, char *resp, uint16_t resplen,
+ bool verbose = false);
+
+struct SPI_Settings {
+ uint8_t spcr, spsr;
+};
+
+static struct SPI_Settings spi;
+
+// Initialize 4Mhz MSBFIRST MODE0
+void SPI_init(struct SPI_Settings *spi) {
+ spi->spcr = _BV(SPE) | _BV(MSTR);
+ spi->spsr = _BV(SPI2X);
+
+ static_assert(SpiBusSpeed == F_CPU / 2, "hard coded at 4Mhz");
+
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+ // Ensure that SS is OUTPUT High
+ digitalWrite(B0, PinLevelHigh);
+ pinMode(B0, PinDirectionOutput);
+
+ SPCR |= _BV(MSTR);
+ SPCR |= _BV(SPE);
+ pinMode(B1 /* SCK */, PinDirectionOutput);
+ pinMode(B2 /* MOSI */, PinDirectionOutput);
+ }
+}
+
+static inline void SPI_begin(struct SPI_Settings*spi) {
+ SPCR = spi->spcr;
+ SPSR = spi->spsr;
+}
+
+static inline uint8_t SPI_TransferByte(uint8_t data) {
+ SPDR = data;
+ asm volatile("nop");
+ while (!(SPSR & _BV(SPIF))) {
+ ; // wait
+ }
+ return SPDR;
+}
+
+static inline void spi_send_bytes(const uint8_t *buf, uint8_t len) {
+ if (len == 0) return;
+ const uint8_t *end = buf + len;
+ while (buf < end) {
+ SPDR = *buf;
+ while (!(SPSR & _BV(SPIF))) {
+ ; // wait
+ }
+ ++buf;
+ }
+}
+
+static inline uint16_t spi_read_byte(void) {
+ return SPI_TransferByte(0x00 /* dummy */);
+}
+
+static inline void spi_recv_bytes(uint8_t *buf, uint8_t len) {
+ const uint8_t *end = buf + len;
+ if (len == 0) return;
+ while (buf < end) {
+ SPDR = 0; // write a dummy to initiate read
+ while (!(SPSR & _BV(SPIF))) {
+ ; // wait
+ }
+ *buf = SPDR;
+ ++buf;
+ }
+}
+
+#if 0
+static void dump_pkt(const struct sdep_msg *msg) {
+ print("pkt: type=");
+ print_hex8(msg->type);
+ print(" cmd=");
+ print_hex8(msg->cmd_high);
+ print_hex8(msg->cmd_low);
+ print(" len=");
+ print_hex8(msg->len);
+ print(" more=");
+ print_hex8(msg->more);
+ print("\n");
+}
+#endif
+
+// Send a single SDEP packet
+static bool sdep_send_pkt(const struct sdep_msg *msg, uint16_t timeout) {
+ SPI_begin(&spi);
+
+ digitalWrite(AdafruitBleCSPin, PinLevelLow);
+ uint16_t timerStart = timer_read();
+ bool success = false;
+ bool ready = false;
+
+ do {
+ ready = SPI_TransferByte(msg->type) != SdepSlaveNotReady;
+ if (ready) {
+ break;
+ }
+
+ // Release it and let it initialize
+ digitalWrite(AdafruitBleCSPin, PinLevelHigh);
+ _delay_us(SdepBackOff);
+ digitalWrite(AdafruitBleCSPin, PinLevelLow);
+ } while (timer_elapsed(timerStart) < timeout);
+
+ if (ready) {
+ // Slave is ready; send the rest of the packet
+ spi_send_bytes(&msg->cmd_low,
+ sizeof(*msg) - (1 + sizeof(msg->payload)) + msg->len);
+ success = true;
+ }
+
+ digitalWrite(AdafruitBleCSPin, PinLevelHigh);
+
+ return success;
+}
+
+static inline void sdep_build_pkt(struct sdep_msg *msg, uint16_t command,
+ const uint8_t *payload, uint8_t len,
+ bool moredata) {
+ msg->type = SdepCommand;
+ msg->cmd_low = command & 0xff;
+ msg->cmd_high = command >> 8;
+ msg->len = len;
+ msg->more = (moredata && len == SdepMaxPayload) ? 1 : 0;
+
+ static_assert(sizeof(*msg) == 20, "msg is correctly packed");
+
+ memcpy(msg->payload, payload, len);
+}
+
+// Read a single SDEP packet
+static bool sdep_recv_pkt(struct sdep_msg *msg, uint16_t timeout) {
+ bool success = false;
+ uint16_t timerStart = timer_read();
+ bool ready = false;
+
+ do {
+ ready = digitalRead(AdafruitBleIRQPin);
+ if (ready) {
+ break;
+ }
+ _delay_us(1);
+ } while (timer_elapsed(timerStart) < timeout);
+
+ if (ready) {
+ SPI_begin(&spi);
+
+ digitalWrite(AdafruitBleCSPin, PinLevelLow);
+
+ do {
+ // Read the command type, waiting for the data to be ready
+ msg->type = spi_read_byte();
+ if (msg->type == SdepSlaveNotReady || msg->type == SdepSlaveOverflow) {
+ // Release it and let it initialize
+ digitalWrite(AdafruitBleCSPin, PinLevelHigh);
+ _delay_us(SdepBackOff);
+ digitalWrite(AdafruitBleCSPin, PinLevelLow);
+ continue;
+ }
+
+ // Read the rest of the header
+ spi_recv_bytes(&msg->cmd_low, sizeof(*msg) - (1 + sizeof(msg->payload)));
+
+ // and get the payload if there is any
+ if (msg->len <= SdepMaxPayload) {
+ spi_recv_bytes(msg->payload, msg->len);
+ }
+ success = true;
+ break;
+ } while (timer_elapsed(timerStart) < timeout);
+
+ digitalWrite(AdafruitBleCSPin, PinLevelHigh);
+ }
+ return success;
+}
+
+static void resp_buf_read_one(bool greedy) {
+ uint16_t last_send;
+ if (!resp_buf.peek(last_send)) {
+ return;
+ }
+
+ if (digitalRead(AdafruitBleIRQPin)) {
+ struct sdep_msg msg;
+
+again:
+ if (sdep_recv_pkt(&msg, SdepTimeout)) {
+ if (!msg.more) {
+ // We got it; consume this entry
+ resp_buf.get(last_send);
+ dprintf("recv latency %dms\n", TIMER_DIFF_16(timer_read(), last_send));
+ }
+
+ if (greedy && resp_buf.peek(last_send) && digitalRead(AdafruitBleIRQPin)) {
+ goto again;
+ }
+ }
+
+ } else if (timer_elapsed(last_send) > SdepTimeout * 2) {
+ dprintf("waiting_for_result: timeout, resp_buf size %d\n",
+ (int)resp_buf.size());
+
+ // Timed out: consume this entry
+ resp_buf.get(last_send);
+ }
+}
+
+static void send_buf_send_one(uint16_t timeout = SdepTimeout) {
+ struct queue_item item;
+
+ // Don't send anything more until we get an ACK
+ if (!resp_buf.empty()) {
+ return;
+ }
+
+ if (!send_buf.peek(item)) {
+ return;
+ }
+ if (process_queue_item(&item, timeout)) {
+ // commit that peek
+ send_buf.get(item);
+ dprintf("send_buf_send_one: have %d remaining\n", (int)send_buf.size());
+ } else {
+ dprint("failed to send, will retry\n");
+ _delay_ms(SdepTimeout);
+ resp_buf_read_one(true);
+ }
+}
+
+static void resp_buf_wait(const char *cmd) {
+ bool didPrint = false;
+ while (!resp_buf.empty()) {
+ if (!didPrint) {
+ dprintf("wait on buf for %s\n", cmd);
+ didPrint = true;
+ }
+ resp_buf_read_one(true);
+ }
+}
+
+static bool ble_init(void) {
+ state.initialized = false;
+ state.configured = false;
+ state.is_connected = false;
+
+ pinMode(AdafruitBleIRQPin, PinDirectionInput);
+ pinMode(AdafruitBleCSPin, PinDirectionOutput);
+ digitalWrite(AdafruitBleCSPin, PinLevelHigh);
+
+ SPI_init(&spi);
+
+ // Perform a hardware reset
+ pinMode(AdafruitBleResetPin, PinDirectionOutput);
+ digitalWrite(AdafruitBleResetPin, PinLevelHigh);
+ digitalWrite(AdafruitBleResetPin, PinLevelLow);
+ _delay_ms(10);
+ digitalWrite(AdafruitBleResetPin, PinLevelHigh);
+
+ _delay_ms(1000); // Give it a second to initialize
+
+ state.initialized = true;
+ return state.initialized;
+}
+
+static inline uint8_t min(uint8_t a, uint8_t b) {
+ return a < b ? a : b;
+}
+
+static bool read_response(char *resp, uint16_t resplen, bool verbose) {
+ char *dest = resp;
+ char *end = dest + resplen;
+
+ while (true) {
+ struct sdep_msg msg;
+
+ if (!sdep_recv_pkt(&msg, 2 * SdepTimeout)) {
+ dprint("sdep_recv_pkt failed\n");
+ return false;
+ }
+
+ if (msg.type != SdepResponse) {
+ *resp = 0;
+ return false;
+ }
+
+ uint8_t len = min(msg.len, end - dest);
+ if (len > 0) {
+ memcpy(dest, msg.payload, len);
+ dest += len;
+ }
+
+ if (!msg.more) {
+ // No more data is expected!
+ break;
+ }
+ }
+
+ // Ensure the response is NUL terminated
+ *dest = 0;
+
+ // "Parse" the result text; we want to snip off the trailing OK or ERROR line
+ // Rewind past the possible trailing CRLF so that we can strip it
+ --dest;
+ while (dest > resp && (dest[0] == '\n' || dest[0] == '\r')) {
+ *dest = 0;
+ --dest;
+ }
+
+ // Look back for start of preceeding line
+ char *last_line = strrchr(resp, '\n');
+ if (last_line) {
+ ++last_line;
+ } else {
+ last_line = resp;
+ }
+
+ bool success = false;
+ static const char kOK[] PROGMEM = "OK";
+
+ success = !strcmp_P(last_line, kOK );
+
+ if (verbose || !success) {
+ dprintf("result: %s\n", resp);
+ }
+ return success;
+}
+
+static bool at_command(const char *cmd, char *resp, uint16_t resplen,
+ bool verbose, uint16_t timeout) {
+ const char *end = cmd + strlen(cmd);
+ struct sdep_msg msg;
+
+ if (verbose) {
+ dprintf("ble send: %s\n", cmd);
+ }
+
+ if (resp) {
+ // They want to decode the response, so we need to flush and wait
+ // for all pending I/O to finish before we start this one, so
+ // that we don't confuse the results
+ resp_buf_wait(cmd);
+ *resp = 0;
+ }
+
+ // Fragment the command into a series of SDEP packets
+ while (end - cmd > SdepMaxPayload) {
+ sdep_build_pkt(&msg, BleAtWrapper, (uint8_t *)cmd, SdepMaxPayload, true);
+ if (!sdep_send_pkt(&msg, timeout)) {
+ return false;
+ }
+ cmd += SdepMaxPayload;
+ }
+
+ sdep_build_pkt(&msg, BleAtWrapper, (uint8_t *)cmd, end - cmd, false);
+ if (!sdep_send_pkt(&msg, timeout)) {
+ return false;
+ }
+
+ if (resp == NULL) {
+ auto now = timer_read();
+ while (!resp_buf.enqueue(now)) {
+ resp_buf_read_one(false);
+ }
+ auto later = timer_read();
+ if (TIMER_DIFF_16(later, now) > 0) {
+ dprintf("waited %dms for resp_buf\n", TIMER_DIFF_16(later, now));
+ }
+ return true;
+ }
+
+ return read_response(resp, resplen, verbose);
+}
+
+bool at_command_P(const char *cmd, char *resp, uint16_t resplen, bool verbose) {
+ auto cmdbuf = (char *)alloca(strlen_P(cmd) + 1);
+ strcpy_P(cmdbuf, cmd);
+ return at_command(cmdbuf, resp, resplen, verbose);
+}
+
+bool adafruit_ble_is_connected(void) {
+ return state.is_connected;
+}
+
+bool adafruit_ble_enable_keyboard(void) {
+ char resbuf[128];
+
+ if (!state.initialized && !ble_init()) {
+ return false;
+ }
+
+ state.configured = false;
+
+ // Disable command echo
+ static const char kEcho[] PROGMEM = "ATE=0";
+ // Make the advertised name match the keyboard
+ static const char kGapDevName[] PROGMEM =
+ "AT+GAPDEVNAME=" STR(PRODUCT) " " STR(DESCRIPTION);
+ // Turn on keyboard support
+ static const char kHidEnOn[] PROGMEM = "AT+BLEHIDEN=1";
+
+ // Adjust intervals to improve latency. This causes the "central"
+ // system (computer/tablet) to poll us every 10-30 ms. We can't
+ // set a smaller value than 10ms, and 30ms seems to be the natural
+ // processing time on my macbook. Keeping it constrained to that
+ // feels reasonable to type to.
+ static const char kGapIntervals[] PROGMEM = "AT+GAPINTERVALS=10,30,,";
+
+ // Reset the device so that it picks up the above changes
+ static const char kATZ[] PROGMEM = "ATZ";
+
+ // Turn down the power level a bit
+ static const char kPower[] PROGMEM = "AT+BLEPOWERLEVEL=-12";
+ static PGM_P const configure_commands[] PROGMEM = {
+ kEcho,
+ kGapIntervals,
+ kGapDevName,
+ kHidEnOn,
+ kPower,
+ kATZ,
+ };
+
+ uint8_t i;
+ for (i = 0; i < sizeof(configure_commands) / sizeof(configure_commands[0]);
+ ++i) {
+ PGM_P cmd;
+ memcpy_P(&cmd, configure_commands + i, sizeof(cmd));
+
+ if (!at_command_P(cmd, resbuf, sizeof(resbuf))) {
+ dprintf("failed BLE command: %S: %s\n", cmd, resbuf);
+ goto fail;
+ }
+ }
+
+ state.configured = true;
+
+ // Check connection status in a little while; allow the ATZ time
+ // to kick in.
+ state.last_connection_update = timer_read();
+fail:
+ return state.configured;
+}
+
+static void set_connected(bool connected) {
+ if (connected != state.is_connected) {
+ if (connected) {
+ print("****** BLE CONNECT!!!!\n");
+ } else {
+ print("****** BLE DISCONNECT!!!!\n");
+ }
+ state.is_connected = connected;
+
+ // TODO: if modifiers are down on the USB interface and
+ // we cut over to BLE or vice versa, they will remain stuck.
+ // This feels like a good point to do something like clearing
+ // the keyboard and/or generating a fake all keys up message.
+ // However, I've noticed that it takes a couple of seconds
+ // for macOS to to start recognizing key presses after BLE
+ // is in the connected state, so I worry that doing that
+ // here may not be good enough.
+ }
+}
+
+void adafruit_ble_task(void) {
+ char resbuf[48];
+
+ if (!state.configured && !adafruit_ble_enable_keyboard()) {
+ return;
+ }
+ resp_buf_read_one(true);
+ send_buf_send_one(SdepShortTimeout);
+
+ if (resp_buf.empty() && (state.event_flags & UsingEvents) &&
+ digitalRead(AdafruitBleIRQPin)) {
+ // Must be an event update
+ if (at_command_P(PSTR("AT+EVENTSTATUS"), resbuf, sizeof(resbuf))) {
+ uint32_t mask = strtoul(resbuf, NULL, 16);
+
+ if (mask & BleSystemConnected) {
+ set_connected(true);
+ } else if (mask & BleSystemDisconnected) {
+ set_connected(false);
+ }
+ }
+ }
+
+ if (timer_elapsed(state.last_connection_update) > ConnectionUpdateInterval) {
+ bool shouldPoll = true;
+ if (!(state.event_flags & ProbedEvents)) {
+ // Request notifications about connection status changes.
+ // This only works in SPIFRIEND firmware > 0.6.7, which is why
+ // we check for this conditionally here.
+ // Note that at the time of writing, HID reports only work correctly
+ // with Apple products on firmware version 0.6.7!
+ // https://forums.adafruit.com/viewtopic.php?f=8&t=104052
+ if (at_command_P(PSTR("AT+EVENTENABLE=0x1"), resbuf, sizeof(resbuf))) {
+ at_command_P(PSTR("AT+EVENTENABLE=0x2"), resbuf, sizeof(resbuf));
+ state.event_flags |= UsingEvents;
+ }
+ state.event_flags |= ProbedEvents;
+
+ // leave shouldPoll == true so that we check at least once
+ // before relying solely on events
+ } else {
+ shouldPoll = false;
+ }
+
+ static const char kGetConn[] PROGMEM = "AT+GAPGETCONN";
+ state.last_connection_update = timer_read();
+
+ if (at_command_P(kGetConn, resbuf, sizeof(resbuf))) {
+ set_connected(atoi(resbuf));
+ }
+ }
+
+#ifdef SAMPLE_BATTERY
+ // I don't know if this really does anything useful yet; the reported
+ // voltage level always seems to be around 3200mV. We may want to just rip
+ // this code out.
+ if (timer_elapsed(state.last_battery_update) > BatteryUpdateInterval &&
+ resp_buf.empty()) {
+ state.last_battery_update = timer_read();
+
+ if (at_command_P(PSTR("AT+HWVBAT"), resbuf, sizeof(resbuf))) {
+ state.vbat = atoi(resbuf);
+ }
+ }
+#endif
+}
+
+static bool process_queue_item(struct queue_item *item, uint16_t timeout) {
+ char cmdbuf[48];
+ char fmtbuf[64];
+
+ // Arrange to re-check connection after keys have settled
+ state.last_connection_update = timer_read();
+
+#if 1
+ if (TIMER_DIFF_16(state.last_connection_update, item->added) > 0) {
+ dprintf("send latency %dms\n",
+ TIMER_DIFF_16(state.last_connection_update, item->added));
+ }
+#endif
+
+ switch (item->queue_type) {
+ case QTKeyReport:
+ strcpy_P(fmtbuf,
+ PSTR("AT+BLEKEYBOARDCODE=%02x-00-%02x-%02x-%02x-%02x-%02x-%02x"));
+ snprintf(cmdbuf, sizeof(cmdbuf), fmtbuf, item->key.modifier,
+ item->key.keys[0], item->key.keys[1], item->key.keys[2],
+ item->key.keys[3], item->key.keys[4], item->key.keys[5]);
+ return at_command(cmdbuf, NULL, 0, true, timeout);
+
+ case QTConsumer:
+ strcpy_P(fmtbuf, PSTR("AT+BLEHIDCONTROLKEY=0x%04x"));
+ snprintf(cmdbuf, sizeof(cmdbuf), fmtbuf, item->consumer);
+ return at_command(cmdbuf, NULL, 0, true, timeout);
+
+#ifdef MOUSE_ENABLE
+ case QTMouseMove:
+ strcpy_P(fmtbuf, PSTR("AT+BLEHIDMOUSEMOVE=%d,%d,%d,%d"));
+ snprintf(cmdbuf, sizeof(cmdbuf), fmtbuf, item->mousemove.x,
+ item->mousemove.y, item->mousemove.scroll, item->mousemove.pan);
+ return at_command(cmdbuf, NULL, 0, true, timeout);
+#endif
+ default:
+ return true;
+ }
+}
+
+bool adafruit_ble_send_keys(uint8_t hid_modifier_mask, uint8_t *keys,
+ uint8_t nkeys) {
+ struct queue_item item;
+ bool didWait = false;
+
+ item.queue_type = QTKeyReport;
+ item.key.modifier = hid_modifier_mask;
+ item.added = timer_read();
+
+ while (nkeys >= 0) {
+ item.key.keys[0] = keys[0];
+ item.key.keys[1] = nkeys >= 1 ? keys[1] : 0;
+ item.key.keys[2] = nkeys >= 2 ? keys[2] : 0;
+ item.key.keys[3] = nkeys >= 3 ? keys[3] : 0;
+ item.key.keys[4] = nkeys >= 4 ? keys[4] : 0;
+ item.key.keys[5] = nkeys >= 5 ? keys[5] : 0;
+
+ if (!send_buf.enqueue(item)) {
+ if (!didWait) {
+ dprint("wait for buf space\n");
+ didWait = true;
+ }
+ send_buf_send_one();
+ continue;
+ }
+
+ if (nkeys <= 6) {
+ return true;
+ }
+
+ nkeys -= 6;
+ keys += 6;
+ }
+
+ return true;
+}
+
+bool adafruit_ble_send_consumer_key(uint16_t keycode, int hold_duration) {
+ struct queue_item item;
+
+ item.queue_type = QTConsumer;
+ item.consumer = keycode;
+
+ while (!send_buf.enqueue(item)) {
+ send_buf_send_one();
+ }
+ return true;
+}
+
+#ifdef MOUSE_ENABLE
+bool adafruit_ble_send_mouse_move(int8_t x, int8_t y, int8_t scroll,
+ int8_t pan) {
+ struct queue_item item;
+
+ item.queue_type = QTMouseMove;
+ item.mousemove.x = x;
+ item.mousemove.y = y;
+ item.mousemove.scroll = scroll;
+ item.mousemove.pan = pan;
+
+ while (!send_buf.enqueue(item)) {
+ send_buf_send_one();
+ }
+ return true;
+}
+#endif
+
+uint32_t adafruit_ble_read_battery_voltage(void) {
+ return state.vbat;
+}
+
+bool adafruit_ble_set_mode_leds(bool on) {
+ if (!state.configured) {
+ return false;
+ }
+
+ // The "mode" led is the red blinky one
+ at_command_P(on ? PSTR("AT+HWMODELED=1") : PSTR("AT+HWMODELED=0"), NULL, 0);
+
+ // Pin 19 is the blue "connected" LED; turn that off too.
+ // When turning LEDs back on, don't turn that LED on if we're
+ // not connected, as that would be confusing.
+ at_command_P(on && state.is_connected ? PSTR("AT+HWGPIO=19,1")
+ : PSTR("AT+HWGPIO=19,0"),
+ NULL, 0);
+ return true;
+}
+
+// https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le/ble-generic#at-plus-blepowerlevel
+bool adafruit_ble_set_power_level(int8_t level) {
+ char cmd[46];
+ if (!state.configured) {
+ return false;
+ }
+ snprintf(cmd, sizeof(cmd), "AT+BLEPOWERLEVEL=%d", level);
+ return at_command(cmd, NULL, 0, false);
+}
diff --git a/tmk_core/protocol/lufa/adafruit_ble.h b/tmk_core/protocol/lufa/adafruit_ble.h
new file mode 100644
index 000000000..351fd55ae
--- /dev/null
+++ b/tmk_core/protocol/lufa/adafruit_ble.h
@@ -0,0 +1,60 @@
+/* Bluetooth Low Energy Protocol for QMK.
+ * Author: Wez Furlong, 2016
+ * Supports the Adafruit BLE board built around the nRF51822 chip.
+ */
+#pragma once
+#ifdef ADAFRUIT_BLE_ENABLE
+#include <stdbool.h>
+#include <stdint.h>
+#include <string.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Instruct the module to enable HID keyboard support and reset */
+extern bool adafruit_ble_enable_keyboard(void);
+
+/* Query to see if the BLE module is connected */
+extern bool adafruit_ble_query_is_connected(void);
+
+/* Returns true if we believe that the BLE module is connected.
+ * This uses our cached understanding that is maintained by
+ * calling ble_task() periodically. */
+extern bool adafruit_ble_is_connected(void);
+
+/* Call this periodically to process BLE-originated things */
+extern void adafruit_ble_task(void);
+
+/* Generates keypress events for a set of keys.
+ * The hid modifier mask specifies the state of the modifier keys for
+ * this set of keys.
+ * Also sends a key release indicator, so that the keys do not remain
+ * held down. */
+extern bool adafruit_ble_send_keys(uint8_t hid_modifier_mask, uint8_t *keys,
+ uint8_t nkeys);
+
+/* Send a consumer keycode, holding it down for the specified duration
+ * (milliseconds) */
+extern bool adafruit_ble_send_consumer_key(uint16_t keycode, int hold_duration);
+
+#ifdef MOUSE_ENABLE
+/* Send a mouse/wheel movement report.
+ * The parameters are signed and indicate positive of negative direction
+ * change. */
+extern bool adafruit_ble_send_mouse_move(int8_t x, int8_t y, int8_t scroll,
+ int8_t pan);
+#endif
+
+/* Compute battery voltage by reading an analog pin.
+ * Returns the integer number of millivolts */
+extern uint32_t adafruit_ble_read_battery_voltage(void);
+
+extern bool adafruit_ble_set_mode_leds(bool on);
+extern bool adafruit_ble_set_power_level(int8_t level);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // ADAFRUIT_BLE_ENABLE
diff --git a/tmk_core/protocol/lufa/descriptor.c b/tmk_core/protocol/lufa/descriptor.c
index 850a20fdb..bf47787d2 100644
--- a/tmk_core/protocol/lufa/descriptor.c
+++ b/tmk_core/protocol/lufa/descriptor.c
@@ -140,9 +140,9 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM ExtrakeyReport[] =
HID_RI_USAGE(8, 0x80), /* System Control */
HID_RI_COLLECTION(8, 0x01), /* Application */
HID_RI_REPORT_ID(8, REPORT_ID_SYSTEM),
- HID_RI_LOGICAL_MINIMUM(16, 0x0001),
+ HID_RI_LOGICAL_MINIMUM(16, 0x0081),
HID_RI_LOGICAL_MAXIMUM(16, 0x00B7),
- HID_RI_USAGE_MINIMUM(16, 0x0001), /* System Power Down */
+ HID_RI_USAGE_MINIMUM(16, 0x0081), /* System Power Down */
HID_RI_USAGE_MAXIMUM(16, 0x00B7), /* System Display LCD Autoscale */
HID_RI_REPORT_SIZE(8, 16),
HID_RI_REPORT_COUNT(8, 1),
@@ -164,6 +164,28 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM ExtrakeyReport[] =
};
#endif
+#ifdef RAW_ENABLE
+const USB_Descriptor_HIDReport_Datatype_t PROGMEM RawReport[] =
+{
+ HID_RI_USAGE_PAGE(16, 0xFF60), /* Vendor Page 0xFF60 */
+ HID_RI_USAGE(8, 0x61), /* Vendor Usage 0x61 */
+ HID_RI_COLLECTION(8, 0x01), /* Application */
+ HID_RI_USAGE(8, 0x62), /* Vendor Usage 0x62 */
+ HID_RI_LOGICAL_MINIMUM(8, 0x00),
+ HID_RI_LOGICAL_MAXIMUM(16, 0x00FF),
+ HID_RI_REPORT_COUNT(8, RAW_EPSIZE),
+ HID_RI_REPORT_SIZE(8, 0x08),
+ HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
+ HID_RI_USAGE(8, 0x63), /* Vendor Usage 0x63 */
+ HID_RI_LOGICAL_MINIMUM(8, 0x00),
+ HID_RI_LOGICAL_MAXIMUM(16, 0x00FF),
+ HID_RI_REPORT_COUNT(8, RAW_EPSIZE),
+ HID_RI_REPORT_SIZE(8, 0x08),
+ HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
+ HID_RI_END_COLLECTION(0),
+};
+#endif
+
#ifdef CONSOLE_ENABLE
const USB_Descriptor_HIDReport_Datatype_t PROGMEM ConsoleReport[] =
{
@@ -231,9 +253,15 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
.Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
.USBSpecification = VERSION_BCD(1,1,0),
+#if VIRTSER_ENABLE
+ .Class = USB_CSCP_IADDeviceClass,
+ .SubClass = USB_CSCP_IADDeviceSubclass,
+ .Protocol = USB_CSCP_IADDeviceProtocol,
+#else
.Class = USB_CSCP_NoDeviceClass,
.SubClass = USB_CSCP_NoDeviceSubclass,
.Protocol = USB_CSCP_NoDeviceProtocol,
+#endif
.Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,
@@ -393,6 +421,58 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
},
#endif
+ /*
+ * Raw
+ */
+ #ifdef RAW_ENABLE
+ .Raw_Interface =
+ {
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
+
+ .InterfaceNumber = RAW_INTERFACE,
+ .AlternateSetting = 0x00,
+
+ .TotalEndpoints = 2,
+
+ .Class = HID_CSCP_HIDClass,
+ .SubClass = HID_CSCP_NonBootSubclass,
+ .Protocol = HID_CSCP_NonBootProtocol,
+
+ .InterfaceStrIndex = NO_DESCRIPTOR
+ },
+
+ .Raw_HID =
+ {
+ .Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
+
+ .HIDSpec = VERSION_BCD(1,1,1),
+ .CountryCode = 0x00,
+ .TotalReportDescriptors = 1,
+ .HIDReportType = HID_DTYPE_Report,
+ .HIDReportLength = sizeof(RawReport)
+ },
+
+ .Raw_INEndpoint =
+ {
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
+
+ .EndpointAddress = (ENDPOINT_DIR_IN | RAW_IN_EPNUM),
+ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+ .EndpointSize = RAW_EPSIZE,
+ .PollingIntervalMS = 0x01
+ },
+
+ .Raw_OUTEndpoint =
+ {
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
+
+ .EndpointAddress = (ENDPOINT_DIR_OUT | RAW_OUT_EPNUM),
+ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+ .EndpointSize = RAW_EPSIZE,
+ .PollingIntervalMS = 0x01
+ },
+ #endif
+
/*
* Console
*/
@@ -643,7 +723,110 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
.TotalEmbeddedJacks = 0x01,
.AssociatedJackID = {0x03}
- }
+ },
+#endif
+
+#ifdef VIRTSER_ENABLE
+ .CDC_Interface_Association =
+ {
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation},
+
+ .FirstInterfaceIndex = CCI_INTERFACE,
+ .TotalInterfaces = 2,
+
+ .Class = CDC_CSCP_CDCClass,
+ .SubClass = CDC_CSCP_ACMSubclass,
+ .Protocol = CDC_CSCP_ATCommandProtocol,
+
+ .IADStrIndex = NO_DESCRIPTOR,
+ },
+
+ .CDC_CCI_Interface =
+ {
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
+
+ .InterfaceNumber = CCI_INTERFACE,
+ .AlternateSetting = 0,
+
+ .TotalEndpoints = 1,
+
+ .Class = CDC_CSCP_CDCClass,
+ .SubClass = CDC_CSCP_ACMSubclass,
+ .Protocol = CDC_CSCP_ATCommandProtocol,
+
+ .InterfaceStrIndex = NO_DESCRIPTOR
+ },
+
+ .CDC_Functional_Header =
+ {
+ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},
+ .Subtype = 0x00,
+
+ .CDCSpecification = VERSION_BCD(1,1,0),
+ },
+
+ .CDC_Functional_ACM =
+ {
+ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},
+ .Subtype = 0x02,
+
+ .Capabilities = 0x02,
+ },
+
+ .CDC_Functional_Union =
+ {
+ .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},
+ .Subtype = 0x06,
+
+ .MasterInterfaceNumber = CCI_INTERFACE,
+ .SlaveInterfaceNumber = CDI_INTERFACE,
+ },
+
+ .CDC_NotificationEndpoint =
+ {
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
+
+ .EndpointAddress = CDC_NOTIFICATION_EPADDR,
+ .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+ .EndpointSize = CDC_NOTIFICATION_EPSIZE,
+ .PollingIntervalMS = 0xFF
+ },
+
+ .CDC_DCI_Interface =
+ {
+ .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
+
+ .InterfaceNumber = CDI_INTERFACE,
+ .AlternateSetting = 0,
+
+ .TotalEndpoints = 2,
+
+ .Class = CDC_CSCP_CDCDataClass,
+ .SubClass = CDC_CSCP_NoDataSubclass,
+ .Protocol = CDC_CSCP_NoDataProtocol,
+
+ .InterfaceStrIndex = NO_DESCRIPTOR
+ },
+
+ .CDC_DataOutEndpoint =
+ {
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
+
+ .EndpointAddress = CDC_OUT_EPADDR,
+ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+ .EndpointSize = CDC_EPSIZE,
+ .PollingIntervalMS = 0x05
+ },
+
+ .CDC_DataInEndpoint =
+ {
+ .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
+
+ .EndpointAddress = CDC_IN_EPADDR,
+ .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
+ .EndpointSize = CDC_EPSIZE,
+ .PollingIntervalMS = 0x05
+ },
#endif
};
@@ -736,6 +919,12 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
Size = sizeof(USB_HID_Descriptor_HID_t);
break;
#endif
+#ifdef RAW_ENABLE
+ case RAW_INTERFACE:
+ Address = &ConfigurationDescriptor.Raw_HID;
+ Size = sizeof(USB_HID_Descriptor_HID_t);
+ break;
+#endif
#ifdef CONSOLE_ENABLE
case CONSOLE_INTERFACE:
Address = &ConfigurationDescriptor.Console_HID;
@@ -768,6 +957,12 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
Size = sizeof(ExtrakeyReport);
break;
#endif
+#ifdef RAW_ENABLE
+ case RAW_INTERFACE:
+ Address = &RawReport;
+ Size = sizeof(RawReport);
+ break;
+#endif
#ifdef CONSOLE_ENABLE
case CONSOLE_INTERFACE:
Address = &ConsoleReport;
diff --git a/tmk_core/protocol/lufa/descriptor.h b/tmk_core/protocol/lufa/descriptor.h
index 4fd81a0e8..24ce420e6 100644
--- a/tmk_core/protocol/lufa/descriptor.h
+++ b/tmk_core/protocol/lufa/descriptor.h
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
* This file is based on:
* LUFA-120219/Demos/Device/Lowlevel/KeyboardMouse
@@ -71,6 +71,14 @@ typedef struct
USB_Descriptor_Endpoint_t Extrakey_INEndpoint;
#endif
+#ifdef RAW_ENABLE
+ // Raw HID Interface
+ USB_Descriptor_Interface_t Raw_Interface;
+ USB_HID_Descriptor_HID_t Raw_HID;
+ USB_Descriptor_Endpoint_t Raw_INEndpoint;
+ USB_Descriptor_Endpoint_t Raw_OUTEndpoint;
+#endif
+
#ifdef CONSOLE_ENABLE
// Console HID Interface
USB_Descriptor_Interface_t Console_Interface;
@@ -104,6 +112,21 @@ typedef struct
USB_MIDI_Descriptor_Jack_Endpoint_t MIDI_Out_Jack_Endpoint_SPC;
#endif
+#ifdef VIRTSER_ENABLE
+ USB_Descriptor_Interface_Association_t CDC_Interface_Association;
+
+ // CDC Control Interface
+ USB_Descriptor_Interface_t CDC_CCI_Interface;
+ USB_CDC_Descriptor_FunctionalHeader_t CDC_Functional_Header;
+ USB_CDC_Descriptor_FunctionalACM_t CDC_Functional_ACM;
+ USB_CDC_Descriptor_FunctionalUnion_t CDC_Functional_Union;
+ USB_Descriptor_Endpoint_t CDC_NotificationEndpoint;
+
+ // CDC Data Interface
+ USB_Descriptor_Interface_t CDC_DCI_Interface;
+ USB_Descriptor_Endpoint_t CDC_DataOutEndpoint;
+ USB_Descriptor_Endpoint_t CDC_DataInEndpoint;
+#endif
} USB_Descriptor_Configuration_t;
@@ -114,18 +137,24 @@ typedef struct
# define MOUSE_INTERFACE (KEYBOARD_INTERFACE + 1)
#else
# define MOUSE_INTERFACE KEYBOARD_INTERFACE
-#endif
+#endif
#ifdef EXTRAKEY_ENABLE
# define EXTRAKEY_INTERFACE (MOUSE_INTERFACE + 1)
#else
# define EXTRAKEY_INTERFACE MOUSE_INTERFACE
-#endif
+#endif
+
+#ifdef RAW_ENABLE
+# define RAW_INTERFACE (EXTRAKEY_INTERFACE + 1)
+#else
+# define RAW_INTERFACE EXTRAKEY_INTERFACE
+#endif
#ifdef CONSOLE_ENABLE
-# define CONSOLE_INTERFACE (EXTRAKEY_INTERFACE + 1)
+# define CONSOLE_INTERFACE (RAW_INTERFACE + 1)
#else
-# define CONSOLE_INTERFACE EXTRAKEY_INTERFACE
+# define CONSOLE_INTERFACE RAW_INTERFACE
#endif
#ifdef NKRO_ENABLE
@@ -141,15 +170,22 @@ typedef struct
# define AS_INTERFACE NKRO_INTERFACE
#endif
+#ifdef VIRTSER_ENABLE
+# define CCI_INTERFACE (AS_INTERFACE + 1)
+# define CDI_INTERFACE (AS_INTERFACE + 2)
+#else
+# define CDI_INTERFACE AS_INTERFACE
+#endif
+
/* nubmer of interfaces */
-#define TOTAL_INTERFACES AS_INTERFACE + 1
+#define TOTAL_INTERFACES (CDI_INTERFACE + 1)
// Endopoint number and size
#define KEYBOARD_IN_EPNUM 1
#ifdef MOUSE_ENABLE
-# define MOUSE_IN_EPNUM (KEYBOARD_IN_EPNUM + 1)
+# define MOUSE_IN_EPNUM (KEYBOARD_IN_EPNUM + 1)
#else
# define MOUSE_IN_EPNUM KEYBOARD_IN_EPNUM
#endif
@@ -157,15 +193,22 @@ typedef struct
#ifdef EXTRAKEY_ENABLE
# define EXTRAKEY_IN_EPNUM (MOUSE_IN_EPNUM + 1)
#else
-# define EXTRAKEY_IN_EPNUM MOUSE_IN_EPNUM
+# define EXTRAKEY_IN_EPNUM MOUSE_IN_EPNUM
+#endif
+
+#ifdef RAW_ENABLE
+# define RAW_IN_EPNUM (EXTRAKEY_IN_EPNUM + 1)
+# define RAW_OUT_EPNUM (EXTRAKEY_IN_EPNUM + 2)
+#else
+# define RAW_OUT_EPNUM EXTRAKEY_IN_EPNUM
#endif
#ifdef CONSOLE_ENABLE
-# define CONSOLE_IN_EPNUM (EXTRAKEY_IN_EPNUM + 1)
-# define CONSOLE_OUT_EPNUM (EXTRAKEY_IN_EPNUM + 1)
-//# define CONSOLE_OUT_EPNUM (EXTRAKEY_IN_EPNUM + 2)
+# define CONSOLE_IN_EPNUM (RAW_OUT_EPNUM + 1)
+//# define CONSOLE_OUT_EPNUM (RAW_OUT_EPNUM + 2)
+# define CONSOLE_OUT_EPNUM (RAW_OUT_EPNUM + 1)
#else
-# define CONSOLE_OUT_EPNUM EXTRAKEY_IN_EPNUM
+# define CONSOLE_OUT_EPNUM RAW_OUT_EPNUM
#endif
#ifdef NKRO_ENABLE
@@ -180,19 +223,34 @@ typedef struct
# define MIDI_STREAM_OUT_EPNUM (NKRO_IN_EPNUM + 2)
# define MIDI_STREAM_IN_EPADDR (ENDPOINT_DIR_IN | MIDI_STREAM_IN_EPNUM)
# define MIDI_STREAM_OUT_EPADDR (ENDPOINT_DIR_OUT | MIDI_STREAM_OUT_EPNUM)
+#else
+# define MIDI_STREAM_OUT_EPNUM NKRO_IN_EPNUM
#endif
+#ifdef VIRTSER_ENABLE
+# define CDC_NOTIFICATION_EPNUM (MIDI_STREAM_OUT_EPNUM + 1)
+# define CDC_IN_EPNUM (MIDI_STREAM_OUT_EPNUM + 2)
+# define CDC_OUT_EPNUM (MIDI_STREAM_OUT_EPNUM + 3)
+# define CDC_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | CDC_NOTIFICATION_EPNUM)
+# define CDC_IN_EPADDR (ENDPOINT_DIR_IN | CDC_IN_EPNUM)
+# define CDC_OUT_EPADDR (ENDPOINT_DIR_OUT | CDC_OUT_EPNUM)
+#else
+# define CDC_OUT_EPNUM MIDI_STREAM_OUT_EPNUM
+#endif
-#if defined(__AVR_ATmega32U2__) && MIDI_STREAM_OUT_EPADDR > 4
-# error "Endpoints are not available enough to support all functions. Remove some in Makefile.(MOUSEKEY, EXTRAKEY, CONSOLE, NKRO, MIDI)"
+#if defined(__AVR_ATmega32U2__) && CDC_OUT_EPNUM > 4
+# error "Endpoints are not available enough to support all functions. Remove some in Makefile.(MOUSEKEY, EXTRAKEY, CONSOLE, NKRO, MIDI, SERIAL)"
#endif
#define KEYBOARD_EPSIZE 8
#define MOUSE_EPSIZE 8
#define EXTRAKEY_EPSIZE 8
+#define RAW_EPSIZE 32
#define CONSOLE_EPSIZE 32
-#define NKRO_EPSIZE 16
+#define NKRO_EPSIZE 32
#define MIDI_STREAM_EPSIZE 64
+#define CDC_NOTIFICATION_EPSIZE 8
+#define CDC_EPSIZE 16
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c
index 9ca55dbc9..dd78fe621 100644
--- a/tmk_core/protocol/lufa/lufa.c
+++ b/tmk_core/protocol/lufa/lufa.c
@@ -51,6 +51,15 @@
#include "descriptor.h"
#include "lufa.h"
+#include "quantum.h"
+#include <util/atomic.h>
+
+#ifdef NKRO_ENABLE
+ #include "keycode_config.h"
+
+ extern keymap_config_t keymap_config;
+#endif
+
#ifdef AUDIO_ENABLE
#include <audio.h>
@@ -59,6 +68,25 @@
#ifdef BLUETOOTH_ENABLE
#include "bluetooth.h"
#endif
+#ifdef ADAFRUIT_BLE_ENABLE
+ #include "adafruit_ble.h"
+#endif
+
+#ifdef VIRTSER_ENABLE
+ #include "virtser.h"
+#endif
+
+#if (defined(RGB_MIDI) | defined(RGBLIGHT_ANIMATIONS)) & defined(RGBLIGHT_ENABLE)
+ #include "rgblight.h"
+#endif
+
+#ifdef MIDI_ENABLE
+ #include "sysex_tools.h"
+#endif
+
+#ifdef RAW_ENABLE
+ #include "raw_hid.h"
+#endif
uint8_t keyboard_idle = 0;
/* 0: Boot Protocol, 1: Report Protocol(default) */
@@ -68,9 +96,9 @@ static uint8_t keyboard_led_stats = 0;
static report_keyboard_t keyboard_report_sent;
#ifdef MIDI_ENABLE
-void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byte1, uint8_t byte2);
-void usb_get_midi(MidiDevice * device);
-void midi_usb_init(MidiDevice * device);
+static void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byte1, uint8_t byte2);
+static void usb_get_midi(MidiDevice * device);
+static void midi_usb_init(MidiDevice * device);
#endif
/* Host driver */
@@ -127,6 +155,108 @@ USB_ClassInfo_MIDI_Device_t USB_MIDI_Interface =
#define SYS_COMMON_3 0x30
#endif
+#ifdef VIRTSER_ENABLE
+USB_ClassInfo_CDC_Device_t cdc_device =
+{
+ .Config =
+ {
+ .ControlInterfaceNumber = CCI_INTERFACE,
+ .DataINEndpoint =
+ {
+ .Address = CDC_IN_EPADDR,
+ .Size = CDC_EPSIZE,
+ .Banks = 1,
+ },
+ .DataOUTEndpoint =
+ {
+ .Address = CDC_OUT_EPADDR,
+ .Size = CDC_EPSIZE,
+ .Banks = 1,
+ },
+ .NotificationEndpoint =
+ {
+ .Address = CDC_NOTIFICATION_EPADDR,
+ .Size = CDC_NOTIFICATION_EPSIZE,
+ .Banks = 1,
+ },
+ },
+};
+#endif
+
+#ifdef RAW_ENABLE
+
+void raw_hid_send( uint8_t *data, uint8_t length )
+{
+ // TODO: implement variable size packet
+ if ( length != RAW_EPSIZE )
+ {
+ return;
+ }
+
+ if (USB_DeviceState != DEVICE_STATE_Configured)
+ {
+ return;
+ }
+
+ // TODO: decide if we allow calls to raw_hid_send() in the middle
+ // of other endpoint usage.
+ uint8_t ep = Endpoint_GetCurrentEndpoint();
+
+ Endpoint_SelectEndpoint(RAW_IN_EPNUM);
+
+ // Check to see if the host is ready to accept another packet
+ if (Endpoint_IsINReady())
+ {
+ // Write data
+ Endpoint_Write_Stream_LE(data, RAW_EPSIZE, NULL);
+ // Finalize the stream transfer to send the last packet
+ Endpoint_ClearIN();
+ }
+
+ Endpoint_SelectEndpoint(ep);
+}
+
+__attribute__ ((weak))
+void raw_hid_receive( uint8_t *data, uint8_t length )
+{
+ // Users should #include "raw_hid.h" in their own code
+ // and implement this function there. Leave this as weak linkage
+ // so users can opt to not handle data coming in.
+}
+
+static void raw_hid_task(void)
+{
+ // Create a temporary buffer to hold the read in data from the host
+ uint8_t data[RAW_EPSIZE];
+ bool data_read = false;
+
+ // Device must be connected and configured for the task to run
+ if (USB_DeviceState != DEVICE_STATE_Configured)
+ return;
+
+ Endpoint_SelectEndpoint(RAW_OUT_EPNUM);
+
+ // Check to see if a packet has been sent from the host
+ if (Endpoint_IsOUTReceived())
+ {
+ // Check to see if the packet contains data
+ if (Endpoint_IsReadWriteAllowed())
+ {
+ /* Read data */
+ Endpoint_Read_Stream_LE(data, sizeof(data), NULL);
+ data_read = true;
+ }
+
+ // Finalize the stream transfer to receive the last packet
+ Endpoint_ClearOUT();
+
+ if ( data_read )
+ {
+ raw_hid_receive( data, sizeof(data) );
+ }
+ }
+}
+#endif
/*******************************************************************************
* Console
@@ -246,10 +376,14 @@ void EVENT_USB_Device_WakeUp()
#endif
}
+
+
#ifdef CONSOLE_ENABLE
static bool console_flush = false;
#define CONSOLE_FLUSH_SET(b) do { \
- uint8_t sreg = SREG; cli(); console_flush = b; SREG = sreg; \
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {\
+ console_flush = b; \
+ } \
} while (0)
// called every 1ms
@@ -263,6 +397,7 @@ void EVENT_USB_Device_StartOfFrame(void)
Console_Task();
console_flush = false;
}
+
#endif
/** Event handler for the USB_ConfigurationChanged event.
@@ -291,6 +426,14 @@ void EVENT_USB_Device_ConfigurationChanged(void)
EXTRAKEY_EPSIZE, ENDPOINT_BANK_SINGLE);
#endif
+#ifdef RAW_ENABLE
+ /* Setup Raw HID Report Endpoints */
+ ConfigSuccess &= ENDPOINT_CONFIG(RAW_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN,
+ RAW_EPSIZE, ENDPOINT_BANK_SINGLE);
+ ConfigSuccess &= ENDPOINT_CONFIG(RAW_OUT_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_OUT,
+ RAW_EPSIZE, ENDPOINT_BANK_SINGLE);
+#endif
+
#ifdef CONSOLE_ENABLE
/* Setup Console HID Report Endpoints */
ConfigSuccess &= ENDPOINT_CONFIG(CONSOLE_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN,
@@ -311,6 +454,12 @@ void EVENT_USB_Device_ConfigurationChanged(void)
ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_IN_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, ENDPOINT_BANK_SINGLE);
ConfigSuccess &= Endpoint_ConfigureEndpoint(MIDI_STREAM_OUT_EPADDR, EP_TYPE_BULK, MIDI_STREAM_EPSIZE, ENDPOINT_BANK_SINGLE);
#endif
+
+#ifdef VIRTSER_ENABLE
+ ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPADDR, EP_TYPE_INTERRUPT, CDC_NOTIFICATION_EPSIZE, ENDPOINT_BANK_SINGLE);
+ ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC_OUT_EPADDR, EP_TYPE_BULK, CDC_EPSIZE, ENDPOINT_BANK_SINGLE);
+ ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC_IN_EPADDR, EP_TYPE_BULK, CDC_EPSIZE, ENDPOINT_BANK_SINGLE);
+#endif
}
/*
@@ -432,19 +581,50 @@ void EVENT_USB_Device_ControlRequest(void)
break;
}
+
+#ifdef VIRTSER_ENABLE
+ CDC_Device_ProcessControlRequest(&cdc_device);
+#endif
}
/*******************************************************************************
* Host driver
+p
******************************************************************************/
static uint8_t keyboard_leds(void)
{
return keyboard_led_stats;
}
+#define SendToUSB 1
+#define SendToBT 2
+#define SendToBLE 4
+
+static inline uint8_t where_to_send(void) {
+#ifdef ADAFRUIT_BLE_ENABLE
+#if 0
+ if (adafruit_ble_is_connected()) {
+ // For testing, send to BLE as a priority
+ return SendToBLE;
+ }
+#endif
+
+ // This is the real policy
+ if (USB_DeviceState != DEVICE_STATE_Configured) {
+ if (adafruit_ble_is_connected()) {
+ return SendToBLE;
+ }
+ }
+#endif
+ return ((USB_DeviceState == DEVICE_STATE_Configured) ? SendToUSB : 0)
+#ifdef BLUETOOTH_ENABLE
+ || SendToBT
+#endif
+ ;
+}
+
static void send_keyboard(report_keyboard_t *report)
{
-
#ifdef BLUETOOTH_ENABLE
bluefruit_serial_send(0xFD);
for (uint8_t i = 0; i < KEYBOARD_EPSIZE; i++) {
@@ -453,13 +633,21 @@ static void send_keyboard(report_keyboard_t *report)
#endif
uint8_t timeout = 255;
+ uint8_t where = where_to_send();
- if (USB_DeviceState != DEVICE_STATE_Configured)
- return;
+#ifdef ADAFRUIT_BLE_ENABLE
+ if (where & SendToBLE) {
+ adafruit_ble_send_keys(report->mods, report->keys, sizeof(report->keys));
+ }
+#endif
+
+ if (!(where & SendToUSB)) {
+ return;
+ }
/* Select the Keyboard Report Endpoint */
#ifdef NKRO_ENABLE
- if (keyboard_protocol && keyboard_nkro) {
+ if (keyboard_protocol && keymap_config.nkro) {
/* Report protocol - NKRO */
Endpoint_SelectEndpoint(NKRO_IN_EPNUM);
@@ -508,8 +696,17 @@ static void send_mouse(report_mouse_t *report)
uint8_t timeout = 255;
- if (USB_DeviceState != DEVICE_STATE_Configured)
- return;
+ uint8_t where = where_to_send();
+
+#ifdef ADAFRUIT_BLE_ENABLE
+ if (where & SendToBLE) {
+ // FIXME: mouse buttons
+ adafruit_ble_send_mouse_move(report->x, report->y, report->v, report->h);
+ }
+#endif
+ if (!(where & SendToUSB)) {
+ return;
+ }
/* Select the Mouse Report Endpoint */
Endpoint_SelectEndpoint(MOUSE_IN_EPNUM);
@@ -567,9 +764,16 @@ static void send_consumer(uint16_t data)
#endif
uint8_t timeout = 255;
+ uint8_t where = where_to_send();
- if (USB_DeviceState != DEVICE_STATE_Configured)
- return;
+#ifdef ADAFRUIT_BLE_ENABLE
+ if (where & SendToBLE) {
+ adafruit_ble_send_consumer_key(data, 0);
+ }
+#endif
+ if (!(where & SendToUSB)) {
+ return;
+ }
report_extra_t r = {
.report_id = REPORT_ID_CONSUMER,
@@ -659,7 +863,7 @@ int8_t sendchar(uint8_t c)
******************************************************************************/
#ifdef MIDI_ENABLE
-void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byte1, uint8_t byte2) {
+static void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byte1, uint8_t byte2) {
MIDI_EventPacket_t event;
event.Data1 = byte0;
event.Data2 = byte1;
@@ -719,7 +923,7 @@ void usb_send_func(MidiDevice * device, uint16_t cnt, uint8_t byte0, uint8_t byt
USB_USBTask();
}
-void usb_get_midi(MidiDevice * device) {
+static void usb_get_midi(MidiDevice * device) {
MIDI_EventPacket_t event;
while (MIDI_Device_ReceiveEventPacket(&USB_MIDI_Interface, &event)) {
@@ -749,12 +953,12 @@ void usb_get_midi(MidiDevice * device) {
USB_USBTask();
}
-void midi_usb_init(MidiDevice * device){
+static void midi_usb_init(MidiDevice * device){
midi_device_init(device);
midi_device_set_send_func(device, usb_send_func);
midi_device_set_pre_input_process_func(device, usb_get_midi);
- SetupHardware();
+ // SetupHardware();
sei();
}
@@ -827,6 +1031,61 @@ void MIDI_Task(void)
#endif
+/*******************************************************************************
+ * VIRTUAL SERIAL
+ ******************************************************************************/
+
+#ifdef VIRTSER_ENABLE
+void virtser_init(void)
+{
+ cdc_device.State.ControlLineStates.DeviceToHost = CDC_CONTROL_LINE_IN_DSR ;
+ CDC_Device_SendControlLineStateChange(&cdc_device);
+}
+
+void virtser_recv(uint8_t c) __attribute__ ((weak));
+void virtser_recv(uint8_t c)
+{
+ // Ignore by default
+}
+
+void virtser_task(void)
+{
+ uint16_t count = CDC_Device_BytesReceived(&cdc_device);
+ uint8_t ch;
+ if (count)
+ {
+ ch = CDC_Device_ReceiveByte(&cdc_device);
+ virtser_recv(ch);
+ }
+}
+void virtser_send(const uint8_t byte)
+{
+ uint8_t timeout = 255;
+ uint8_t ep = Endpoint_GetCurrentEndpoint();
+
+ if (cdc_device.State.ControlLineStates.HostToDevice & CDC_CONTROL_LINE_OUT_DTR)
+ {
+ /* IN packet */
+ Endpoint_SelectEndpoint(cdc_device.Config.DataINEndpoint.Address);
+
+ if (!Endpoint_IsEnabled() || !Endpoint_IsConfigured()) {
+ Endpoint_SelectEndpoint(ep);
+ return;
+ }
+
+ while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
+
+ Endpoint_Write_8(byte);
+ CDC_Device_Flush(&cdc_device);
+
+ if (Endpoint_IsINReady()) {
+ Endpoint_ClearIN();
+ }
+
+ Endpoint_SelectEndpoint(ep);
+ }
+}
+#endif
/*******************************************************************************
* main
@@ -918,9 +1177,13 @@ int main(void)
sleep_led_init();
#endif
+#ifdef VIRTSER_ENABLE
+ virtser_init();
+#endif
+
print("Keyboard start.\n");
while (1) {
- #ifndef BLUETOOTH_ENABLE
+ #if !defined(BLUETOOTH_ENABLE) && !defined(ADAFRUIT_BLE_ENABLE)
while (USB_DeviceState == DEVICE_STATE_Suspended) {
print("[s]");
suspend_power_down();
@@ -930,15 +1193,34 @@ int main(void)
}
#endif
+ keyboard_task();
+
#ifdef MIDI_ENABLE
midi_device_process(&midi_device);
// MIDI_Task();
#endif
- keyboard_task();
+
+#if defined(RGBLIGHT_ANIMATIONS) & defined(RGBLIGHT_ENABLE)
+ rgblight_task();
+#endif
+
+#ifdef ADAFRUIT_BLE_ENABLE
+ adafruit_ble_task();
+#endif
+
+#ifdef VIRTSER_ENABLE
+ virtser_task();
+ CDC_Device_USBTask(&cdc_device);
+#endif
+
+#ifdef RAW_ENABLE
+ raw_hid_task();
+#endif
#if !defined(INTERRUPT_CONTROL_ENDPOINT)
USB_USBTask();
#endif
+
}
}
@@ -963,15 +1245,38 @@ void fallthrough_callback(MidiDevice * device,
#endif
}
+
void cc_callback(MidiDevice * device,
uint8_t chan, uint8_t num, uint8_t val) {
//sending it back on the next channel
- midi_send_cc(device, (chan + 1) % 16, num, val);
+ // midi_send_cc(device, (chan + 1) % 16, num, val);
}
-void sysex_callback(MidiDevice * device,
- uint16_t start, uint8_t length, uint8_t * data) {
- for (int i = 0; i < length; i++)
- midi_send_cc(device, 15, 0x7F & data[i], 0x7F & (start + i));
+uint8_t midi_buffer[MIDI_SYSEX_BUFFER] = {0};
+
+void sysex_callback(MidiDevice * device, uint16_t start, uint8_t length, uint8_t * data) {
+ #ifdef API_SYSEX_ENABLE
+ // SEND_STRING("\n");
+ // send_word(start);
+ // SEND_STRING(": ");
+ for (uint8_t place = 0; place < length; place++) {
+ // send_byte(*data);
+ midi_buffer[start + place] = *data;
+ if (*data == 0xF7) {
+ // SEND_STRING("\nRD: ");
+ // for (uint8_t i = 0; i < start + place + 1; i++){
+ // send_byte(midi_buffer[i]);
+ // SEND_STRING(" ");
+ // }
+ uint8_t * decoded = malloc(sizeof(uint8_t) * (sysex_decoded_length(start + place - 4)));
+ uint16_t decode_length = sysex_decode(decoded, midi_buffer + 4, start + place - 4);
+ process_api(decode_length, decoded);
+ }
+ // SEND_STRING(" ");
+ data++;
+ }
+ #endif
}
+
+
#endif
diff --git a/tmk_core/protocol/lufa/lufa.h b/tmk_core/protocol/lufa/lufa.h
index aad08d640..b11854101 100644
--- a/tmk_core/protocol/lufa/lufa.h
+++ b/tmk_core/protocol/lufa/lufa.h
@@ -68,8 +68,17 @@ typedef struct {
} __attribute__ ((packed)) report_extra_t;
#ifdef MIDI_ENABLE
-void MIDI_Task(void);
-MidiDevice midi_device;
+ void MIDI_Task(void);
+ MidiDevice midi_device;
+ #define MIDI_SYSEX_BUFFER 32
+#endif
+
+#ifdef API_ENABLE
+ #include "api.h"
+#endif
+
+#ifdef API_SYSEX_ENABLE
+ #include "api_sysex.h"
#endif
// #if LUFA_VERSION_INTEGER < 0x120730
diff --git a/tmk_core/protocol/lufa/ringbuffer.hpp b/tmk_core/protocol/lufa/ringbuffer.hpp
new file mode 100644
index 000000000..70a3c4881
--- /dev/null
+++ b/tmk_core/protocol/lufa/ringbuffer.hpp
@@ -0,0 +1,66 @@
+#pragma once
+// A simple ringbuffer holding Size elements of type T
+template <typename T, uint8_t Size>
+class RingBuffer {
+ protected:
+ T buf_[Size];
+ uint8_t head_{0}, tail_{0};
+ public:
+ inline uint8_t nextPosition(uint8_t position) {
+ return (position + 1) % Size;
+ }
+
+ inline uint8_t prevPosition(uint8_t position) {
+ if (position == 0) {
+ return Size - 1;
+ }
+ return position - 1;
+ }
+
+ inline bool enqueue(const T &item) {
+ static_assert(Size > 1, "RingBuffer size must be > 1");
+ uint8_t next = nextPosition(head_);
+ if (next == tail_) {
+ // Full
+ return false;
+ }
+
+ buf_[head_] = item;
+ head_ = next;
+ return true;
+ }
+
+ inline bool get(T &dest, bool commit = true) {
+ auto tail = tail_;
+ if (tail == head_) {
+ // No more data
+ return false;
+ }
+
+ dest = buf_[tail];
+ tail = nextPosition(tail);
+
+ if (commit) {
+ tail_ = tail;
+ }
+ return true;
+ }
+
+ inline bool empty() const { return head_ == tail_; }
+
+ inline uint8_t size() const {
+ int diff = head_ - tail_;
+ if (diff >= 0) {
+ return diff;
+ }
+ return Size + diff;
+ }
+
+ inline T& front() {
+ return buf_[tail_];
+ }
+
+ inline bool peek(T &item) {
+ return get(item, false);
+ }
+};
diff --git a/tmk_core/protocol/midi.mk b/tmk_core/protocol/midi.mk
index c85ae42ff..4855b23d3 100644
--- a/tmk_core/protocol/midi.mk
+++ b/tmk_core/protocol/midi.mk
@@ -4,6 +4,7 @@ SRC += midi.c \
midi_device.c \
bytequeue/bytequeue.c \
bytequeue/interrupt_setting.c \
+ sysex_tools.c \
$(LUFA_SRC_USBCLASS)
VPATH += $(TMK_PATH)/$(MIDI_DIR) \ No newline at end of file
diff --git a/tmk_core/protocol/midi/Config/LUFAConfig.h b/tmk_core/protocol/midi/Config/LUFAConfig.h
index fa9404498..a1d748267 100755
--- a/tmk_core/protocol/midi/Config/LUFAConfig.h
+++ b/tmk_core/protocol/midi/Config/LUFAConfig.h
@@ -1,93 +1,93 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2012.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
-
- Permission to use, copy, modify, distribute, and sell this
- software and its documentation for any purpose is hereby granted
- without fee, provided that the above copyright notice appear in
- all copies and that both that the copyright notice and this
- permission notice and warranty disclaimer appear in supporting
- documentation, and that the name of the author not be used in
- advertising or publicity pertaining to distribution of the
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-/** \file
- * \brief LUFA Library Configuration Header File
- *
- * This header file is used to configure LUFA's compile time options,
- * as an alternative to the compile time constants supplied through
- * a makefile.
- *
- * For information on what each token does, refer to the LUFA
- * manual section "Summary of Compile Tokens".
- */
-
-#ifndef _LUFA_CONFIG_H_
-#define _LUFA_CONFIG_H_
-
- #if (ARCH == ARCH_AVR8)
-
- /* Non-USB Related Configuration Tokens: */
-// #define DISABLE_TERMINAL_CODES
-
- /* USB Class Driver Related Tokens: */
-// #define HID_HOST_BOOT_PROTOCOL_ONLY
-// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here}
-// #define HID_USAGE_STACK_DEPTH {Insert Value Here}
-// #define HID_MAX_COLLECTIONS {Insert Value Here}
-// #define HID_MAX_REPORTITEMS {Insert Value Here}
-// #define HID_MAX_REPORT_IDS {Insert Value Here}
-// #define NO_CLASS_DRIVER_AUTOFLUSH
-
- /* General USB Driver Related Tokens: */
-// #define ORDERED_EP_CONFIG
- #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)
- #define USB_DEVICE_ONLY
-// #define USB_HOST_ONLY
-// #define USB_STREAM_TIMEOUT_MS {Insert Value Here}
-// #define NO_LIMITED_CONTROLLER_CONNECT
-// #define NO_SOF_EVENTS
-
- /* USB Device Mode Driver Related Tokens: */
-// #define USE_RAM_DESCRIPTORS
- #define USE_FLASH_DESCRIPTORS
-// #define USE_EEPROM_DESCRIPTORS
-// #define NO_INTERNAL_SERIAL
- #define FIXED_CONTROL_ENDPOINT_SIZE 8
-// #define DEVICE_STATE_AS_GPIOR {Insert Value Here}
- #define FIXED_NUM_CONFIGURATIONS 1
-// #define CONTROL_ONLY_DEVICE
-// #define INTERRUPT_CONTROL_ENDPOINT
-// #define NO_DEVICE_REMOTE_WAKEUP
-// #define NO_DEVICE_SELF_POWER
-
- /* USB Host Mode Driver Related Tokens: */
-// #define HOST_STATE_AS_GPIOR {Insert Value Here}
-// #define USB_HOST_TIMEOUT_MS {Insert Value Here}
-// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here}
-// #define NO_AUTO_VBUS_MANAGEMENT
-// #define INVERTED_VBUS_ENABLE_LINE
-
- #else
-
- #error Unsupported architecture for this LUFA configuration file.
-
- #endif
-#endif
+/*
+ LUFA Library
+ Copyright (C) Dean Camera, 2012.
+
+ dean [at] fourwalledcubicle [dot] com
+ www.lufa-lib.org
+*/
+
+/*
+ Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com)
+
+ Permission to use, copy, modify, distribute, and sell this
+ software and its documentation for any purpose is hereby granted
+ without fee, provided that the above copyright notice appear in
+ all copies and that both that the copyright notice and this
+ permission notice and warranty disclaimer appear in supporting
+ documentation, and that the name of the author not be used in
+ advertising or publicity pertaining to distribution of the
+ software without specific, written prior permission.
+
+ The author disclaim all warranties with regard to this
+ software, including all implied warranties of merchantability
+ and fitness. In no event shall the author be liable for any
+ special, indirect or consequential damages or any damages
+ whatsoever resulting from loss of use, data or profits, whether
+ in an action of contract, negligence or other tortious action,
+ arising out of or in connection with the use or performance of
+ this software.
+*/
+
+/** \file
+ * \brief LUFA Library Configuration Header File
+ *
+ * This header file is used to configure LUFA's compile time options,
+ * as an alternative to the compile time constants supplied through
+ * a makefile.
+ *
+ * For information on what each token does, refer to the LUFA
+ * manual section "Summary of Compile Tokens".
+ */
+
+#ifndef _LUFA_CONFIG_H_
+#define _LUFA_CONFIG_H_
+
+ #if (ARCH == ARCH_AVR8)
+
+ /* Non-USB Related Configuration Tokens: */
+// #define DISABLE_TERMINAL_CODES
+
+ /* USB Class Driver Related Tokens: */
+// #define HID_HOST_BOOT_PROTOCOL_ONLY
+// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here}
+// #define HID_USAGE_STACK_DEPTH {Insert Value Here}
+// #define HID_MAX_COLLECTIONS {Insert Value Here}
+// #define HID_MAX_REPORTITEMS {Insert Value Here}
+// #define HID_MAX_REPORT_IDS {Insert Value Here}
+// #define NO_CLASS_DRIVER_AUTOFLUSH
+
+ /* General USB Driver Related Tokens: */
+// #define ORDERED_EP_CONFIG
+ #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)
+ #define USB_DEVICE_ONLY
+// #define USB_HOST_ONLY
+// #define USB_STREAM_TIMEOUT_MS {Insert Value Here}
+// #define NO_LIMITED_CONTROLLER_CONNECT
+// #define NO_SOF_EVENTS
+
+ /* USB Device Mode Driver Related Tokens: */
+// #define USE_RAM_DESCRIPTORS
+ #define USE_FLASH_DESCRIPTORS
+// #define USE_EEPROM_DESCRIPTORS
+// #define NO_INTERNAL_SERIAL
+ #define FIXED_CONTROL_ENDPOINT_SIZE 8
+// #define DEVICE_STATE_AS_GPIOR {Insert Value Here}
+ #define FIXED_NUM_CONFIGURATIONS 1
+// #define CONTROL_ONLY_DEVICE
+// #define INTERRUPT_CONTROL_ENDPOINT
+// #define NO_DEVICE_REMOTE_WAKEUP
+// #define NO_DEVICE_SELF_POWER
+
+ /* USB Host Mode Driver Related Tokens: */
+// #define HOST_STATE_AS_GPIOR {Insert Value Here}
+// #define USB_HOST_TIMEOUT_MS {Insert Value Here}
+// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here}
+// #define NO_AUTO_VBUS_MANAGEMENT
+// #define INVERTED_VBUS_ENABLE_LINE
+
+ #else
+
+ #error Unsupported architecture for this LUFA configuration file.
+
+ #endif
+#endif
diff --git a/tmk_core/protocol/pjrc/usb.c b/tmk_core/protocol/pjrc/usb.c
index 1e6ba8719..09efbe076 100644
--- a/tmk_core/protocol/pjrc/usb.c
+++ b/tmk_core/protocol/pjrc/usb.c
@@ -1,17 +1,17 @@
/* USB Keyboard Plus Debug Channel Example for Teensy USB Development Board
* http://www.pjrc.com/teensy/usb_keyboard.html
* Copyright (c) 2009 PJRC.COM, LLC
- *
+ *
* 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
@@ -41,6 +41,12 @@
#include "action.h"
#include "action_util.h"
+#ifdef NKRO_ENABLE
+ #include "keycode_config.h"
+
+ extern keymap_config_t keymap_config;
+#endif
+
/**************************************************************************
*
@@ -694,7 +700,7 @@ ISR(USB_GEN_vect)
}
/* TODO: should keep IDLE rate on each keyboard interface */
#ifdef NKRO_ENABLE
- if (!keyboard_nkro && keyboard_idle && (++div4 & 3) == 0) {
+ if (!keymap_config.nkro && keyboard_idle && (++div4 & 3) == 0) {
#else
if (keyboard_idle && (++div4 & 3) == 0) {
#endif
@@ -881,7 +887,7 @@ ISR(USB_COM_vect)
#endif
if (bmRequestType == 0x00 && wValue == DEVICE_REMOTE_WAKEUP) {
if (bRequest == SET_FEATURE) {
- remote_wakeup = true;
+ remote_wakeup = true;
} else {
remote_wakeup = false;
}
@@ -932,7 +938,7 @@ ISR(USB_COM_vect)
if (bRequest == HID_SET_PROTOCOL) {
keyboard_protocol = wValue;
#ifdef NKRO_ENABLE
- keyboard_nkro = !!keyboard_protocol;
+ keymap_config.nkro = !!keyboard_protocol;
#endif
clear_keyboard();
//usb_wait_in_ready();
diff --git a/tmk_core/protocol/pjrc/usb_keyboard.c b/tmk_core/protocol/pjrc/usb_keyboard.c
index 4b87b5d7b..05f479734 100644
--- a/tmk_core/protocol/pjrc/usb_keyboard.c
+++ b/tmk_core/protocol/pjrc/usb_keyboard.c
@@ -30,6 +30,12 @@
#include "util.h"
#include "host.h"
+#ifdef NKRO_ENABLE
+ #include "keycode_config.h"
+
+ extern keymap_config_t keymap_config;
+#endif
+
// protocol setting from the host. We use exactly the same report
// either way, so this variable only stores the setting since we
@@ -56,7 +62,7 @@ int8_t usb_keyboard_send_report(report_keyboard_t *report)
int8_t result = 0;
#ifdef NKRO_ENABLE
- if (keyboard_nkro)
+ if (keymap_config.nkro)
result = send_report(report, KBD2_ENDPOINT, 0, KBD2_SIZE);
else
#endif
diff --git a/tmk_core/protocol/ps2_mouse.c b/tmk_core/protocol/ps2_mouse.c
index c3e8b3c1c..d9ccbecb4 100644
--- a/tmk_core/protocol/ps2_mouse.c
+++ b/tmk_core/protocol/ps2_mouse.c
@@ -18,60 +18,59 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <stdbool.h>
#include<avr/io.h>
#include<util/delay.h>
-#include "ps2.h"
#include "ps2_mouse.h"
-#include "report.h"
#include "host.h"
#include "timer.h"
#include "print.h"
+#include "report.h"
#include "debug.h"
+#include "ps2.h"
+/* ============================= MACROS ============================ */
static report_mouse_t mouse_report = {};
+static inline void ps2_mouse_print_report(report_mouse_t *mouse_report);
+static inline void ps2_mouse_convert_report_to_hid(report_mouse_t *mouse_report);
+static inline void ps2_mouse_clear_report(report_mouse_t *mouse_report);
+static inline void ps2_mouse_enable_scrolling(void);
+static inline void ps2_mouse_scroll_button_task(report_mouse_t *mouse_report);
-static void print_usb_data(void);
-
+/* ============================= IMPLEMENTATION ============================ */
/* supports only 3 button mouse at this time */
-uint8_t ps2_mouse_init(void) {
- uint8_t rcv;
-
+void ps2_mouse_init(void) {
ps2_host_init();
- _delay_ms(1000); // wait for powering up
+ _delay_ms(PS2_MOUSE_INIT_DELAY); // wait for powering up
- // send Reset
- rcv = ps2_host_send(0xFF);
- print("ps2_mouse_init: send Reset: ");
- phex(rcv); phex(ps2_error); print("\n");
+ PS2_MOUSE_SEND(PS2_MOUSE_RESET, "ps2_mouse_init: sending reset");
- // read completion code of BAT
- rcv = ps2_host_recv_response();
- print("ps2_mouse_init: read BAT: ");
- phex(rcv); phex(ps2_error); print("\n");
+ PS2_MOUSE_RECEIVE("ps2_mouse_init: read BAT");
+ PS2_MOUSE_RECEIVE("ps2_mouse_init: read DevID");
- // read Device ID
- rcv = ps2_host_recv_response();
- print("ps2_mouse_init: read DevID: ");
- phex(rcv); phex(ps2_error); print("\n");
+#ifdef PS2_MOUSE_USE_REMOTE_MODE
+ ps2_mouse_set_remote_mode();
+#else
+ ps2_mouse_enable_data_reporting();
+#endif
+
+#ifdef PS2_MOUSE_ENABLE_SCROLLING
+ ps2_mouse_enable_scrolling();
+#endif
- // send Set Remote mode
- rcv = ps2_host_send(0xF0);
- print("ps2_mouse_init: send 0xF0: ");
- phex(rcv); phex(ps2_error); print("\n");
+#ifdef PS2_MOUSE_USE_2_1_SCALING
+ ps2_mouse_set_scaling_2_1();
+#endif
- return 0;
+ ps2_mouse_init_user();
}
-#define X_IS_NEG (mouse_report.buttons & (1<<PS2_MOUSE_X_SIGN))
-#define Y_IS_NEG (mouse_report.buttons & (1<<PS2_MOUSE_Y_SIGN))
-#define X_IS_OVF (mouse_report.buttons & (1<<PS2_MOUSE_X_OVFLW))
-#define Y_IS_OVF (mouse_report.buttons & (1<<PS2_MOUSE_Y_OVFLW))
-void ps2_mouse_task(void)
-{
- enum { SCROLL_NONE, SCROLL_BTN, SCROLL_SENT };
- static uint8_t scroll_state = SCROLL_NONE;
+__attribute__((weak))
+void ps2_mouse_init_user(void) {
+}
+
+void ps2_mouse_task(void) {
static uint8_t buttons_prev = 0;
/* receives packet from mouse */
@@ -79,142 +78,169 @@ void ps2_mouse_task(void)
rcv = ps2_host_send(PS2_MOUSE_READ_DATA);
if (rcv == PS2_ACK) {
mouse_report.buttons = ps2_host_recv_response();
- mouse_report.x = ps2_host_recv_response();
- mouse_report.y = ps2_host_recv_response();
+ mouse_report.x = ps2_host_recv_response() * PS2_MOUSE_X_MULTIPLIER;
+ mouse_report.y = ps2_host_recv_response() * PS2_MOUSE_Y_MULTIPLIER;
+#ifdef PS2_MOUSE_ENABLE_SCROLLING
+ mouse_report.v = -(ps2_host_recv_response() & PS2_MOUSE_SCROLL_MASK) * PS2_MOUSE_V_MULTIPLIER;
+#endif
} else {
if (debug_mouse) print("ps2_mouse: fail to get mouse packet\n");
return;
}
- xprintf("%ud ", timer_read());
- print("ps2_mouse raw: [");
- phex(mouse_report.buttons); print("|");
- print_hex8((uint8_t)mouse_report.x); print(" ");
- print_hex8((uint8_t)mouse_report.y); print("]\n");
/* if mouse moves or buttons state changes */
- if (mouse_report.x || mouse_report.y ||
+ if (mouse_report.x || mouse_report.y || mouse_report.v ||
((mouse_report.buttons ^ buttons_prev) & PS2_MOUSE_BTN_MASK)) {
-
-#ifdef PS2_MOUSE_DEBUG
- print("ps2_mouse raw: [");
- phex(mouse_report.buttons); print("|");
- print_hex8((uint8_t)mouse_report.x); print(" ");
- print_hex8((uint8_t)mouse_report.y); print("]\n");
+#ifdef PS2_MOUSE_DEBUG_RAW
+ // Used to debug raw ps2 bytes from mouse
+ ps2_mouse_print_report(&mouse_report);
#endif
-
buttons_prev = mouse_report.buttons;
+ ps2_mouse_convert_report_to_hid(&mouse_report);
+#if PS2_MOUSE_SCROLL_BTN_MASK
+ ps2_mouse_scroll_button_task(&mouse_report);
+#endif
+#ifdef PS2_MOUSE_DEBUG_HID
+ // Used to debug the bytes sent to the host
+ ps2_mouse_print_report(&mouse_report);
+#endif
+ host_mouse_send(&mouse_report);
+ }
+
+ ps2_mouse_clear_report(&mouse_report);
+}
- // PS/2 mouse data is '9-bit integer'(-256 to 255) which is comprised of sign-bit and 8-bit value.
- // bit: 8 7 ... 0
- // sign \8-bit/
- //
- // Meanwhile USB HID mouse indicates 8bit data(-127 to 127), note that -128 is not used.
- //
- // This converts PS/2 data into HID value. Use only -127-127 out of PS/2 9-bit.
- mouse_report.x = X_IS_NEG ?
- ((!X_IS_OVF && -127 <= mouse_report.x && mouse_report.x <= -1) ? mouse_report.x : -127) :
- ((!X_IS_OVF && 0 <= mouse_report.x && mouse_report.x <= 127) ? mouse_report.x : 127);
- mouse_report.y = Y_IS_NEG ?
- ((!Y_IS_OVF && -127 <= mouse_report.y && mouse_report.y <= -1) ? mouse_report.y : -127) :
- ((!Y_IS_OVF && 0 <= mouse_report.y && mouse_report.y <= 127) ? mouse_report.y : 127);
+void ps2_mouse_disable_data_reporting(void) {
+ PS2_MOUSE_SEND(PS2_MOUSE_DISABLE_DATA_REPORTING, "ps2 mouse disable data reporting");
+}
- // remove sign and overflow flags
- mouse_report.buttons &= PS2_MOUSE_BTN_MASK;
+void ps2_mouse_enable_data_reporting(void) {
+ PS2_MOUSE_SEND(PS2_MOUSE_ENABLE_DATA_REPORTING, "ps2 mouse enable data reporting");
+}
- // invert coordinate of y to conform to USB HID mouse
- mouse_report.y = -mouse_report.y;
+void ps2_mouse_set_remote_mode(void) {
+ PS2_MOUSE_SEND_SAFE(PS2_MOUSE_SET_REMOTE_MODE, "ps2 mouse set remote mode");
+ ps2_mouse_mode = PS2_MOUSE_REMOTE_MODE;
+}
+void ps2_mouse_set_stream_mode(void) {
+ PS2_MOUSE_SEND_SAFE(PS2_MOUSE_SET_STREAM_MODE, "ps2 mouse set stream mode");
+ ps2_mouse_mode = PS2_MOUSE_STREAM_MODE;
+}
-#if PS2_MOUSE_SCROLL_BTN_MASK
- static uint16_t scroll_button_time = 0;
- if ((mouse_report.buttons & (PS2_MOUSE_SCROLL_BTN_MASK)) == (PS2_MOUSE_SCROLL_BTN_MASK)) {
- if (scroll_state == SCROLL_NONE) {
- scroll_button_time = timer_read();
- scroll_state = SCROLL_BTN;
- }
-
- // doesn't send Scroll Button
- //mouse_report.buttons &= ~(PS2_MOUSE_SCROLL_BTN_MASK);
-
- if (mouse_report.x || mouse_report.y) {
- scroll_state = SCROLL_SENT;
-
- mouse_report.v = -mouse_report.y/(PS2_MOUSE_SCROLL_DIVISOR_V);
- mouse_report.h = mouse_report.x/(PS2_MOUSE_SCROLL_DIVISOR_H);
- mouse_report.x = 0;
- mouse_report.y = 0;
- //host_mouse_send(&mouse_report);
- }
+void ps2_mouse_set_scaling_2_1(void) {
+ PS2_MOUSE_SEND_SAFE(PS2_MOUSE_SET_SCALING_2_1, "ps2 mouse set scaling 2:1");
+}
+
+void ps2_mouse_set_scaling_1_1(void) {
+ PS2_MOUSE_SEND_SAFE(PS2_MOUSE_SET_SCALING_1_1, "ps2 mouse set scaling 1:1");
+}
+
+void ps2_mouse_set_resolution(ps2_mouse_resolution_t resolution) {
+ PS2_MOUSE_SET_SAFE(PS2_MOUSE_SET_RESOLUTION, resolution, "ps2 mouse set resolution");
+}
+
+void ps2_mouse_set_sample_rate(ps2_mouse_sample_rate_t sample_rate) {
+ PS2_MOUSE_SET_SAFE(PS2_MOUSE_SET_SAMPLE_RATE, sample_rate, "ps2 mouse set sample rate");
+}
+
+/* ============================= HELPERS ============================ */
+
+#define X_IS_NEG (mouse_report->buttons & (1<<PS2_MOUSE_X_SIGN))
+#define Y_IS_NEG (mouse_report->buttons & (1<<PS2_MOUSE_Y_SIGN))
+#define X_IS_OVF (mouse_report->buttons & (1<<PS2_MOUSE_X_OVFLW))
+#define Y_IS_OVF (mouse_report->buttons & (1<<PS2_MOUSE_Y_OVFLW))
+static inline void ps2_mouse_convert_report_to_hid(report_mouse_t *mouse_report) {
+ // PS/2 mouse data is '9-bit integer'(-256 to 255) which is comprised of sign-bit and 8-bit value.
+ // bit: 8 7 ... 0
+ // sign \8-bit/
+ //
+ // Meanwhile USB HID mouse indicates 8bit data(-127 to 127), note that -128 is not used.
+ //
+ // This converts PS/2 data into HID value. Use only -127-127 out of PS/2 9-bit.
+ mouse_report->x = X_IS_NEG ?
+ ((!X_IS_OVF && -127 <= mouse_report->x && mouse_report->x <= -1) ? mouse_report->x : -127) :
+ ((!X_IS_OVF && 0 <= mouse_report->x && mouse_report->x <= 127) ? mouse_report->x : 127);
+ mouse_report->y = Y_IS_NEG ?
+ ((!Y_IS_OVF && -127 <= mouse_report->y && mouse_report->y <= -1) ? mouse_report->y : -127) :
+ ((!Y_IS_OVF && 0 <= mouse_report->y && mouse_report->y <= 127) ? mouse_report->y : 127);
+
+ // remove sign and overflow flags
+ mouse_report->buttons &= PS2_MOUSE_BTN_MASK;
+
+ // invert coordinate of y to conform to USB HID mouse
+ mouse_report->y = -mouse_report->y;
+}
+
+static inline void ps2_mouse_clear_report(report_mouse_t *mouse_report) {
+ mouse_report->x = 0;
+ mouse_report->y = 0;
+ mouse_report->v = 0;
+ mouse_report->h = 0;
+ mouse_report->buttons = 0;
+}
+
+static inline void ps2_mouse_print_report(report_mouse_t *mouse_report) {
+ if (!debug_mouse) return;
+ print("ps2_mouse: [");
+ phex(mouse_report->buttons); print("|");
+ print_hex8((uint8_t)mouse_report->x); print(" ");
+ print_hex8((uint8_t)mouse_report->y); print(" ");
+ print_hex8((uint8_t)mouse_report->v); print(" ");
+ print_hex8((uint8_t)mouse_report->h); print("]\n");
+}
+
+static inline void ps2_mouse_enable_scrolling(void) {
+ PS2_MOUSE_SEND(PS2_MOUSE_SET_SAMPLE_RATE, "Initiaing scroll wheel enable: Set sample rate");
+ PS2_MOUSE_SEND(200, "200");
+ PS2_MOUSE_SEND(PS2_MOUSE_SET_SAMPLE_RATE, "Set sample rate");
+ PS2_MOUSE_SEND(100, "100");
+ PS2_MOUSE_SEND(PS2_MOUSE_SET_SAMPLE_RATE, "Set sample rate");
+ PS2_MOUSE_SEND(80, "80");
+ PS2_MOUSE_SEND(PS2_MOUSE_GET_DEVICE_ID, "Finished enabling scroll wheel");
+ _delay_ms(20);
+}
+
+#define PRESS_SCROLL_BUTTONS mouse_report->buttons |= (PS2_MOUSE_SCROLL_BTN_MASK)
+#define RELEASE_SCROLL_BUTTONS mouse_report->buttons &= ~(PS2_MOUSE_SCROLL_BTN_MASK)
+static inline void ps2_mouse_scroll_button_task(report_mouse_t *mouse_report) {
+ static enum {
+ SCROLL_NONE,
+ SCROLL_BTN,
+ SCROLL_SENT,
+ } scroll_state = SCROLL_NONE;
+ static uint16_t scroll_button_time = 0;
+
+ if (PS2_MOUSE_SCROLL_BTN_MASK == (mouse_report->buttons & (PS2_MOUSE_SCROLL_BTN_MASK))) {
+ // All scroll buttons are pressed
+
+ if (scroll_state == SCROLL_NONE) {
+ scroll_button_time = timer_read();
+ scroll_state = SCROLL_BTN;
}
- else if ((mouse_report.buttons & (PS2_MOUSE_SCROLL_BTN_MASK)) == 0) {
+
+ // If the mouse has moved, update the report to scroll instead of move the mouse
+ if (mouse_report->x || mouse_report->y) {
+ scroll_state = SCROLL_SENT;
+ mouse_report->v = -mouse_report->y/(PS2_MOUSE_SCROLL_DIVISOR_V);
+ mouse_report->h = mouse_report->x/(PS2_MOUSE_SCROLL_DIVISOR_H);
+ mouse_report->x = 0;
+ mouse_report->y = 0;
+ }
+ } else if (0 == (PS2_MOUSE_SCROLL_BTN_MASK & mouse_report->buttons)) {
+ // None of the scroll buttons are pressed
+
#if PS2_MOUSE_SCROLL_BTN_SEND
- if (scroll_state == SCROLL_BTN &&
- TIMER_DIFF_16(timer_read(), scroll_button_time) < PS2_MOUSE_SCROLL_BTN_SEND) {
- // send Scroll Button(down and up at once) when not scrolled
- mouse_report.buttons |= (PS2_MOUSE_SCROLL_BTN_MASK);
- host_mouse_send(&mouse_report);
- _delay_ms(100);
- mouse_report.buttons &= ~(PS2_MOUSE_SCROLL_BTN_MASK);
- }
-#endif
- scroll_state = SCROLL_NONE;
+ if (scroll_state == SCROLL_BTN
+ && timer_elapsed(scroll_button_time) < PS2_MOUSE_SCROLL_BTN_SEND) {
+ PRESS_SCROLL_BUTTONS;
+ host_mouse_send(mouse_report);
+ _delay_ms(100);
+ RELEASE_SCROLL_BUTTONS;
}
- // doesn't send Scroll Button
- mouse_report.buttons &= ~(PS2_MOUSE_SCROLL_BTN_MASK);
#endif
-
-
- host_mouse_send(&mouse_report);
- print_usb_data();
+ scroll_state = SCROLL_NONE;
}
- // clear report
- mouse_report.x = 0;
- mouse_report.y = 0;
- mouse_report.v = 0;
- mouse_report.h = 0;
- mouse_report.buttons = 0;
-}
-static void print_usb_data(void)
-{
- if (!debug_mouse) return;
- print("ps2_mouse usb: [");
- phex(mouse_report.buttons); print("|");
- print_hex8((uint8_t)mouse_report.x); print(" ");
- print_hex8((uint8_t)mouse_report.y); print(" ");
- print_hex8((uint8_t)mouse_report.v); print(" ");
- print_hex8((uint8_t)mouse_report.h); print("]\n");
-}
-
-
-/* PS/2 Mouse Synopsis
- * http://www.computer-engineering.org/ps2mouse/
- *
- * Command:
- * 0xFF: Reset
- * 0xF6: Set Defaults Sampling; rate=100, resolution=4cnt/mm, scaling=1:1, reporting=disabled
- * 0xF5: Disable Data Reporting
- * 0xF4: Enable Data Reporting
- * 0xF3: Set Sample Rate
- * 0xF2: Get Device ID
- * 0xF0: Set Remote Mode
- * 0xEB: Read Data
- * 0xEA: Set Stream Mode
- * 0xE9: Status Request
- * 0xE8: Set Resolution
- * 0xE7: Set Scaling 2:1
- * 0xE6: Set Scaling 1:1
- *
- * Mode:
- * Stream Mode: devices sends the data when it changs its state
- * Remote Mode: host polls the data periodically
- *
- * This code uses Remote Mode and polls the data with Read Data(0xEB).
- *
- * Data format:
- * byte|7 6 5 4 3 2 1 0
- * ----+--------------------------------------------------------------
- * 0|Yovflw Xovflw Ysign Xsign 1 Middle Right Left
- * 1| X movement
- * 2| Y movement
- */
+ RELEASE_SCROLL_BUTTONS;
+}
diff --git a/tmk_core/protocol/ps2_mouse.h b/tmk_core/protocol/ps2_mouse.h
index 27d9790d4..3c93a4634 100644
--- a/tmk_core/protocol/ps2_mouse.h
+++ b/tmk_core/protocol/ps2_mouse.h
@@ -19,16 +19,61 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PS2_MOUSE_H
#include <stdbool.h>
+#include "debug.h"
-#define PS2_MOUSE_READ_DATA 0xEB
+#define PS2_MOUSE_SEND(command, message) \
+do { \
+ uint8_t rcv = ps2_host_send(command); \
+ if (debug_mouse) { \
+ print((message)); \
+ xprintf(" command: %X, result: %X, error: %X \n", command, rcv, ps2_error); \
+ } \
+} while(0)
+
+#define PS2_MOUSE_SEND_SAFE(command, message) \
+do { \
+ if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \
+ ps2_mouse_disable_data_reporting(); \
+ } \
+ PS2_MOUSE_SEND(command, message); \
+ if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \
+ ps2_mouse_enable_data_reporting(); \
+ } \
+} while(0)
+
+#define PS2_MOUSE_SET_SAFE(command, value, message) \
+do { \
+ if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \
+ ps2_mouse_disable_data_reporting(); \
+ } \
+ PS2_MOUSE_SEND(command, message); \
+ PS2_MOUSE_SEND(value, "Sending value"); \
+ if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \
+ ps2_mouse_enable_data_reporting(); \
+ } \
+} while(0)
+
+#define PS2_MOUSE_RECEIVE(message) \
+do { \
+ uint8_t rcv = ps2_host_recv_response(); \
+ if (debug_mouse) { \
+ print((message)); \
+ xprintf(" result: %X, error: %X \n", rcv, ps2_error); \
+ } \
+} while(0)
+
+static enum ps2_mouse_mode_e {
+ PS2_MOUSE_STREAM_MODE,
+ PS2_MOUSE_REMOTE_MODE,
+} ps2_mouse_mode = PS2_MOUSE_STREAM_MODE;
/*
* Data format:
* byte|7 6 5 4 3 2 1 0
- * ----+--------------------------------------------------------------
- * 0|Yovflw Xovflw Ysign Xsign 1 Middle Right Left
- * 1| X movement(0-255)
- * 2| Y movement(0-255)
+ * ----+----------------------------------------------------------------
+ * 0|[Yovflw][Xovflw][Ysign ][Xsign ][ 1 ][Middle][Right ][Left ]
+ * 1|[ X movement(0-255) ]
+ * 2|[ Y movement(0-255) ]
*/
#define PS2_MOUSE_BTN_MASK 0x07
#define PS2_MOUSE_BTN_LEFT 0
@@ -39,10 +84,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PS2_MOUSE_X_OVFLW 6
#define PS2_MOUSE_Y_OVFLW 7
-
-/*
- * Scroll by mouse move with pressing button
- */
/* mouse button to start scrolling; set 0 to disable scroll */
#ifndef PS2_MOUSE_SCROLL_BTN_MASK
#define PS2_MOUSE_SCROLL_BTN_MASK (1<<PS2_MOUSE_BTN_MIDDLE)
@@ -58,9 +99,79 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef PS2_MOUSE_SCROLL_DIVISOR_H
#define PS2_MOUSE_SCROLL_DIVISOR_H 2
#endif
+/* multiply reported mouse values by these */
+#ifndef PS2_MOUSE_X_MULTIPLIER
+#define PS2_MOUSE_X_MULTIPLIER 1
+#endif
+#ifndef PS2_MOUSE_Y_MULTIPLIER
+#define PS2_MOUSE_Y_MULTIPLIER 1
+#endif
+#ifndef PS2_MOUSE_V_MULTIPLIER
+#define PS2_MOUSE_V_MULTIPLIER 1
+#endif
+/* For some mice this will need to be 0x0F */
+#ifndef PS2_MOUSE_SCROLL_MASK
+#define PS2_MOUSE_SCROLL_MASK 0xFF
+#endif
+#ifndef PS2_MOUSE_INIT_DELAY
+#define PS2_MOUSE_INIT_DELAY 1000
+#endif
+enum ps2_mouse_command_e {
+ PS2_MOUSE_RESET = 0xFF,
+ PS2_MOUSE_RESEND = 0xFE,
+ PS2_MOSUE_SET_DEFAULTS = 0xF6,
+ PS2_MOUSE_DISABLE_DATA_REPORTING = 0xF5,
+ PS2_MOUSE_ENABLE_DATA_REPORTING = 0xF4,
+ PS2_MOUSE_SET_SAMPLE_RATE = 0xF3,
+ PS2_MOUSE_GET_DEVICE_ID = 0xF2,
+ PS2_MOUSE_SET_REMOTE_MODE = 0xF0,
+ PS2_MOUSE_SET_WRAP_MODE = 0xEC,
+ PS2_MOUSE_READ_DATA = 0xEB,
+ PS2_MOUSE_SET_STREAM_MODE = 0xEA,
+ PS2_MOUSE_STATUS_REQUEST = 0xE9,
+ PS2_MOUSE_SET_RESOLUTION = 0xE8,
+ PS2_MOUSE_SET_SCALING_2_1 = 0xE7,
+ PS2_MOUSE_SET_SCALING_1_1 = 0xE6,
+};
+
+typedef enum ps2_mouse_resolution_e {
+ PS2_MOUSE_1_COUNT_MM,
+ PS2_MOUSE_2_COUNT_MM,
+ PS2_MOUSE_4_COUNT_MM,
+ PS2_MOUSE_8_COUNT_MM,
+} ps2_mouse_resolution_t;
+
+typedef enum ps2_mouse_sample_rate_e {
+ PS2_MOUSE_10_SAMPLES_SEC = 10,
+ PS2_MOUSE_20_SAMPLES_SEC = 20,
+ PS2_MOUSE_40_SAMPLES_SEC = 40,
+ PS2_MOUSE_60_SAMPLES_SEC = 60,
+ PS2_MOUSE_80_SAMPLES_SEC = 80,
+ PS2_MOUSE_100_SAMPLES_SEC = 100,
+ PS2_MOUSE_200_SAMPLES_SEC = 200,
+} ps2_mouse_sample_rate_t;
+
+void ps2_mouse_init(void);
+
+void ps2_mouse_init_user(void);
-uint8_t ps2_mouse_init(void);
void ps2_mouse_task(void);
+void ps2_mouse_disable_data_reporting(void);
+
+void ps2_mouse_enable_data_reporting(void);
+
+void ps2_mouse_set_remote_mode(void);
+
+void ps2_mouse_set_stream_mode(void);
+
+void ps2_mouse_set_scaling_2_1(void);
+
+void ps2_mouse_set_scaling_1_1(void);
+
+void ps2_mouse_set_resolution(ps2_mouse_resolution_t resolution);
+
+void ps2_mouse_set_sample_rate(ps2_mouse_sample_rate_t sample_rate);
+
#endif
diff --git a/tmk_core/readme.md b/tmk_core/readme.md
index f460d0ed4..5f135617c 100644
--- a/tmk_core/readme.md
+++ b/tmk_core/readme.md
@@ -23,7 +23,7 @@ These features can be used in your keyboard.
* Mouse key - Mouse control with keyboard
* System Control Key - Power Down, Sleep, Wake Up and USB Remote Wake up
* Media Control Key - Volume Down/Up, Mute, Next/Prev track, Play, Stop and etc
-* USB NKRO - 120 keys(+ 8 modifiers) simultaneously
+* USB NKRO - 248 keys(+ 8 modifiers) simultaneously
* PS/2 mouse support - PS/2 mouse(TrackPoint) as composite device
* Keyboard protocols - PS/2, ADB, M0110, Sun and other old keyboard protocols
* User Function - Customizable function of key with writing code
diff --git a/tmk_core/ring_buffer.h b/tmk_core/ring_buffer.h
index 7bdebbcf3..005d1be61 100644
--- a/tmk_core/ring_buffer.h
+++ b/tmk_core/ring_buffer.h
@@ -4,13 +4,13 @@
* Ring buffer to store scan codes from keyboard
*------------------------------------------------------------------*/
#define RBUF_SIZE 32
+#include <util/atomic.h>
static uint8_t rbuf[RBUF_SIZE];
static uint8_t rbuf_head = 0;
static uint8_t rbuf_tail = 0;
static inline void rbuf_enqueue(uint8_t data)
{
- uint8_t sreg = SREG;
- cli();
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
uint8_t next = (rbuf_head + 1) % RBUF_SIZE;
if (next != rbuf_tail) {
rbuf[rbuf_head] = data;
@@ -18,36 +18,34 @@ static inline void rbuf_enqueue(uint8_t data)
} else {
print("rbuf: full\n");
}
- SREG = sreg;
+ }
}
static inline uint8_t rbuf_dequeue(void)
{
uint8_t val = 0;
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
- uint8_t sreg = SREG;
- cli();
if (rbuf_head != rbuf_tail) {
val = rbuf[rbuf_tail];
rbuf_tail = (rbuf_tail + 1) % RBUF_SIZE;
}
- SREG = sreg;
+ }
return val;
}
static inline bool rbuf_has_data(void)
{
- uint8_t sreg = SREG;
- cli();
- bool has_data = (rbuf_head != rbuf_tail);
- SREG = sreg;
- return has_data;
+ bool has_data;
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
+ has_data = (rbuf_head != rbuf_tail);
+ }
+ return has_data;
}
static inline void rbuf_clear(void)
{
- uint8_t sreg = SREG;
- cli();
+ ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
rbuf_head = rbuf_tail = 0;
- SREG = sreg;
+ }
}
#endif /* RING_BUFFER_H */
diff --git a/tmk_core/rules.mk b/tmk_core/rules.mk
index f13351ea1..e4c8aecb2 100644
--- a/tmk_core/rules.mk
+++ b/tmk_core/rules.mk
@@ -15,6 +15,29 @@
# Carlos Lamas
#
+# Enable vpath seraching for source files only
+# Without this, output files, could be read from the wrong .build directories
+VPATH_SRC := $(VPATH)
+vpath %.c $(VPATH_SRC)
+vpath %.h $(VPATH_SRC)
+vpath %.cpp $(VPATH_SRC)
+vpath %.cc $(VPATH_SRC)
+vpath %.hpp $(VPATH_SRC)
+vpath %.S $(VPATH_SRC)
+VPATH :=
+
+# Convert all SRC to OBJ
+define OBJ_FROM_SRC
+$(patsubst %.c,$1/%.o,$(patsubst %.cpp,$1/%.o,$(patsubst %.cc,$1/%.o,$(patsubst %.S,$1/%.o,$($1_SRC)))))
+endef
+$(foreach OUTPUT,$(OUTPUTS),$(eval $(OUTPUT)_OBJ +=$(call OBJ_FROM_SRC,$(OUTPUT))))
+
+# Define a list of all objects
+OBJ := $(foreach OUTPUT,$(OUTPUTS),$($(OUTPUT)_OBJ))
+
+MASTER_OUTPUT := $(firstword $(OUTPUTS))
+
+
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
@@ -24,55 +47,8 @@ FORMAT = ihex
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
-COLOR ?= true
-
-ifeq ($(COLOR),true)
- NO_COLOR=\033[0m
- OK_COLOR=\033[32;01m
- ERROR_COLOR=\033[31;01m
- WARN_COLOR=\033[33;01m
- BLUE=\033[0;34m
- BOLD=\033[1m
-endif
-
-ifdef quick
- QUICK = $(quick)
-endif
-
-QUICK ?= false
AUTOGEN ?= false
-ifneq ($(shell awk --version 2>/dev/null),)
- AWK=awk
-else
- AWK=cat && test
-endif
-
-OK_STRING=$(OK_COLOR)[OK]$(NO_COLOR)\n
-ERROR_STRING=$(ERROR_COLOR)[ERRORS]$(NO_COLOR)\n
-WARN_STRING=$(WARN_COLOR)[WARNINGS]$(NO_COLOR)\n
-
-ifndef $(SILENT)
- SILENT = false
-endif
-
-TAB_LOG = printf "\n$$LOG\n\n" | $(AWK) '{ sub(/^/," | "); print }'
-TAB_LOG_PLAIN = printf "$$LOG\n"
-AWK_STATUS = $(AWK) '{ printf " %-10s\n", $$1; }'
-AWK_CMD = $(AWK) '{ printf "%-99s", $$0; }'
-PRINT_ERROR = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG) && false
-PRINT_WARNING = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG)
-PRINT_ERROR_PLAIN = ($(SILENT) ||printf " $(ERROR_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN) && false && break
-PRINT_WARNING_PLAIN = ($(SILENT) || printf " $(WARN_STRING)" | $(AWK_STATUS)) && $(TAB_LOG_PLAIN)
-PRINT_OK = $(SILENT) || printf " $(OK_STRING)" | $(AWK_STATUS)
-BUILD_CMD = LOG=$$($(CMD) 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING); else $(PRINT_OK); fi;
-
-# List any extra directories to look for include files here.
-# Each directory must be seperated by a space.
-# Use forward slashes for directory separators.
-# For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS += $(subst :, ,$(VPATH))
-
# Compiler flag to set the C Standard level.
# c89 = "ANSI" C
@@ -83,17 +59,18 @@ CSTANDARD = -std=gnu99
# Place -D or -U options here for C sources
-CDEFS += $(OPT_DEFS)
+#CDEFS +=
# Place -D or -U options here for ASM sources
-ADEFS += $(OPT_DEFS)
+#ADEFS +=
# Place -D or -U options here for C++ sources
#CPPDEFS += -D__STDC_LIMIT_MACROS
#CPPDEFS += -D__STDC_CONSTANT_MACROS
-CPPDEFS += $(OPT_DEFS)
+#CPPDEFS +=
+
@@ -121,11 +98,7 @@ CFLAGS += -Wstrict-prototypes
#CFLAGS += -Wunreachable-code
#CFLAGS += -Wsign-compare
CFLAGS += -Wa,-adhlns=$(@:%.o=%.lst)
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
CFLAGS += $(CSTANDARD)
-ifdef CONFIG_H
- CFLAGS += -include $(CONFIG_H)
-endif
#---------------- Compiler Options C++ ----------------
@@ -148,12 +121,7 @@ CPPFLAGS += -Wundef
#CPPFLAGS += -Wunreachable-code
#CPPFLAGS += -Wsign-compare
CPPFLAGS += -Wa,-adhlns=$(@:%.o=%.lst)
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
#CPPFLAGS += $(CSTANDARD)
-ifdef CONFIG_H
- CPPFLAGS += -include $(CONFIG_H)
-endif
-
#---------------- Assembler Options ----------------
# -Wa,...: tell GCC to pass this to the assembler.
@@ -164,11 +132,8 @@ endif
# files -- see avr-libc docs [FIXME: not yet described there]
# -listing-cont-lines: Sets the maximum number of continuation lines of hex
# dump that will be displayed for a given single line of source input.
-ASFLAGS += $(ADEFS) -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100
-ASFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
-ifdef CONFIG_H
- ASFLAGS += -include $(CONFIG_H)
-endif
+ASFLAGS += $(ADEFS)
+ASFLAGS += -Wa,-adhlns=$(@:%.o=%.lst),-gstabs,--listing-cont-lines=100
#---------------- Library Options ----------------
# Minimalistic printf version
@@ -196,6 +161,7 @@ SCANF_LIB =
MATH_LIB = -lm
+CREATE_MAP ?= yes
#---------------- Linker Options ----------------
@@ -206,7 +172,10 @@ MATH_LIB = -lm
# Comennt out "--relax" option to avoid a error such:
# (.vectors+0x30): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_12'
#
-LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref
+
+ifeq ($(CREATE_MAP),yes)
+ LDFLAGS += -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref
+endif
#LDFLAGS += -Wl,--relax
LDFLAGS += $(EXTMEMOPTS)
LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
@@ -223,63 +192,20 @@ COPY = cp
WINSHELL = cmd
SECHO = $(SILENT) || echo
-# Define Messages
-# English
-MSG_ERRORS_NONE = Errors: none
-MSG_BEGIN = -------- begin --------
-MSG_END = -------- end --------
-MSG_SIZE_BEFORE = Size before:
-MSG_SIZE_AFTER = Size after:
-MSG_COFF = Converting to AVR COFF:
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
-MSG_FLASH = Creating load file for Flash:
-MSG_EEPROM = Creating load file for EEPROM:
-MSG_BIN = Creating binary load file for Flash:
-MSG_EXTENDED_LISTING = Creating Extended Listing:
-MSG_SYMBOL_TABLE = Creating Symbol Table:
-MSG_LINKING = Linking:
-MSG_COMPILING = Compiling:
-MSG_COMPILING_CPP = Compiling:
-MSG_ASSEMBLING = Assembling:
-MSG_CLEANING = Cleaning project:
-MSG_CREATING_LIBRARY = Creating library:
-MSG_SUBMODULE_DIRTY = $(WARN_COLOR)WARNING:$(NO_COLOR)\n \
- Some git sub-modules are out of date or modified, please consider runnning:$(BOLD)\n\
- git submodule sync --recursive\n\
- git submodule update --init --recursive$(NO_COLOR)\n\n\
- You can ignore this warning if you are not compiling any ChibiOS keyboards,\n\
- or if you have modified the ChibiOS libraries yourself. \n\n
-
-
-# Define all object files.
-OBJ = $(patsubst %.c,$(OBJDIR)/%.o,$(patsubst %.cpp,$(OBJDIR)/%.o,$(patsubst %.S,$(OBJDIR)/%.o,$(SRC))))
-
-# Define all listing files.
-LST = $(patsubst %.c,$(OBJDIR)/%.lst,$(patsubst %.cpp,$(OBJDIR)/%.lst,$(patsubst %.S,$(OBJDIR)/%.lst,$(SRC))))
-
# Compiler flags to generate dependency files.
#GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
-GENDEPFLAGS = -MMD -MP -MF $(BUILD_DIR)/.dep/$(subst /,_,$(subst $(BUILD_DIR)/,,$@)).d
+GENDEPFLAGS = -MMD -MP -MF $(patsubst %.o,%.td,$@)
# Combine all necessary flags and optional flags.
# Add target processor to flags.
# You can give extra flags at 'make' command line like: make EXTRAFLAGS=-DFOO=bar
-ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS)
-ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(GENDEPFLAGS) $(EXTRAFLAGS)
+ALL_CFLAGS = $(MCUFLAGS) $(CFLAGS) $(EXTRAFLAGS)
+ALL_CPPFLAGS = $(MCUFLAGS) -x c++ $(CPPFLAGS) $(EXTRAFLAGS)
ALL_ASFLAGS = $(MCUFLAGS) -x assembler-with-cpp $(ASFLAGS) $(EXTRAFLAGS)
-# Default target.
-all: build sizeafter
-
-# Quick make that doesn't clean
-quick: build sizeafter
-
-# Change the build target to build a HEX file or a library.
-build: elf hex
-#build: elf hex eep lss sym
-#build: lib
+MOVE_DEP = mv -f $(patsubst %.o,%.td,$@) $(patsubst %.o,%.d,$@)
elf: $(BUILD_DIR)/$(TARGET).elf
@@ -290,15 +216,6 @@ sym: $(BUILD_DIR)/$(TARGET).sym
LIBNAME=lib$(TARGET).a
lib: $(LIBNAME)
-check_submodule:
- git submodule status --recursive | \
- while IFS= read -r x; do \
- case "$$x" in \
- \ *) ;; \
- *) printf "$(MSG_SUBMODULE_DIRTY)";break;; \
- esac \
- done
-
# Display size of file.
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
#ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf
@@ -352,150 +269,114 @@ gccversion :
$(eval CMD=$(BIN) $< $@ || exit 0)
@$(BUILD_CMD)
-# Create library from object files.
-.SECONDARY : $(BUILD_DIR)/$(TARGET).a
-.PRECIOUS : $(OBJ)
-%.a: $(OBJ)
- @$(SILENT) || printf "$(MSG_CREATING_LIBRARY) $@" | $(AWK_CMD)
- $(eval CMD=$(AR) $@ $(OBJ) )
- @$(BUILD_CMD)
-
-BEGIN = gccversion check_submodule sizebefore
+BEGIN = gccversion sizebefore
# Link: create ELF output file from object files.
.SECONDARY : $(BUILD_DIR)/$(TARGET).elf
.PRECIOUS : $(OBJ)
-%.elf: $(OBJ) | $(BEGIN)
+# Note the obj.txt depeendency is there to force linking if a source file is deleted
+%.elf: $(OBJ) $(MASTER_OUTPUT)/cflags.txt $(MASTER_OUTPUT)/ldflags.txt $(MASTER_OUTPUT)/obj.txt | $(BEGIN)
@$(SILENT) || printf "$(MSG_LINKING) $@" | $(AWK_CMD)
- $(eval CMD=$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS))
+ $(eval CMD=$(CC) $(ALL_CFLAGS) $(filter-out %.txt,$^) --output $@ $(LDFLAGS))
@$(BUILD_CMD)
+
+
+define GEN_OBJRULE
+$1_INCFLAGS := $$(patsubst %,-I%,$$($1_INC))
+ifdef $1_CONFIG
+$1_CONFIG_FLAGS += -include $$($1_CONFIG)
+endif
+$1_CFLAGS = $$(ALL_CFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS)
+$1_CPPFLAGS= $$(ALL_CPPFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS)
+$1_ASFLAGS= $$(ALL_ASFLAGS) $$($1_DEFS) $$($1_INCFLAGS) $$($1_CONFIG_FLAGS)
# Compile: create object files from C source files.
-$(OBJDIR)/%.o : %.c | $(BEGIN)
- @mkdir -p $(@D)
- @$(SILENT) || printf "$(MSG_COMPILING) $<" | $(AWK_CMD)
- $(eval CMD=$(CC) -c $(ALL_CFLAGS) $< -o $@)
- @$(BUILD_CMD)
+$1/%.o : %.c $1/%.d $1/cflags.txt $1/compiler.txt | $(BEGIN)
+ @mkdir -p $$(@D)
+ @$$(SILENT) || printf "$$(MSG_COMPILING) $$<" | $$(AWK_CMD)
+ $$(eval CMD := $$(CC) -c $$($1_CFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
+ @$$(BUILD_CMD)
# Compile: create object files from C++ source files.
-$(OBJDIR)/%.o : %.cpp | $(BEGIN)
- @mkdir -p $(@D)
- @$(SILENT) || printf "$(MSG_COMPILING_CPP) $<" | $(AWK_CMD)
- $(eval CMD=$(CC) -c $(ALL_CPPFLAGS) $< -o $@)
- @$(BUILD_CMD)
+$1/%.o : %.cpp $1/%.d $1/cppflags.txt $1/compiler.txt | $(BEGIN)
+ @mkdir -p $$(@D)
+ @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD)
+ $$(eval CMD=$$(CC) -c $$($1_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
+ @$$(BUILD_CMD)
+
+$1/%.o : %.cc $1/%.d $1/cppflags.txt $1/compiler.txt | $(BEGIN)
+ @mkdir -p $$(@D)
+ @$$(SILENT) || printf "$$(MSG_COMPILING_CPP) $$<" | $$(AWK_CMD)
+ $$(eval CMD=$$(CC) -c $$($1_CPPFLAGS) $$(GENDEPFLAGS) $$< -o $$@ && $$(MOVE_DEP))
+ @$$(BUILD_CMD)
-# Compile: create assembler files from C source files.
-%.s : %.c | $(BEGIN)
- @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD)
- $(eval CMD=$(CC) -S $(ALL_CFLAGS) $< -o $@)
- @$(BUILD_CMD)
+# Assemble: create object files from assembler source files.
+$1/%.o : %.S $1/asflags.txt $1/compiler.txt | $(BEGIN)
+ @mkdir -p $$(@D)
+ @$(SILENT) || printf "$$(MSG_ASSEMBLING) $$<" | $$(AWK_CMD)
+ $$(eval CMD=$$(CC) -c $$($1_ASFLAGS) $$< -o $$@)
+ @$$(BUILD_CMD)
-# Compile: create assembler files from C++ source files.
-%.s : %.cpp | $(BEGIN)
- @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD)
- $(eval CMD=$(CC) -S $(ALL_CPPFLAGS) $< -o $@)
- @$(BUILD_CMD)
+$1/force:
-# Assemble: create object files from assembler source files.
-$(OBJDIR)/%.o : %.S | $(BEGIN)
- @mkdir -p $(@D)
- @$(SILENT) || printf "$(MSG_ASSEMBLING) $<" | $(AWK_CMD)
- $(eval CMD=$(CC) -c $(ALL_ASFLAGS) $< -o $@)
- @$(BUILD_CMD)
+$1/cflags.txt: $1/force
+ echo '$$($1_CFLAGS)' | cmp -s - $$@ || echo '$$($1_CFLAGS)' > $$@
+
+$1/cppflags.txt: $1/force
+ echo '$$($1_CPPFLAGS)' | cmp -s - $$@ || echo '$$($1_CPPFLAGS)' > $$@
+
+$1/asflags.txt: $1/force
+ echo '$$($1_ASFLAGS)' | cmp -s - $$@ || echo '$$($1_ASFLAGS)' > $$@
+
+$1/compiler.txt: $1/force
+ $$(CC) --version | cmp -s - $$@ || $$(CC) --version > $$@
+endef
+
+.PRECIOUS: $(MASTER_OUTPUT)/obj.txt
+$(MASTER_OUTPUT)/obj.txt: $(MASTER_OUTPUT)/force
+ echo '$(OBJ)' | cmp -s - $@ || echo '$(OBJ)' > $@
+
+.PRECIOUS: $(MASTER_OUTPUT)/ldflags.txt
+$(MASTER_OUTPUT)/ldflags.txt: $(MASTER_OUTPUT)/force
+ echo '$(LDFLAGS)' | cmp -s - $@ || echo '$(LDFLAGS)' > $@
+
+
+# We have to use static rules for the .d files for some reason
+DEPS = $(patsubst %.o,%.d,$(OBJ))
+# Keep the .d files
+.PRECIOUS: $(DEPS)
+# Empty rule to force recompilation if the .d file is missing
+$(DEPS):
+
+
+$(foreach OUTPUT,$(OUTPUTS),$(eval $(call GEN_OBJRULE,$(OUTPUT))))
# Create preprocessed source for use in sending a bug report.
%.i : %.c | $(BEGIN)
$(CC) -E -mmcu=$(MCU) $(CFLAGS) $< -o $@
# Target: clean project.
-clean:
+clean:
+ $(foreach OUTPUT,$(OUTPUTS), $(REMOVE) -r $(OUTPUT) 2>/dev/null)
+ $(REMOVE) $(BUILD_DIR)/$(TARGET).*
show_path:
@echo VPATH=$(VPATH)
@echo SRC=$(SRC)
-
-SUBDIRS := $(filter-out %/util/ %/doc/ %/keymaps/ %/old_keymap_files/,$(dir $(wildcard $(TOP_DIR)/keyboards/**/*/Makefile)))
-SUBDIRS := $(SUBDIRS) $(dir $(wildcard $(TOP_DIR)/keyboards/*/.))
-SUBDIRS := $(sort $(SUBDIRS))
-# $(error $(SUBDIRS))
-all-keyboards-defaults-%:
- @for x in $(SUBDIRS) ; do \
- printf "Compiling with default: $$x" | $(AWK_CMD); \
- LOG=$$($(MAKE) -C $$x $(subst all-keyboards-defaults-,,$@) VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \
- done
-
-all-keyboards-defaults: all-keyboards-defaults-all
-
-KEYBOARDS := $(SUBDIRS:$(TOP_DIR)/keyboards/%/=/keyboards/%)
-all-keyboards-all: $(addsuffix -all,$(KEYBOARDS))
-all-keyboards-quick: $(addsuffix -quick,$(KEYBOARDS))
-all-keyboards-clean: $(addsuffix -clean,$(KEYBOARDS))
-all-keyboards: all-keyboards-all
-
-define make_keyboard
-$(eval KEYBOARD=$(patsubst /keyboards/%,%,$1))
-$(eval SUBPROJECT=$(lastword $(subst /, ,$(KEYBOARD))))
-$(eval KEYBOARD=$(firstword $(subst /, ,$(KEYBOARD))))
-$(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.))))
-$(eval KEYMAPS+=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/$(SUBPROJECT)/keymaps/*/.))))
-@for x in $(KEYMAPS) ; do \
- printf "Compiling $(BOLD)$(KEYBOARD)/$(SUBPROJECT)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \
- LOG=$$($(MAKE) -C $(TOP_DIR)$1 $2 keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \
-done
-endef
-
-define make_keyboard_helper
-# Just remove the -quick, -all and so on from the first argument and pass it forward
-$(call make_keyboard,$(subst -$2,,$1),$2)
-endef
-
-/keyboards/%-quick:
- $(call make_keyboard_helper,$@,quick)
-/keyboards/%-all:
- $(call make_keyboard_helper,$@,all)
-/keyboards/%-clean:
- $(call make_keyboard_helper,$@,clean)
-/keyboards/%:
- $(call make_keyboard_helper,$@,all)
-
-all-keymaps-%:
- $(eval MAKECONFIG=$(call get_target,all-keymaps,$@))
- $(eval KEYMAPS=$(notdir $(patsubst %/.,%,$(wildcard $(TOP_DIR)/keyboards/$(KEYBOARD)/keymaps/*/.))))
- @for x in $(KEYMAPS) ; do \
- printf "Compiling $(BOLD)$(KEYBOARD)$(NO_COLOR) with $(BOLD)$$x$(NO_COLOR)" | $(AWK) '{ printf "%-118s", $$0; }'; \
- LOG=$$($(MAKE) $(subst all-keymaps-,,$@) keyboard=$(KEYBOARD) keymap=$$x VERBOSE=$(VERBOSE) COLOR=$(COLOR) SILENT=true 2>&1) ; if [ $$? -gt 0 ]; then $(PRINT_ERROR_PLAIN); elif [ "$$LOG" != "" ] ; then $(PRINT_WARNING_PLAIN); else $(PRINT_OK); fi; \
- done
-
-all-keymaps: all-keymaps-all
-
-GOAL=$(MAKECMDGOALS)
-ifeq ($(MAKECMDGOALS),)
-GOAL = all
-endif
-CLEANING_GOALS=clean clean_list all
-ifneq ($(findstring $(GOAL),$(CLEANING_GOALS)),)
-$(shell $(REMOVE) -r $(BUILD_DIR) 2>/dev/null)
-$(shell $(REMOVE) -r $(TOP_DIR)/$(BUILD_DIR))
-$(shell $(REMOVE) -r $(KEYBOARD_PATH)/$(BUILD_DIR))
-$(shell if $$SUBPROJECT; then $(REMOVE) -r $(SUBPROJECT_PATH)/$(BUILD_DIR); fi)
-$(shell $(REMOVE) -r $(KEYMAP_PATH)/$(BUILD_DIR))
-endif
+ @echo OBJ=$(OBJ)
# Create build directory
-$(shell mkdir $(BUILD_DIR) 2>/dev/null)
+$(shell mkdir -p $(BUILD_DIR) 2>/dev/null)
# Create object files directory
-$(shell mkdir $(OBJDIR) 2>/dev/null)
-
+$(eval $(foreach OUTPUT,$(OUTPUTS),$(shell mkdir -p $(OUTPUT) 2>/dev/null)))
# Include the dependency files.
--include $(shell mkdir $(BUILD_DIR)/.dep 2>/dev/null) $(wildcard $(BUILD_DIR)/.dep/*)
+-include $(patsubst %.o,%.d,$(OBJ))
# Listing of phony targets.
-.PHONY : all quick finish sizebefore sizeafter gccversion \
-build elf hex eep lss sym coff extcoff check_submodule \
+.PHONY : all finish sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
clean clean_list debug gdb-config show_path \
-program teensy dfu flip dfu-ee flip-ee dfu-start \
-all-keyboards-defaults all-keyboards all-keymaps \
-all-keyboards-defaults-% all-keyboards-% all-keymaps-%
+program teensy dfu flip dfu-ee flip-ee dfu-start \ No newline at end of file
diff --git a/tmk_core/tool/chibios/ch-bootloader-jump.patch b/tmk_core/tool/chibios/ch-bootloader-jump.patch
index d88657621..c6eb2405c 100644
--- a/tmk_core/tool/chibios/ch-bootloader-jump.patch
+++ b/tmk_core/tool/chibios/ch-bootloader-jump.patch
@@ -3,114 +3,114 @@ index 51a79bb..42d07bd 100644
--- a/os/common/ports/ARMCMx/compilers/GCC/crt0_v6m.s
+++ b/os/common/ports/ARMCMx/compilers/GCC/crt0_v6m.s
@@ -105,6 +105,13 @@
- #define CRT0_CALL_DESTRUCTORS TRUE
- #endif
-
-+/**
-+ * @brief Magic number for jumping to bootloader.
-+ */
-+#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__)
-+#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF
-+#endif
-+
- /*===========================================================================*/
- /* Code section. */
- /*===========================================================================*/
+ #define CRT0_CALL_DESTRUCTORS TRUE
+ #endif
+
++/**
++ * @brief Magic number for jumping to bootloader.
++ */
++#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__)
++#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF
++#endif
++
+ /*===========================================================================*/
+ /* Code section. */
+ /*===========================================================================*/
@@ -124,6 +131,17 @@
- .thumb_func
- .global Reset_Handler
- Reset_Handler:
-+
-+#ifdef STM32_BOOTLOADER_ADDRESS
-+ /* jump to bootloader code */
-+ ldr r0, =__ram0_end__-4
-+ ldr r1, =MAGIC_BOOTLOADER_NUMBER
-+ ldr r2, [r0, #0]
-+ str r0, [r0, #0] /* erase stored magic */
-+ cmp r2, r1
-+ beq Bootloader_Jump
-+#endif /* STM32_BOOTLOADER_ADDRESS */
-+
- /* Interrupts are globally masked initially.*/
- cpsid i
-
+ .thumb_func
+ .global Reset_Handler
+ Reset_Handler:
++
++#ifdef STM32_BOOTLOADER_ADDRESS
++ /* jump to bootloader code */
++ ldr r0, =__ram0_end__-4
++ ldr r1, =MAGIC_BOOTLOADER_NUMBER
++ ldr r2, [r0, #0]
++ str r0, [r0, #0] /* erase stored magic */
++ cmp r2, r1
++ beq Bootloader_Jump
++#endif /* STM32_BOOTLOADER_ADDRESS */
++
+ /* Interrupts are globally masked initially.*/
+ cpsid i
+
@@ -242,6 +260,21 @@ endfiniloop:
- ldr r1, =__default_exit
- bx r1
-
-+#ifdef STM32_BOOTLOADER_ADDRESS
-+/*
-+ * Jump-to-bootloader function.
-+ */
-+
-+ .align 2
-+ .thumb_func
-+Bootloader_Jump:
-+ ldr r0, =STM32_BOOTLOADER_ADDRESS
-+ ldr r1, [r0, #0]
-+ mov sp, r1
-+ ldr r0, [r0, #4]
-+ bx r0
-+#endif /* STM32_BOOTLOADER_ADDRESS */
-+
- #endif
-
- /** @} */
+ ldr r1, =__default_exit
+ bx r1
+
++#ifdef STM32_BOOTLOADER_ADDRESS
++/*
++ * Jump-to-bootloader function.
++ */
++
++ .align 2
++ .thumb_func
++Bootloader_Jump:
++ ldr r0, =STM32_BOOTLOADER_ADDRESS
++ ldr r1, [r0, #0]
++ mov sp, r1
++ ldr r0, [r0, #4]
++ bx r0
++#endif /* STM32_BOOTLOADER_ADDRESS */
++
+ #endif
+
+ /** @} */
diff --git a/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s b/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s
index 4812a29..dca9f88 100644
--- a/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s
+++ b/os/common/ports/ARMCMx/compilers/GCC/crt0_v7m.s
@@ -140,6 +140,13 @@
- #define CRT0_CPACR_INIT 0x00F00000
- #endif
-
-+/**
-+ * @brief Magic number for jumping to bootloader.
-+ */
-+#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__)
-+#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF
-+#endif
-+
- /*===========================================================================*/
- /* Code section. */
- /*===========================================================================*/
+ #define CRT0_CPACR_INIT 0x00F00000
+ #endif
+
++/**
++ * @brief Magic number for jumping to bootloader.
++ */
++#if !defined(MAGIC_BOOTLOADER_NUMBER) || defined(__DOXYGEN__)
++#define MAGIC_BOOTLOADER_NUMBER 0xDEADBEEF
++#endif
++
+ /*===========================================================================*/
+ /* Code section. */
+ /*===========================================================================*/
@@ -164,6 +171,17 @@
- .thumb_func
- .global Reset_Handler
- Reset_Handler:
-+
-+#ifdef STM32_BOOTLOADER_ADDRESS
-+ /* jump to bootloader code */
-+ ldr r0, =__ram0_end__-4
-+ ldr r1, =MAGIC_BOOTLOADER_NUMBER
-+ ldr r2, [r0, #0]
-+ str r0, [r0, #0] /* erase stored magic */
-+ cmp r2, r1
-+ beq Bootloader_Jump
-+#endif /* STM32_BOOTLOADER_ADDRESS */
-+
- /* Interrupts are globally masked initially.*/
- cpsid i
-
+ .thumb_func
+ .global Reset_Handler
+ Reset_Handler:
++
++#ifdef STM32_BOOTLOADER_ADDRESS
++ /* jump to bootloader code */
++ ldr r0, =__ram0_end__-4
++ ldr r1, =MAGIC_BOOTLOADER_NUMBER
++ ldr r2, [r0, #0]
++ str r0, [r0, #0] /* erase stored magic */
++ cmp r2, r1
++ beq Bootloader_Jump
++#endif /* STM32_BOOTLOADER_ADDRESS */
++
+ /* Interrupts are globally masked initially.*/
+ cpsid i
+
@@ -305,6 +323,21 @@ endfiniloop:
- /* Branching to the defined exit handler.*/
- b __default_exit
-
-+#ifdef STM32_BOOTLOADER_ADDRESS
-+/*
-+ * Jump-to-bootloader function.
-+ */
-+
-+ .align 2
-+ .thumb_func
-+Bootloader_Jump:
-+ ldr r0, =STM32_BOOTLOADER_ADDRESS
-+ ldr r1, [r0, #0]
-+ mov sp, r1
-+ ldr r0, [r0, #4]
-+ bx r0
-+#endif /* STM32_BOOTLOADER_ADDRESS */
-+
- #endif /* !defined(__DOXYGEN__) */
-
- /** @} */
+ /* Branching to the defined exit handler.*/
+ b __default_exit
+
++#ifdef STM32_BOOTLOADER_ADDRESS
++/*
++ * Jump-to-bootloader function.
++ */
++
++ .align 2
++ .thumb_func
++Bootloader_Jump:
++ ldr r0, =STM32_BOOTLOADER_ADDRESS
++ ldr r1, [r0, #0]
++ mov sp, r1
++ ldr r0, [r0, #4]
++ bx r0
++#endif /* STM32_BOOTLOADER_ADDRESS */
++
+ #endif /* !defined(__DOXYGEN__) */
+
+ /** @} */
diff --git a/util/Win_Check.bat b/util/Win_Check.bat
new file mode 100644
index 000000000..3fdb656f9
--- /dev/null
+++ b/util/Win_Check.bat
@@ -0,0 +1,208 @@
+@setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
+@echo OFF
+set BAT_VERSION=v1.0
+set REPORT_NAME=Win_Check_Output.txt
+
+:: -----------------------------------------------------------------------------
+
+cls
+
+echo QMK Windows Check Output %BAT_VERSION%
+echo QMK Windows Check Output %BAT_VERSION%.>%REPORT_NAME%
+
+:: -----------------------------------------------------------------------------
+
+set MINGW_BASE_DIR=C:\MinGW
+
+set KEYMAP=atomic-pvc
+set KEYMAP_CLEAN=atomic-pvc-clean
+
+:: -----------------------------------------------------------------------------
+
+if /I "%1" EQU VERBOSE (goto :Verbose_Make) else (goto :Normal_Make)
+
+:Normal_Make
+set MAKE_CMD_LEVEL_0=make -r -f Makefile COLOR=FALSE
+set MAKE_CMD_LEVEL_1=make -r -f ../Makefile COLOR=FALSE
+set MAKE_CMD_LEVEL_2=make -r -f ../../Makefile COLOR=FALSE
+goto :Start_Report
+
+:Verbose_Make
+echo Verbose Mode
+set MAKE_CMD_LEVEL_0=make -r -d -f Makefile COLOR=FALSE VERBOSE=TRUE
+set MAKE_CMD_LEVEL_1=make -r -d -f ../Makefile COLOR=FALSE VERBOSE=TRUE
+set MAKE_CMD_LEVEL_2=make -r -d -f ../../Makefile COLOR=FALSE VERBOSE=TRUE
+goto :Start_Report
+
+:Start_Report
+
+
+:: -----------------------------------------------------------------------------
+
+set HEADER=CURRENT DIRECTORY & call :ReportHeader
+
+echo %CD%>>%REPORT_NAME% 2>&1
+
+echo.>>%REPORT_NAME% 2>&1
+
+:: -----------------------------------------------------------------------------
+
+set HEADER=CURRENT PATHS & call :ReportHeader
+
+for %%A in ("%path:;=";"%") do (echo %%~A>>%REPORT_NAME% 2>&1)
+
+echo.>>%REPORT_NAME% 2>&1
+
+:: -----------------------------------------------------------------------------
+
+rem set HEADER=CURRENT ENVIRONMENTAL SETTINGS & call :ReportHeader
+
+rem set>>%REPORT_NAME% 2>&1
+rem echo.>>%REPORT_NAME% 2>&1
+
+:: -----------------------------------------------------------------------------
+
+set HEADER=KEY EXECUTABLE LOCATIONS - GENERAL & call :ReportHeader
+
+set FILENAME=make.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU Make" & call :ReportVersion
+set FILENAME=git.exe & set VERSION_CMD=--version & set VERSION_FIND="git" & call :ReportVersion
+set FILENAME=cmp.exe & set VERSION_CMD=--version & set VERSION_FIND="cmp" & call :ReportVersion
+
+:: -----------------------------------------------------------------------------
+
+set HEADER=EXECUTABLE LOCATIONS - AVR MCU COMPILERS & call :ReportHeader
+
+set FILENAME=avr-gcc.exe & set VERSION_CMD=--version & set VERSION_FIND="avr" & call :ReportVersion
+set FILENAME=avr-objcopy.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objcopy" & call :ReportVersion
+set FILENAME=avr-objdump.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objdump" & call :ReportVersion
+set FILENAME=avr-size.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU size" & call :ReportVersion
+set FILENAME=avr-ar.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU ar" & call :ReportVersion
+set FILENAME=avr-nm.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU nm" & call :ReportVersion
+
+:: -----------------------------------------------------------------------------
+
+set HEADER=EXECUTABLE LOCATIONS - ARM MCU COMPILERS & call :ReportHeader
+
+set FILENAME=arm-none-eabi-gcc.exe & set VERSION_CMD=--version & set VERSION_FIND="arm-none-eabi-gcc" & call :ReportVersion
+set FILENAME=arm-none-eabi-objcopy.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objcopy" & call :ReportVersion
+set FILENAME=arm-none-eabi-objdump.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objdump" & call :ReportVersion
+set FILENAME=arm-none-eabi-size.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU size" & call :ReportVersion
+set FILENAME=arm-none-eabi-ar.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU ar" & call :ReportVersion
+set FILENAME=arm-none-eabi-nm.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU nm" & call :ReportVersion
+
+:: -----------------------------------------------------------------------------
+
+set HEADER=EXECUTABLE LOCATIONS - NATIVE COMPILERS & call :ReportHeader
+
+set FILENAME=gcc.exe & set VERSION_CMD=--version & set VERSION_FIND="gcc" & call :ReportVersion
+set FILENAME=objcopy.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objcopy" & call :ReportVersion
+set FILENAME=objdump.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU objdump" & call :ReportVersion
+set FILENAME=size.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU size" & call :ReportVersion
+set FILENAME=ar.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU ar" & call :ReportVersion
+set FILENAME=nm.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU nm" & call :ReportVersion
+
+:: -----------------------------------------------------------------------------
+
+set HEADER=EXECUTABLE LOCATIONS - PROGRAMMERS & call :ReportHeader
+
+set FILENAME=dfu-programmer.exe & set VERSION_CMD=--version & set VERSION_FIND="dfu" & call :ReportVersion
+set FILENAME=batchisp.exe & set VERSION_CMD=-version & set VERSION_FIND="batchisp" & call :ReportVersion
+set FILENAME=dfu-util.exe & call :Report
+set FILENAME=teensy_loader_cli.exe & call :Report
+set FILENAME=hid_bootloader_cli.exe & call :Report
+set FILENAME=avrdude.exe & call :Report
+
+:: -----------------------------------------------------------------------------
+
+set HEADER=EXECUTABLE LOCATIONS - OPTIONAL & call :ReportHeader
+set FILENAME=cppcheck.exe & call :Report
+set FILENAME=doxygen.exe & call :Report
+set FILENAME=gdb-config.exe & call :Report
+set FILENAME=wget.exe & call :Report
+set FILENAME=unzip.exe & call :Report
+
+:: -----------------------------------------------------------------------------
+
+set HEADER=MINGW CHECK - OPTIONAL & call :ReportHeader
+if exist %MINGW_BASE_DIR% (echo Expected MinGW Base Dir = %MINGW_BASE_DIR%>>%REPORT_NAME% 2>&1) else (echo Expected MinGW Base Dir = %MINGW_BASE_DIR% - Not Found>>%REPORT_NAME% 2>&1)
+echo.>>%REPORT_NAME% 2>&1
+set FILENAME=mingw32-make.exe & set VERSION_CMD=--version & set VERSION_FIND="GNU Make" & call :ReportVersion
+if exist %MINGW_BASE_DIR%\bin\make.exe (ECHO It is not recommended to have make.exe in mingw/bin.>>%REPORT_NAME% 2>&1 & echo.>>%REPORT_NAME% 2>&1)
+
+:: -----------------------------------------------------------------------------
+
+set HEADER=MAKE CHECK & call :ReportHeader
+if exist Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_0% & goto MakeFound)
+if exist ..\Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_1% & goto MakeFound)
+if exist ..\..\Makefile (set MAKE_CMD=%MAKE_CMD_LEVEL_2% & goto MakeFound)
+
+echo No Makfile Found.>>%REPORT_NAME% 2>&1
+echo.>>%REPORT_NAME% 2>&1
+echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1
+
+goto :ContinueAfterMake
+
+:MakeFound
+call :RunMake
+
+:ContinueAfterMake
+goto :ExitBatch
+
+:ExitBatch
+ echo Done!
+ echo.
+ rem type %REPORT_NAME%
+ echo.
+ echo See %REPORT_NAME% for the report.
+ endlocal
+exit /b
+
+:: -----------------------------------------------------------------------------
+
+:RunMake
+
+ echo Makfile Found.>>%REPORT_NAME% 2>&1
+ echo.>>%REPORT_NAME% 2>&1
+ set HEADER=MAKE CLEAN & call :ReportHeader
+ echo Make Command = %MAKE_CMD% %KEYMAP_CLEAN%>>%REPORT_NAME% 2>&1
+ echo.>>%REPORT_NAME% 2>&1
+ %MAKE_CMD% %KEYMAP_CLEAN%>>%REPORT_NAME% 2>&1
+ set HEADER=MAKE & call :ReportHeader
+ echo Make Command = %MAKE_CMD% %KEYMAP%>>%REPORT_NAME% 2>&1
+ echo.>>%REPORT_NAME% 2>&1
+ %MAKE_CMD% %KEYMAP%>>%REPORT_NAME% 2>&1
+ echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1
+ echo.>>%REPORT_NAME% 2>&1
+exit /b
+
+:ReportHeader
+ echo ------------------------------------------------------------------------->>%REPORT_NAME% 2>&1
+ echo.>>%REPORT_NAME% 2>&1
+ echo %HEADER%>>%REPORT_NAME% 2>&1
+ echo.>>%REPORT_NAME% 2>&1
+exit /b
+
+:Report
+ echo Filename = %FILENAME% >>%REPORT_NAME% 2>&1
+ <nul set /p output="Location = " >>%REPORT_NAME% 2>&1
+ where %FILENAME% >>%REPORT_NAME% 2> NUL
+ if ERRORLEVEL 1 (echo Not Found >>%REPORT_NAME% 2>&1 & goto :EndReport)
+
+ :EndReport
+ echo.>>%REPORT_NAME% 2>&1
+ <nul set /p output="."
+exit /b
+
+:ReportVersion
+ echo Filename = %FILENAME% >>%REPORT_NAME% 2>&1
+ <nul set /p output="Location = " >>%REPORT_NAME% 2>&1
+ where %FILENAME% >>%REPORT_NAME% 2> NUL
+ if ERRORLEVEL 1 (echo Not Found >>%REPORT_NAME% 2>&1 & goto :EndReportVersion)
+ <nul set /p output ="Version = " >>%REPORT_NAME% 2>&1
+
+ (%FILENAME% %VERSION_CMD% | find %VERSION_FIND%) >>%REPORT_NAME% 2>&1
+
+ :EndReportVersion
+ echo.>>%REPORT_NAME% 2>&1
+ <nul set /p output="."
+exit /b \ No newline at end of file
diff --git a/util/ergodox_ez.html b/util/ergodox_ez.html
new file mode 100644
index 000000000..8e9286607
--- /dev/null
+++ b/util/ergodox_ez.html
@@ -0,0 +1 @@
+<html><head><meta http-equiv="refresh" content="0; url=http://qmk.fm/keyboards/ergodox/" /></head></html> \ No newline at end of file
diff --git a/util/install_dependencies.sh b/util/install_dependencies.sh
index 24564a2ac..936a86593 100644..100755
--- a/util/install_dependencies.sh
+++ b/util/install_dependencies.sh
@@ -20,7 +20,8 @@ if [[ -n "$(type -P pacman )" ]]; then
arm-none-eabi-gcc \
arm-none-eabi-binutils \
arm-none-eabi-newlib \
- git
+ git \
+ diffutils
elif [[ -n "$(type -P apt-get)" ]]; then
# Debian and derivatives
@@ -47,7 +48,8 @@ elif [[ -n "$(type -P apt-get)" ]]; then
gcc-arm-none-eabi \
binutils-arm-none-eabi \
libnewlib-arm-none-eabi \
- git
+ git \
+ diffutils
elif [[ -n "$(type -P yum)" ]]; then
# Fedora, CentOS or RHEL and derivatives
@@ -66,10 +68,10 @@ elif [[ -n "$(type -P yum)" ]]; then
avr-libc \
dfu-programmer \
dfu-util \
- gcc-arm-none-eabi \
- binutils-arm-none-eabi \
- libnewlib-arm-none-eabi \
- git
+ arm-none-eabi-gcc-cs \
+ arm-none-eabi-newlib \
+ git \
+ diffutils
# The listed eabi pacackes do unfortunately not exist for CentOS,
# But at least in Fedora they do, so try to install them anyway
# TODO: Build them from sources, if the installation fails
@@ -85,7 +87,8 @@ elif [[ -n "$(type -P zypper)" ]]; then
patch \
wget \
dfu-programmer \
- git
+ git \
+ diffutils
# TODO: The avr and eabi tools are not available as default packages, so we need
# another way to install them
diff --git a/util/new_project.sh b/util/new_project.sh
index b3535f449..18d16e560 100755
--- a/util/new_project.sh
+++ b/util/new_project.sh
@@ -20,6 +20,7 @@ sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/template.c > keyboards/$KEYBO
sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/config.h > keyboards/$KEYBOARD/config.h
sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/readme.md > keyboards/$KEYBOARD/readme.md
sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/Makefile > keyboards/$KEYBOARD/Makefile
+sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/rules.mk > keyboards/$KEYBOARD/rules.mk
sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/keymaps/default/config.h > keyboards/$KEYBOARD/keymaps/default/config.h
sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/keymaps/default/keymap.c > keyboards/$KEYBOARD/keymaps/default/keymap.c
sed -e "s;%KEYBOARD%;$KEYBOARD;g" quantum/template/keymaps/default/Makefile > keyboards/$KEYBOARD/keymaps/default/Makefile
diff --git a/util/travis_compiled_push.sh b/util/travis_compiled_push.sh
index 01317f4be..f432976d0 100644
--- a/util/travis_compiled_push.sh
+++ b/util/travis_compiled_push.sh
@@ -7,6 +7,8 @@ rev=$(git rev-parse --short HEAD)
git config --global user.name "Travis CI"
git config --global user.email "jack.humb+travis.ci@gmail.com"
+make ergodox-ez AUTOGEN=true
+
find . -name ".build" | xargs rm -rf
cd ..
git clone https://$GH_TOKEN@github.com/jackhumbert/qmk.fm.git
@@ -15,9 +17,11 @@ git submodule update --init --recursive
rm -rf keyboard
rm -rf keyboards
cp -r ../qmk_firmware/keyboards .
+mkdir keyboards/ergodox_ez/
+cp ../qmk_firmware/util/ergodox_ez.html keyboards/ergodox_ez/index.html
cp ../qmk_firmware/readme.md qmk_readme.md
./generate.sh
git add -A
git commit -m "generated from qmk_firmware/$TRAVIS_BRANCH@${rev}"
-git push \ No newline at end of file
+git push