Stephan Bösebeck 9 years ago
commit a71ab3ebb6

@ -14,11 +14,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Tab | Q | W | E | R | T | - | | = | Y | U | I | O | P | \ |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* |Ctrl/Esc| A | S | D | F | G |------| |------| H | J | K | L |; / L2| ' |
* |Ctrl/Esc|A / L2| S | D | F | G |------| |------| H | J | K | L | ; | ' |
* |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
* | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | ~L1 | '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
* | ~L1 | ~L2 |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | App | Home | | PgUp |Ctrl/Esc|
@ -34,9 +34,9 @@ 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), KC_A, KC_S, KC_D, KC_F, KC_G,
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_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
KC_FN1, KC_FN2, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
ALT_T(KC_APP), KC_HOME,
KC_END,
@ -44,7 +44,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// 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, LT(MDIA, KC_SCLN),KC_QUOT,
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,
@ -99,13 +99,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,--------------------------------------------------. ,--------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | MsUp | | | | | | | | | | | |
* | | | | | | | | | | | | Lclk | Rclk | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
* | | | | | | |------| |------|MsLeft|MsDown| MsUp |MsRght| | Play |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | | | | | | | | | | Prev | Next | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
* | | | | | | |VolUp |VolDn | Mute | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
@ -116,19 +116,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `--------------------' `--------------------'
*/
// MEDIA AND MOUSE
KEYMAP(
[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,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_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_BTN1, KC_BTN2, KC_TRNS, KC_TRNS,
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,
KC_TRNS, KC_TRNS,
@ -138,7 +138,8 @@ KEYMAP(
};
const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Layer 1 (Symbols)
[2] = ACTION_LAYER_TAP_TOGGLE(MDIA) // FN2 - Momentary Layer 2 (Media)
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)

@ -1,10 +1,10 @@
# J3RN's Mac-centric Ergodox EZ keymap
# J3RN's Mac-centric ErgoDox EZ keymap
## Motivation
Essentially, I wanted to switch to a layout that was less jarring than the default Ergodox EZ layout, and did not require finger gymnastics to perform common OS X shortcuts (most of which involve the CMD (LGui) key).
Essentially, I wanted to switch to a layout that was less jarring than the default ErgoDox EZ layout, and did not require finger gymnastics to perform common OS X shortcuts (most of which involve the CMD (LGui) key).
## How is it different from the default Ergodox EZ layout?
## How is it different from the default ErgoDox EZ layout?
This layout more closely resembles that of the Mac keyboard, and has some other goodness baked in. Here is a rundown of what that means:
@ -18,6 +18,7 @@ This layout more closely resembles that of the Mac keyboard, and has some other
### Other changes
- **The button to the left of "A" is Ctrl/Esc instead of Backspace.** This is actually how I have the keyboard on my Macbook set up to be, since it's loads more convenient than a CAPS LOCK key. This is the Ctrl key I find myself using most.
- **Mouse uses Vim-style navigation**. To activate "Media mode," hold the 'a' key. This allows you to move the mouse around with hjkl just like in Vim. Additionally, right and left click are the conveniently placed 'i' and 'o' keys.
- **The key to the right of "5" and the key to left of "6" are "[" and "]", respectively, instead of Left and Right.** There is a more convenient set of Left and Right already present. Truth be told, I don't really use these keys, as they are a stretch to reach.
- **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."

@ -1,149 +1,421 @@
#include "ergodox_ez.h"
#include "led.h"
#include "debug.h"
#include "action_layer.h"
#define BASE 0 // default layer
#define SYMB 1 // symbols
#define MDIA 2 // media keys
#define BASE 0 // default layer
#define LOCK 1 // layer lock keys
#define SYMB_MO 2 // symbols momentary layer
#define SYMB_TG 3 // symbols lock layer
#define SYMB_XX 4 // symbols exit layer
#define MDIA_MO 5 // media momentary layer
#define MDIA_TG 6 // media lock layer
#define MDIA_XX 7 // media exit layer
#define UNLOCK 8 // clear to base layer
/*
* Ordinary Ergodox EZ keyboard layout, v2
* Ordinary Ergodox EZ keyboard layout, v3
* modifications from default by Nicholas Keene ergodoxez@nicholaskeene.com
* Details: http://nicholas.rinard.us/2016/03/ergodox-ez-layout.html
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | Grv | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | = |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | MDIA \ |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | SYMB | A | S | D | F | G |------| |------| H | J | K | L | ; | SYMB ' |
* |--------+------+------+------+------+------|Shift | | Tab |------+------+------+------+------+--------|
* | LShift | Z | X | C | V | B | -Tab | | | N | M | , | . | / | RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* |LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh |RCtrl |
* `----------------------------------' `----------------------------------'
* ,---------------. ,---------------.
* | Home | End | | Left | Right |
* ,------|--------|------| |------+--------+------.
* | | | PgUp | | Up | | |
* |Backsp| Del |------| |------| Enter | Space|
* | | | PgDn | | Down | | |;
* `----------------------' `----------------------'
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | LOCK Grv | 1 | 2 | 3 | 4 | 5 | ESC | | - | 6 | 7 | 8 | 9 | 0 | = LOCK |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | 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 |------+------+------+------+------+-----------|
* | LShift | Z | X | C | V | B | -Tab | | | N | M | , | . | / | RShift |
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
* |LCtrl | Meh |Hyper | LAlt | LGui | | RGui | RAlt | Hyper| Meh |RCtrl |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Home | End | | Left | Right|
* ,------|------|------| |------+------+------.
* | | | PgUp | | Up | | |
* |Backsp| Del |------| |------| Enter| Space|
* | | | PgDn | | Down | | |
* `--------------------' `--------------------'
*/
// 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_ESC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC,
MO(SYMB), KC_A, KC_S, KC_D, KC_F, KC_G,
KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, LSFT(KC_TAB),
KC_LCTL, MEH_T(KC_NO),ALL_T(KC_NO),KC_LALT,KC_LGUI,
KC_HOME, KC_END,
KC_PGUP,
KC_BSPC, KC_DEL, KC_PGDN,
[BASE] = KEYMAP(
// left hand
LT(LOCK, KC_GRV),KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_ESC
,LT(MDIA_MO, KC_TAB),KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC
,MO(SYMB_MO) ,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 ,MEH_T(KC_NO),ALL_T(KC_NO),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, KC_EQL,
KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, LT(MDIA, KC_BSLS),
KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(SYMB, KC_QUOT),
KC_TAB, KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH),KC_RSFT,
KC_RGUI, KC_RALT, ALL_T(KC_NO),MEH_T(KC_NO), KC_RCTL,
KC_LEFT, KC_RGHT,
KC_UP,
KC_DOWN, KC_ENT, KC_SPC
,KC_MINS ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,LT(LOCK, KC_EQL)
,KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,LT(MDIA_MO, KC_BSLS)
,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,LT(SYMB_MO, KC_QUOT)
,KC_TAB ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH ,KC_RSFT
,KC_RGUI,KC_RALT,ALL_T(KC_NO),MEH_T(KC_NO),KC_RCTL
,KC_LEFT ,KC_RGHT
,KC_UP
,KC_DOWN ,KC_ENT ,KC_SPC
),
/* Keymap 1: Symbol Layer
/* Keymap 1: Layer Lock Keys
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | Esc | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | MDIA | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | F12 |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | |
* |--------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+--------|
* | | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | CAPS |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | 0 | . | = | + | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Left | Right| | Home | End |
* ,------|------|------| |------+------+------.
* | | | Up | | PgUp | | |
* |Space |Enter |------| |------|BackSp| Del |
* | | | Down | | PgDn | | |
* `--------------------' `--------------------'
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | | Esc | | | | | | | | | | | | | |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | Media LOCK| | | | | | | | | | | | | | Media LOCK|
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* |Symbol LOCK| | | | | |------| |------| | | | | |Symbol LOCK|
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | Caps LOCK| | | | | | | | | | | | | | Caps LOCK|
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// SYMBOLS
[SYMB] = KEYMAP(
// left hand
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
MO(MDIA), 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_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_LEFT,KC_RGHT,
KC_UP,
KC_SPC,KC_ENT,KC_DOWN,
// right hand
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
LSFT(KC_DOT), KC_PIPE, KC_P7, KC_P8, KC_P9, KC_PSLS, KC_F12,
KC_SLSH, KC_P4, KC_P5, KC_P6, KC_PAST, KC_TRNS,
LSFT(KC_TAB), KC_BSLS, KC_P1, KC_P2, KC_P3, KC_PMNS, KC_CAPS,
KC_P0, KC_DOT, KC_PEQL, KC_PPLS, KC_PENT,
KC_HOME, KC_END,
KC_PGUP,
KC_PGDN, KC_BSPC, KC_DEL
[LOCK] = KEYMAP(
// left hand
KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_FN3 ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_FN2 ,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_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN3
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN2
,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
),
/* Keymap 2: Symbol Momentary Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | Media | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | Media |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | Symbol | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | Symbol |
* |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------|
* | Shift | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | Shift |
* `-----------+------+------+------+------+-------------' `------------+------+------+------+------+------------'
* | | | | | | | 0 | . | = | + | Entr |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Left | Right| | Home | End |
* ,------|------|------| |------+------+------.
* | | | Up | | PgUp | | |
* |Space |Enter |------| |------|BackSp| Del |
* | | | Down | | PgDn | | |
* `--------------------' `--------------------'
*/
[SYMB_MO] = KEYMAP(
// left hand
KC_FN2 ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_TRNS
,MO(MDIA_MO) ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
,MO(SYMB_MO) ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV
,KC_LSFT ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_LEFT ,KC_RGHT
,KC_UP
,KC_SPC ,KC_ENT ,KC_DOWN
// right hand
,KC_TRNS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_FN2
,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,MO(MDIA_MO)
,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,MO(SYMB_MO)
,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_RSFT
,KC_0 ,KC_DOT ,KC_EQL,KC_PLUS ,KC_ENT
,KC_HOME ,KC_END
,KC_PGUP
,KC_PGDN ,KC_BSPC ,KC_DEL
),
/* Keymap 2: Media and mouse keys
/* Keymap 3: Symbol Lock Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | Lock | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | Lock |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | Media | ! | @ | { | } | & | < | | > | | | 7 | 8 | 9 | / | Media |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | | # | $ | ( | ) | ` |------| |------| / | 4 | 5 | 6 | * | |
* |-----------+------+------+------+------+------| Tab | | Shift|------+------+------+------+------+-----------|
* | Shift | % | ^ | [ | ] | ~ | | | -Tab| \ | 1 | 2 | 3 | - | Shift |
* `-----------+------+------+------+------+-------------' `------------+------+------+------+------+------------'
* | | | | | | | 0 | . | = | + | Entr |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Left | Right| | Home | End |
* ,------|------|------| |------+------+------.
* | | | Up | | PgUp | | |
* |Space |Enter |------| |------|BackSp| Del |
* | | | Down | | PgDn | | |
* `--------------------' `--------------------'
*/
[SYMB_TG] = KEYMAP( // layer 3 : return key for symbol lock layer
// left hand
MO(SYMB_XX) ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_TRNS
,MO(MDIA_MO) ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_AMPR ,LSFT(KC_COMM)
,MO(UNLOCK) ,KC_HASH ,KC_DLR ,KC_LPRN ,KC_RPRN ,KC_GRV
,KC_LSFT ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,KC_TAB
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_LEFT ,KC_RGHT
,KC_UP
,KC_SPC ,KC_ENT ,KC_DOWN
// right hand
,KC_TRNS ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,MO(SYMB_XX)
,LSFT(KC_DOT),KC_PIPE ,KC_7 ,KC_8 ,KC_9 ,KC_SLSH ,MO(MDIA_MO)
,KC_SLSH ,KC_4 ,KC_5 ,KC_6 ,KC_ASTR ,MO(UNLOCK)
,LSFT(KC_TAB),KC_BSLS ,KC_1 ,KC_2 ,KC_3 ,KC_MINS ,KC_RSFT
,KC_0 ,KC_DOT ,KC_EQL,KC_PLUS ,KC_ENT
,KC_HOME ,KC_END
,KC_PGUP
,KC_PGDN ,KC_BSPC ,KC_DEL
),
/* Keymap 4: Symbol Unlock Layer
*
* ,--------------------------------------------------. ,--------------------------------------------------.
* | Esc |ShutDn| Sleep| Mute |Vol Dn|Vol Up| | | | |PrtSc | PgUp |MyComp| Mail | |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | | | MsUp |ScrlUp| |ScrlUp| |ScrlUp| |ScrlUp| Up | | | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | |MsLeft|MsDown|MsRght| |------| |------| Home | Left | Down | Right| End | |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | |MsDown|ScrlDn| |ScrlDn| |ScrlDn| |ScrlDn| Down | | | |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | Lclk | Rclk | | | PgDn | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Stop |Refrsh| | Prev | Next |
* ,------|------|------| |------+------+------.
* |Brwser|Brwser|Search| |VolUp | | |
* |Back | Fwd |------| |------| Stop | Play-|
* | | | Home | |VolDn | | Pause|
* `--------------------' `--------------------'
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | | Esc | | | | | | | | | | | | | |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | Unlock | | | | | | | | | | | | | | Unlock |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | | | | | | |------| |------| | | | | | |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | Caps LOCK | | | | | | | | | | | | | | Caps LOCK |
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
// MEDIA AND MOUSE
[MDIA] = KEYMAP(
KC_ESC, KC_PWR, KC_SLEP, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS,
MO(MDIA), KC_TRNS, KC_TRNS, KC_MS_U, KC_WH_U, KC_TRNS, KC_WH_U,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_D, KC_TRNS, KC_TRNS, KC_WH_D,
KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_WH_D,
KC_WSTP, KC_WREF,
KC_WSCH,
KC_WBAK, KC_TRNS, KC_WHOM,
[SYMB_XX] = KEYMAP(
// left hand
KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,TG(MDIA_TG) ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_FN1 ,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_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,TG(MDIA_TG)
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN1
,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
),
/* Keymap 5: Media Momentary Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | | F11 | F12 | F13 | F14 | F15 | | | | F16 | F17 | F18 | F19 | F20 | |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | |ShutDn| | MsUp | | |ScrlUp| |ScrlUp|PrtScr| Home | Up | PgUp | Mail | |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | | Sleep|MsLeft|MsDown|MsRght| |------| |------|NumLok| Left | Down | Right|MyComp| |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | | | |MsDown| | |ScrlDn| |ScrlDn| | End | Down | PgDn | | |
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
* | Mute |Vol Dn|Vol Up| Lclk | Rclk | |Insert|Delete| | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Stop |Refrsh| | Prev | Next |
* ,------|------|------| |------+------+------.
* |Brwser|Brwser|Search| |VolUp | | |
* |Back | Fwd |------| |------| Stop | Play-|
* | | | Home | |VolDn | | Pause|
* `--------------------' `--------------------'
*/
[MDIA_MO] = KEYMAP(
// left hand
KC_FN3 ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_TRNS
,MO(MDIA_MO) ,KC_POWER,KC_TRNS ,KC_MS_U ,KC_TRNS ,KC_TRNS ,KC_WH_U
,MO(SYMB_MO) ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_TRNS
,KC_LSFT ,KC_TRNS ,KC_TRNS ,KC_MS_D ,KC_TRNS ,KC_TRNS ,KC_WH_D
,KC_MUTE ,KC_VOLD ,KC_VOLU ,KC_BTN1 ,KC_BTN2
,KC_WSTP ,KC_WREF
,KC_WSCH
,KC_WBAK ,KC_TRNS ,KC_WHOM
// right hand
KC_TRNS, KC_TRNS, KC_PSCR, KC_PGUP, KC_MYCM, KC_MAIL, KC_TRNS,
KC_WH_U, KC_TRNS, KC_WH_U, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT,KC_END, KC_TRNS,
KC_WH_D, KC_TRNS, KC_WH_D, KC_DOWN, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_PGDN, KC_TRNS,KC_TRNS, KC_TRNS,
KC_MPRV, KC_MNXT,
KC_VOLU,
KC_VOLD, KC_MSTP, KC_MPLY
,KC_TRNS ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,KC_FN3
,KC_WH_U ,KC_PSCR ,KC_HOME,KC_UP ,KC_PGUP ,KC_MAIL ,MO(MDIA_MO)
,KC_NLCK ,KC_LEFT,KC_DOWN ,KC_RIGHT,KC_MYCM ,MO(SYMB_MO)
,KC_WH_D ,KC_TRNS ,KC_END ,KC_DOWN ,KC_PGDN ,KC_TRNS ,KC_RSFT
,KC_INS ,KC_DEL ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_MPRV ,KC_MNXT
,KC_VOLU
,KC_VOLD ,KC_MSTP ,KC_MPLY
),
/* Keymap 6: Media Lock Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | | F11 | F12 | F13 | F14 | F15 | | | | F16 | F17 | F18 | F19 | F20 | |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | |ShutDn| | MsUp | | |ScrlUp| |ScrlUp|PrtScr| Home | Up | PgUp | Mail | |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | | Sleep|MsLeft|MsDown|MsRght| |------| |------|NumLok| Left | Down | Right|MyComp| |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | | | |MsDown| | |ScrlDn| |ScrlDn| | End | Down | PgDn | | |
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
* | Mute |Vol Dn|Vol Up| Lclk | Rclk | |Insert|Delete| | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | Stop |Refrsh| | Prev | Next |
* ,------|------|------| |------+------+------.
* |Brwser|Brwser|Search| |VolUp | | |
* |Back | Fwd |------| |------| Stop | Play-|
* | | | Home | |VolDn | | Pause|
* `--------------------' `--------------------'
*/
[MDIA_TG] = KEYMAP(
// left hand
MO(MDIA_XX) ,KC_F11 ,KC_F12 ,KC_F13 ,KC_F14 ,KC_F15 ,KC_TRNS
,MO(UNLOCK) ,KC_POWER,KC_TRNS ,KC_MS_U ,KC_TRNS ,KC_TRNS ,KC_WH_U
,KC_NO ,KC_SLEP ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_TRNS
,KC_LSFT ,KC_TRNS ,KC_TRNS ,KC_MS_D ,KC_TRNS ,KC_TRNS ,KC_WH_D
,KC_MUTE ,KC_VOLD ,KC_VOLU ,KC_BTN1 ,KC_BTN2
,KC_WSTP ,KC_WREF
,KC_WSCH
,KC_WBAK ,KC_TRNS ,KC_WHOM
// right hand
,KC_TRNS ,KC_F16 ,KC_F17 ,KC_F18 ,KC_F19 ,KC_F20 ,MO(MDIA_XX)
,KC_WH_U ,KC_PSCR ,KC_HOME,KC_UP ,KC_PGUP ,KC_MAIL ,MO(UNLOCK)
,KC_NLCK ,KC_LEFT,KC_DOWN ,KC_RIGHT,KC_MYCM ,KC_NO
,KC_WH_D ,KC_TRNS ,KC_END ,KC_DOWN ,KC_PGDN ,KC_TRNS ,KC_RSFT
,KC_INS ,KC_DEL ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_MPRV ,KC_MNXT
,KC_VOLU
,KC_VOLD ,KC_MSTP ,KC_MPLY
),
/* Keymap 7: Media Unlock Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | | Esc | | | | | | | | | | | | | |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | Unlock | | | | | | | | | | | | | | Unlock |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | | | | | | |------| |------| | | | | | |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | Caps LOCK | | | | | | | | | | | | | | Caps LOCK |
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
[MDIA_XX] = KEYMAP(
// left hand
KC_TRNS ,KC_ESC ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_FN1 ,KC_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_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_FN1
,KC_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
),
/* Keymap 8: Unlock Layer
*
* ,-----------------------------------------------------. ,-----------------------------------------------------.
* | Unlock | | | | | | | | | | | | | | Unlock |
* |-----------+------+------+------+------+-------------| |------+------+------+------+------+------+-----------|
* | | | | | | | | | | | | | | | |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | | | | | | |------| |------| | | | | | |
* |-----------+------+------+------+------+------| | | |------+------+------+------+------+-----------|
* | | | | | | | | | | | | | | | |
* `-----------+------+------+------+------+-------------' `-------------+------+------+------+------+-----------'
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
* ,-------------. ,-------------.
* | | | | | |
* ,------|------|------| |------+------+------.
* | | | | | | | |
* | | |------| |------| | |
* | | | | | | | |
* `--------------------' `--------------------'
*/
[UNLOCK] = KEYMAP(
// left hand
KC_FN1 ,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_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,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_FN1
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS
,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,KC_TRNS ,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)
[1] = ACTION_LAYER_CLEAR(ON_PRESS) // FN1 - clear to base layer
,[2] = ACTION_LAYER_INVERT(SYMB_TG, ON_PRESS) // FN2 - toggle to Symbols on press
,[3] = ACTION_LAYER_INVERT(MDIA_TG, ON_PRESS) // FN3 - toggle to Media on press
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
@ -168,25 +440,31 @@ void matrix_init_user(void) {
// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
uint8_t layer = biton32(layer_state);
// do not change lights for locking and unlocking
if(layer == UNLOCK || layer == LOCK || layer == SYMB_XX || layer == MDIA_XX) {
return;
}
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;
// caps lock turns on red light
if(host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) {
ergodox_right_led_1_on();
}
// symbol lock turns on green light
if(layer == SYMB_MO || layer == SYMB_TG) {
ergodox_right_led_2_on();
}
// media lock turns on blue light
if(layer == MDIA_MO || layer == MDIA_TG) {
ergodox_right_led_3_on();
}
};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 97 KiB

@ -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:"#73ab6a",w:1.5},"~\n\n\n\n\n\n`",{c:"#cccccc"},"!\n1",{x:14.5},")\n0",{w:1.5},"+\n\n\n\n\n\n="],
[{y:-0.375,x:3.5},"E",{x:10.5},"I"],
[{y:-0.875,c:"#2277ff",w:1.5},"Shift\n\n~\n\n\n\nLock\n`",{c:"#cccccc"},"!\n1",{x:14.5},")\n0",{c:"#2277ff",w:1.5},"+\n\nShift\n\n\n\n=\nLock"],
[{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:"#73ab6a",w:1.5},"Tab",{c:"#cccccc"},"Q",{x:14.5},"P",{c:"#2277ff",fa:[0,0,0,1],w:1.5},"|\n\\\nMedia\nL2"],
[{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,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\nL1",{c:"#cccccc"},"A",{x:14.5},":\n;",{c:"#2277ff",w:1.5},"\"\n'\nSymbols\nL1"],
[{y:-0.625,x:6.5,c:"#bfbf67",h:1.5},"< Tab\n\n\nShift Tab",{x:4.5,h:1.5},"Tab >\n\n\nTab"],
[{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.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\nShift",{c:"#cccccc"},"Z",{x:14.5},"?\n/",{c:"#2277ff",w:1.5},"\n\nCapitals\nShift"],
[{y:-0.875,c:"#2277ff",fa:[0,1,0,1,0,0,0],w:1.5},"Capitals\nShift\n\n\n\n\nShift",{c:"#cccccc"},"Z",{x:14.5,f:3},"?\n/",{c:"#2277ff",w:1.5},"\n\nCapitals\nShift\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,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:"#bfbf67"},"Home","End"],
[{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"],

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 116 KiB

@ -1,27 +1,27 @@
[{x:3.5,c:"#9988bb"},"Vol\n\n\n\n\n\nMute",{x:10.5,c:"#ccffff"},"Page\n\n\n\n\n\nUp"],
[{y:-0.875,x:2.5,c:"#9988bb"},"Sleep",{x:1},"Vol\n\n\n\n\n\nDown",{x:8.5},"Print\n\n\n\n\n\nScreen",{x:1},"Home\n\n\n\n\n\nDir"],
[{y:-0.875,x:5.5},"Vol\n\n\n\n\n\nUp",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc",a:7},"",""],
[{y:-0.875,c:"#ff4444",a:4,w:1.5},"Esc",{c:"#9988bb"},"Shut\n\n\n\n\n\nDown",{x:14.5},"Email",{c:"#cccccc",a:7,w:1.5},""],
[{y:-0.375,x:3.5,c:"#ccffff",a:4},"Mouse\n\n\n\n\n\nUp",{x:10.5},"Cursor\n\n\n\n\n\nUp"],
[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1,c:"#99ffff",a:4},"Scroll\n\n\n\n\n\nUp",{x:8.5},"Scroll\n\n\n\n\n\nUp",{x:1,c:"#cccccc",a:7},""],
[{y:-0.875,x:5.5},"",{c:"#99ffff",a:4,h:1.5},"Scroll\n\n\n\n\n\nUp",{x:4.5,h:1.5},"Scroll\n\n\n\n\n\nUp",{c:"#cccccc",a:7},""],
[{y:-0.875,c:"#000000",t:"#ff0000",a:4,fa:[0,0,0,1],w:1.5},"Media\n\n\nL2",{c:"#cccccc",t:"#000000",a:7},"",{x:14.5},"",{c:"#000000",t:"#ff0000",a:4,w:1.5},"\n\nMedia\nL2"],
[{y:-0.375,x:3.5,c:"#ccffff",t:"#000000"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
[{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:"#cccccc",a:7},"",{c:"#99de2a",a:4},"F16"],
[{y:-0.875,c:"#2277ff",w:1.5},"Shift\n\n\n\n\n\nLock",{c:"#99de2a"},"F11",{x:14.5},"F20",{c:"#2277ff",w:1.5},"\n\nShift\n\n\n\n\nLock"],
[{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,c:"#cccccc",a:7},"",{x:1,c:"#ffb063",a:4},"Scroll\n\n\n\n\n\nUp",{x:8.5},"Home",{x:1},"Page\n\n\n\n\n\nUp"],
[{y:-0.875,x:5.5,c:"#cccccc",a:7},"",{c:"#ffb063",a:4,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:"#cccccc",a:7},"",{x:6.5,c:"#ccffff",a:4},"Home"],
[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\nL1",{c:"#cccccc",t:"#000000",a:7},"",{x:14.5,c:"#ccffff",a:4},"End",{c:"#cccccc",a:7,w:1.5},""],
[{y:-0.625,x:6.5,c:"#99ffff",a:4,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:"#ccffff"},"Mouse\n\n\n\n\n\nDown",{x:10.5},"Cursor\n\n\n\n\n\nDown"],
[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1,c:"#99ffff",a:4},"Scroll\n\n\n\n\n\nDown",{x:8.5},"Scroll\n\n\n\n\n\nDown",{x:1,c:"#cccccc",a:7},""],
[{y:-0.875,x:5.5},"",{x:6.5},""],
[{y:-0.875,w:1.5},"","",{x:14.5},"",{w:1.5},""],
[{y:-0.375,x:3.5,c:"#ccffff",a:4},"Left\n\n\n\n\n\nClick",{x:10.5},"Page\n\n\n\n\n\nDown"],
[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1,c:"#ccffff",a:4},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#cccccc",a:7},"",{x:1},""],
[{y:-0.75,x:0.5},"","",{x:14.5},"",""],
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#bbaacc",a:4},"Stop\n\n\nBrowser","Reload\n\n\nBrowser"],
[{y:-0.875,x:5.5,c:"#cccccc",a:7},"",{x:6.5,c:"#e6e067",a:4},"Num\n\n\n\n\n\nLock"],
[{y:-0.875,c:"#cccccc",a:7,w:1.5},"",{c:"#e6e067",a:4},"Sleep",{x:14.5},"My\n\n\n\n\n\nComp",{c:"#cccccc",a:7,w:1.5},""],
[{y:-0.625,x:6.5,c:"#ffb063",a:4,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,c:"#cccccc",a:7},"",{x:1,c:"#ffb063",a:4},"Scroll\n\n\n\n\n\nDown",{x:8.5},"End",{x:1},"Page\n\n\n\n\n\nDown"],
[{y:-0.875,x:5.5,c:"#cccccc",a:7},"",{x:6.5},""],
[{y:-0.875,c:"#2277ff",a:4,fa:[0,1,0,0,0,0,0],w:1.5},"Capitals\nShift\n\n\n\n\nShift",{c:"#cccccc",a:7},"",{x:14.5},"",{c:"#2277ff",a:4,fa:[0,1,0,1],w:1.5},"\n\nCapitals\nShift\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#ff8500"},"Left\n\n\n\n\n\nClick",{x:10.5,c:"#ffb063"},"Delete"],
[{y:-0.875,x:2.5,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{x:1,c:"#ff8500"},"Right\n\n\n\n\n\nClick",{x:8.5,c:"#ffb063"},"Insert",{x:1,c:"#cccccc",a:7},""],
[{y:-0.75,x:0.5,c:"#e6e067",a:4},"Mute","Vol\n\n\n\n\n\nDown",{x:14.5,c:"#cccccc",a:7},"",""],
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#cfc82b",a:4},"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:"#9988bb"},"Vol\n\n\n\n\n\nUp",{c:"#bbaacc",h:2},"Stop\n\n\nAudio",{h:2},"Play\n\n\nAudio\n\n\nPause"],
[{x:-3,c:"#9988bb"},"Vol\n\n\n\n\n\nDown"]
[{x:-3,c:"#e6e067"},"Vol\n\n\n\n\n\nUp",{c:"#cfc82b",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"]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

After

Width:  |  Height:  |  Size: 96 KiB

@ -1,24 +1,24 @@
[{x:3.5,c:"#a3a3a3"},"F3",{x:10.5},"F8"],
[{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:"#cccccc",a:7},"",{c:"#a3a3a3",a:4},"F6"],
[{y:-0.875,c:"#ff4444",w:1.5},"Esc",{c:"#a3a3a3"},"F1",{x:14.5},"F10",{w:1.5},"F11"],
[{y:-0.375,x:3.5,c:"#bbc6ed"},"{",{x:10.5,c:"#bed4ba"},"8"],
[{y:-0.875,x:2.5,c:"#bbc6ed"},"@",{x:1},"}",{x:8.5,c:"#bed4ba"},"7",{x:1},"9"],
[{y:-0.875,x:5.5,c:"#bbc6ed"},"&",{h:1.5},"<",{x:4.5,h:1.5},">","|"],
[{y:-0.875,c:"#2277ff",fa:[0,0,0,1],w:1.5},"Media\n\n\nL2",{c:"#bbc6ed"},"!",{x:14.5,c:"#bed4ba"},"/",{c:"#a3a3a3",w:1.5},"F12"],
[{y:-0.375,x:3.5,c:"#bbc6ed"},"(",{x:10.5,c:"#bed4ba"},"5"],
[{y:-0.875,x:2.5,c:"#bbc6ed"},"$",{x:1},")",{x:8.5,c:"#bed4ba"},"4",{x:1},"6"],
[{y:-0.875,x:5.5,c:"#bbc6ed"},"`",{x:6.5},"/"],
[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\nL1",{c:"#bbc6ed",t:"#000000"},"#",{x:14.5,c:"#bed4ba"},"*",{c:"#000000",t:"#ff0000",w:1.5},"\n\nSymbols\nL1"],
[{y:-0.625,x:6.5,c:"#bfbf67",t:"#000000",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:"#bbc6ed"},"[",{x:10.5,c:"#bed4ba"},"2"],
[{y:-0.875,x:2.5,c:"#bbc6ed"},"^",{x:1},"]",{x:8.5,c:"#bed4ba"},"1",{x:1},"3"],
[{y:-0.875,x:5.5,c:"#bbc6ed"},"~",{x:6.5},"\\"],
[{y:-0.875,c:"#cccccc",a:7,w:1.5},"",{c:"#bbc6ed",a:4},"%",{x:14.5,c:"#bed4ba"},"-",{c:"#2277ff",w:1.5},"\n\nCaps Lock"],
[{y:-0.375,x:3.5,c:"#cccccc",a:7},"",{x:10.5,c:"#bed4ba",a:4},"."],
[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1},"",{x:8.5,c:"#bed4ba",a:4},"0",{x:1},"="],
[{y:-0.75,x:0.5,c:"#cccccc",a:7},"","",{x:14.5,c:"#bed4ba",a:4},"+","Enter"],
[{r:30,rx:6.5,ry:4.25,y:-1,x:1,c:"#bfbf67"},"Left","Right"],
[{y:-0.875,x:5.5},"F5",{c:"#ff4444"},"Esc",{x:4.5,c:"#cccccc",a:7},"",{c:"#99de2a",a:4},"F6"],
[{y:-0.875,c:"#2277ff",w:1.5},"Shift\n\n\n\n\n\nLock",{c:"#99de2a"},"F1",{x:14.5},"F10",{c:"#2277ff",w:1.5},"\n\nShift\n\n\n\n\nLock"],
[{y:-0.375,x:3.5,c:"#c4e0bf"},"{",{x:10.5,c:"#89b087"},"8"],
[{y:-0.875,x:2.5,c:"#c4e0bf"},"@",{x:1},"}",{x:8.5,c:"#89b087"},"7",{x:1},"9"],
[{y:-0.875,x:5.5,c:"#c4e0bf"},"&",{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:"#c4e0bf"},"!",{x:14.5,c:"#89b087"},"/",{c:"#2277ff",w:1.5},"\n\nMedia\n\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#c4e0bf"},"(",{x:10.5,c:"#89b087"},"5"],
[{y:-0.875,x:2.5,c:"#c4e0bf"},"$",{x:1},")",{x:8.5,c:"#89b087"},"4",{x:1},"6"],
[{y:-0.875,x:5.5,c:"#c4e0bf"},"`",{x:6.5},"/"],
[{y:-0.875,c:"#000000",t:"#ff0000",w:1.5},"Symbols\n\n\n\n\n\nShift",{c:"#c4e0bf",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:"#c4e0bf"},"[",{x:10.5,c:"#89b087"},"2"],
[{y:-0.875,x:2.5,c:"#c4e0bf"},"^",{x:1},"]",{x:8.5,c:"#89b087"},"1",{x:1},"3"],
[{y:-0.875,x:5.5,c:"#c4e0bf"},"~",{x:6.5},"\\"],
[{y:-0.875,c:"#2277ff",f2:1,w:1.5},"Capitals\nShift\n\n\n\n\nShift",{c:"#c4e0bf"},"%",{x:14.5,c:"#89b087"},"-",{c:"#2277ff",fa:[0,1,0,1],w:1.5},"\n\nCapitals\nShift\n\n\n\nShift"],
[{y:-0.375,x:3.5,c:"#cccccc",a:7},"",{x:10.5,c:"#89b087",a:4},"."],
[{y:-0.875,x:2.5,c:"#cccccc",a:7},"",{x:1},"",{x:8.5,c:"#89b087",a:4},"0",{x:1},"="],
[{y:-0.75,x:0.5,c:"#cccccc",a:7},"","",{x:14.5,c:"#89b087",a:4},"+","Enter"],
[{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"],

File diff suppressed because it is too large Load Diff

@ -10,54 +10,66 @@ no rights reserved, use for any purposes, credit me if you are a nice person
## The Base Layout ##
* The yellow keys are text navigation and manipulation
* The dark blue keys are shift keys: case shift (traditional shift), symbol shift, and media shift
* The light blue keys are modifiers: traditional Control, Option, and C ommand keys, plus Hyper and Meh
* The two green keys, tab and tilde, are in the typical places to ease use of the Application Switcher
* The red keys is Escape, one of the few buttons which is in an atypical position
* 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 layouts. They are in the regular order, with the addition of Hyper and Meh keys. The shift key (case shift) is in the prevalent location. The primo slots usually wasted on Caps Lock and Enter are instead used for the Symbol Shift key which promotes use of the Symbols layer. On the right side of the layout, the Symbol and Media shift keys also double as character keys -- quote and backslash, respectively -- so that touch typists can continue to find those punctuation marks in the right place.
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. 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.
Other than the yellow 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.
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 yellow 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 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 there 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 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 Layout ##
## The Symbols Layer ##
* The periwinkle keys are the eponymous symbols
* The gray keys are F-Keys
* The green keys are a proper number pad
* The red Escape key is found in the "right" location on this layer
* The yellow keys are the *reverse* of the yellow keys on the base layer
* The dark blue Media key means that the Media layer is accessible with the left hand
* 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. This layout also has an Enter key, and importantly the key codes emitted by this number pad are *number pad specific key codes*, not regular keyboard key codes. Some software distinguishes keypad codes so users now have access to a fully realized number pad when using The Ordinary Layout.
The Escape key's true home is in the top left corner of the keyboard, so on this layer it can be found there. And on the Symbols layer, the Tab key switches to become a Media key, so press Symbols then Media to access the Media layer using the left hand.
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 yellow text-nav keys. In the Symbols layer, these are *reversed* from the base layer, with most keys mirrored, but the Delete keys shifted to maintain the directional significance of their arrangement. 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 yellow keys, and Enter is right where it should be.
Finally, consider the turquoise text-nav keys. Here in the Symbols layer, these are *reversed* from the base layer, with most keys mirrored, but the Delete keys shifted to maintain the directional significance of their arrangement. 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 yellow keys, and Enter is right where it should be.
## The Media Layout ##
## The Media Layer ##
* The light turquoise keys move the mouse or the text cursor
* The dark turquoise keys scroll
* The light purple keys signal Web and Audio applications
* The dark purple keys signal the operating system
* The red Escape key is, again, found in the "right" location
* 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
![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 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.
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.
## Switching Between Layers ##
The three Shift keys correspond to three logical layers on top of the ever-present base layer, and are represented in the three LEDs on the keyboard: Capitals (red), Symbols (green), Media (blue). The color of a layer illuminates when the layer is active. Shift keys work in the expected way: press them and the keys shift to that layer; release them and the keys shift back to the base layer. The Ordinary Layout also features a Shift Lock key to keep a layer active indefinitely. Hold down the Shift Lock key then press any Shift key to lock to that layer. Or, hold down the Shift key and press the Shift Lock key; either way works. To revert to the base layer, use the Shift Lock key again in combination with the Shift key.
This layout attempts to treat the Capitals Shift layer the same as the other two Shift layers, but internally they are different which causes some inconsistencies. For instance, it is possible to switch from any layer to any other layer, and to lock to any layer, *except* it is not possible to go from Media to Symbols. You must exit the Media layer before engaging the Symbols layer. Also, the Caps Lock feature must be triggered by first pressing the Shift Lock key then a Capitals Shift key; it doesn't work if you press the Shift key first (instead you get the secondary symbol associated with the Shift Lock button).
## Special Escape Sequence ##
In the Ordinary Layout, the most unsatisfying key location is the Escape key which rightly belongs segregated on its own 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, in the top left corner, was assigned to the tilde button which is traditionally found in that location. The Escape key is important so it features prominently on the other top corner on the left side of the keyboard, and is always there in all layers. Nevertheless, alas, it isn't Ordinary to put the escape in that different corner!
That tilde key has a second function as the Shift Lock key and that makes possible a special feature. To make this layout as Ordinary as possible, the Escape key can *also* be accessed by pressing Shift Lock then the 1 button right next to it. This easy gesture is a way to partially maintain the ease of flicking your wrist to the left and tapping Escape. This gesture works in all layers.

@ -0,0 +1,134 @@
#include "ergodox_ez.h"
#include "debug.h"
#include "action_layer.h"
#define BASE 0
#define SYMB 1
#define PLVR 2
#define ARRW 3
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE] = KEYMAP(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F14,
KC_TAB, KC_Q, KC_W, KC_D, KC_F, KC_K, TG(PLVR),
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_LALT, KC_LGUI,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLD, KC_MUTE,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_VOLU,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_BSPC, CTL_T(KC_ESC), KC_FN1,
//
/*-*/ KC_F15, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
/*-*/ KC_BSLS, 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_RALT, KC_F4, KC_F5, KC_F6,
KC_MPLY, KC_MNXT,
KC_MPRV,
KC_FN3, KC_QUOT, KC_SPC
),
[SYMB] = KEYMAP(
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_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, 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, KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_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_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS,
/*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
/*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
[PLVR] = KEYMAP(
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
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_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ KC_C, KC_V, KC_NO,
//
/*-*/ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
/*-*/ KC_NO, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO,
/*-*/ /*-*/ 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_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_NO, KC_N, KC_M
),
[ARRW] = 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_MS_L, KC_MS_U, KC_MS_D, KC_MS_R,
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,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
//
/*-*/ KC_TRNS, KC_TRNS, KC_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_TRNS,
/*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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[] = {
[SYMB] = ACTION_LAYER_TAP_TOGGLE(SYMB), // FN1 - Momentary Symbols Layer
[PLVR] = ACTION_LAYER_TAP_TOGGLE(PLVR), // FN2 - Momentary Plover Layer
[ARRW] = ACTION_LAYER_TAP_TOGGLE(ARRW), // FN3 - Momentary Arrows Layer
};
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 SYMB:
ergodox_right_led_1_on();
break;
case PLVR:
ergodox_right_led_2_on();
break;
case ARRW:
ergodox_right_led_3_on();
break;
default:
break;
}
};

@ -0,0 +1,50 @@
# Roman's Layout
There are four layers:
- **BASE** is [Norman layout](https://normanlayout.info/).
- **SYMB** for numbers and symbols.
- **PLVR** is optimized for [Plover](http://www.openstenoproject.org).
- **ARRW** for navigation (same fingers for arrows as HJKL on QWERTY).
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)
## Switching
- Tap `SYMB` to toggle **SYMB**.
- Tap `ARRW` to toggle **ARRW**.
- Hold `SYMB` (or `ARRW`) to activate **SYMB** (or **ARRW**) while holding.
- Tap `PLVR` to toggle **PLVR**.
## LEDs
- Red: SYMB is on.
- Green: PLVR is on.
- Blue: ARRW is on.
## 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/).
- Tap `F14`, `F15` to adjust display brightness.
**IMPORTANT**: If you have another keyboard connected via Bluetooth, then
`F14` and `F15` will not work. Turn off that Bluetooth keyboard. Re-plug
you ErgoDox. Enjoy!
## CTRL/ESC
Both of those keys are frequently used in Vim.
- Tap `CTRL/ESC` to send `ESC`.
- Hold `CTRL/ESC` to use as `CTRL`.
## Activate N-rollover
- While in **BASE** hold left `SHIFT` and right `SHIRT` and then tap `N`.
- Then you can activate **PLVR** and use ErgoDox EZ for steno.

@ -0,0 +1,1139 @@
:100000000C94BB020C94FF020C94FF020C94FF02B0
:100010000C94FF020C94FF020C94FF020C94FF025C
:100020000C94FF020C94FF020C94090C0C94DB0C52
:100030000C94FF020C94FF020C94FF020C94FF023C
:100040000C94FF020C94A9210C94FF020C94FF0263
:100050000C94FF020C94341B0C94FF020C94FF02CE
:100060000C94FF020C94FF020C94FF020C94FF020C
:100070000C94FF020C94FF020C94FF020C94FF02FC
:100080000C94FF020C94FF020C94FF020C94FF02EC
:100090000C94FF020C94FF020C94FF020C94FF02DC
:1000A0000C94FF020C94FF020C94FF02480D6A0DA1
:1000B000580E6A0D580EAF0DD20D580E270E3A0E7F
:1000C0002611261163116311A611E411FD13FD130E
:1000D000FD11FD13FE12FE12D113FD13FD13E813E3
:1000E0000000F0A1F0A2F0A335002B002971E1007F
:1000F0003A0000001E00140004001D003B00C10077
:100100001F001A0016001B003C0029712000070088
:1001100008000600E2002A0021000900170019006B
:10012000E300A90022000E000A0005000000AA005A
:100130006900025400002F000000A8006A0031008E
:10014000000030000000AE0023000D001C00130072
:100150000000AB002400180011001000E700AC0004
:10016000250015000C003600E6002C0026000F00CC
:10017000120037003D003400270033000B00380028
:100180003E00C3002E002D002800E5003F000000C7
:1001900001000100010001000100000001001E003B
:1001A0001E0201000100010001001F001F020100EA
:1001B00001000100010020002002010001000100F7
:1001C00001002100210201000100010001002200C4
:1001D00022020100000001000100010000000100F6
:1001E000000001000100010000000100000001000A
:1001F000010023002302010000000100010024008F
:100200002402010001000100010025002502010077
:10021000010001000100260026020100010001008A
:100220000100270027020100010001000100010078
:1002300001000100010000000000000000000000BB
:100240000100000000001E00140004000100000076
:1002500000001F001A001600010019000000200015
:10026000080007000000060000002100150009003A
:10027000000001000000220017000A000000010039
:10028000010001000000000000000100010000006A
:100290000000000000000100000023001C000B0013
:1002A000000001000000240018000D000000010003
:1002B000000025000C000E000000100000002600C9
:1002C00012000F000000110000002700130033008F
:1002D00000000000000000002F00340000000000BB
:1002E0000100010001000100010000000100010007
:1002F000010001000100010001000100F200010005
:100300000100010001000100F000010001000100F6
:1003100001000100F100F4000100010001000100F2
:10032000F300F500000001000100010000000100E1
:1003300000000100010001000000010000000100B8
:100340000100010050000100000001000100010057
:1003500051000100010001000100010052000100F4
:1003600001000100010001004F0001000100010037
:100370000100010001000100010001000100010075
:100380000100010001000000160345007200670033
:100390006F0044006F007800200045005A00000004
:1003A00016034500720067006F0044006F0078007C
:1003B000200045005A0000000403090409026D00F2
:1003C000040100A0FA090400000103010100092151
:1003D00011010001223F000705810308000A0904FA
:1003E00001000103010200092111010001224D0059
:1003F0000705820308000A09040200010300000047
:100400000921110100012236000705830308000AB3
:100410000904030001030000000921110100012269
:1004200039000705840310000112011001000000CB
:1004300008EDFE071301000102000105010906A1F4
:1004400001050719E029E7150025019508750181C7
:100450000205081901290595057501910295017597
:100460000391010507190029771500250195787575
:10047000018102C005010980A10185021601002643
:10048000B7001A01002AB700751095018100C00558
:100490000C0901A1018503160100269C021A010026
:1004A0002A9C02751095018100C005010902A10175
:1004B0000901A10005091901290515002501950566
:1004C000750181029501750381010501093009312A
:1004D0001581257F95027508810609381581257FCC
:1004E000950175088106050C0A38021581257F954E
:1004F0000175088106C0C005010906A1010507199B
:10050000E029E7150025019508750181029501751F
:1005100008810105081901290595057501910295C4
:1005200001750391010507190029FF150025FF95A5
:100530000675088100C000000000000000000000F7
:1005400000010204060A0F17202C3A4A5D71879DAC
:10055000B3C7DAE9F5FCFFFCF5E9DAC7B39D8771AB
:100560005D4A3A2C20170F0A060402010000000021
:1005700000000000000011241FBECFEFDAE0DEBF54
:10058000CDBF04B603FE24C08091EF019091F0012D
:10059000A091F101B091F2018730904BA740B04B90
:1005A000B9F41092EF011092F0011092F101109243
:1005B000F20114BE84B7877F84BF88E10FB6F89438
:1005C00080936000109260000FBEE0E0FFE30995A9
:1005D00011E0A0E0B1E0E6EDF6E402C005900D9276
:1005E000A433B107D9F711E0A4E3B1E001C01D9233
:1005F000AF3EB107E1F70E944D090C9469230C94BA
:10060000000061110BC0FC018281882321F085EE7E
:100610000E94BA0F03C085EE0E94821080E090E035
:10062000089508956091B1017091B2018091B30174
:100630009091B4010E94601A56985E9825982D9862
:1006400026982E9827982F98823039F0833041F0E1
:10065000813041F4259A2D9A0895269A2E9A08956C
:10066000279A2F9A08950C94120356985E9825980D
:100670002D9826982E9827982F988FEF90E090939A
:1006800089008093880090938B0080938A009093D8
:100690008D0080938C00259A2D9A2FEF80E792E0B1
:1006A000215080409040E1F700C00000269A2E9A29
:1006B0002FEF80E792E0215080409040E1F700C0AA
:1006C0000000279A2F9A2FEF80E792E02150804078
:1006D0009040E1F700C0000025982D982FEF80E7AB
:1006E00092E0215080409040E1F700C00000269841
:1006F0002E982FEF80E792E0215080409040E1F764
:1007000000C0000027982F9856985E9825982D983D
:1007100026982E9827982F98089589EA809380002C
:1007200089E08093810024982C983F988AB18F7437
:100730008AB96E98479A8BB1806B8BB9769A0E9472
:1007400035030C94110380E2809300018091340101
:1007500081110EC00E94F20381E0809334012FEFDB
:1007600083ED90E3215080409040E1F700C000000D
:1007700080E40E94F8038093000181112EC00E9442
:10078000220480930001811128C00E9422048093DA
:100790000001811122C08FE30E9422048093000196
:1007A00081111BC00E941A0480E40E94F803809308
:1007B0000001811112C08CE00E942204809300018C
:1007C00081110BC00E94220480930001811105C099
:1007D0008FE30E942204809300010E941A048091FA
:1007E000000108951092B9008AE08093B80008953E
:1007F00094EA9093BC009091BC0097FFFCCF90913D
:10080000B900987F983021F0903111F081E008957F
:100810008093BB0084E88093BC008091BC0087FF7C
:10082000FCCF8091B900887F883111F0803471F756
:1008300080E0089584E98093BC008091BC0084FD31
:10084000FCCF08958093BB0084E88093BC00809126
:10085000BC0087FFFCCF9091B900987F81E098326F
:1008600009F480E0089584E88093BC008091BC0086
:1008700087FFFCCF8091BB0008958091000181111A
:1008800015C080E40E94F8038093000181110CC020
:1008900082E10E94220480930001811105C08FEF44
:1008A0000E942204809300010E941A0484B1807F78
:1008B00084B985B1807F85B98AB1837F8AB98BB1CC
:1008C000837F8BB93E98469808950E94A303809336
:1008D00000010E943D0480B38C7080BB81B3836FA4
:1008E00081BBA6E3B1E0E4E4F1E08EE08E0F11926B
:1008F0001D928E13FCCF0C948D03BF92CF92DF928A
:10090000EF92FF920F931F93CF93DF93809100019B
:10091000882379F0809135018F5F809335018111B3
:1009200008C00E94A30380930001811102C00E94AD
:10093000350306E311E0C0E0D0E0DD24D39482E08B
:10094000C82EEE24E394F12CC730D10500F5809138
:100950000001811164C080E40E94F80380930001CB
:10096000811112C082E10E94220480930001811152
:100970000BC0C7010C2E01C0880F0A94EAF78095BE
:100980000E942204809300010E941A0448C0CA30C9
:10099000A1F028F4C83059F0C93061F005C0CC305E
:1009A00089F070F0CD3089F0209A289810C0219AF3
:1009B00029980DC0229A2A980AC0239A2B9807C01A
:1009C000529A01C0539A5B9802C03E9A469890EAA8
:1009D0009A95F1F79FB1799902C082E001C080E059
:1009E00091709D25982B7C9902C084E001C080E025
:1009F000892B7D9902C038E001C030E0832B7E99BD
:100A000002C020E101C020E0822B9FB19095991F88
:100A10009927991F9295990F907E892B0FC08091ED
:100A20000001811149C080E40E94F8038093000115
:100A3000882379F1B12C0E941A048B2DF801908142
:100A4000981719F08083C09201010E943D042196FD
:100A50000F5F1F4FCE30D10509F076CF8091010195
:100A6000882361F1815080930101882339F08FE957
:100A70009FE00197F1F700C0000020C0A4E4B1E0BE
:100A8000E6E3F1E0CF01825F91919D938E13FCCF5D
:100A900015C083E10E942204809300018111CACF16
:100AA00081E40E94F803809300018111C3CF0E946A
:100AB0003304B82EB094BFCF80E0C0CF0E94330380
:100AC00081E0DF91CF911F910F91FF90EF90DF9028
:100AD000CF90BF900895E82FF0E0EC5BFE4F80814F
:100AE000089508958B3B910578F4883A910540F577
:100AF000853A9105D0F48430910508F0B1C0813079
:100B0000910509F4ADC06BC0803E910508F467C043
:100B1000883E910508F4A4C09C01205F3109203172
:100B2000310508F05CC090650895853A910509F497
:100B300059C0863A910509F058C082E890E40895BA
:100B4000883A910509F454C0893A910509F453C0D3
:100B50008A3A910509F452C08B3A910509F451C0C3
:100B60008C3A910509F450C08D3A910509F44FC0B3
:100B7000803B910509F44EC08E3A910509F44DC0B1
:100B80008F3A910509F44CC0813B910509F44BC0A3
:100B9000823B910509F44AC0833B910509F449C0A1
:100BA000843B910509F448C0853B910509F447C091
:100BB000863B910509F446C0873B910509F445C081
:100BC000883B910509F444C0893B910509F443C071
:100BD0008A3B910509F442C080E094E4089580E0E6
:100BE00090E0089581E890E4089583E890E4089502
:100BF00082EE94E4089589EE94E408958AEE94E4F4
:100C0000089585EB94E4089586EB94E4089587EBCA
:100C100094E408958CEC94E408958DEC94E40895A4
:100C200083E895E408958AE895E4089582E995E4D7
:100C3000089584E995E4089581E296E4089583E2B5
:100C400096E4089584E296E4089585E296E4089592
:100C500086E296E4089587E296E408958AE296E4AF
:100C60000895089596E0799FF001112494E5899FF5
:100C7000E00DF11D1124E60FF11DEE0FFF1FE851ED
:100C8000FF4F859194910895880F991FFC01E05AB8
:100C9000F040859194910895880F991FFC01E052CE
:100CA000FF4F85919491089526E0729FF0011124E1
:100CB00044E5849FE00DF11D1124E60FF11DEE0FB8
:100CC000FF1FE851FF4F859194919C013A952115A2
:100CD0004FE1340708F41CC13F512115304120F485
:100CE0009F700E944C0608959C013053211530419D
:100CF00018F49927906C0895811520E5920771F4F6
:100D00000E9421144FEF84E39CE0415080409040CA
:100D1000E1F700C000000E94591BFAC0813020E5B5
:100D2000920731F48091CD0181608093CD01F0C0B4
:100D30009C0130552115304108F051C0292F33272F
:100D40002F70332721303105D9F4AC01437055277A
:100D500002C0220F331F4A95E2F73C68AC0164E001
:100D6000440F551F6A95E1F744275370242B352B08
:100D700073E0880F991F7A95E1F7807699271DC057
:100D80002230310529F4982F8827816F906A0895C1
:100D900023303105A9F4AC014370552721E030E040
:100DA00002C0220F331F4A95E2F73C6843E0880FE8
:100DB000991F4A95E1F7807E9770822B932B0895B7
:100DC00024303105E1F4AC014370552721E030E0D7
:100DD00002C0220F331F4A95E2F73A68E7CF9C0121
:100DE00030572115304118F49F70906208959C018E
:100DF00030582115304118F49F70906A0895803E54
:100E00009105E0F4803C910558F58133910509F492
:100E10006FC048F48932910509F463C08A329105A4
:100E200009F46DC072C089339105E9F082389105EB
:100E3000D1F08533910509F44DC067C0833E91051B
:100E400081F138F4803E9105B9F0823E9105D9F0E8
:100E50005CC0863E910561F1873E9105A1F155C0C8
:100E60000E94440608952091E00120FD02C021FF68
:100E70004CC080EE90E049C08091E00180FFF9CF46
:100E800089E390E042C08091E00182FF0EC0809132
:100E9000E00184FF03C080E090E037C083EE90E083
:100EA00034C08091E00182FFF2CF82EE90E02DC04D
:100EB0008091E00183FF0BC08091E00184FDEBCFC6
:100EC00087EE90E022C08091E00183FFF5CF86EEAF
:100ED00090E01BC08091E00185FF07C089E290E0AF
:100EE00014C08091E00185FFF9CF85E390E00DC04B
:100EF0008091E00186FF07C08AE290E006C0809101
:100F0000E00186FFF9CF81E390E00E947205089529
:100F1000089508950C948907809162010895CF93F4
:100F2000DF9300D01F92CDB7DEB79C018091E60120
:100F3000843019F593E099833B832A839093E900E9
:100F40008FEF9091E800815095FD06C095ED9A9540
:100F5000F1F700008111F5CF8091E80085FF0DC009
:100F600040E050E063E070E0CE0101960E94F90994
:100F70008091E8008E778093E8000F900F900F909B
:100F8000DF91CF910895CF93DF9300D01F92CDB71B
:100F9000DEB72091E601243021F522E029839B83EE
:100FA0008A8383E08093E9008FEF9091E80081507D
:100FB00095FD06C095ED9A95F1F700008111F5CFEA
:100FC0008091E80085FF0DC040E050E063E070E0F4
:100FD000CE0101960E94F9098091E8008E778093F6
:100FE000E8000F900F900F90DF91CF91089520911E
:100FF000E6012430F1F422E02093E9002FEF309154
:10100000E800215035FD06C035ED3A95F1F70000B6
:101010002111F5CF2091E80025FF0BC040E050E002
:1010200065E070E00E94F9098091E8008E77809376
:10103000E8000895CF93DF93EC019091E60194309E
:1010400009F046C080910C018823D9F080910D01F0
:101050008823B9F09093E9008FEF9091E8008150D8
:1010600095FD06C095E19A95F1F700008111F5CF45
:101070008091E80085FF2CC040E050E060E170E026
:1010800017C081E08093E9008FEF9091E8008150D4
:1010900095FD06C095ED9A95F1F700008111F5CF09
:1010A0008091E80085FF14C040E050E068E070E007
:1010B000CE010E94F9098091E8008E778093E800C4
:1010C00080E1FE01A2E5B1E001900D928A95E1F781
:1010D000DF91CF9108958091E501811109C00E94AF
:1010E0008E0B0E94EB0B8091E20084608093E20003
:1010F00008951092E501089508950C9496210E9498
:10110000EF1A0E949C210E94910E0C948A0742E0E3
:1011100061EC81E00E94080B42E061EC82E00E94F9
:10112000080B42E061EC83E00E94080B42E161ECB5
:1011300084E00C94080B8091E801833009F455C0D9
:1011400030F4813071F0823009F48EC008958A3015
:1011500009F47AC08B3009F460C0893009F09CC072
:1011600020C08091E701813A09F096C08091E800A3
:10117000877F8093E8008091EB019091EC01892BAF
:1011800021F460E182E591E003C060E080E090E05E
:1011900070E00E94440A8091E8008B778093E80019
:1011A00008958091E701813209F076C08091EB01CA
:1011B0009091EC01009719F0039709F06DC08091B0
:1011C000E800877F8093E8008091E80082FD05C0F9
:1011D0008091E6018111F8CF5FC08091F10080938A
:1011E00062018091E8008B7753C08091E701813ADA
:1011F00009F052C08091EB019091EC01892B09F02C
:101200004BC08091E800877F8093E8008091E800E0
:1012100080FFFCCF80910C0136C08091E7018132C4
:10122000D9F58091EB019091EC01892BA9F5809182
:10123000E800877F8093E8000E943D0B8091E901E0
:1012400080930C010C9421148091E701813221F5E7
:101250008091E800877F8093E8000E943D0B809199
:10126000EA018093630108958091E701813AA1F436
:101270008091E800877F8093E8008091E80080FFFC
:10128000FCCF809163018093F1008091E8008E771C
:101290008093E8000C943D0B089584B7877F84BF4A
:1012A00088E10FB6F89480936000109260000FBE42
:1012B00090E080E80FB6F89480936100909361000D
:1012C0000FBE0E94E00E0E948E0B0E94EB0B8091DD
:1012D000E20084608093E20078940E94710E0E9484
:1012E000E20E82E091E00E948C0E0E9484218091A7
:1012F000E601853069F40E94B01A8091E4018823E8
:10130000B1F30E94DB1A882391F30E94E309EFCF27
:101310000E94E80EECCF292F332723303105C9F086
:1013200064F42130310581F02230310509F043C0E9
:101330008DE690E02CEB33E042C021323105F1F034
:101340002232310541F137C082E190E029E234E0F8
:1013500036C099278130910541F08230910541F0E6
:10136000892B49F5E8EBF3E005C0E0EAF3E002C0C1
:10137000E8E8F3E0849190E09F0121C06430D8F464
:10138000E62FF0E0EE0FFF1FEE5DFE4F2081318172
:1013900089E090E014C0643070F470E0FB01EE0F5F
:1013A000FF1FE65EFE4F20813181FB01EA5EFE4FAA
:1013B000808190E004C080E090E020E030E0FA011D
:1013C00031832083089580E189BD82E189BD09B41C
:1013D00000FEFDCF8091D8008F7D8093D800809152
:1013E000E00082608093E0008091E00081FDFCCF0E
:1013F0000895CF92DF92EF92FF920F931F93CF93B6
:10140000DF93EC018B016A010E945C0B811133C0F8
:10141000C114D10439F0F60180819181081B190BA8
:10142000C80FD91FE12CF12C0115110519F180917C
:10143000E80085FD16C08091E8008E778093E80073
:10144000C114D10449F0F60180819181E80EF91EA2
:10145000F182E08285E00FC00E945C0B882321F3BB
:101460000AC089918093F10001501109FFEFEF1A32
:10147000FF0ADACF80E0DF91CF911F910F91FF90AB
:10148000EF90DF90CF9008952091ED013091EE0123
:101490002617370748F06115710539F42091E800E7
:1014A0002E772093E80001C0B90140E06115710575
:1014B000A9F12091E601222309F443C0253009F463
:1014C00042C02091E80023FD40C02091E80022FDA9
:1014D00032C02091E80020FFE9CF4091F300209135
:1014E000F20030E0342BFC01CF016115710559F099
:1014F0002830310540F481918093F10061507109E9
:101500002F5F3F4FF1CF41E02830310509F040E037
:101510002091E8002E772093E800C8CF4111C9CF71
:101520000AC08091E601882361F0853061F08091E6
:10153000E80083FD0AC08091E80082FFF2CF80E0DE
:10154000089582E0089583E0089581E00895209150
:10155000ED013091EE012617370748F0611571054E
:1015600039F42091E8002E772093E80001C0B901FA
:10157000FC0120E06115710591F18091E60188235D
:1015800009F440C0853009F43FC08091E80083FD34
:101590003DC08091E80082FD2FC08091E80080FF6F
:1015A000E9CF2091F3008091F20090E0922B611539
:1015B000710559F08830910540F424912093F10091
:1015C0003196615071090196F2CF21E0089709F038
:1015D00020E08091E8008E778093E800CBCF211146
:1015E000CCCF0AC08091E601882361F0853061F09C
:1015F0008091E80083FD0AC08091E80082FFF2CF6D
:1016000080E0089582E0089583E0089581E00895E0
:10161000982F973058F59093E900981739F070910A
:10162000EC002091ED005091F00003C0242F762FA4
:1016300050E021FF19C03091EB003E7F3093EB006A
:101640003091ED003D7F3093ED003091EB00316043
:101650003093EB007093EC002093ED005093F0007A
:101660002091EE0027FF07C09F5FD3CF8F7080933C
:10167000E90081E0089580E008958091E70187FF07
:1016800011C08091E80082FD05C08091E6018111C2
:10169000F8CF11C08091E8008B770BC08091E601F4
:1016A000882349F08091E80080FFF8CF8091E8001E
:1016B0008E778093E80008952091E4003091E50052
:1016C00095E64091EC00842F817040FF22C080910C
:1016D000E80080FD1CC08091E601882391F08530F0
:1016E00091F08091EB0085FD10C04091E400509195
:1016F000E5004217530729F39A01915011F784E04E
:10170000089582E0089583E0089581E0089580E0DF
:1017100008954091E80042FFDECF08950E94FC0B3F
:101720000E94040CE0EEF0E0808181608083E8EDAF
:10173000F0E080818F77808319BCA7EDB0E08C91B9
:101740008E7F8C9380818F7E80831092E501089537
:101750000F931F93CF93DF930E94FC0B0E94040C06
:10176000C8EDD0E088818F778883888180688883FE
:1017700088818F7D888319BC1092E6011092E20166
:101780001092E4011092E30100EE10E0F801808174
:101790008B7F808388818160888342E060E080E085
:1017A0000E94080BE1EEF0E080818E7F8083E2EE04
:1017B000F0E0808181608083808188608083F8018F
:1017C00080818E7F8083888180618883DF91CF9143
:1017D0001F910F910895E8EDF0E080818F7E808366
:1017E000E7EDF0E080818160808384E082BF81E06A
:1017F0008093E5010C94A80BE8EDF0E080818E7FEA
:1018000080831092E20008951092DA001092E100B5
:1018100008951F920F920FB60F9211242F933F93AA
:101820004F935F936F937F938F939F93AF93BF93E8
:10183000EF93FF938091E10082FF0BC08091E20063
:1018400082FF07C08091E1008B7F8093E1000E94BE
:10185000700E8091DA0080FF1FC08091D80080FF59
:101860001BC08091DA008E7F8093DA008091D900CE
:1018700080FF0DC080E189BD82E189BD09B400FE11
:10188000FDCF81E08093E6010E946B0805C019BC82
:101890001092E6010E9479088091E10080FF19C052
:1018A0008091E20080FF15C08091E2008E7F8093DE
:1018B000E2008091E20080618093E2008091D80094
:1018C00080628093D80019BC85E08093E6010E9475
:1018D0007D088091E10084FF30C08091E20084FFA8
:1018E0002CC080E189BD82E189BD09B400FEFDCF35
:1018F0008091D8008F7D8093D8008091E1008F7E09
:101900008093E1008091E2008F7E8093E2008091DD
:10191000E20081608093E2008091E201882311F06F
:1019200084E007C08091E30087FD02C081E001C030
:1019300083E08093E6010E947F088091E10083FFAD
:1019400029C08091E20083FF25C08091E100877F5C
:101950008093E10082E08093E6011092E2018091A1
:10196000E1008E7F8093E1008091E2008E7F809382
:10197000E2008091E20080618093E20042E060E05A
:1019800080E00E94080B8091F00088608093F00056
:101990000E947C08FF91EF91BF91AF919F918F9131
:1019A0007F916F915F914F913F912F910F900FBE5B
:1019B0000F901F9018951F920F920FB60F9211243F
:1019C0002F933F934F935F936F937F938F939F9347
:1019D000AF93BF93CF93DF93EF93FF93C091E90051
:1019E000CF708091EC00D82FD17080FDD0E810929C
:1019F000E9008091F000877F8093F00078940E9446
:101A00001F0D1092E9008091F00088608093F00033
:101A1000CD2BCF70C093E900FF91EF91DF91CF9173
:101A2000BF91AF919F918F917F916F915F914F91F6
:101A30003F912F910F900FBE0F901F9018951F93FD
:101A4000CF93DF93CDB7DEB7AA970FB6F894DEBF7A
:101A50000FBECDBFE7EEF1E088E08E0F9091F10070
:101A600091938E13FBCF0E949B088091E80083FF27
:101A70001FC18091E7019091E801492F50E04A3061
:101A8000510508F015C1FA01EA5AFF4F0C941E23C4
:101A9000803881F0823809F00BC18091EB018F70A2
:101AA0008093E9008091EB0085FB882780F91092F4
:101AB000E90006C08091E3019091E40191118260F8
:101AC0009091E800977F9093E8008093F100109246
:101AD000F100C8C0282F2D7F09F0EAC0882319F033
:101AE000823061F0E5C08091E901813009F0E0C009
:101AF000933009F080E08093E4012BC08091E901EC
:101B0000811127C08091EB018F7009F4D1C08093BF
:101B1000E9002091EB0020FF1CC0933021F480915C
:101B2000EB00806214C09091EB0090619093EB0009
:101B300021E030E0A90102C0440F551F8A95E2F769
:101B40004093EA001092EA008091EB008860809355
:101B5000EB001092E9008091E800877F86C0811138
:101B6000A7C01091E9011F778091E3008078812B55
:101B70008093E3008091E800877F8093E8000E94D3
:101B80003D0B8091E80080FFFCCF8091E3008068EE
:101B90008093E300111102C082E001C083E08093D2
:101BA000E60186C08058823008F082C08091E90149
:101BB0009091EA018C3D53E0950779F583E08A83A3
:101BC0008AE289834FB7F894DE01139620E03EE065
:101BD00051E2E32FF0E050935700E49120FF03C05F
:101BE000E295EF703F5FEF708E2F90E0EA3010F0DB
:101BF000C79601C0C0968D939D932F5F243149F7FE
:101C00004FBF8091E800877F8093E8006AE270E030
:101C1000CE0101960E94440A14C0AE014F5F5F4F8F
:101C20006091EB010E948B09BC01892B09F440C033
:101C30009091E800977F9093E80089819A810E94B3
:101C4000A70A8091E8008B778093E80031C0803844
:101C500079F58091E800877F8093E8008091E20128
:101C60008093F1008091E8008E778093E8000E94D5
:101C70003D0B1EC081111CC09091E9019230C0F44F
:101C80008091E800877F8093E8009093E2010E94B2
:101C90003D0B8091E201811106C08091E30087FD38
:101CA00002C081E001C084E08093E6010E948708C1
:101CB0008091E80083FF0AC08091E800877F8093CD
:101CC000E8008091EB0080628093EB00AA960FB64B
:101CD000F894DEBF0FBECDBFDF91CF911F91089565
:101CE0000895CF938091E6018823A1F0C091E90087
:101CF000CF709091EC00892F817090FD80E8C82B07
:101D00001092E9008091E80083FD0E941F0DCF70C2
:101D1000C093E900CF910895909369018093680181
:101D20000895E0916801F0916901309721F00190E8
:101D3000F081E02D099480E00895E0916801F09130
:101D40006901309721F00280F381E02D0994089514
:101D5000E0916801F0916901309721F00480F581EC
:101D6000E02D099408952091660130916701821752
:101D7000930771F09093670180936601E091680189
:101D8000F0916901309721F00680F781E02D0994E8
:101D9000089520916401309165018217930771F0D5
:101DA0009093650180936401E0916801F09169016D
:101DB000309721F00084F185E02D0994089508956D
:101DC0000C94DF0E0E94F51A0E9465040C94BB1B54
:101DD000CF92DF92EF92FF920F931F93CF93DF93F7
:101DE000CDB7DEB72B970FB6F894DEBF0FBECDBFD1
:101DF0000E947D048BE6C82E81E0D82E00E010E022
:101E0000E02E802F0E946B05F60141916F01F42EA8
:101E1000F826B1F40F5F1F4F0E30110589F78FEFD1
:101E200089838A831B820E94FE1A8160782F9D839A
:101E30008C8349815A816B818D810E948B0F40C0B8
:101E40009091CD0191FF04C08B870E9471058B8515
:101E500020E030E04F2D50E0922FBA01022E02C058
:101E6000759567950A94E2F760FF24C02E83EF8290
:101E700021E030E0690102C0CC0CDD1C9A95E2F74C
:101E800090E08C219D21892B09F420E028870E9475
:101E9000FE1A8160782F9A8789874E815F816885D5
:101EA0008A850E948B0FF801E559FE4F8081C82674
:101EB000C08206C02F5F3F4F2630310569F6AACF9A
:101EC0000E94A21E10916A010E94910E1817A1F0A3
:101ED0000E94910E80936A012B960FB6F894DEBF94
:101EE0000FBECDBFDF91CF911F910F91FF90EF906B
:101EF000DF90CF900C948A072B960FB6F894DEBF34
:101F00000FBECDBFDF91CF911F910F91FF90EF904A
:101F1000DF90CF900895CF93DF93CDB7DEB72B97A7
:101F20000FB6F894DEBF0FBECDBF4F8358876987C9
:101F30007A878B87DE01119686E0FD0111928A95E2
:101F4000E9F785E0FE01379601900D928A95E1F759
:101F500049815A816B817C818D819E810E94BB1653
:101F60002B960FB6F894DEBF0FBECDBFDF91CF9199
:101F700008950895CF93882309F4C2C0C82F8238EA
:101F800059F40E94910E81FDBBC089E30E9464193F
:101F90000E94311A89E30CC0833879F40E94910EB3
:101FA00080FDAEC083E50E9464190E94311A83E56A
:101FB0000E94A619CF910C94311A843859F40E94CA
:101FC000910E82FD9DC087E40E9464190E94311A1F
:101FD00087E4EECF8CEF8C0F813A48F48C2F0E946F
:101FE000E92081118DC08C2F0E946419E3CF80E21B
:101FF0008C0F883048F4C77081E001C0880FCA9503
:10200000EAF70E94EA19D6CF8BE58C0F833078F47B
:10201000C53A29F0C63A31F083E890E005C081E87E
:1020200090E002C082E890E0CF910C94B30E88E576
:102030008C0F833108F064C0C83A39F1C93A41F1D4
:10204000CA3A49F1CB3A51F1CC3A59F1CD3A61F162
:10205000C03B69F1CE3A71F1CF3A79F1C13B81F1E0
:10206000C23B89F1C33B91F1C43B99F1C53BA1F15E
:10207000C63BA9F1C73BB1F1C83BB9F1C93BC1F1BE
:10208000CA3BC9F180E090E038C082EE90E035C0F4
:1020900089EE90E032C08AEE90E02FC085EB90E0B0
:1020A0002CC086EB90E029C087EB90E026C08CEC3A
:1020B00090E023C08DEC90E020C083E891E01DC04B
:1020C0008AE891E01AC082E991E017C084E991E0C2
:1020D00014C081E292E011C083E292E00EC084E27B
:1020E00092E00BC085E292E008C086E292E005C073
:1020F00087E292E002C08AE292E0CF910C94C90E8E
:10210000CF910895882309F44BC0823859F40E9476
:10211000910E81FF45C089E30E9464190E94311A23
:1021200089E30CC0833871F40E94910E80FF38C09F
:1021300083E50E9464190E94311A83E50E94A61962
:102140000C94311A843859F40E94910E82FF28C0F1
:1021500087E40E9464190E94311A87E4EFCF9CEF54
:10216000980F913A58F390E2980F983050F4877096
:1021700091E001C0990F8A95EAF7892F0E94F01922
:10218000DFCF9BE5980F933020F480E090E00C9433
:10219000B30E885A833120F480E090E00C94C90E8D
:1021A0000895882321F00E94EA190C94311A0895A9
:1021B000882321F00E94F0190C94311A0895BF92DF
:1021C000CF92DF92EF92FF920F931F93CF93DF9303
:1021D00000D000D000D0CDB7DEB725E0FC01DE0195
:1021E000119601900D922A95E1F7FC01D0801181A2
:1021F0000281258122952F7043815481452B09F45A
:10220000FCC21F3F21F4FFEFDF1609F4F6C27C0188
:102210002E830E94B90FD9821A8369817A81802F17
:102220000E946019182FB92E0E9415190E94DC1700
:102230002E81002319F00E94071A2E81EB2DE295C2
:10224000EF70F0E0E05AFF4F0C941E238B2D807F3F
:102250009B2D9F70F92E882319F0F29480EFF822BD
:10226000002389F0FF2009F475C280E2810F8830D5
:1022700020F48F2D0E94EA1903C08F2D0E94FA19B5
:102280000E94311A67C2812F0E948210FF2009F438
:10229000B4C2105E8F2D183018F40E94F01902C0DD
:1022A0000E94001A26960FB6F894DEBF0FBECDBF6F
:1022B000DF91CF911F910F91FF90EF90DF90CF9022
:1022C000BF900C94311A3B2D307F8B2D8F703032A4
:1022D00011F08295807F112319F0113021F12CC06B
:1022E0000023B9F0222309F4A0C1213009F09DC1D7
:1022F00026960FB6F894DEBF0FBECDBFDF91CF910B
:102300001F910F91FF90EF90DF90CF90BF900C94B2
:102310001A1A222319F0213009F46FC28E830E9409
:102320001D1A8E8196C1002321F0223008F065C26B
:102330007CC1211162C28DC1002321F0222309F446
:1023400074C108C2222309F484C119C22B2D269519
:102350002695237030E02115310521F0213031051B
:10236000D1F04BC2002321F0812F9B2D937002C02E
:1023700080E090E026960FB6F894DEBF0FBECDBF8A
:10238000DF91CF911F910F91FF90EF90DF90CF9051
:10239000BF900C94B30E002321F0812F9B2D9370DE
:1023A00002C080E090E026960FB6F894DEBF0FBE24
:1023B000CDBFDF91CF911F910F91FF90EF90DF90F4
:1023C000CF90BF900C94C90E812F002319F00E946A
:1023D000AA1D02C00E94121E26960FB6F894DEBFF8
:1023E0000FBECDBFDF91CF911F910F91FF90EF9066
:1023F000DF90CF90BF900C94971E8B2D837009F0C7
:102400007BC00111FAC1812F829586958770880F54
:10241000880F912F9F70C92ED12CE12CF12C082E02
:1024200004C0CC0CDD1CEE1CFF1C0A94D2F714FF78
:1024300012C04FE050E060E070E004C0440F551F50
:10244000661F771F8A95D2F7CB01BA016095709508
:102450008095909503C060E070E0CB012B2D269510
:1024600026952370422F50E042305105D9F0433079
:10247000510569F16C297D298E299F29413051052B
:1024800051F126960FB6F894DEBF0FBECDBFDF9197
:10249000CF911F910F91FF90EF90DF90CF90BF9061
:1024A0000C9403186C297D298E299F2926960FB636
:1024B000F894DEBF0FBECDBFDF91CF911F910F917A
:1024C000FF90EF90DF90CF90BF900C941F180E9468
:1024D0000318C701B60126960FB6F894DEBF0FBEEB
:1024E000CDBFDF91CF911F910F91FF90EF90DF90C3
:1024F000CF90BF900C94E717002319F08B2D8170BB
:1025000001C08695882309F478C1812F829586952C
:102510008770880F880F912F9F70C92ED12CE12CC6
:10252000F12C082E04C0CC0CDD1CEE1CFF1C0A9400
:10253000D2F714FF12C04FE050E060E070E004C03A
:10254000440F551F661F771F8A95D2F7CB01BA013A
:10255000609570958095909503C060E070E0CB0128
:102560002B2D269526952370422F50E042305105A1
:10257000D9F04330510569F16C297D298E299F29B5
:102580004130510551F126960FB6F894DEBF0FBECB
:10259000CDBFDF91CF911F910F91FF90EF90DF9012
:1025A000CF90BF900C94DD186C297D298E299F292E
:1025B00026960FB6F894DEBF0FBECDBFDF91CF9148
:1025C0001F910F91FF90EF90DF90CF90BF900C94F0
:1025D000F9180E94DD18C701B60126960FB6F894C7
:1025E000DEBF0FBECDBFDF91CF911F910F91FF9046
:1025F000EF90DF90CF90BF900C94C118103FD1F1B5
:1026000018F4103E50F4A1C0123F09F463C008F45E
:102610004CC0133F09F473C098C01F708B2D8F718D
:102620000023A1F00E945A18812F26960FB6F89425
:10263000DEBF0FBECDBFDF91CF911F910F91FF90F5
:10264000EF90DF90CF90BF900C94D1100E947B1838
:10265000812F26960FB6F894DEBF0FBECDBFDF9157
:10266000CF911F910F91FF90EF90DF90CF90BF908F
:102670000C94D8100023A9F02111BFC08B2D8F71AD
:1026800026960FB6F894DEBF0FBECDBFDF91CF9177
:102690001F910F91FF90EF90DF90CF90BF900C941F
:1026A000A018223008F0A9C0E9CF0023A9F08B2D93
:1026B0008F7126960FB6F894DEBF0FBECDBFDF91A7
:1026C000CF911F910F91FF90EF90DF90CF90BF902F
:1026D0000C945A18002359F38B2D8F7126960FB640
:1026E000F894DEBF0FBECDBFDF91CF911F910F9148
:1026F000FF90EF90DF90CF90BF900C947B18002359
:1027000099F08B2D8F7126960FB6F894DEBF0FBE11
:10271000CDBFDF91CF911F910F91FF90EF90DF9090
:10272000CF90BF900C94451826960FB6F894DEBF54
:102730000FBECDBFDF91CF911F910F91FF90EF9012
:10274000DF90CF90BF900C943B180023A9F0222378
:1027500009F4ADCF812F26960FB6F894DEBF0FBED9
:10276000CDBFDF91CF911F910F91FF90EF90DF9040
:10277000CF90BF900C94BA0F222309F4ADCF812FD4
:1027800026960FB6F894DEBF0FBECDBFDF91CF9176
:102790001F910F91FF90EF90DF90CF90BF900C941E
:1027A00082104B2D4F70612FC7010E9401032696A6
:1027B0000FB6F894DEBF0FBECDBFDF91CF911F9152
:1027C0000F91FF90EF90DF90CF90BF900C945F1728
:1027D0004B2D4F70612FC70126960FB6F894DEBFC0
:1027E0000FBECDBFDF91CF911F910F91FF90EF9062
:1027F000DF90CF90BF900C94310626960FB6F894D8
:10280000DEBF0FBECDBFDF91CF911F910F91FF9023
:10281000EF90DF90CF90BF9008950E94071A0E941A
:10282000171A0E94DC190E94311A0E94481F0E9448
:10283000971E80E090E00E94B30E80E090E00C9440
:10284000C90E0E94F7190C940D140E945519292FD6
:1028500022952F7030E02C3031054CF42A303105B0
:102860006CF4225031092230310588F407C02C3035
:10287000310549F02F30310531F009C0803E48F074
:10288000803F29F406C093FB882780F9089580E0F3
:10289000089581E00895CF93DF9300D000D01F9278
:1028A000CDB7DEB70F900F900F900F900F90DF9184
:1028B000CF910895CF93DF9300D000D000D0CDB753
:1028C000DEB726960FB6F894DEBF0FBECDBFDF9100
:1028D000CF9108951F93CF93DF93C091790116E0B4
:1028E00080917A01C81799F0D0E01C9FF0011D9FDC
:1028F000F00D1124E558FE4F4081518162817381B2
:10290000848195810E945A142196C770E9CFDF9186
:10291000CF911F9108954091AB015091AC0160910E
:10292000AD017091AE018091AF019091B0010C9416
:102930005A148091B00182958F7009F054C0809133
:10294000AD01882309F44FC080917901A0917A01EB
:102950006091AB017091AC014091AE015091AF011B
:10296000B6E08A1709F43FC090E041155105C1F166
:102970007F3F11F46F3FA1F1B89FF001B99FF00DB7
:102980001124E558FE4F218172132AC02081621361
:1029900027C02281211124C02381348124173507C7
:1029A00010F421503109241B350B283C3105C0F4AB
:1029B0002091B0012F7020612093B00126E0289F64
:1029C000F001299FF00D1124E058FE4F80818F7097
:1029D000806180838BEA91E00E94DF100C946A147E
:1029E00001968770BECF0895CF92DF92EF92FF924B
:1029F0000F931F93CF93DF93CDB7DEB762970FB6D8
:102A0000F894DEBF0FBECDBF8C0185E0F801DE017A
:102A10001D9601900D928A95E1F7D8014C9111967F
:102A20005C91119712966C9112971396CD90DC9051
:102A300014973091AB017091AC018091AE019091EF
:102A4000AF01009709F46BC17F3F19F43F3F09F4D0
:102A500066C1E090AD01EE2009F4C0C02091B00144
:102A6000C816D90628F0F601E81BF90BCF0104C0FF
:102A7000809590958C0D9D1DFF24F394883C9105C5
:102A800078F0F12C207F09F0C6C07C2DD98AC88A45
:102A900089890E944B148BEA91E00E94DF10B1C03B
:102AA000822F807F09F046C0751314C0341312C002
:102AB000611110C02F7020612093B0010E948B140F
:102AC0008BEA91E00E94DF108091B001D801159649
:102AD0008C932EC0CD2819F15F3F11F44F3FF9F0D0
:102AE000F62E61111CC08091790120917A0136E0A7
:102AF000821709F45AC090E0389FF001399FF00D19
:102B00001124E558FE4F7181571306C07081471399
:102B100003C07281711103C001968770E9CFF62E50
:102B2000662309F418C18091B00181608093B001DF
:102B3000F12C11C1751308C0341306C0611104C013
:102B40008091B001D801C3C04D875E878D859E8579
:102B50006A8B0E9425146A898823E1F16623D1F1EA
:102B60002091B001822F82958F7090E0029774F0CF
:102B70008091AB019091AC0198878F831986DB8699
:102B8000CA862C87CE0107960E94DF1086E0F801E6
:102B9000ABEAB1E001900D928A95E1F70E94991499
:102BA0000E948B14FF24F394D6C04D875E878D85D9
:102BB0009E850E945519292F22952F7030E02230D2
:102BC00031050CF0BCC09F7009F0B6C0805E883043
:102BD00008F4C1C0C8010E94DF10E4CFC816D906AE
:102BE00008F453C0F601E81BF90BCF01883C9105AE
:102BF00008F450C0F12C7C2DD98AC88A89890E949A
:102C00004B14EBEAF1E086E0DF011D928A95E9F7CB
:102C10000E948B14A0C0751314C0341312C061112C
:102C200010C08091B001F8018583C8010E94DF10B7
:102C300086E0EBEAF1E0DF011D928A95E9F7FE2CD0
:102C40008AC04D875E878D859E856A8B0E9425147C
:102C50006A89882309F4BECF662309F4BBCF20918B
:102C6000B001822F82958F7090E002970CF48ECF86
:102C70008091AB019091AC019A8389831B82DD82A4
:102C8000CC822E83CE0101967FCF809590958C0DBE
:102C90009D1DACCFF62E662309F49CCF75132EC074
:102CA00034132CC02091B00120FD1FC0822F8295CB
:102CB0008F70D9F0D80115962C9315978F3049F065
:102CC0008F5F982F9295907F822F8F70892B15960A
:102CD0008C93C8010E94DF1086E0F801ABEAB1E0F6
:102CE00001900D928A95E1F793CF86E0F801ABEA67
:102CF000B1E001900D928A95E1F72DC04D875E8776
:102D00008D859E850E942514811140CF8091B00150
:102D100081608093B001C8010E94DF101CC066234F
:102D200009F458CF4D875E878D859E850E942514B6
:102D3000882309F44FCF2ACF811148CF0CC024300B
:102D400031050CF047CF9F7009F440CFF801958111
:102D5000907F09F03BCF8F2D62960FB6F894DEBFBF
:102D60000FBECDBFDF91CF911F910F91FF90EF90DC
:102D7000DF90CF9008951F93CF93DF93CDB7DEB749
:102D80002C970FB6F894DEBF0FBECDBF4F83588788
:102D900069877A878B879C87CE0107960E94F414F7
:102DA000882369F08F8198852A853B85232BF1F153
:102DB0009F3F09F063C08F3F09F060C037C086E0D5
:102DC000FE013796DE01119601900D928A95E1F78A
:102DD0006F817885EA85FB85309741F17F3F11F45B
:102DE0006F3F21F120917A0130E0C901019687708F
:102DF00099274091790150E08417950709F447C05D
:102E000069837A83FD83EC8396E0929FD001939F40
:102E1000B00D1124A558BE4FFE01319601900D92C0
:102E20009A95E1F780937A010E946A1416E08091E6
:102E3000790190917A018917C1F1189FC00111247D
:102E400085589E4F0E94F414882379F1E09179010E
:102E50001E9FF0011124E558FE4F4081518162818F
:102E60007381848195810E945A148091790190E048
:102E700001968770992780937901D9CF4F81588522
:102E800069857A858B859C850E945A14CFCF0E94D4
:102E9000211410927A0110927901EBEAF1E086E0B8
:102EA000DF011D928A95E9F7C1CF2C960FB6F894F1
:102EB000DEBF0FBECDBFDF91CF911F910895EF927E
:102EC000FF920F931F93CF93DF938C01892B09F40B
:102ED0006CC0F12CEE24E394E8012196F801849172
:102EE000843740F4843008F051C0813081F0823062
:102EF00019F15BC0853709F444C0A8F19CE7980F2D
:102F0000903708F052C08F770E94821041C00E5F48
:102F10001F4FFE01C49180E28C0F883048F4C770C7
:102F20008E2D01C0880FCA95EAF70E940A1A14C0B4
:102F30008C2F0E94BA0F2DC00E5F1F4FFE01C4914F
:102F400080E28C0F883058F4C7708E2D01C0880F36
:102F5000CA95EAF70E94101A0E94311A1AC08C2FE3
:102F60000E94821016C00E5F1F4FFE01C491CC2339
:102F700081F08FE99FE00197F1F700C00000C15098
:102F8000F6CF0E5F1F4FFE01F49003C00E94BA0FF0
:102F90008E018F2D882309F49FCFEFE9FFE0319751
:102FA000F1F700C000008150F5CFDF91CF911F9164
:102FB0000F91FF90EF90089508956093B50170937D
:102FC000B6018093B7019093B8010C940D140F9340
:102FD0001F930091B5011091B6012091B701309176
:102FE000B801DC01CB01802B912BA22BB32B80935A
:102FF000B5019093B601A093B701B093B8011F91AA
:103000000F910C940D140F931F930091B501109123
:10301000B6012091B7013091B801DC01CB018023CA
:103020009123A223B3238093B5019093B601A0937B
:10303000B701B093B8011F910F910C940D140F9329
:103040001F930091B5011091B6012091B701309105
:10305000B801DC01CB0180279127A227B3278093F9
:10306000B5019093B601A093B701B093B8011F9139
:103070000F910C940D141092B1011092B2011092A4
:10308000B3011092B4010C940D1441E050E060E0E3
:1030900070E004C0440F551F661F771F8A95D2F752
:1030A0004093B1015093B2016093B3017093B401A6
:1030B0000C940D1441E050E060E070E004C0440F57
:1030C000551F661F771F8A95D2F78091B1019091A5
:1030D000B201A091B301B091B401482B592B6A2BD6
:1030E0007B2B4093B1015093B2016093B301709375
:1030F000B4010C940D1441E050E060E070E004C0B5
:10310000440F551F661F771F8A95D2F7409550953B
:10311000609570958091B1019091B201A091B30139
:10312000B091B401482359236A237B234093B10112
:103130005093B2016093B3017093B4010C940D14D9
:1031400041E050E060E070E004C0440F551F661F8E
:10315000771F8A95D2F78091B1019091B201A09129
:10316000B301B091B401482759276A277B274093C0
:10317000B1015093B2016093B3017093B4010C9408
:103180000D140F931F930091B1011091B201209182
:10319000B3013091B401DC01CB01802B912BA22B28
:1031A000B32B8093B1019093B201A093B301B0937C
:1031B000B4011F910F910C940D140F931F93009164
:1031C000B1011091B2012091B3013091B401DC0141
:1031D000CB0180239123A223B3238093B101909349
:1031E000B201A093B301B093B4011F910F910C945D
:1031F0000D140F931F930091B1011091B201209112
:10320000B3013091B401DC01CB0180279127A227C3
:10321000B3278093B1019093B201A093B301B0930F
:10322000B4011F910F910C940D140895CF92DF9269
:10323000EF92FF920F931F93CF93DF938C01C09077
:10324000B501D090B601E090B701F090B80180913F
:10325000B1019091B201A091B301B091B401C82A1B
:10326000D92AEA2AFB2ACFE1D0E0D701C6010C2EE9
:1032700004C0B695A795979587950A94D2F780FFD5
:1032800006C0B8018C2F0E945406019721F42197A3
:1032900060F780E001C08C2FDF91CF911F910F91DB
:1032A000FF90EF90DF90CF900895CF93DF93EC01E4
:1032B0000E941619BE010E945406DF91CF91089515
:1032C000CB010E945519089590910C01992321F08A
:1032D00090910D01911109C020910E0130910F01C3
:1032E000F90132969FEF40E01FC0982F9695969572
:1032F00096959F3050F5E0910E01F0910F01E90F86
:10330000F11D877021E030E0A90102C0440F551F74
:103310008A95E2F7CA019181892B818308959F3FA5
:1033200039F04F5F4E3041F051915813F8CF0DC036
:103330005111F7CF942FF5CF9F3F39F0F901E90FE5
:10334000F11D97FDFA9582830895089590910C01DF
:10335000992321F090910D01911109C020910E0146
:1033600030910F01F9013296205F3F4F1FC0982F17
:103370009695969596959F30F0F4E0910E01F09118
:103380000F01E90FF11D877021E030E0A90102C0B3
:10339000440F551F8A95E2F7CA01809591818923D0
:1033A000818308953196E217F30729F090819813ED
:1033B000F9CF1082F7CF089581E090E0E0910E01FF
:1033C000F0910F01E80FF91F1082019680319105ED
:1033D000A9F708959091CC01892B8093CC01089591
:1033E00080959091CC0189238093CC01089510920F
:1033F000CC0108959091CB01892B8093CB01089546
:1034000080959091CB0189238093CB0108951092F0
:10341000CB0108959091CA01892B8093CA01089528
:1034200080959091CA0189238093CA0108951092D2
:10343000CA0108958093B90108951092B9010895C1
:1034400080910E0190910F01FC0131969C01205F4B
:103450003F4F80E0919191118F5FE217F307D1F711
:103460000895E0910E01F0910F018091CC018083CD
:10347000E0910E01F0910F0190818091CB01892B99
:103480008083E0910E01F0910F0190818091CA013B
:10349000892B80838091B901882361F0E0910E012E
:1034A000F0910F019081892B80830E94201A811155
:1034B0001092B90180910E0190910F010C949D0E14
:1034C000CF92DF92EF92FF926C01EE24FF24C114A1
:1034D000D104E104F10421F0C701B60120E101C0EB
:1034E00020E0C72ED82EE92EFF24C114D104E10418
:1034F000F10419F0285FC701B6016B017C0154E0AB
:10350000F694E794D794C7945A95D1F7C114D1048F
:10351000E104F10419F02C5FC701B6016B017C01D5
:1035200042E0F694E794D794C7944A95D1F7C11432
:10353000D104E104F10419F02E5FC701B601DC01EA
:10354000CB01B695A79597958795892B8A2B8B2BC1
:1035500009F02F5F822FFF90EF90DF90CF900895BA
:103560008091E601843021F11092CE0120E488E1BF
:1035700090E00FB6F894A895809360000FBE20935A
:10358000600080E00E948A0783B7817F846083BFE8
:1035900083B7816083BF7894889583B78E7F83BF1C
:1035A00088E10FB6F89480936000109260000FBE1F
:1035B000089508950895CF930E94D91A0E947D041A
:1035C0000E94DA1AC0E08C2F0E946B05811104C0A2
:1035D000CF5FCE30C1F701C081E0CF9108950E9446
:1035E00021140E94910E0C948A0782E084BD93E01E
:1035F00095BD9AEF97BD80936E0008952FB7F8940C
:103600008091CF019091D001A091D101B091D201D0
:103610002FBF0895CF92DF92EF92FF920F931F93E7
:103620002FB7F8944091CF015091D0016091D10112
:103630007091D2012FBF6A017B01EE24FF248C011F
:1036400020E030E0C016D106E206F30610F4415047
:1036500051099A01281B390BC9011F910F91FF9045
:10366000EF90DF90CF9008951F920F920FB60F92B8
:1036700011248F939F93AF93BF938091CF0190912B
:10368000D001A091D101B091D2010196A11DB11D2F
:103690008093CF019093D001A093D101B093D20138
:1036A000BF91AF919F918F910F900FBE0F901F9080
:1036B00018950E948E0BF8942FEF87EA91E621501F
:1036C00080409040E1F700C0000087E090EBDC0113
:1036D0008093EF019093F001A093F101B093F20178
:1036E0009CE088E10FB6F894A895809360000FBE27
:1036F00090936000FFCFEF92FF920F931F93CF93B1
:10370000DF93D82FC0E08C2F0E946B0500E010E003
:10371000E82EF12CC701002E02C0959587950A94DA
:10372000E2F780FD06C00F5F1F4F0630110591F7CD
:1037300009C0602F7C2F80E00E943206D813F3CF9F
:1037400081E004C0CF5FCE30F1F680E0DF91CF9111
:103750001F910F91FF90EF900895CF93C82F8CE2A7
:103760000E947B1B882321F08C2FCF910C947B1B14
:1037700080E0CF910895CF930E94021D811102C075
:103780000E94E81CC5E6C15049F00E947D048FE309
:103790009CE90197F1F700C00000F5CF89E20E9493
:1037A000AD1B811113C18AE20E94AD1B81110E94E1
:1037B000E81C85E00E94AD1B81110E94591B0E94EC
:1037C0000D1D8093CD0187E00E94AD1B8823A9F1D8
:1037D0008BE10E94AD1B882351F08091CD0181FBCC
:1037E000222720F991E0922790FB81F90EC08EE00C
:1037F0000E94AD1B882361F08091CD0182FB2227BE
:1038000020F991E0922790FB82F98093CD0115C0B9
:1038100080E10E94AD1B9091CD01882341F093FB84
:10382000222720F981E0822780FB93F904C0892FA9
:10383000809580FB90F99093CD018091CD010E94FD
:10384000111D0E941F1D8093E00180EE0E94AD1BA0
:10385000882341F08091E001982F909590FB80F9AA
:103860008093E00189E30E94AD1B882359F0809189
:10387000E00181FB222720F991E0922790FB81F95A
:103880008093E00182EE0E94AD1B882359F0809165
:10389000E00182FB222720F991E0922790FB82F938
:1038A0008093E00186EE0E94AD1B882359F0809141
:1038B000E00183FB222720F991E0922790FB83F916
:1038C0008093E00183EE0E94AD1B882359F0809124
:1038D000E00184FB222720F991E0922790FB84F9F4
:1038E0008093E00185E30E94AD1B882359F080910D
:1038F000E00185FB222720F991E0922790FB85F9D2
:103900008093E00181E30E94AD1B882359F08091F0
:10391000E00186FB222720F991E0922790FB86F9AF
:103920008093E00181E10E94AD1B882359F08091D2
:10393000E00187FB222720F991E0922790FB87F98D
:103940008093E0018091E0010E94231D8091E001BD
:1039500087FB882780F980930D0187E20E94AD1BC9
:10396000C82F8EE10E94AD1B8111C2608FE10E94C1
:10397000AD1B8111C46080E20E94AD1B8111C86043
:1039800081E20E94AD1B8111C06182E20E94AD1BE9
:103990008111C06283E20E94AD1B8111C06484E288
:1039A0000E94AD1B882311F0C06802C0CC2329F00F
:1039B0008C2F0E941A1D6C2F03C00E94161D682FA9
:1039C00070E080E090E0CF910C94DD17CF910895E6
:1039D0006DEE7EEF80E090E00E94542360E082E094
:1039E00090E00E94462360E083E090E00E9446233E
:1039F00060E084E090E00E94462360E085E090E093
:103A00000C94462380E090E00E94402321E08D3E0C
:103A10009E4F09F020E0822F089582E090E00C9400
:103A20003823682F82E090E00C94462383E090E0F6
:103A30000C943823682F83E090E00C94462384E0B4
:103A400090E00C943823682F84E090E00C94462397
:103A50008091D50180FF0BC06091130185E0689FC4
:103A6000B001112475956795759567952BC081FFF9
:103A700009C06091130185E0689FB001112475951C
:103A8000679520C082FF07C06091130185E0689FA1
:103A9000B001112417C09091D6019923D1F0609103
:103AA0001201961788F72091130185E0289F900155
:103AB0001124929FA001939F500D112470E0CA0120
:103AC0000E940A236038710540F46115710539F0D0
:103AD00002C065E070E0862F08958FE7089581E0C9
:103AE00008958091D50180FF08C06091110170E0B8
:103AF000759567957595679521C081FF06C06091A2
:103B0000110170E07595679519C082FF04C060913E
:103B1000110170E010C09091D6019923C1F060911D
:103B200010019617A0F780911101899FC0011124FF
:103B300070E00E940A236038710528F46115710550
:103B400021F0862F08958FE7089581E0089561E0C0
:103B500070E0F4CF803F21F40E94281D819504C0BD
:103B6000813F29F40E94281D8093D9010895823F46
:103B700021F40E94281D819504C0833F29F40E94EE
:103B8000281D8093D8010895893F19F40E94711D62
:103B900005C08A3F31F40E94711D81958093DA013E
:103BA00008958B3F21F40E94711D819504C08C3FC4
:103BB00029F40E94711D8093DB010895843F21F454
:103BC0008091D701816017C0853F21F48091D70192
:103BD000826011C0863F21F48091D70184600BC0C0
:103BE000873F21F48091D701886005C0883F31F478
:103BF0008091D70180618093D70108958D3F21F492
:103C00008091D50181600BC08E3F21F48091D50158
:103C1000826005C08F3F29F48091D5018460809334
:103C2000D5010895803F39F48091D90187FF6CC098
:103C30001092D90169C0813F29F48091D9011816E9
:103C4000BCF362C09091D801823F29F497FF5CC019
:103C50001092D80159C0833F19F41916CCF354C0FF
:103C6000893F41F48091DA0118160CF04DC0109292
:103C7000DA014AC08A3F29F48091DA0187FF44C003
:103C8000F6CF8B3F39F48091DB0187FF3DC0109266
:103C9000DB013AC08C3F29F48091DB011816BCF39C
:103CA00033C0843F21F48091D7018E7F17C0853FB8
:103CB00021F48091D7018D7F11C0863F21F480913E
:103CC000D7018B7F0BC0873F21F48091D701877F7D
:103CD00005C0883F31F48091D7018F7E8093D70152
:103CE00013C08D3F21F48091D5018E7F0BC08E3F94
:103CF00021F48091D5018D7F05C08F3F29F48091FB
:103D0000D5018B7F8093D5018091D80181110EC0A0
:103D10008091D90181110AC08091DA01811106C018
:103D20008091DB01811102C01092D601089587EDC8
:103D300091E00E94A80E0E94FE1A9093D4018093F5
:103D4000D30108951F93CF93DF938091D301909176
:103D5000D4010E940A1BAC019091D601992321F055
:103D60002091140130E006C0209115018AE0289FBF
:103D7000900111244217530708F486C08091D8019E
:103D8000C091D901D091DA011091DB01811107C0F6
:103D9000C11176C0D11174C0111172C075C09F3F9E
:103DA00019F09F5F9093D601181624F40E94281DE5
:103DB0008093D8018091D80187FF05C00E94281DFB
:103DC00081958093D8011C1624F40E94281D8093AD
:103DD000D9018091D90187FF05C00E94281D8195D6
:103DE0008093D9016091D801662339F1C091D9013E
:103DF000CC2319F1772767FD7095872F972F0E94A5
:103E00001B2223E333E343E35FE30E947F220E940C
:103E1000E8216093D8016C2F772767FD7095872F75
:103E2000972F0E941B2223E333E343E35FE30E94C7
:103E30007F220E94E8216093D9011D1624F40E947C
:103E4000711D8093DA018091DA0187FF05C00E941D
:103E5000711D81958093DA01111624F40E94711D61
:103E60008093DB018091DB0187FF05C00E94711DFB
:103E700081958093DB01DF91CF911F910C94971E68
:103E80009F3F09F08ECF96CFDF91CF911F9108957C
:103E9000E7EDF1E085E0DF011D928A95E9F71092E8
:103EA000D6011092D5010895833081F128F4813034
:103EB00059F08230D1F00895853009F449C0B8F145
:103EC000863009F456C0089580911501262F30E000
:103ED000280F311D2F3F310524F4680F6093150121
:103EE00008958FEF80931501089580911401262F76
:103EF00030E0280F311D2F3F310524F4680F609307
:103F0000140108958FEF8093140108958091130197
:103F1000262F30E0280F311D2F3F310524F4680F84
:103F20006093130108958FEF80931301089580919A
:103F30001201262F30E0280F311D2F3F310524F4C8
:103F4000680F6093120108958FEF80931201089516
:103F500080911101262F30E0280F311D2F3F3105B0
:103F600024F4680F6093110108958FEF809311017D
:103F7000089580911001262F30E0280F311D2F3F2A
:103F8000310524F4680F6093100108958FEF80933A
:103F900010010895833011F128F4813049F0823006
:103FA00091F00895853081F120F18630C1F10895B6
:103FB00080911501681720F4861B809315010895E0
:103FC00010921501089580911401681720F4861B42
:103FD00080931401089510921401089580911301A3
:103FE000681720F4861B8093130108951092130123
:103FF000089580911201681720F4861B80931201A6
:10400000089510921201089580911101681720F40B
:10401000861B8093110108951092110108958091DB
:104020001001681720F4861B8093100108951092E8
:10403000100108950F931F938D3109F46AC008F0A1
:104040003FC08E3009F484C0C0F4873009F46DC0DD
:1040500068F4863009F0B5C08091CD01817F8E7FF4
:104060008093CD0181E08093DD01ACC0883009F4FC
:1040700057C08B3009F46AC0A4C0863109F466C009
:1040800078F4803109F477C0813109F09AC00E9438
:10409000211490910D0181E0892780930D0156C074
:1040A000893109F453C08B3109F08BC08091CD0167
:1040B00081FB222720F991E0922790FB81F951C0E2
:1040C000853309F475C048F4873209F471C008F4E7
:1040D0005EC0893209F46CC074C0833430F48A3312
:1040E00008F053C0883391F16CC0833409F460C088
:1040F000883409F066C00E9421140FEF13ED20E30D
:10410000015010402040E1F700C000000E94591B00
:104110001DC00E94A2210E94910E0E948A0716C013
:104120000E940D1D0E941F1D11C09091CD01892F6D
:104130008095817080FB90F929F09660986090934B
:10414000CD0140C0997F977F9093CD0181E03AC027
:104150008091CD0182FB222720F991E0922790FBEC
:1041600082F98093CD01992389F38091CD018160FB
:104170008093CD01EBCF8091CD0183FB222720F9E5
:1041800091E0922790FB83F9ECCF895301C08D51C8
:1041900041E050E060E070E08A019B0104C0000F44
:1041A000111F221F331F8A95D2F7C901B80104C01D
:1041B00061E070E080E090E00E94DD170E94211431
:1041C000C5CF80E01F910F91089580E0089580E0B1
:1041D0000895CF93C82F8091DD01813079F018F0D8
:1041E0008230E9F187C0E0910E01F0910F018081EA
:1041F000813169F0823209F07FC009C0E0910E017F
:10420000F0910F018081813111F0823261F48C2FA5
:104210000E94E520811104C08C2F0E941A201DC02D
:1042200081E090E01AC08C2F0E94E720811114C019
:10423000C43179F048F4CB3079F0C03109F060C076
:1042400082E08093DD0108C0C93219F0C83321F043
:1042500057C01092DD0154C081E0817053C0C93253
:1042600089F118F5C43171F1A8F4C73009F046C0DE
:104270008AE08093150194E19093140193E0909368
:1042800013018093120188E08093110188E28093EA
:10429000100134C0CE51C63088F5EC2FF0E0E65D59
:1042A000FE4F80818093DC0129C0CE34E9F020F4F8
:1042B000CB3421F56AE013C0C13579F0C235F1F491
:1042C00061E00DC08091DC01882319F01092DC01BF
:1042D00015C081E08093DD0115C061E006C08091CA
:1042E000DC010E94541F0AC06AE08091DC010E9438
:1042F000CA1F04C01092DD0180E004C081E002C04A
:1043000080E0ABCFCF910895E1E8F0E08081886054
:1043100080838081816080838FB7F89493E090934D
:10432000890090ED909388008FBF0895EFE6F0E04C
:104330008081826080830895EFE6F0E080818D7F48
:1043400080830895EFE6F0E0908182E08927808302
:1043500008951F920F920FB60F9211242F933F933F
:104360004F935F936F937F938F939F93AF93BF937D
:10437000EF93FF938091DE019091DF01019690937E
:10438000DF018093DE01811103C082E00E948A0771
:10439000E091DF01E695E695F0E0EA5CFA4FE49102
:1043A0008091DE018E1303C080E00E948A07FF9196
:1043B000EF91BF91AF919F918F917F916F915F919D
:1043C0004F913F912F910F900FBE0F901F90189516
:1043D00004D06894B1118DC0089570D088F09F57B3
:1043E00090F0B92F9927B751A0F0D1F0660F771F41
:1043F000881F991F1AF0BA95C9F712C0B13081F021
:1044000077D0B1E0089574C0672F782F8827B85F00
:1044100039F0B93FCCF3869577956795B395D9F781
:104420003EF490958095709561957F4F8F4F9F4F8B
:104430000895E89409C097FB3EF490958095709597
:1044400061957F4F8F4F9F4F9923A9F0F92F96E9E0
:10445000BB279395F695879577956795B795F11155
:10446000F8CFFAF4BB0F11F460FF1BC06F5F7F4FF2
:104470008F4F9F4F16C0882311F096E911C0772304
:1044800021F09EE8872F762F05C0662371F096E80D
:10449000862F70E060E02AF09A95660F771F881FDC
:1044A000DAF7880F9695879597F9089557FD9058F4
:1044B000440F551F59F05F3F71F04795880F97FBE8
:1044C000991F61F09F3F79F08795089512161306A2
:1044D0001406551FF2CF4695F1DF08C016161706D1
:1044E0001806991FF1CF8695710561050894089506
:1044F000E894BB2766277727CB0197F908950BD05F
:1045000078C069D028F06ED018F0952309F05AC011
:104510005FC01124EECFCADFA0F3959FD1F3950FB2
:1045200050E0551F629FF001729FBB27F00DB11D37
:10453000639FAA27F00DB11DAA1F649F6627B00DC7
:10454000A11D661F829F2227B00DA11D621F739FB0
:10455000B00DA11D621F839FA00D611D221F749FBE
:104560003327A00D611D231F849F600D211D822F05
:10457000762F6A2F11249F5750408AF0E1F088234C
:104580004AF0EE0FFF1FBB1F661F771F881F915059
:104590005040A9F79E3F510570F014C0AACF5F3F6D
:1045A000ECF3983EDCF3869577956795B795F7958C
:1045B000E7959F5FC1F7FE2B880F911D9695879514
:1045C00097F9089597F99F6780E870E060E0089593
:1045D0009FEF80EC089500240A941616170618061B
:1045E0000906089500240A941216130614060506F7
:1045F0000895092E0394000C11F4882352F0BB0F88
:1046000040F4BF2B11F460FF04C06F5F7F4F8F4FEA
:104610009F4F089597FB072E16F4009407D077FD5F
:1046200009D00E94242307FC05D03EF49095819583
:104630009F4F0895709561957F4F0895EE0FFF1F6E
:104640000590F491E02D0994AA1BBB1B51E107C012
:10465000AA1FBB1FA617B70710F0A61BB70B881F12
:10466000991F5A95A9F780959095BC01CD010895A1
:10467000F999FECF92BD81BDF89A992780B508952A
:10468000A8E1B0E042E050E00C945B23262FF999BA
:10469000FECF1FBA92BD81BD20BD0FB6F894FA9A25
:1046A000F99A0FBE019608950E944623272F0C9475
:1046B0004723DC01CB01FC01F999FECF06C0F2BD16
:1046C000E1BDF89A319600B40D9241505040B8F7D0
:0646D0000895F894FFCFED
:1046D60020028C071A08F707C3078F070101BA01E2
:1046E60028080A03140A3F4D3639F704AA0474044D
:1046F6003B04CE03E7030004190401020304050684
:044706000708090097
:00000001FF

@ -5,7 +5,10 @@ There are four layers:
- **BASE** is [Norman layout](https://normanlayout.info/).
- **SYMB** for numbers and symbols.
- **PLVR** is optimized for [Plover](http://www.openstenoproject.org).
- **ARRW** for navigation.
- **ARRW** for navigation (same fingers for arrows as IJKL on QWERTY).
Looking for HJKL arrows? [Here we
go](../romanzolotarev-norman-plover-osx-hjkl/).
[![keyboard-layout](romanzolotarev-norman-plover-osx.png)](http://www.keyboard-layout-editor.com/#/gists/8ebcb701ecb763944417)
@ -30,9 +33,9 @@ There are four layers:
- Tap `F3`, `F4`, `F5`, `F6` to resize a window via [Divvy](http://mizage.com/divvy/).
- Tap `F14`, `F15` to adjust display brightness.
**IMPORTANT**: If you have another keyboard connected via Bluetooth, then `F14` and `F15` will not work.
Turn off that Bluetooth keyboard. Re-plug you ErgoDox. Enjoy!
**IMPORTANT**: If you have another keyboard connected via Bluetooth, then
`F14` and `F15` will not work. Turn off that Bluetooth keyboard. Re-plug
you ErgoDox. Enjoy!
## CTRL/ESC

Loading…
Cancel
Save