Merge pull request #2 from jackhumbert/master

Update from source
pull/236/head
tak3over 9 years ago
commit 2ba0de8fcd

@ -0,0 +1,710 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Compiler for keymap.c files
This scrip will generate a keymap.c file from a simple
markdown file with a specific layout.
Usage:
python compile_keymap.py INPUT_PATH [OUTPUT_PATH]
"""
from __future__ import division
from __future__ import print_function
from __future__ import absolute_import
from __future__ import unicode_literals
import os
import io
import re
import sys
import json
import unicodedata
import collections
import itertools as it
PY2 = sys.version_info.major == 2
if PY2:
chr = unichr
KEYBOARD_LAYOUTS = {
# These map positions in the parsed layout to
# positions in the KEYMAP MATRIX
'ergodox_ez': [
[ 0, 1, 2, 3, 4, 5, 6], [38, 39, 40, 41, 42, 43, 44],
[ 7, 8, 9, 10, 11, 12, 13], [45, 46, 47, 48, 49, 50, 51],
[14, 15, 16, 17, 18, 19 ], [ 52, 53, 54, 55, 56, 57],
[20, 21, 22, 23, 24, 25, 26], [58, 59, 60, 61, 62, 63, 64],
[27, 28, 29, 30, 31 ], [ 65, 66, 67, 68, 69],
[ 32, 33], [70, 71 ],
[ 34], [72 ],
[ 35, 36, 37], [73, 74, 75 ],
]
}
ROW_INDENTS = {
'ergodox_ez': [0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 5, 0, 6, 0, 4, 0]
}
BLANK_LAYOUTS = [
# Compact Layout
"""
.------------------------------------.------------------------------------.
| | | | | | | | | | | | | | |
!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
| | | | | | | | | | | | | | |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | | | | | |-----!-----! | | | | | |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | | | | | | | | | | | | | |
'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
| | | | | | ! | | | | |
'------------------------' '------------------------'
.-----------. .-----------.
| | | ! | |
.-----+-----+-----! !-----+-----+-----.
! ! | | ! | ! !
! ! !-----! !-----! ! !
| | | | ! | | |
'-----------------' '-----------------'
""",
# Wide Layout
"""
.---------------------------------------------. .---------------------------------------------.
| | | | | | | | ! | | | | | | |
!-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
| | | | | | | | ! | | | | | | |
!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
| | | | | | |-------! !-------! | | | | | |
!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
| | | | | | | | ! | | | | | | |
'-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
| | | | | | ! | | | | |
'------------------------------' '------------------------------'
.---------------. .---------------.
| | | ! | |
.-------+-------+-------! !-------+-------+-------.
! ! | | ! | ! !
! ! !-------! !-------! ! !
| | | | ! | | |
'-----------------------' '-----------------------'
""",
]
DEFAULT_CONFIG = {
"keymaps_includes": [
"keymap_common.h",
],
'filler': "-+.'!:x",
'separator': "|",
'default_key_prefix': ["KC_"],
}
SECTIONS = [
'layout_config',
'layers',
]
# Markdown Parsing
ONELINE_COMMENT_RE = re.compile(r"""
^ # comment must be at the start of the line
\s* # arbitrary whitespace
// # start of the comment
(.*) # the comment
$ # until the end of line
""", re.MULTILINE | re.VERBOSE
)
INLINE_COMMENT_RE = re.compile(r"""
([\,\"\[\]\{\}\d]) # anythig that might end a expression
\s+ # comment must be preceded by whitespace
// # start of the comment
\s # and succeded by whitespace
(?:[^\"\]\}\{\[]*) # the comment (except things which might be json)
$ # until the end of line
""", re.MULTILINE | re.VERBOSE)
TRAILING_COMMA_RE = re.compile(r"""
, # the comma
(?:\s*) # arbitrary whitespace
$ # only works if the trailing comma is followed by newline
(\s*) # arbitrary whitespace
([\]\}]) # end of an array or object
""", re.MULTILINE | re.VERBOSE)
def loads(raw_data):
if isinstance(raw_data, bytes):
raw_data = raw_data.decode('utf-8')
raw_data = ONELINE_COMMENT_RE.sub(r"", raw_data)
raw_data = INLINE_COMMENT_RE.sub(r"\1", raw_data)
raw_data = TRAILING_COMMA_RE.sub(r"\1\2", raw_data)
return json.loads(raw_data)
def parse_config(path):
def reset_section():
section.update({
'name': section.get('name', ""),
'sub_name': "",
'start_line': -1,
'end_line': -1,
'code_lines': [],
})
def start_section(line_index, line):
end_section()
if line.startswith("# "):
name = line[2:]
elif line.startswith("## "):
name = line[3:]
else:
name = ""
name = name.strip().replace(" ", "_").lower()
if name in SECTIONS:
section['name'] = name
else:
section['sub_name'] = name
section['start_line'] = line_index
def end_section():
if section['start_line'] >= 0:
if section['name'] == 'layout_config':
config.update(loads("\n".join(
section['code_lines']
)))
elif section['sub_name'].startswith('layer'):
layer_name = section['sub_name']
config['layer_lines'][layer_name] = section['code_lines']
reset_section()
def amend_section(line_index, line):
section['end_line'] = line_index
section['code_lines'].append(line)
config = DEFAULT_CONFIG.copy()
config.update({
'layer_lines': collections.OrderedDict(),
'macro_ids': {'UM'},
'unicode_macros': {},
})
section = {}
reset_section()
with io.open(path, encoding="utf-8") as fh:
for i, line in enumerate(fh):
if line.startswith("#"):
start_section(i, line)
elif line.startswith(" "):
amend_section(i, line[4:])
else:
# TODO: maybe parse description
pass
end_section()
assert 'layout' in config
return config
# header file parsing
IF0_RE = re.compile(r"""
^
#if 0
$.*?
#endif
""", re.MULTILINE | re.DOTALL | re.VERBOSE)
COMMENT_RE = re.compile(r"""
/\*
.*?
\*/"
""", re.MULTILINE | re.DOTALL | re.VERBOSE)
def read_header_file(path):
with io.open(path, encoding="utf-8") as fh:
data = fh.read()
data, _ = COMMENT_RE.subn("", data)
data, _ = IF0_RE.subn("", data)
return data
def regex_partial(re_str_fmt, flags):
def partial(*args, **kwargs):
re_str = re_str_fmt.format(*args, **kwargs)
return re.compile(re_str, flags)
return partial
KEYDEF_REP = regex_partial(r"""
#define
\s
(
(?:{}) # the prefixes
(?:\w+) # the key name
) # capture group end
""", re.MULTILINE | re.DOTALL | re.VERBOSE)
ENUM_RE = re.compile(r"""
(
enum
\s\w+\s
\{
.*? # the enum content
\}
;
) # capture group end
""", re.MULTILINE | re.DOTALL | re.VERBOSE)
ENUM_KEY_REP = regex_partial(r"""
(
{} # the prefixes
\w+ # the key name
) # capture group end
""", re.MULTILINE | re.DOTALL | re.VERBOSE)
def parse_keydefs(config, data):
prefix_options = "|".join(config['key_prefixes'])
keydef_re = KEYDEF_REP(prefix_options)
enum_key_re = ENUM_KEY_REP(prefix_options)
for match in keydef_re.finditer(data):
yield match.groups()[0]
for enum_match in ENUM_RE.finditer(data):
enum = enum_match.groups()[0]
for key_match in enum_key_re.finditer(enum):
yield key_match.groups()[0]
def parse_valid_keys(config, out_path):
basepath = os.path.abspath(os.path.join(os.path.dirname(out_path)))
dirpaths = []
subpaths = []
while len(subpaths) < 6:
path = os.path.join(basepath, *subpaths)
dirpaths.append(path)
dirpaths.append(os.path.join(path, "tmk_core", "common"))
dirpaths.append(os.path.join(path, "quantum"))
subpaths.append('..')
includes = set(config['keymaps_includes'])
includes.add("keycode.h")
valid_keycodes = set()
for dirpath, include in it.product(dirpaths, includes):
include_path = os.path.join(dirpath, include)
if os.path.exists(include_path):
header_data = read_header_file(include_path)
valid_keycodes.update(
parse_keydefs(config, header_data)
)
return valid_keycodes
# Keymap Parsing
def iter_raw_codes(layer_lines, filler, separator):
filler_re = re.compile("[" + filler + " ]")
for line in layer_lines:
line, _ = filler_re.subn("", line.strip())
if not line:
continue
codes = line.split(separator)
for code in codes[1:-1]:
yield code
def iter_indexed_codes(raw_codes, key_indexes):
key_rows = {}
key_indexes_flat = []
for row_index, key_indexes in enumerate(key_indexes):
for key_index in key_indexes:
key_rows[key_index] = row_index
key_indexes_flat.extend(key_indexes)
assert len(raw_codes) == len(key_indexes_flat)
for raw_code, key_index in zip(raw_codes, key_indexes_flat):
# we keep track of the row mostly for layout purposes
yield raw_code, key_index, key_rows[key_index]
LAYER_CHANGE_RE = re.compile(r"""
(DF|TG|MO)\(\d+\)
""", re.VERBOSE)
MACRO_RE = re.compile(r"""
M\(\w+\)
""", re.VERBOSE)
UNICODE_RE = re.compile(r"""
U[0-9A-F]{4}
""", re.VERBOSE)
NON_CODE = re.compile(r"""
^[^A-Z0-9_]$
""", re.VERBOSE)
def parse_uni_code(raw_code):
macro_id = "UC_" + (
unicodedata.name(raw_code)
.replace(" ", "_")
.replace("-", "_")
)
code = "M({})".format(macro_id)
uc_hex = "{:04X}".format(ord(raw_code))
return code, macro_id, uc_hex
def parse_key_code(raw_code, key_prefixes, valid_keycodes):
if raw_code in valid_keycodes:
return raw_code
for prefix in key_prefixes:
code = prefix + raw_code
if code in valid_keycodes:
return code
def parse_code(raw_code, key_prefixes, valid_keycodes):
if not raw_code:
return 'KC_TRNS', None, None
if LAYER_CHANGE_RE.match(raw_code):
return raw_code, None, None
if MACRO_RE.match(raw_code):
macro_id = raw_code[2:-1]
return raw_code, macro_id, None
if UNICODE_RE.match(raw_code):
hex_code = raw_code[1:]
return parse_uni_code(chr(int(hex_code, 16)))
if NON_CODE.match(raw_code):
return parse_uni_code(raw_code)
code = parse_key_code(raw_code, key_prefixes, valid_keycodes)
return code, None, None
def parse_keymap(config, key_indexes, layer_lines, valid_keycodes):
keymap = {}
raw_codes = list(iter_raw_codes(
layer_lines, config['filler'], config['separator']
))
indexed_codes = iter_indexed_codes(raw_codes, key_indexes)
key_prefixes = config['key_prefixes']
for raw_code, key_index, row_index in indexed_codes:
code, macro_id, uc_hex = parse_code(
raw_code, key_prefixes, valid_keycodes
)
# TODO: line numbers for invalid codes
err_msg = "Could not parse key '{}' on row {}".format(
raw_code, row_index
)
assert code is not None, err_msg
# print(repr(raw_code), repr(code), macro_id, uc_hex)
if macro_id:
config['macro_ids'].add(macro_id)
if uc_hex:
config['unicode_macros'][macro_id] = uc_hex
keymap[key_index] = (code, row_index)
return keymap
def parse_keymaps(config, valid_keycodes):
keymaps = collections.OrderedDict()
key_indexes = config.get(
'key_indexes', KEYBOARD_LAYOUTS[config['layout']]
)
# TODO: maybe validate key_indexes
for layer_name, layer_lines, in config['layer_lines'].items():
keymaps[layer_name] = parse_keymap(
config, key_indexes, layer_lines, valid_keycodes
)
return keymaps
# keymap.c output
USERCODE = """
// Runs just one time when the keyboard initializes.
void matrix_init_user(void) {
};
// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
ergodox_board_led_off();
ergodox_right_led_1_off();
ergodox_right_led_2_off();
ergodox_right_led_3_off();
switch (layer) {
case L1:
ergodox_right_led_1_on();
break;
case L2:
ergodox_right_led_2_on();
break;
case L3:
ergodox_right_led_3_on();
break;
case L4:
ergodox_right_led_1_on();
ergodox_right_led_2_on();
break;
case L5:
ergodox_right_led_1_on();
ergodox_right_led_3_on();
break;
// case L6:
// ergodox_right_led_2_on();
// ergodox_right_led_3_on();
// break;
// case L7:
// ergodox_right_led_1_on();
// ergodox_right_led_2_on();
// ergodox_right_led_3_on();
// break;
default:
ergodox_board_led_off();
break;
}
};
"""
MACROCODE = """
#define UC_MODE_WIN 0
#define UC_MODE_LINUX 1
#define UC_MODE_OSX 2
// TODO: allow default mode to be configured
static uint16_t unicode_mode = UC_MODE_WIN;
uint16_t hextokeycode(uint8_t hex) {{
if (hex == 0x0) {{
return KC_P0;
}}
if (hex < 0xA) {{
return KC_P1 + (hex - 0x1);
}}
return KC_A + (hex - 0xA);
}}
void unicode_action_function(uint16_t hi, uint16_t lo) {{
switch (unicode_mode) {{
case UC_MODE_WIN:
register_code(KC_LALT);
register_code(KC_PPLS);
unregister_code(KC_PPLS);
register_code(hextokeycode((hi & 0xF0) >> 4));
unregister_code(hextokeycode((hi & 0xF0) >> 4));
register_code(hextokeycode((hi & 0x0F)));
unregister_code(hextokeycode((hi & 0x0F)));
register_code(hextokeycode((lo & 0xF0) >> 4));
unregister_code(hextokeycode((lo & 0xF0) >> 4));
register_code(hextokeycode((lo & 0x0F)));
unregister_code(hextokeycode((lo & 0x0F)));
unregister_code(KC_LALT);
break;
case UC_MODE_LINUX:
register_code(KC_LCTL);
register_code(KC_LSFT);
register_code(KC_U);
unregister_code(KC_U);
register_code(hextokeycode((hi & 0xF0) >> 4));
unregister_code(hextokeycode((hi & 0xF0) >> 4));
register_code(hextokeycode((hi & 0x0F)));
unregister_code(hextokeycode((hi & 0x0F)));
register_code(hextokeycode((lo & 0xF0) >> 4));
unregister_code(hextokeycode((lo & 0xF0) >> 4));
register_code(hextokeycode((lo & 0x0F)));
unregister_code(hextokeycode((lo & 0x0F)));
unregister_code(KC_LCTL);
unregister_code(KC_LSFT);
break;
case UC_MODE_OSX:
break;
}}
}}
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {{
if (!record->event.pressed) {{
return MACRO_NONE;
}}
// MACRODOWN only works in this function
switch(id) {{
case UM:
unicode_mode = (unicode_mode + 1) % 2;
break;
{macro_cases}
{unicode_macro_cases}
default:
break;
}}
return MACRO_NONE;
}};
"""
UNICODE_MACRO_TEMPLATE = """
case {macro_id}:
unicode_action_function(0x{hi:02x}, 0x{lo:02x});
break;
""".strip()
def unicode_macro_cases(config):
for macro_id, uc_hex in config['unicode_macros'].items():
hi = int(uc_hex, 16) >> 8
lo = int(uc_hex, 16) & 0xFF
unimacro_keys = ", ".join(
"T({})".format(
"KP_" + digit if digit.isdigit() else digit
) for digit in uc_hex
)
yield UNICODE_MACRO_TEMPLATE.format(
macro_id=macro_id, hi=hi, lo=lo
)
def iter_keymap_lines(keymap, row_indents=None):
col_widths = {}
col = 0
# first pass, figure out the column widths
prev_row_index = None
for code, row_index in keymap.values():
if row_index != prev_row_index:
col = 0
if row_indents:
col = row_indents[row_index]
col_widths[col] = max(len(code), col_widths.get(col, 0))
prev_row_index = row_index
col += 1
# second pass, yield the cell values
col = 0
prev_row_index = None
for key_index in sorted(keymap):
code, row_index = keymap[key_index]
if row_index != prev_row_index:
col = 0
yield "\n"
if row_indents:
for indent_col in range(row_indents[row_index]):
pad = " " * (col_widths[indent_col] - 4)
yield (" /*-*/" + pad)
col = row_indents[row_index]
else:
yield pad
yield " {}".format(code)
if key_index < len(keymap) - 1:
yield ","
# This will be yielded on the next iteration when
# we know that we're not at the end of a line.
pad = " " * (col_widths[col] - len(code))
prev_row_index = row_index
col += 1
def iter_keymap_parts(config, keymaps):
# includes
for include_path in config['keymaps_includes']:
yield '#include "{}"\n'.format(include_path)
yield "\n"
# definitions
for i, macro_id in enumerate(sorted(config['macro_ids'])):
yield "#define {} {}\n".format(macro_id, i)
yield "\n"
for i, layer_name in enumerate(config['layer_lines']):
yield '#define L{0:<3} {0:<5} // {1}\n'.format(i, layer_name)
yield "\n"
# keymaps
yield "const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {\n"
for i, layer_name in enumerate(config['layer_lines']):
# comment
layer_lines = config['layer_lines'][layer_name]
prefixed_lines = " * " + " * ".join(layer_lines)
yield "/*\n{} */\n".format(prefixed_lines)
# keymap codes
keymap = keymaps[layer_name]
row_indents = ROW_INDENTS.get(config['layout'])
keymap_lines = "".join(iter_keymap_lines(keymap, row_indents))
yield "[L{0}] = KEYMAP({1}\n),\n".format(i, keymap_lines)
yield "};\n\n"
# no idea what this is for
yield "const uint16_t PROGMEM fn_actions[] = {};\n"
# macros
yield MACROCODE.format(
macro_cases="",
unicode_macro_cases="\n".join(unicode_macro_cases(config)),
)
# TODO: dynamically create blinking lights
yield USERCODE
def main(argv=sys.argv[1:]):
if not argv or '-h' in argv or '--help' in argv:
print(__doc__)
return 0
in_path = os.path.abspath(argv[0])
if not os.path.exists(in_path):
print("No such file '{}'".format(in_path))
return 1
if len(argv) > 1:
out_path = os.path.abspath(argv[1])
else:
dirname = os.path.dirname(in_path)
out_path = os.path.join(dirname, "keymap.c")
config = parse_config(in_path)
valid_keys = parse_valid_keys(config, out_path)
keymaps = parse_keymaps(config, valid_keys)
with io.open(out_path, mode="w", encoding="utf-8") as fh:
for part in iter_keymap_parts(config, keymaps):
fh.write(part)
if __name__ == '__main__':
sys.exit(main())

@ -0,0 +1,1240 @@
:100000000C9412040C9456040C9456040C9456044C
:100010000C9456040C9456040C9456040C945604F8
:100020000C9456040C9456040C944F0F0C9421100D
:100030000C9456040C9456040C9456040C945604D8
:100040000C9456040C94D6240C9456040C94560428
:100050000C9456040C94751E0C9456040C9456047F
:100060000C9456040C9456040C9456040C945604A8
:100070000C9456040C9456040C9456040C94560498
:100080000C9456040C9456040C9456040C94560488
:100090000C9456040C9456040C9456040C94560478
:1000A0000C9456040C9456040C945604A305700545
:1000B0005B05B505DC050F06F105F7050C063A06EC
:1000C0002F06FA0532064605EB0523062C066D05BC
:1000D0006405B205A905910567052605BE05140648
:1000E0001D0629069705C705A60540051A06E5055C
:1000F00088059D0594057C0520068B053105E805DE
:100100008205C1052005AC055E054C057605730525
:10011000CA059A05060637058505AF052305B80506
:1001200003060906D3055505EE0543056A054F0587
:10013000C405F40535062905A005BB05FD05CD055B
:1001400052052606E2053D058E055805D9056105CF
:1001500000063A05D005DF052C0549053F061706C0
:1001600079053405D6057F0514058610A81093116E
:10017000A8109311EA100D119311621175116E14EC
:100180006E149C149C14DE141A151A171A173215C3
:100190001A1729162916F4161A171A1708170552CE
:1001A000045201520352010000001E001B001800FF
:1001B0002F00010029001F0013000C003300E30092
:1001C000E1002000090004003400E2002A002100C0
:1001D0001A0008000600E000650022000A00120074
:1001E0001900000049002E004A0000004D000000E8
:1001F00002542E02025400002B0000005E30230047
:100200000B001600050000004C0024000D0011003A
:100210001000E4004B0025000E0015003600E6003B
:100220002C0026000F001700370050002800270080
:1002300014000700520051004E0035001C002D0034
:100240001D004F000000010001000100010001003D
:1002500000001E02300238020100010001001F02EE
:10026000641438003000010001002002240223023F
:1002700027020100010001002414251401000100DF
:1002800001000100271426140100000001000100F4
:100290000100000001000000010001000100000059
:1002A0000100000001000100310021022D140000B6
:1002B000010001006400250222020100010001008A
:1002C0006402260236020100010001000100301420
:1002D00037023830010035021F023102553002303A
:1002E0000100010001002D0201003D30000001006D
:1002F000010001000100010000003A0001000100BE
:100300000100010001003B000100010001000100AB
:1003100001003C00010001000100010001003D005E
:10032000010001000100010001003E000100010088
:100330000100000001004400010000000100000075
:1003400001004500010000005300000001003F00D3
:100350000100010001000000010040005F005C009E
:10036000590062000100410060005D005A008500F4
:100370000100420061005E005B0063000100430079
:100380005500560057005800010067005400560001
:1003900057005800000001000100010001000100A9
:1003A00000004D30393001005B3001000100513058
:1003B00058303C303B300100010050300130141403
:1003C0005D30010001004A30593008145C300100F2
:1003D0000100493057300430003000000100053082
:1003E0000100000001000000010001000100000008
:1003F0000100000001004F305A3037301E0200006B
:1004000001004E3001004B30010001000100483076
:10041000563054305330010001004C30010003309D
:100420003A300100010052300100010001000100DA
:1004300001000100010001000100010000000100B5
:100440000100010001000100000042302030343082
:1004500001000100010046302E302630333001000B
:10046000010045302D301E300100010001004030F8
:100470002B3022300100010001003F3025302C30AC
:100480000100000001000100010000000100000067
:1004900001000100010000000100000001004430E3
:1004A000233031301F3000000100433035302A3016
:1004B0002930010001003E302730303001000100BA
:1004C0000100413028303230010001000100473086
:1004D000010021300100010001000100363024300C
:1004E0002F300100000001000100010001000100A7
:1004F0000000010008301B30010001000100010074
:1005000015300D301A3001000100010014300630A2
:10051000010001000100010012300A300100010059
:10052000010001000C301330010000000100010047
:1005300001000000010000000100010001000000B6
:1005400001000000010001000B30183007300000EE
:10055000010001001C3011301030010001000100C9
:100560000E30173001000100010001000F3019307A
:10057000010001000100010001000930010001003B
:10058000010001001D3001001630010000000100D3
:100590000100010001000100000001000100010054
:1005A0000100010001000100010001000100010043
:1005B0000100010001000100010001000100010033
:1005C0000100010001000100010001000100010023
:1005D0000100000001000100010000000100000016
:1005E0000100010001000000010000000100010005
:1005F00001000100010000000100010001000100F4
:1006000001000100010001000100010001000100E2
:1006100001000100010001000100010001000100D2
:1006200001000100010001000100010001000100C2
:1006300001000100000016034500720067006F0012
:1006400044006F007800200045005A0000001603A7
:100650004500720067006F0044006F0078002000C2
:1006600045005A0000000403090409026D0004015A
:1006700000A0FA0904000001030101000921110191
:100680000001223F000705810308000A0904010058
:100690000103010200092111010001224D0007059B
:1006A000820308000A090402000103000000092176
:1006B000110100012236000705830308000A09041E
:1006C000030001030000000921110100012239008B
:1006D000070584031000011201100100000008ED5D
:1006E000FE071301000102000105010906A1010531
:1006F0000719E029E7150025019508750181020514
:100700000819012905950575019102950175039157
:1007100001050719002977150025019578750181D4
:1007200002C005010980A101850216010026B7005B
:100730001A01002AB700751095018100C0050C0947
:1007400001A1018503160100269C021A01002A9CC2
:1007500002751095018100C005010902A10109017E
:10076000A100050919012905150025019505750147
:100770008102950175038101050109300931158157
:10078000257F95027508810609381581257F950119
:1007900075088106050C0A38021581257F950175BB
:1007A000088106C0C005010906A101050719E02955
:1007B000E7150025019508750181029501750881ED
:1007C0000105081901290595057501910295017525
:1007D0000391010507190029FF150025FF950675EE
:1007E000088100C0000000000000000000000001BF
:1007F0000204060A0F17202C3A4A5D71879DB3C781
:10080000DAE9F5FCFFFCF5E9DAC7B39D87715D4ACB
:100810003A2C20170F0A0604020100000000000015
:100820000000000011241FBECFEFDAE0DEBFCDBF15
:1008300004B603FE24C08091F1019091F201A091D1
:10084000F301B091F4018730904BA740B04BB9F45D
:100850001092F1011092F2011092F3011092F40142
:1008600014BE84B7877F84BF88E10FB6F894809365
:100870006000109260000FBEE0E0FFE3099511E018
:10088000A0E0B1E0E0E3FDE402C005900D92A433E6
:10089000B107D9F711E0A4E3B1E001C01D92A13F77
:1008A000B107E1F70E94950C0C9496260C94000079
:1008B000282F882341F090E02A3018F4885A9F4F5F
:1008C00008950697089582E690E008950F931F9388
:1008D000CF93DF938C01EB0180913401909135012E
:1008E000009709F448C0019709F089C080EE0E9482
:1008F000F71281EE0E94F71288E10E94F71288E158
:100900000E94BF13C801807F992724E096958795A0
:100910002A95E1F70E945804182F0E94F712812FA0
:100920000E94BF13802F8F700E945804182F0E94BE
:10093000F712812F0E94BF13CE01807F992734E0E8
:10094000969587953A95E1F70E945804D82F0E9412
:10095000F7128D2F0E94BF138C2F8F700E945804A6
:10096000C82F0E94F7128C2F0E94BF1380EE0E94A6
:10097000BF1381EE3EC082EE0E94F71287E50E940F
:10098000F71287E50E94BF13C801807F992744E0D2
:10099000969587954A95E1F70E945804182F0E9472
:1009A000F712812F0E94BF13802F8F700E9458046E
:1009B000182F0E94F712812F0E94BF13CE01807F53
:1009C000992754E0969587955A95E1F70E94580427
:1009D000D82F0E94F7128D2F0E94BF138C2F8F707B
:1009E0000E945804C82F0E94F7128C2F0E94BF1338
:1009F00082EEDF91CF911F910F910C94BF13DF9185
:100A0000CF911F910F910895FC018281882309F4F1
:100A10003CC1862F90E08F35910508F036C1FC016E
:100A2000EA5AFF4F0C944B26809134019091350186
:100A3000019681709927909335018093340125C1E7
:100A40006FEB70E019C160E970E008C061EA70E026
:100A500013C163E870E00BC16BE570E081E290E0E8
:100A600012C16BEB70E008C163E570E0F7CF6EEB8D
:100A700070E002C164E070E0D4C069EB70E001C1D5
:100A800062EB70E0F9C065E870E0F1C069E970E020
:100A9000F3C065E570E0E2CF68EC70E0EDC069E8B6
:100AA00070E0E5C064E770E0E2C062E970E0D6CFD4
:100AB00066E770E0DCC063E970E0D0CF60EC70E026
:100AC000DBC062EB70E0DDC069EA70E0D5C068EAC7
:100AD00070E0D2C064E870E0CAC06DE970E0CCC0DC
:100AE00067EF70E0CEC063EC70E0C6C061EC70E010
:100AF000C3C069E570E0B2CF63EB70E0BDC064E5F0
:100B000070E0ACCF6DEB70E0B7C066EB70E0B4C0E6
:100B100065EB70E0B1C06AEB70E0AEC067E770E013
:100B2000A6C060EA70E0A8C062EC70E0A5C06EE903
:100B300070E0A2C068EB70E09FC067EB70E09CC003
:100B400062E870E094C063E470E06BC061EB70E059
:100B500093C066EA70E090C066EC70E08DC06EE114
:100B600070E05FC06FE970E087C068E070E059C076
:100B700067ED70E086C060E870E079C063EA70E01D
:100B80007BC069EC70E078C061E870E070C066E935
:100B900070E072C064EC70E06FC065E770E067C041
:100BA00063E070E03EC061EB70E06BC06EEB70E044
:100BB00068C063EB70E065C065E070E032C061E979
:100BC00070E04CCF69E770E052C064EB70E054C055
:100BD0006CEB70E051C06AE970E04EC068E870E00C
:100BE00046C061E970E048C067E870E040C062E973
:100BF00070E042C067E970E03FC068E770E037C06E
:100C000060E770E034C069E070E00BC065EC70E054
:100C100033C060E670E005C067EA70E02DC060E0B8
:100C200070E082E290E02FC064EA70E025C06CEBD7
:100C300070E027C067EC70E01FC068E970E01CC07E
:100C400069EB70E019C06BE970E016C06FE770E007
:100C50000EC065EA70E010C06CE970E00DC065E997
:100C600070E00AC063E970E007C066E870E080E207
:100C700090E009C064E970E083E090E004C06DEBAF
:100C800070E080E090E00E94660480E090E00895CB
:100C900008956091B3017091B4018091B501909174
:100CA000B6010E94A11D56985E9825982D98269809
:100CB0002E9827982F988330A9F028F4813051F08E
:100CC000823069F012C0843041F0853071F4259A89
:100CD0002D9A08C0259A2D9A0895259A2D9A269A1C
:100CE0002E9A0895279A2F9A089556985E980895F7
:100CF0000C94490656985E9825982D9826982E981B
:100D000027982F988FEF90E0909389008093880028
:100D100090938B0080938A0090938D0080938C0039
:100D2000259A2D9A2FEF80E792E021508040904045
:100D3000E1F700C00000269A2E9A2FEF80E792E09C
:100D4000215080409040E1F700C00000279A2F9A80
:100D50002FEF80E792E0215080409040E1F700C003
:100D6000000025982D982FEF80E792E021508040D9
:100D70009040E1F700C0000026982E982FEF80E702
:100D800092E0215080409040E1F700C00000279899
:100D90002F9856985E9825982D9826982E982798E3
:100DA0002F98089589EA8093800089E080938100DC
:100DB00024982C983F988AB18F748AB96E98479A74
:100DC0008BB1806B8BB9769A0E947A060C94480698
:100DD00080E2809300018091360181110EC00E9453
:100DE000370781E0809336012FEF83ED90E32150A8
:100DF00080409040E1F700C0000080E40E943D0781
:100E00008093000181112EC00E946707809300012A
:100E1000811128C00E94670780930001811122C0C0
:100E20008FE30E9467078093000181111BC00E941D
:100E30005F0780E40E943D0780930001811112C08A
:100E40008CE00E9467078093000181110BC00E9413
:100E5000670780930001811105C08FE30E94670737
:100E6000809300010E945F07809100010895109215
:100E7000B9008AE08093B800089594EA9093BC008A
:100E80009091BC0097FFFCCF9091B900987F98306B
:100E900021F0903111F081E008958093BB0084E847
:100EA0008093BC008091BC0087FFFCCF8091B9008B
:100EB000887F883111F0803471F780E0089584E9EB
:100EC0008093BC008091BC0084FDFCCF089580938A
:100ED000BB0084E88093BC008091BC0087FFFCCFFE
:100EE0009091B900987F81E0983209F480E00895EC
:100EF00084E88093BC008091BC0087FFFCCF809188
:100F0000BB00089580910001811115C080E40E940A
:100F10003D078093000181110CC082E10E946707A8
:100F200080930001811105C08FEF0E9467078093B5
:100F300000010E945F0784B1807F84B985B1807F02
:100F400085B98AB1837F8AB98BB1837F8BB93E988B
:100F5000469808950E94E806809300010E94820747
:100F600080B38C7080BB81B3836F81BBE6E4F1E01A
:100F7000A8E3B1E011921D9281E0E435F807D1F7C2
:100F80000C94D206BF92CF92DF92EF92FF920F9312
:100F90001F93CF93DF9380910001882379F0809194
:100FA00037018F5F80933701811108C00E94E806E6
:100FB00080930001811102C00E947A0608E311E0CB
:100FC000C0E0D0E0DD24D39482E0C82EEE24E39488
:100FD000F12CC73000F580910001811162C080E4DE
:100FE0000E943D0780930001811112C082E10E949E
:100FF00067078093000181110BC0C7010C2E01C04F
:10100000880F0A94EAF780950E9467078093000191
:101010000E945F0746C0CA30A1F028F4C83059F0DA
:10102000C93061F005C0CC3089F070F0CD3089F066
:10103000209A289810C0219A29980DC0229A2A989F
:101040000AC0239A2B9807C0529A01C0539A5B9802
:1010500002C03E9A4698E0EAEA95F1F78FB1799995
:101060005AC092E081708D25892B7C9B02C090E054
:1010700001C094E0892B7D9B02C090E001C098E004
:10108000892B7E9B02C090E001C090E1892B9FB12B
:101090009095991F9927991F9295990F907E892B6A
:1010A0000FC08091000181114BC080E40E943D0778
:1010B00080930001882389F1B12C0E945F078B2D5A
:1010C000F8019081981719F08083C09201010E9465
:1010D000820721960F5F1F4FCE30D10509F079CFDF
:1010E00080910101882371F181508093010188234F
:1010F00039F08FE99FE00197F1F700C0000022C0AE
:10110000A6E4B1E0E8E3F1E081918D9391E0E6346B
:10111000F907D1F717C090E0A5CF83E10E946707D8
:10112000809300018111C8CF81E40E943D07809324
:1011300000018111C1CF0E947807B82EB094BDCFB5
:1011400080E0BECF0E94780681E0DF91CF911F91B1
:101150000F91FF90EF90DF90CF90BF900895E82F10
:10116000F0E0EA5BFE4F8081089508958B3B910586
:1011700078F4883A910540F5853A9105D0F48430A9
:10118000910508F0B1C08130910509F4ADC06BC084
:10119000803E910508F467C0883E910508F4A4C01C
:1011A0009C01205F31092031310508F05CC0906559
:1011B0000895853A910509F459C0863A910509F4D4
:1011C00058C083E890E40895883A910509F454C022
:1011D000893A910509F453C08A3A910509F452C03D
:1011E0008B3A910509F451C08C3A910509F450C02D
:1011F0008D3A910509F44FC0803B910509F44EC02A
:101200008E3A910509F44DC08F3A910509F44CC00E
:10121000813B910509F44BC0823B910509F44AC01A
:10122000833B910509F449C0843B910509F448C00A
:10123000853B910509F447C0863B910509F446C0FA
:10124000873B910509F445C0883B910509F444C0EA
:10125000893B910509F443C08A3B910509F042C0DE
:101260008AE296E4089580E090E0089581E890E4B1
:10127000089582E890E4089582EE94E4089589EE5A
:1012800094E408958AEE94E4089585EB94E4089537
:1012900086EB94E4089587EB94E408958CEC94E451
:1012A00008958DEC94E4089583E895E408958AE820
:1012B00095E4089582E995E4089584E995E4089514
:1012C00081E296E4089583E296E4089584E296E448
:1012D000089585E296E4089586E296E4089587E20B
:1012E00096E4089580E094E40895089596E0799F47
:1012F000F001112494E5899FE00DF11D1124E60F02
:10130000F11DEE0FFF1FE256FE4F85919491089557
:10131000880F991F825E9F4FFC01859194910895DB
:10132000880F991F82569E4FFC01859194910895D4
:1013300026E0729FF001112444E5849FE00DF11D29
:101340001124E60FF11DEE0FFF1FE256FE4F25910F
:101350003491C9019A9581159F4110F4C9010895EE
:10136000C90190528115904128F4C9019F700E94D3
:1013700090090895C90190538115904120F4C90145
:101380009927906C0895211580E5380769F40E942B
:101390003D179FEF24E34CE0915020404040E1F79F
:1013A00000C000000C949A1E213080E5380731F40B
:1013B0008091CF0181608093CF010895C90190553C
:1013C0008115904108F050C0832F99278F7099277D
:1013D00081309105D9F4A9014370552702C0880FC7
:1013E000991F4A95E2F79C68A90164E0440F551FD4
:1013F0006A95E1F744275370842B952B73E0220FF5
:10140000331F7A95E1F7207633271DC0823091058E
:1014100029F4922F8827816F906A0895833091056F
:10142000A9F4A9014370552781E090E002C0880F1C
:10143000991F4A95E2F79C6843E0220F331F4A95B3
:10144000E1F7207E3770822B932B08950497F1F4F7
:10145000A9014370552781E090E002C0880F991FD1
:101460004A95E2F79A68E8CFC901905781159041F3
:1014700020F4C9019F7090620895C90190588115A8
:10148000904120F4C9019F70906A0895203E310573
:10149000E0F4203C310558F52133310509F470C0E2
:1014A00048F42932310509F464C02A32310509F4BF
:1014B0006EC074C029333105F1F022383105D9F0FE
:1014C0002533310509F44EC069C0233E310589F149
:1014D00038F4203E3105C1F0223E3105E1F05EC016
:1014E000263E310569F1273E3105A9F157C0C901F2
:1014F0000E94880908958091E20180FD02C081FF69
:101500004DC080EE90E04BC08091E20180FFF9CFAA
:1015100089E390E044C08091E20182FF0EC0809197
:10152000E20184FF03C080E090E039C083EE90E0E8
:1015300036C08091E20182FFF2CF82EE90E02FC0B0
:101540008091E20183FF0BC08091E20184FDEBCF2B
:1015500087EE90E024C08091E20183FFF5CF86EE14
:1015600090E01DC08091E20185FF07C089E290E014
:1015700016C08091E20185FFF9CF85E390E00FC0AE
:101580008091E20186FF07C08AE290E008C0809166
:10159000E20186FFF9CF81E390E001C0C9010E941A
:1015A000B608089508950C94D20A809164010895B4
:1015B000CF93DF9300D01F92CDB7DEB72091E80123
:1015C000243019F523E029839B838A832093E90043
:1015D0008FEF9091E800815095FD06C095ED9A95AA
:1015E000F1F700008111F5CF8091E80085FF0DC073
:1015F00040E050E063E070E0CE0101960E94420DB1
:101600008091E8008E778093E8000F900F900F9004
:10161000DF91CF910895CF93DF9300D01F92CDB784
:10162000DEB72091E801243021F522E029839B8355
:101630008A8383E08093E9008FEF9091E8008150E6
:1016400095FD06C095ED9A95F1F700008111F5CF53
:101650008091E80085FF0DC040E050E063E070E05D
:10166000CE0101960E94420D8091E8008E77809312
:10167000E8000F900F900F90DF91CF910895209187
:10168000E8012430F1F422E02093E9002FEF3091BB
:10169000E800215035FD06C035ED3A95F1F7000020
:1016A0002111F5CF2091E80025FF0BC040E050E06C
:1016B00065E070E00E94420D8091E8008E77809393
:1016C000E8000895CF93DF93EC018091E801843026
:1016D00009F046C090910C019923D9F090910D0129
:1016E0009923B9F08093E9008FEF9091E800815041
:1016F00095FD06C095E19A95F1F700008111F5CFAF
:101700008091E80085FF2CC040E050E060E170E08F
:1017100017C081E08093E9008FEF9091E80081503D
:1017200095FD06C095ED9A95F1F700008111F5CF72
:101730008091E80085FF14C040E050E068E070E070
:10174000CE010E94420D8091E8008E778093E800E0
:1017500080E1FE01A4E5B1E001900D928A95E1F7E8
:10176000DF91CF9108958091E701811109C00E9416
:10177000D40E0E94310F8091E20084608093E200D9
:1017800008951092E701089508950C94C3240E94CF
:10179000311E0E94C9240E94CE110C94D30A42E04B
:1017A00061EC81E00E944E0E42E061EC82E00E941A
:1017B0004E0E42E061EC83E00E944E0E42E161EC8D
:1017C00084E00C944E0E8091EA01833009F455C0F8
:1017D00030F4813071F0823009F48EC008958A307F
:1017E00009F47AC08B3009F460C0893009F09CC0DC
:1017F00020C08091E901813A09F096C08091E8000B
:10180000877F8093E8008091ED019091EE01892B14
:1018100021F060E080E090E003C060E184E591E0C9
:1018200070E00E948B0D8091E8008B778093E80038
:1018300008958091E901813209F076C08091ED012F
:101840009091EE01009719F0039709F06DC0809117
:10185000E800877F8093E8008091E80082FD05C062
:101860008091E8018111F8CF5FC08091F1008093F1
:1018700064018091E8008B7753C08091E901813A3F
:1018800009F052C08091ED019091EE01892B09F091
:101890004BC08091E800877F8093E8008091E8004A
:1018A00080FFFCCF80910C0136C08091E90181322C
:1018B000D9F58091ED019091EE01892BA9F58091E8
:1018C000E800877F8093E8000E94830E8091EB01FF
:1018D00080930C010C943D178091E901813221F530
:1018E0008091E800877F8093E8000E94830E8091BA
:1018F000EC018093650108958091E901813AA1F49A
:101900008091E800877F8093E8008091E80080FF65
:10191000FCCF809165018093F1008091E8008E7783
:101920008093E8000C94830E089584B7877F84BF6A
:1019300088E10FB6F89480936000109260000FBEAB
:1019400090E080E80FB6F894809361009093610076
:101950000FBE0E941D120E94D40E0E94310F809172
:10196000E20084608093E20078940E94AC110E94AF
:101970001F1282E091E00E94C9110E94B12480915F
:10198000E801853069F40E94F41D8091E601882306
:10199000B1F30E941C1E882391F30E942C0DEFCFFF
:1019A0000E942512ECCF292F332723303105A9F0CF
:1019B0006CF42130310509F442C02230310509F0C0
:1019C00043C08DE690E02AE636E042C02132310580
:1019D000C9F02232310519F137C0992781309105BC
:1019E00041F08230910541F0892B71F5E6E6F6E091
:1019F00005C0EEE4F6E002C0E6E3F6E0849190E094
:101A00009F0126C0643000F5E62FF0E0EE0FFF1FC7
:101A1000EE5DFE4F2081318189E090E019C0643095
:101A200098F4E62FF0E0DF01AA0FBB1FA65EBE4FC1
:101A30002D913C91EA5EFE4F808190E009C082E1E9
:101A400090E027ED36E004C080E090E020E030E058
:101A5000FA0131832083089580E189BD82E189BD47
:101A600009B400FEFDCF8091D8008F7D8093D8000F
:101A70008091E00082608093E0008091E00081FD31
:101A8000FCCF0895CF92DF92EF92FF920F931F93B6
:101A9000CF93DF937C018B01EA010E94A40E811198
:101AA00031C0209731F088819981081B190BE80E0D
:101AB000F91EC12CD12C0115110519F18091E800F6
:101AC00085FD14C08091E8008E778093E800209710
:101AD00041F0888199818C0D9D1D9983888385E0D3
:101AE00011C00E94A40E882331F30CC0F70181912C
:101AF0007F018093F10001501109FFEFCF1ADF0A37
:101B0000DACF80E0DF91CF911F910F91FF90EF909E
:101B1000DF90CF9008952091EF013091F0012617CA
:101B2000370748F06115710539F42091E8002E77E8
:101B30002093E80001C0B901FC0120E061157105A6
:101B4000B9F18091E801882309F440C0853009F497
:101B50003FC08091E80083FD3DC08091E80082FF96
:101B600006C08091E80082FF26C080E00895809141
:101B7000E80080FFE3CF2091F3008091F20090E035
:101B8000922B6115710551F08830910538F421913F
:101B90002093F100615071090196F3CF21E008977D
:101BA00009F020E08091E8008E778093E800C6CFAE
:101BB0002111C7CFD6CF8091E801882339F0853035
:101BC00039F08091E80083FFCCCF04C082E0089513
:101BD00083E0089581E008952091EF013091F001B4
:101BE0002617370748F06115710539F42091E80090
:101BF0002E772093E80001C0B901FC0120E06115B7
:101C00007105C1F18091E801882309F441C0853054
:101C100009F440C08091E80083FD3EC08091E80057
:101C200082FF06C08091E80082FF27C080E008950F
:101C30008091E80080FFE3CF2091F3008091F200D3
:101C400090E0922B6115710559F08830910540F4B0
:101C500024912093F1003196615071090196F2CFE1
:101C600021E0089709F020E08091E8008E778093CA
:101C7000E800C5CF2111C6CFD5CF8091E8018823D8
:101C800039F0853039F08091E80083FFCBCF04C074
:101C900082E0089583E0089581E00895982F9730B9
:101CA00058F59093E900981739F07091EC00209165
:101CB000ED005091F00003C0242F762F50E021FF5B
:101CC00019C03091EB003E7F3093EB003091ED0076
:101CD0003D7F3093ED003091EB0031603093EB00AD
:101CE0007093EC002093ED005093F0002091EE00F3
:101CF00027FF07C09F5FD3CF8F708093E90081E0FB
:101D0000089580E008958091E90187FD05C08091E4
:101D1000E80080FF0EC012C08091E80082FD05C07F
:101D20008091E8018111F8CF08958091E8008B77C8
:101D300008C08091E8018111EACF08958091E80000
:101D40008E778093E80008958091E4009091E500FB
:101D500045E62091EC0020FF21C02091E80020FD05
:101D600021C02091E801222389F0253089F02091BB
:101D7000EB0025FD0FC02091E4003091E50028170D
:101D8000390739F3415041F0C901E3CF82E00895AA
:101D900083E0089581E0089584E008952091E800AB
:101DA00022FFDFCF80E008950E94420F0E944A0F79
:101DB000E0EEF0E0808181608083E8EDF0E08081FA
:101DC0008F77808319BCA7EDB0E08C918E7F8C93C8
:101DD00080818F7E80831092E70108950F931F9377
:101DE000CF93DF930E94420F0E944A0FC8EDD0E0CC
:101DF00088818F77888388818068888388818F7DB8
:101E0000888319BC1092E8011092E4011092E60157
:101E10001092E50100EE10E0F80180818B7F808355
:101E200088818160888342E060E080E00E944E0EFD
:101E3000E1EEF0E080818E7F8083E2EEF0E0808151
:101E400081608083808188608083F80180818E7FBB
:101E50008083888180618883DF91CF911F910F916A
:101E60000895E8EDF0E080818F7E8083E7EDF0E07B
:101E700080818160808384E082BF81E08093E7017C
:101E80000C94EE0EE8EDF0E080818E7F808310925E
:101E9000E20008951092DA001092E10008951F9276
:101EA0000F920FB60F9211242F933F934F935F938E
:101EB0006F937F938F939F93AF93BF93EF93FF9312
:101EC0008091E10082FF0BC08091E20082FF07C099
:101ED0008091E1008B7F8093E1000E94AB118091A3
:101EE000DA0080FF1FC08091D80080FF1BC0809166
:101EF000DA008E7F8093DA008091D90080FF0DC0D8
:101F000080E189BD82E189BD09B400FEFDCF81E099
:101F10008093E8010E94B30B05C019BC1092E80140
:101F20000E94C10B8091E10080FF19C08091E20006
:101F300080FF15C08091E2008E7F8093E200809147
:101F4000E20080618093E2008091D80080628093FB
:101F5000D80019BC85E08093E8010E94C50B8091F0
:101F6000E10084FF30C08091E20084FF2CC080E15A
:101F700089BD82E189BD09B400FEFDCF8091D80002
:101F80008F7D8093D8008091E1008F7E8093E10067
:101F90008091E2008F7E8093E2008091E200816078
:101FA0008093E2008091E401882311F084E007C06F
:101FB0008091E30087FF02C083E001C081E080934D
:101FC000E8010E94C70B8091E10083FF29C0809146
:101FD000E20083FF25C08091E100877F8093E100CC
:101FE00082E08093E8011092E4018091E1008E7F0D
:101FF0008093E1008091E2008E7F8093E2008091E7
:10200000E20080618093E20042E060E080E00E94B4
:102010004E0E8091F00088608093F0000E94C40B07
:10202000FF91EF91BF91AF919F918F917F916F91B0
:102030005F914F913F912F910F900FBE0F901F9086
:1020400018951F920F920FB60F9211242F933F9362
:102050004F935F936F937F938F939F93AF93BF93B0
:10206000CF93EF93FF93C091E900CF708091EC0084
:102070001092E9008091F000877F8093F0007894BF
:102080000E945D101092E9008091F00088608093BA
:10209000F000C093E900FF91EF91CF91BF91AF9114
:1020A0009F918F917F916F915F914F913F912F9170
:1020B0000F900FBE0F901F9018951F93CF93DF9333
:1020C000CDB7DEB7AA970FB6F894DEBF0FBECDBF6F
:1020D000E9EEF1E08091F100819321E0E13FF20728
:1020E000C9F70E94E30B8091E80083FF1CC1209197
:1020F000E9013091EA01832F90E08A30910508F0E0
:1021000012C1FC01EB54FF4F0C944B26203881F098
:10211000223809F008C18091ED018F708093E900A9
:102120008091EB0085FB882780F91092E90006C0BA
:102130008091E5019091E601911182609091E80013
:10214000977F9093E8008093F1001092F100C5C052
:10215000822F8D7F09F0E7C0222319F0223061F031
:10216000E2C08091EB01813009F0DDC0333009F02D
:1021700080E08093E60128C08091EB01811124C0AA
:102180002091ED012F7009F4CEC02093E9008091D9
:10219000EB0080FF19C08091EB00333011F48062B6
:1021A00011C080618093EB0081E090E0022E01C0BD
:1021B000880F0A94EAF78093EA001092EA0080916F
:1021C000EB0088608093EB001092E9008091E800BA
:1021D000877F86C02111A7C01091EB011F778091E6
:1021E000E3008078812B8093E3008091E800877F73
:1021F0008093E8000E94830E8091E80080FFFCCF6E
:102200008091E30080688093E300112311F083E064
:1022100001C082E08093E80186C02058223008F097
:1022200082C08091EB019091EC018C3D23E09207FC
:1022300079F583E08A838AE289834FB7F894DE01D7
:10224000139620E03EE051E2E32FF0E05093570078
:10225000E49120FF03C0E295EF703F5FEF708E2F97
:1022600090E0EA3010F0C79601C0C0968D939D9320
:102270002F5F243149F74FBF8091E800877F80931B
:10228000E8006AE270E0CE0101960E948B0D14C056
:10229000AE014F5F5F4F6091ED010E94D30C00973C
:1022A00009F441C02091E800277F2093E800BC0199
:1022B00089819A810E94EC0D8091E8008B77809350
:1022C000E80031C0203879F58091E800877F80935D
:1022D000E8008091E4018093F1008091E8008E771E
:1022E0008093E8000E94830E1EC021111CC09091B3
:1022F000EB019230C0F48091E800877F8093E80082
:102300009093E4010E94830E8091E401811104C046
:102310008091E30087FF02C084E001C081E08093E8
:10232000E8010E94CF0B8091E80083FF0AC08091F2
:10233000E800877F8093E8008091EB0080628093C3
:10234000EB00AA960FB6F894DEBF0FBECDBFDF91AB
:10235000CF911F9108950895CF938091E80188232C
:10236000B1F08091E9008F709091EC0090FF02C075
:1023700090E801C090E0C92FC82B1092E90080912D
:10238000E80083FD0E945D10CF70C093E900CF91FB
:10239000089590936B0180936A010895E0916A011A
:1023A000F0916B01309721F00190F081E02D0994BC
:1023B00080E00895E0916A01F0916B01309721F07F
:1023C0000280F381E02D09940895E0916A01F09173
:1023D0006B01309721F00480F581E02D0994089578
:1023E00020916801309169018217930771F09093F1
:1023F000690180936801E0916A01F0916B01309767
:1024000021F00680F781E02D09940895209166015E
:10241000309167018217930771F090936701809361
:102420006601E0916A01F0916B01309721F0008420
:10243000F185E02D0994089508950C941C120E94D2
:10244000371E0E94AA070C94FD1ECF92DF92EF92D6
:10245000FF920F931F93CF93DF93CDB7DEB72B97E8
:102460000FB6F894DEBF0FBECDBF0E94C2073DE697
:10247000E32E31E0F32E00E010E0C02E802F0E940A
:10248000AF08F701D1907F01D826B1F40F5F1F4F3D
:102490000E30110591F78FEF89838A831B820E948A
:1024A000401E8160782F9D838C8349815A816B8186
:1024B0008D810E94C81241C09091CF0191FF04C04C
:1024C0008B870E94B5088B8520E030E04D2D50E0D1
:1024D000922FBA01022E02C0759567950A94E2F711
:1024E00060FF25C02E83CF82EE24E394F12C02C03E
:1024F000EE0CFF1C9A95E2F790E08E219F2121E0DF
:10250000892B09F420E028870E94401E8160782FE3
:102510009A8789874E815F8168858A850E94C81263
:10252000F801E359FE4F80818E25808306C02F5F1E
:102530003F4F2630310561F6A9CF0E94E12110916D
:102540006C010E94CE111817A1F00E94CE11809349
:102550006C012B960FB6F894DEBF0FBECDBFDF9196
:10256000CF911F910F91FF90EF90DF90CF900C943F
:10257000D30A2B960FB6F894DEBF0FBECDBFDF9106
:10258000CF911F910F91FF90EF90DF90CF90089522
:10259000CF93DF93CDB7DEB72B970FB6F894DEBF9E
:1025A0000FBECDBF4F83588769877A878B87DE013F
:1025B000119686E0FD0111928A95E9F785E0FE010A
:1025C000379601900D928A95E1F749815A816B8186
:1025D0007C818D819E810E94091A2B960FB6F894FA
:1025E000DEBF0FBECDBFDF91CF9108950895CF9389
:1025F000C82F882309F4C1C0823859F40E94CE1133
:1026000081FDBBC089E30E94A81C0E94721D89E362
:102610000CC0833879F40E94CE1180FDAEC083E5F2
:102620000E94A81C0E94721D83E50E94E81CCF91A5
:102630000C94721D843859F40E94CE1182FD9DC005
:1026400087E40E94A81C0E94721D87E4EECF8CEFE5
:102650008C0F813A48F48C2F0E94192481118DC06F
:102660008C2F0E94A81CE3CF80E28C0F883048F4A6
:10267000C77081E001C0880FCA95EAF70E94291D42
:10268000D6CF8BE58C0F833078F4C53A29F0C63A63
:1026900031F482E890E005C081E890E002C083E870
:1026A00090E0CF910C94F01188E58C0F833108F005
:1026B00064C0C83A39F1C93A41F1CA3A49F1CB3A52
:1026C00051F1CC3A59F1CD3A61F1C03B69F1CE3AC2
:1026D00071F1CF3A79F1C13B81F1C23B89F1C33B42
:1026E00091F1C43B99F1C53BA1F1C63BA9F1C73BB0
:1026F000B1F1C83BB9F1C93BC1F1CA3BC9F58AE2A6
:1027000092E038C082EE90E035C089EE90E032C0B1
:102710008AEE90E02FC085EB90E02CC086EB90E035
:1027200029C087EB90E026C08CEC90E023C08DECB4
:1027300090E020C083E891E01DC08AE891E01AC0D3
:1027400082E991E017C084E991E014C081E292E04F
:1027500011C083E292E00EC084E292E00BC085E2F9
:1027600092E008C086E292E005C087E292E002C0F3
:1027700080E090E0CF910C940612CF9108958823C9
:1027800009F44BC0823859F40E94CE1181FF45C034
:1027900089E30E94A81C0E94721D89E30CC0833843
:1027A00071F40E94CE1180FF38C083E50E94A81CFE
:1027B0000E94721D83E50E94E81C0C94721D8438EF
:1027C00059F40E94CE1182FF28C087E40E94A81C01
:1027D0000E94721D87E4EFCF9CEF980F913A58F357
:1027E00090E2980F983050F4877091E001C0990FF3
:1027F0008A95EAF7892F0E942F1DDFCF9BE5980F5E
:10280000933020F480E090E00C94F011885A8331EA
:1028100020F480E090E00C9406120895882321F0C3
:102820000E94291D0C94721D0895882321F00E9496
:102830002F1D0C94721D0895CF92DF92EF92FF929C
:102840000F931F93CF93DF93CDB7DEB728970FB6C3
:10285000F894DEBF0FBECDBF8C0185E0F801DE012C
:10286000119601900D928A95E1F7F801D080E180F0
:10287000F280258122952F7083819481892B39F0F4
:10288000FFEFEF1206C081E0DF1203C003C081E05A
:1028900001C080E080FDCEC2C8012F830E94F612E5
:1028A000D982EA8289819A810E94661C9E838887E8
:1028B0000E94651C0E94381B2F814E816885FF2075
:1028C00029F00E94461D68854E812F81E42FE295F4
:1028D000EF70F0E0E154FF4F0C944B26842F807F83
:1028E000142F1F70882311F01295107FFF2059F0CC
:1028F000112309F454C2812F68870E94391D0E9458
:10290000721D68854CC2862F0E94BF13112309F4E3
:1029100091C2812F0E943F1D28960FB6F894DEBF0A
:102920000FBECDBFDF91CF911F910F91FF90EF9020
:10293000DF90CF900C94721D342F307F842F8F70D6
:10294000303211F08295807F662319F0613019F1E1
:102950002BC0FF20B1F0222309F493C1213009F0EC
:1029600090C128960FB6F894DEBF0FBECDBFDF91A1
:10297000CF911F910F91FF90EF90DF90CF900C942B
:10298000591D222319F0213009F454C28E830E946C
:102990005C1D8E8189C1FF2021F0223008F04AC2DF
:1029A00070C1211147C280C1FF2021F0222309F408
:1029B00068C1F5C1222309F477C105C2242F2695E9
:1029C0002695237030E02115310521F021303105A5
:1029D000C9F030C2FF2021F0862F942F937002C0DF
:1029E00080E090E028960FB6F894DEBF0FBECDBF12
:1029F000DF91CF911F910F91FF90EF90DF90CF90DB
:102A00000C94F011FF2021F0862F942F937002C0B8
:102A100080E090E028960FB6F894DEBF0FBECDBFE1
:102A2000DF91CF911F910F91FF90EF90DF90CF90AA
:102A30000C940612862FFF2019F00E94E92002C094
:102A40000E94512128960FB6F894DEBF0FBECDBF6D
:102A5000DF91CF911F910F91FF90EF90DF90CF907A
:102A60000C94D621842F837009F076C0F110E2C156
:102A7000262F229526952770220F220F862F8F70E2
:102A8000C82ED12CE12CF12C022E04C0CC0CDD1C64
:102A9000EE1CFF1C0A94D2F764FF10C06FE070E0D8
:102AA00080E090E004C0660F771F881F991F2A9569
:102AB000D2F7609570958095909503C060E070E0C6
:102AC000CB01242F269526952370422F50E04230CB
:102AD0005105D1F04330510559F16C297D298E29DA
:102AE0009F294130510541F128960FB6F894DEBF79
:102AF0000FBECDBFDF91CF911F910F91FF90EF904F
:102B0000DF90CF900C945D1B6C297D298E299F2925
:102B100028960FB6F894DEBF0FBECDBFDF91CF91E0
:102B20001F910F91FF90EF90DF90CF900C94771B47
:102B30000E945D1BC701B60128960FB6F894DEBF50
:102B40000FBECDBFDF91CF911F910F91FF90EF90FE
:102B5000DF90CF900C94431BFF2019F0842F8170DD
:102B600001C08695882309F465C1262F22952695F4
:102B70002770220F220F862F8F70C82ED12CE12CA8
:102B8000F12C022E04C0CC0CDD1CEE1CFF1C0A94A0
:102B9000D2F764FF10C06FE070E080E090E004C006
:102BA000660F771F881F991F2A95D2F76095709539
:102BB0008095909503C060E070E0CB01242F2695AE
:102BC00026952370422F50E042305105D1F043301A
:102BD000510559F16C297D298E299F2941305105D4
:102BE00041F128960FB6F894DEBF0FBECDBFDF913E
:102BF000CF911F910F91FF90EF90DF90CF900C94A9
:102C0000311C6C297D298E299F2928960FB6F894AE
:102C1000DEBF0FBECDBFDF91CF911F910F91FF900F
:102C2000EF90DF90CF900C944B1C0E94311CC70199
:102C3000B60128960FB6F894DEBF0FBECDBFDF9168
:102C4000CF911F910F91FF90EF90DF90CF900C9458
:102C5000171C603FC9F118F4603E50F49BC0623FFE
:102C600009F460C008F44AC0633F09F46FC092C021
:102C7000162F1F70842F8F71FF2099F00E94B01BB8
:102C8000812F28960FB6F894DEBF0FBECDBFDF911F
:102C9000CF911F910F91FF90EF90DF90CF900C9408
:102CA0000E140E94D11B812F28960FB6F894DEBF18
:102CB0000FBECDBFDF91CF911F910F91FF90EF908D
:102CC000DF90CF900C941514FF20A1F02111B2C019
:102CD000842F8F7128960FB6F894DEBF0FBECDBF3C
:102CE000DF91CF911F910F91FF90EF90DF90CF90E8
:102CF0000C94F61B223008F09DC0EACFFF20A1F013
:102D0000842F8F7128960FB6F894DEBF0FBECDBF0B
:102D1000DF91CF911F910F91FF90EF90DF90CF90B7
:102D20000C94B01BFF2061F3842F8F7128960FB68F
:102D3000F894DEBF0FBECDBFDF91CF911F910F91F1
:102D4000FF90EF90DF90CF900C94D11BFF2091F07B
:102D5000842F8F7128960FB6F894DEBF0FBECDBFBB
:102D6000DF91CF911F910F91FF90EF90DF90CF9067
:102D70000C949B1B28960FB6F894DEBF0FBECDBFF8
:102D8000DF91CF911F910F91FF90EF90DF90CF9047
:102D90000C94911BFF20A1F0222309F4B1CF862FC0
:102DA00028960FB6F894DEBF0FBECDBFDF91CF914E
:102DB0001F910F91FF90EF90DF90CF900C94F7123E
:102DC000222309F4B1CF862F28960FB6F894DEBFE0
:102DD0000FBECDBFDF91CF911F910F91FF90EF906C
:102DE000DF90CF900C94BF134F70C8010E94040570
:102DF00028960FB6F894DEBF0FBECDBFDF91CF91FE
:102E00001F910F91FF90EF90DF90CF900C94B61A26
:102E10004F70C80128960FB6F894DEBF0FBECDBF25
:102E2000DF91CF911F910F91FF90EF90DF90CF90A6
:102E30000C94750928960FB6F894DEBF0FBECDBF6F
:102E4000DF91CF911F910F91FF90EF90DF90CF9086
:102E500008950E94461D0E94561D0E941B1D0E943F
:102E6000721D0E9482220E94D62180E090E00E9482
:102E7000F01180E090E00C9406120E94361D0C9434
:102E800029170E94661C292F22952F7030E02C30C4
:102E900031054CF42A3031056CF4225031092230CE
:102EA000310590F407C02C30310551F02F30310539
:102EB00039F00AC0803E10F0803F31F481E008957F
:102EC00093FB882780F9089580E00895CF93DF93DE
:102ED00000D000D01F92CDB7DEB70F900F900F90AB
:102EE0000F900F90DF91CF910895CF93DF9300D093
:102EF00000D000D0CDB7DEB726960FB6F894DEBF6F
:102F00000FBECDBFDF91CF9108951F93CF93DF9375
:102F1000C0917B0116E080917C01C81799F0D0E048
:102F20001C9FF0011D9FF00D1124E358FE4F4081BE
:102F3000518162817381848195810E9475172196E8
:102F4000C770E9CFDF91CF911F9108954091AD01F6
:102F50005091AE016091AF017091B0018091B101CB
:102F60009091B2010C947517CF938091B201829524
:102F70008F7009F05FC08091AF01882309F45AC0B7
:102F800020917B01A0917C016091AD017091AE0117
:102F90008091B0019091B10131E06F3F09F030E0D4
:102FA000B32FC6E02A1709F445C0009721F07F3FF0
:102FB00021F44B2F03C041E001C040E030E040FD70
:102FC00035C0C29FF001C39FF00D1124E358FE4F9E
:102FD000418174132BC04081641328C04281411188
:102FE00025C0438154814817590710F441505109B5
:102FF000481B590B483C5105C8F48091B2018F70B1
:1030000080618093B20186E0829FF001839FF00D82
:103010001124EE57FE4F80818F70806180838DEA8E
:1030200091E00E941C14CF910C9485172F5F3F4FA5
:103030002770B8CFCF910895CF92DF92EF92FF9291
:103040000F931F93CF93DF93CDB7DEB762970FB681
:10305000F894DEBF0FBECDBF8C0185E0F801DE0124
:103060001D9601900D928A95E1F7D8014C91119629
:103070005C91119712966C9112971396ED90FC90BB
:1030800014977091AD01E091AE012091B0013091A3
:10309000B1012115310531F0EF3F31F481E07F3F7F
:1030A00019F403C081E001C080E0B82FB170CB2ECD
:1030B00080FD6CC1D090AF01DD2009F4F5C0F09126
:1030C000B201E216F30638F0C701821B930B883C6D
:1030D000910548F09BC0209530952E0D3F1D283C52
:1030E000310508F093C08F2F807F09F052C0E5139F
:1030F00014C0741312C0D62E61110FC0FF70F0619E
:10310000F093B2010E94A6178DEA91E00E941C1470
:103110008091B201F80185836CC1EF2831F05F3FE7
:1031200031F481E04F3F19F403C081E001C080E039
:1031300080FD03C081E0862701C080E0F82FF17098
:10314000FF2E80FF1CC080917B0120917C0136E026
:10315000821709F428C190E0389FF001399FF00DE3
:103160001124E358FE4F7181571306C07081471335
:1031700003C07281671303C001968770E9CFD62E12
:10318000662309F436C18091B20181608093B20157
:1031900053C0E51308C0741306C0611104C0D80100
:1031A0001596FC93AEC04D875E878D859E856A8B94
:1031B0000E9441176A89882329F1D62E662311F1CE
:1031C0002091B201822F82958F7090E002970CF4CB
:1031D00060C08091AD019091AE0198878F83198670
:1031E000FB86EA862C87CE01079651C0E51731F1A0
:1031F0004D875E878D859E856A8B0E9441176A89FF
:1032000081112EC0C8010E941C14A4C08F2F807F82
:1032100069F77E2DF98AE88A89890E9466178DEA06
:1032200091E00E941C14EDEAF1E086E0DF011D92BE
:103230008A95E9F70E94A617D12CDBC07413D8CF6A
:103240006111D6CFD8011596FC93C8010E941C14B9
:10325000EDEAF1E086E0DF011D928A95E9F7C9C049
:10326000D62E662379F22091B201822F82958F703B
:1032700090E0029774F08091AD019091AE019A8335
:1032800089831B82FD82EC822E83CE0101960E94EF
:103290001C1486E0F801ADEAB1E001900D928A9528
:1032A000E1F70E94B4176FC0E216F30628F0C701D9
:1032B000821B930B9C0104C0209530952E0D3F1D61
:1032C000283C310508F052C0D62E662309F49ACF67
:1032D000E5132CC074132AC08091B20180FD1DC07B
:1032E000982F92959F70C9F0D80115968C931597D9
:1032F0009F3039F09F5F9295907F8F70892B159644
:103300008C93C8010E941C1486E0F801ADEAB1E07C
:1033100001900D928A95E1F736C086E0F801ADEA9A
:10332000B1E001900D928A95E1F763C04D875E8709
:103330008D859E850E944117882379F086E0F801EB
:10334000ADEAB1E001900D928A95E1F70E94B417C1
:103350000E94A617DD24D3944CC08091B2018160F5
:103360008093B201C8010E941C1443C07E2DF98ACB
:10337000E88A89890E946617EDEAF1E086E0DF01BC
:103380001D928A95E9F70E94A61733C0662309F4B7
:1033900039CF4D875E878D859E850E944117882392
:1033A00009F430CFCBCF4D875E878D859E850E94F7
:1033B000661C292F22952F7030E0223031052CF425
:1033C0009F7041F0811106C00CC0243031052CF4EF
:1033D0009F7049F4805E883020F0C8010E941C1460
:1033E000CF2CDC2C06C0D80115969C91907F91F7CC
:1033F000F8CF8D2D62960FB6F894DEBF0FBECDBF0D
:10340000DF91CF911F910F91FF90EF90DF90CF90C0
:1034100008951F93CF93DF93CDB7DEB72C970FB6E8
:10342000F894DEBF0FBECDBF4F83588769877A8778
:103430008B879C87CE0107960E941C188823C1F0B9
:103440002F8138858A859B85892B31F03F3F11F08C
:1034500080E003C02F3FE1F781E0811147C04F8139
:10346000588569857A858B859C850E9475173EC035
:1034700086E0FE013796DE01119601900D928A9545
:10348000E1F7FF81E8854A855B854115510531F0FB
:10349000EF3F31F481E0FF3F19F403C081E001C048
:1034A00080E080FD23C020917C0130E0C9010196BD
:1034B0008770992760917B0170E086179707F1F17B
:1034C000F983EA835D834C8396E0929FD001939FBA
:1034D000B00D1124A358BE4FFE01319601900D92FC
:1034E0009A95E1F780937C010E94851716E0809100
:1034F0007B0190917C01891779F1189FC0011124FB
:1035000083589E4F0E941C18882331F1E0917B0163
:103510001E9FF0011124E358FE4F408151816281CA
:103520007381848195810E94751780917B0190E061
:1035300001968770992780937B01D9CF0E943D1710
:1035400010927C0110927B01EDEAF1E086E0DF0150
:103550001D928A95E9F7CACF2C960FB6F894DEBF74
:103560000FBECDBFDF91CF911F910895EF92FF92D3
:103570000F931F93CF93DF939C01009709F471C0C1
:10358000F12CEE24E394E9012196F901849184372A
:1035900040F4843008F056C0813081F0823021F14F
:1035A00060C0853709F449C0C0F19CE7980F903797
:1035B00008F057C08F770E94BF1346C089010E5F85
:1035C0001F4FFE01849190E2980F983050F487705D
:1035D000FE2D01C0FF0F8A95EAF78F2F0E94491D2B
:1035E00015C00E94F71214C089010E5F1F4FFE0123
:1035F000849190E2980F983068F48770FE2D01C096
:10360000FF0F8A95EAF78F2F0E944F1D0E94721DAF
:10361000E8011AC00E94BF13FBCF2E5F3F4FFE018F
:10362000C491CC2341F08FE99FE00197F1F700C0EE
:103630000000C150F6CFE90107C0FE01F490E90196
:10364000229602C00E94F7128F2D882341F0EFE9E5
:10365000FFE03197F1F700C000008150F6CF9E01E6
:1036600092CFDF91CF911F910F91FF90EF9008952E
:1036700008956093B7017093B8018093B901909356
:10368000BA010C9429170F931F930091B701109161
:10369000B8012091B9013091BA01062B172B282BC4
:1036A000392B0093B7011093B8012093B9013093DF
:1036B000BA011F910F910C9429170F931F9300913A
:1036C000B7011091B8012091B9013091BA010623D8
:1036D0001723282339230093B7011093B8012093AF
:1036E000B9013093BA011F910F910C9429170F93D0
:1036F0001F930091B7011091B8012091B901309149
:10370000BA0106271727282739270093B7011093F6
:10371000B8012093B9013093BA011F910F910C9415
:1037200029171092B3011092B4011092B5011092B2
:10373000B6010C94291741E050E060E070E004C04D
:10374000440F551F661F771F8A95D2F74093B30128
:103750005093B4016093B5017093B6010C9429178E
:1037600041E050E060E070E004C0440F551F661F68
:10377000771F8A95D2F78091B3019091B401A091FF
:10378000B501B091B601842B952BA62BB72B809356
:10379000B3019093B401A093B501B093B6010C941A
:1037A000291741E050E060E070E004C0440F551F6D
:1037B000661F771F8A95D2F7409550956095709552
:1037C0008091B3019091B401A091B501B091B6017F
:1037D00084239523A623B7238093B3019093B40148
:1037E000A093B501B093B6010C94291741E050E0C5
:1037F00060E070E004C0440F551F661F771F8A9574
:10380000D2F78091B3019091B401A091B501B0912C
:10381000B60184279527A627B7278093B3019093F5
:10382000B401A093B501B093B6010C9429170F937E
:103830001F930091B3011091B4012091B501309113
:10384000B601062B172B282B392B0093B3011093AD
:10385000B4012093B5013093B6011F910F910C94E0
:1038600029170F931F930091B3011091B401209178
:10387000B5013091B601062317232823392300937D
:10388000B3011093B4012093B5013093B6011F9199
:103890000F910C9429170F931F930091B30110916E
:1038A000B4012091B5013091B601062717272827CA
:1038B00039270093B3011093B4012093B5013093DD
:1038C000B6011F910F910C9429170895CF92DF92A2
:1038D000EF92FF920F931F93CF93DF93EC01C09071
:1038E000B701D090B801E090B901F090BA01809191
:1038F000B3019091B401A091B501B091B601C82A6D
:10390000D92AEA2AFB2A0FE110E0B701A601002E0E
:1039100004C076956795579547950A94D2F740FF6E
:1039200007C0BE01802F0E9498098130910539F4AB
:103930000150110950F7BE0180E00E949809DF9103
:10394000CF911F910F91FF90EF90DF90CF9008954E
:1039500090910C019923D9F090910D019923B9F020
:10396000982F9695969596959F3088F5E0910E0143
:10397000F0910F01E90FF11D877021E030E001C0E7
:10398000220F8A95EAF78181822B818308954091E5
:103990000E0150910F0120E030E09FEFFA01E20F9D
:1039A000F31F6281681799F09F3F19F4611101C0FC
:1039B000922F2F5F3F4F2E30310581F79F3F39F017
:1039C000FA01E90FF11D97FDFA9582830895089594
:1039D00090910C019923E1F090910D019923C1F090
:1039E000982F9695969596959F3020F5E0910E012B
:1039F000F0910F01E90FF11D877021E030E001C067
:103A0000220F8A95EAF72095818128232183089542
:103A100040910E0150910F0120E030E0FA01E20FD9
:103A2000F31F9281981301C012822F5F3F4F2E30F7
:103A30003105A1F7089581E090E0E0910E01F09149
:103A40000F01E80FF91F1082019680319105A9F747
:103A500008959091CE01982B9093CE010895809572
:103A60009091CE0198239093CE0108951092CE01AB
:103A700008959091CD01982B9093CD010895809554
:103A80009091CD0198239093CD0108951092CD018E
:103A900008959091CC01982B9093CC010895809536
:103AA0009091CC0198239093CC0108951092CC0171
:103AB00008958093BB0108951092BB010895409131
:103AC0000E0150910F0120E030E080E0FA01E20F9A
:103AD000F31F918191118F5F2F5F3F4F2F30310581
:103AE000A9F70895E0910E01F0910F018091CE01A8
:103AF0008083E0910E01F0910F0180819091CD01C2
:103B0000892B8083E0910E01F0910F0180819091CB
:103B1000CC01892B80839091BB01992361F0E091C6
:103B20000E01F0910F018081892B80830E945F1D1F
:103B300081111092BB0180910E0190910F010C94A4
:103B4000DA11CF92DF92EF92FF920F931F936C01E5
:103B5000EE24FF24C114D104E104F10421F46B012B
:103B60007C0180E001C080E133272F2D1E2D0D2D1B
:103B7000011511052105310519F0885F68017901EA
:103B800097018601A4E03695279517950795AA9584
:103B9000D1F7011511052105310519F08C5F680178
:103BA000790197018601F2E03695279517950795DB
:103BB000FA95D1F7011511052105310519F08E5F30
:103BC00068017901B701A6017695679557954795E4
:103BD000452B462B472B09F08F5F1F910F91FF90CC
:103BE000EF90DF90CF9008958091E801843009F143
:103BF0001092D00120E488E190E00FB6F894A895E7
:103C0000809360000FBE2093600083B7817F846043
:103C100083BF83B7816083BF7894889583B78E7F95
:103C200083BF88E10FB6F894809360001092600023
:103C30000FBE089508950895CF930E941A1E0E9402
:103C4000C2070E941B1EC0E08C2F0E94AF0881118A
:103C500005C0CF5FCE30C1F780E001C081E0CF91D9
:103C600008950E943D170E94CE110C94D30A82E061
:103C700084BD93E095BD9AEF97BD80936E00089543
:103C80002FB7F8948091D1019091D201A091D301E6
:103C9000B091D4012FBF0895CF92DF92EF92FF929F
:103CA0000F931F932FB7F8944091D1015091D201F7
:103CB0006091D3017091D4012FBF6A017B01EE2482
:103CC000FF248C0120E030E0C016D106E206F306A6
:103CD00010F441505109481B590BCA011F910F9113
:103CE000FF90EF90DF90CF9008951F920F920FB644
:103CF0000F9211248F939F93AF93BF938091D10123
:103D00009091D201A091D301B091D4010196A11D4F
:103D1000B11D8093D1019093D201A093D301B093B0
:103D2000D401BF91AF919F918F910F900FBE0F90D3
:103D30001F9018950E94D40EF8942FEF87EA91E611
:103D4000215080409040E1F700C0000087E090EBF8
:103D5000DC018093F1019093F201A093F301B09301
:103D6000F4012CE088E190E00FB6F894A8958093D8
:103D700060000FBE20936000FFCFEF92FF920F9381
:103D80001F93CF93DF93E82EF12C8F2D0E94AF0865
:103D9000C0E0D0E0082F10E098010C2E02C035954D
:103DA00027950A94E2F720FD05C02196C630D1057B
:103DB00099F709C06C2F7F2D80E00E947609E812E8
:103DC000F4CF81E005C0F3948EE0F812DECF80E0FE
:103DD000DF91CF911F910F91FF90EF900895CF93B6
:103DE000C82F8CE20E94BD1E882321F08C2FCF911A
:103DF0000C94BD1E80E0CF910895CF930E94422085
:103E0000811102C00E942820C5E6C15049F00E94DD
:103E1000C2078FE39CE90197F1F700C00000F5CFDE
:103E200089E20E94EF1E811111C18AE20E94EF1EF9
:103E300081110E94282085E00E94EF1E81110E94BE
:103E40009A1E0E944D208093CF0187E00E94EF1EB2
:103E5000882399F18BE10E94EF1E882351F0909105
:103E6000CF0191FB882780F921E0822780FB91F91F
:103E700022C08EE00E94EF1E882351F09091CF0166
:103E800092FB882780F921E0822780FB92F913C0FA
:103E900080E10E94EF1E9091CF01882341F093FBB7
:103EA000882780F921E0822780FB93F904C0892FBD
:103EB000809580FB90F99093CF018091CF010E9473
:103EC00051200E945F208093E20180EE0E94EF1E4D
:103ED000882341F08091E201982F909590FB80F922
:103EE0008093E20189E30E94EF1E882359F09091AC
:103EF000E20191FB882780F921E0822780FB91F97C
:103F00009093E20182EE0E94EF1E882359F0909177
:103F1000E20192FB882780F921E0822780FB92F959
:103F20009093E20186EE0E94EF1E882359F0909153
:103F3000E20193FB882780F921E0822780FB93F937
:103F40009093E20183EE0E94EF1E882359F0909136
:103F5000E20194FB882780F921E0822780FB94F915
:103F60009093E20185E30E94EF1E882359F090911F
:103F7000E20195FB882780F921E0822780FB95F9F3
:103F80009093E20181E30E94EF1E882359F0909103
:103F9000E20196FB882780F921E0822780FB96F9D1
:103FA0009093E20181E10E94EF1E882359F09091E5
:103FB000E20197FB882780F921E0822780FB97F9AF
:103FC0009093E2018091E2010E9463208091E201DE
:103FD00087FB882780F980930D0187E20E94EF1EFE
:103FE000C82F8EE10E94EF1E8111C2608FE10E94F6
:103FF000EF1E8111C46080E20E94EF1E8111C86033
:1040000081E20E94EF1E8111C06182E20E94EF1ED8
:104010008111C06283E20E94EF1E8111C06484E2BC
:104020000E94EF1E882311F0C06802C0CC2329F043
:104030008C2F0E945A206C2F03C00E945620682F9C
:1040400070E080E090E0CF910C94391BCF910895FF
:104050006DEE7EEF80E090E00E94812660E082E0DD
:1040600090E00E94732660E083E090E00E94732657
:1040700060E084E090E00E94732660E085E090E0DC
:104080000C94732680E090E00E946D2621E08D3E26
:104090009E4F09F020E0822F089582E090E00C947A
:1040A0006526682F82E090E00C94732683E090E010
:1040B0000C946526682F83E090E00C94732684E0CE
:1040C00090E00C946526682F84E090E00C947326B1
:1040D0008091D70180FF0BC06091130185E0689F3C
:1040E000B001112475956795759567952AC081FF74
:1040F00009C06091130185E0689FB0011124759596
:1041000067951FC082FF07C06091130185E0689F1B
:10411000B001112416C04091D8014423C9F0609128
:104120001201461788F72091130185E0289F90011E
:104130001124429FC001439F900D112470E00E9402
:1041400037266038710540F46115710539F002C0F9
:1041500065E070E0862F08958FE7089581E0089567
:104160008091D70180FF08C06091110170E07595C2
:1041700067957595679521C081FF06C06091110113
:1041800070E07595679519C082FF04C060911101B8
:1041900070E010C08091D8018823C1F060911001B7
:1041A0008617A0F790911101989FC001112470E02B
:1041B0000E9437266038710528F46115710521F0D9
:1041C000862F08958FE7089581E0089561E070E0FB
:1041D000F4CF803F21F40E946820819504C0813F84
:1041E00029F40E9468208093DB010895823F21F426
:1041F0000E946820819504C0833F29F40E946820B2
:104200008093DA010895893F19F40E94B02005C017
:104210008A3F31F40E94B02081958093DC0108959B
:104220008B3F21F40E94B020819504C08C3F29F47B
:104230000E94B0208093DD010895843F21F4809195
:10424000D901816017C0853F21F48091D901826036
:1042500011C0863F21F48091D90184600BC0873F53
:1042600021F48091D901886005C0883F31F48091A4
:10427000D90180618093D90108958D3F21F4809107
:10428000D70181600BC08E3F21F48091D7018260FD
:1042900005C08F3F29F48091D70184608093D701B6
:1042A0000895803F39F48091DB0187FF6CC0109244
:1042B000DB0169C0813F29F48091DB011816BCF352
:1042C00062C09091DA01823F29F497FF5CC010929E
:1042D000DA0159C0833F19F41916CCF354C0893F51
:1042E00041F48091DC0118160CF04DC01092DC01F5
:1042F0004AC08A3F29F48091DC0187FF44C0F6CF91
:104300008B3F39F48091DD0187FF3DC01092DD01C4
:104310003AC08C3F29F48091DD011816BCF333C0FC
:10432000843F21F48091D9018E7F17C0853F21F40D
:104330008091D9018D7F11C0863F21F48091D901F0
:104340008B7F0BC0873F21F48091D901877F05C007
:10435000883F31F48091D9018F7E8093D90113C0B9
:104360008D3F21F48091D7018E7F0BC08E3F21F4C9
:104370008091D7018D7F05C08F3F29F48091D701AF
:104380008B7F8093D7018091DA0181110EC08091DB
:10439000DB0181110AC08091DC01811106C080918E
:1043A000DD01811102C01092D801089589ED91E0DC
:1043B0000E94E5110E94401E9093D6018093D50182
:1043C00008951F93CF93DF938091D5019091D601EB
:1043D0000E944C1E4091D801442321F020911401E9
:1043E00030E006C0209115015AE0259F900111246C
:1043F0008217930708F482C08091DA011091DB01E3
:10440000D091DC01C091DD01811107C0111105C0FF
:10441000D11103C0CC2309F471C04F3F19F04F5F95
:104420004093D801181624F40E9468208093DA0182
:104430008091DA0187FF05C00E94682081958093F2
:10444000DA01111624F40E9468208093DB01809128
:10445000DB0187FF05C00E94682081958093DB0106
:104460006091DA01662339F11091DB01112319F112
:10447000772767FD7095872F972F0E94482523E3A4
:1044800033E343E35FE30E94AC250E94152560936C
:10449000DA01612F772767FD7095872F972F0E948C
:1044A000482523E333E343E35FE30E94AC250E9406
:1044B00015256093DB011D1624F40E94B020809323
:1044C000DC018091DC0187FF05C00E94B02081954E
:1044D0008093DC011C1624F40E94B0208093DD013F
:1044E0008091DD0187FF05C00E94B02081958093F7
:1044F000DD01DF91CF911F910C94D621DF91CF91F7
:104500001F910895E9EDF1E085E0DF011D928A95A4
:10451000E9F71092D8011092D7010895833081F104
:1045200028F4813059F08230D1F00895853009F4B3
:1045300049C0B8F1863009F456C00895209115019C
:10454000862F90E0820F911D8F3F910520F4620F1E
:104550006093150108958FEF8093150108952091C0
:104560001401862F90E0820F911D8F3F910520F45A
:10457000620F6093140108958FEF809314010895E2
:1045800020911301862F90E0820F911D8F3F91059E
:1045900020F4620F6093130108958FEF809313014D
:1045A000089520911201862F90E0820F911D8F3F78
:1045B000910520F4620F6093120108958FEF8093AC
:1045C0001201089520911101862F90E0820F911D14
:1045D0008F3F910520F4620F6093110108958FEFD2
:1045E00080931101089520911001862F90E0820F91
:1045F000911D8F3F910520F4620F60931001089583
:104600008FEF809310010895833011F128F48130E9
:1046100049F0823091F00895853081F120F18630A3
:10462000C1F1089580911501681720F4861B8093CD
:1046300015010895109215010895809114016817CD
:1046400020F4861B8093140108951092140108959C
:1046500080911301681720F4861B8093130108953D
:1046600010921301089580911201681720F4861B9F
:104670008093120108951092120108958091110102
:10468000681720F4861B8093110108951092110180
:10469000089580911001681720F4861B8093100103
:1046A00008951092100108958D3109F442C020F54B
:1046B0008E3009F47CC070F4873009F45EC020F4B9
:1046C000863009F442C033C08830D1F18B3009F410
:1046D000AAC02DC0863109F4A6C038F4803109F48F
:1046E00070C0813109F47EC022C0893109F49BC0B9
:1046F0008B3109F452C01BC0853309F48CC048F4D7
:10470000873209F488C008F478C0893209F483C07C
:104710000EC0833438F48A3308F06DC0883309F44E
:1047200082C005C0833409F476C08834C1F080E0CB
:1047300008950E94CF240E94CE110E94D30A73C014
:104740000E944D200E945F206EC08091CF01817F2A
:104750008E7F8093CF0181E08093DF0108950E94D6
:104760003D172FEF83ED90E3215080409040E1F71B
:1047700000C000000E949A1E56C09091CF01892F60
:104780008095817080FB90F919F09660986027C041
:10479000997F977F9093CF0146C09091CF0191FB75
:1047A000882780F921E0822780FB91F913C090913E
:1047B000CF0192FB882780F921E0822780FB92F9C4
:1047C00009C09091CF0193FB882780F921E08227CF
:1047D00080FB93F99093CF01882329F19160909306
:1047E000CF0108950E943D1780910D0191E0892726
:1047F00080930D0118C027EC01C023EE280F61E063
:1048000070E080E090E004C0660F771F881F991F5A
:104810002A95D2F704C061E070E080E090E00E9449
:10482000391B0E943D1781E0089580E0089580E0E3
:104830000895CF93C82F8091DF01813079F018F06F
:104840008230D1F184C0A0910E01B0910F018C9102
:10485000813169F0823209F07CC009C0A0910E015B
:10486000B0910F018C91813111F0823249F48C2F7B
:104870000E94152481111DC08C2F0E9454231AC040
:104880008C2F0E941724811114C0C43179F048F490
:10489000CB3079F0C03109F060C082E08093DF0155
:1048A00008C0C93219F0C83321F057C01092DF0197
:1048B00054C081E0817053C0C93289F118F5C43108
:1048C00071F1A8F4C73009F046C08AE08093150161
:1048D00094E19093140193E090931301809312015B
:1048E00088E08093110188E28093100134C0CE519A
:1048F000C63088F5EC2FF0E0E65DFE4F80818093B6
:10490000DE0129C0CE34E9F020F4CB3421F56AE091
:1049100013C0C13579F0C235F1F461E00DC080916A
:10492000DE01882319F01092DE0115C081E080932A
:10493000DF0115C061E006C08091DE010E948E2279
:104940000AC06AE08091DE010E94042304C0109234
:10495000DF0180E004C081E002C080E0ABCFCF91F6
:104960000895E1E8F0E08081886080838081816043
:1049700080838FB7F89493E09093890090ED9093A3
:1049800088008FBF0895EFE6F0E080818260808329
:104990000895EFE6F0E080818D7F80830895EFE653
:1049A000F0E0808192E08927808308951F920F9222
:1049B0000FB60F9211242F933F934F935F936F93F2
:1049C0007F938F939F93AF93BF93EF93FF938091C8
:1049D000E0019091E10101969093E1018093E00163
:1049E000811103C082E00E94D30AE091E101E695C3
:1049F000E695F0E0EC51F84FE4918091E0018E13E0
:104A000003C080E00E94D30AFF91EF91BF91AF9164
:104A10009F918F917F916F915F914F913F912F91D6
:104A20000F900FBE0F901F90189504D06894B1118D
:104A30008DC0089570D088F09F5790F0B92F9927B6
:104A4000B751A0F0D1F0660F771F881F991F1AF099
:104A5000BA95C9F712C0B13081F077D0B1E00895AE
:104A600074C0672F782F8827B85F39F0B93FCCF32F
:104A7000869577956795B395D9F73EF4909580958F
:104A8000709561957F4F8F4F9F4F0895E89409C0AF
:104A900097FB3EF490958095709561957F4F8F4F71
:104AA0009F4F9923A9F0F92F96E9BB279395F69587
:104AB000879577956795B795F111F8CFFAF4BB0F05
:104AC00011F460FF1BC06F5F7F4F8F4F9F4F16C069
:104AD000882311F096E911C0772321F09EE8872FF3
:104AE000762F05C0662371F096E8862F70E060E0AF
:104AF0002AF09A95660F771F881FDAF7880F969528
:104B0000879597F9089557FD9058440F551F59F010
:104B10005F3F71F04795880F97FB991F61F09F3FAA
:104B200079F087950895121613061406551FF2CFD3
:104B30004695F1DF08C0161617061806991FF1CF23
:104B400086957105610508940895E894BB2766274A
:104B50007727CB0197F908950BD078C069D028F05A
:104B60006ED018F0952309F05AC05FC01124EECF23
:104B7000CADFA0F3959FD1F3950F50E0551F629FB8
:104B8000F001729FBB27F00DB11D639FAA27F00DA6
:104B9000B11DAA1F649F6627B00DA11D661F829FCD
:104BA0002227B00DA11D621F739FB00DA11D621FB2
:104BB000839FA00D611D221F749F3327A00D611DCF
:104BC000231F849F600D211D822F762F6A2F1124B1
:104BD0009F5750408AF0E1F088234AF0EE0FFF1F04
:104BE000BB1F661F771F881F91505040A9F79E3F3B
:104BF000510570F014C0AACF5F3FECF3983EDCF390
:104C0000869577956795B795F795E7959F5FC1F777
:104C1000FE2B880F911D9695879597F9089597F922
:104C20009F6780E870E060E008959FEF80EC089552
:104C300000240A941616170618060906089500247B
:104C40000A9412161306140605060895092E0394F5
:104C5000000C11F4882352F0BB0F40F4BF2B11F469
:104C600060FF04C06F5F7F4F8F4F9F4F089597FB8A
:104C7000072E16F4009407D077FD09D00E94512624
:104C800007FC05D03EF4909581959F4F089570954F
:104C900061957F4F0895EE0FFF1F0590F491E02D71
:104CA0000994AA1BBB1B51E107C0AA1FBB1FA61773
:104CB000B70710F0A61BB70B881F991F5A95A9F7C5
:104CC00080959095BC01CD010895F999FECF92BDD4
:104CD00081BDF89A992780B50895A8E1B0E042E037
:104CE00050E00C948826262FF999FECF1FBA92BD6A
:104CF00081BD20BD0FB6F894FA9AF99A0FBE0196BD
:104D000008950E947326272F0C947426DC01CB0192
:104D1000FC01F999FECF06C0F2BDE1BDF89A3196CB
:104D200000B40D9241505040B8F70895F894FFCF69
:104D30002002D50A620B3F0B0B0BD80A0101BC0104
:104D400028080A03140A3F4D3639A50758072207D9
:104D5000E9067C069506AE06C706010203040506B1
:044D60000708090037
:00000001FF

@ -0,0 +1,783 @@
#include "ergodox_ez.h"
#include "action_layer.h"
#include "keymap_common.h"
#include "keymap_extras/keymap_german.h"
#define UC_ASYMPTOTICALLY_EQUAL_TO 0
#define UC_DIVISION_SIGN 1
#define UC_DOWNWARDS_ARROW 2
#define UC_ELEMENT_OF 3
#define UC_EMPTY_SET 4
#define UC_FOR_ALL 5
#define UC_GREEK_CAPITAL_LETTER_ALPHA 6
#define UC_GREEK_CAPITAL_LETTER_BETA 7
#define UC_GREEK_CAPITAL_LETTER_CHI 8
#define UC_GREEK_CAPITAL_LETTER_DELTA 9
#define UC_GREEK_CAPITAL_LETTER_EPSILON 10
#define UC_GREEK_CAPITAL_LETTER_ETA 11
#define UC_GREEK_CAPITAL_LETTER_GAMMA 12
#define UC_GREEK_CAPITAL_LETTER_IOTA 13
#define UC_GREEK_CAPITAL_LETTER_KAPPA 14
#define UC_GREEK_CAPITAL_LETTER_LAMDA 15
#define UC_GREEK_CAPITAL_LETTER_MU 16
#define UC_GREEK_CAPITAL_LETTER_NU 17
#define UC_GREEK_CAPITAL_LETTER_OMEGA 18
#define UC_GREEK_CAPITAL_LETTER_OMICRON 19
#define UC_GREEK_CAPITAL_LETTER_PHI 20
#define UC_GREEK_CAPITAL_LETTER_PI 21
#define UC_GREEK_CAPITAL_LETTER_PSI 22
#define UC_GREEK_CAPITAL_LETTER_RHO 23
#define UC_GREEK_CAPITAL_LETTER_SIGMA 24
#define UC_GREEK_CAPITAL_LETTER_TAU 25
#define UC_GREEK_CAPITAL_LETTER_THETA 26
#define UC_GREEK_CAPITAL_LETTER_UPSILON 27
#define UC_GREEK_CAPITAL_LETTER_XI 28
#define UC_GREEK_CAPITAL_LETTER_ZETA 29
#define UC_GREEK_SMALL_LETTER_ALPHA 30
#define UC_GREEK_SMALL_LETTER_BETA 31
#define UC_GREEK_SMALL_LETTER_CHI 32
#define UC_GREEK_SMALL_LETTER_DELTA 33
#define UC_GREEK_SMALL_LETTER_EPSILON 34
#define UC_GREEK_SMALL_LETTER_ETA 35
#define UC_GREEK_SMALL_LETTER_FINAL_SIGMA 36
#define UC_GREEK_SMALL_LETTER_GAMMA 37
#define UC_GREEK_SMALL_LETTER_IOTA 38
#define UC_GREEK_SMALL_LETTER_KAPPA 39
#define UC_GREEK_SMALL_LETTER_LAMDA 40
#define UC_GREEK_SMALL_LETTER_MU 41
#define UC_GREEK_SMALL_LETTER_NU 42
#define UC_GREEK_SMALL_LETTER_OMEGA 43
#define UC_GREEK_SMALL_LETTER_OMICRON 44
#define UC_GREEK_SMALL_LETTER_PHI 45
#define UC_GREEK_SMALL_LETTER_PI 46
#define UC_GREEK_SMALL_LETTER_PSI 47
#define UC_GREEK_SMALL_LETTER_RHO 48
#define UC_GREEK_SMALL_LETTER_SIGMA 49
#define UC_GREEK_SMALL_LETTER_TAU 50
#define UC_GREEK_SMALL_LETTER_THETA 51
#define UC_GREEK_SMALL_LETTER_UPSILON 52
#define UC_GREEK_SMALL_LETTER_XI 53
#define UC_GREEK_SMALL_LETTER_ZETA 54
#define UC_INFINITY 55
#define UC_LEFTWARDS_ARROW 56
#define UC_MULTIPLICATION_SIGN 57
#define UC_NOT_AN_ELEMENT_OF 58
#define UC_NOT_EQUAL_TO 59
#define UC_PLUS_MINUS_SIGN 60
#define UC_RIGHTWARDS_ARROW 61
#define UC_SUBSCRIPT_EIGHT 62
#define UC_SUBSCRIPT_FIVE 63
#define UC_SUBSCRIPT_FOUR 64
#define UC_SUBSCRIPT_NINE 65
#define UC_SUBSCRIPT_ONE 66
#define UC_SUBSCRIPT_SEVEN 67
#define UC_SUBSCRIPT_SIX 68
#define UC_SUBSCRIPT_THREE 69
#define UC_SUBSCRIPT_TWO 70
#define UC_SUBSCRIPT_ZERO 71
#define UC_SUPERSCRIPT_EIGHT 72
#define UC_SUPERSCRIPT_FIVE 73
#define UC_SUPERSCRIPT_FOUR 74
#define UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N 75
#define UC_SUPERSCRIPT_NINE 76
#define UC_SUPERSCRIPT_ONE 77
#define UC_SUPERSCRIPT_SEVEN 78
#define UC_SUPERSCRIPT_SIX 79
#define UC_SUPERSCRIPT_THREE 80
#define UC_SUPERSCRIPT_TWO 81
#define UC_SUPERSCRIPT_ZERO 82
#define UC_THERE_DOES_NOT_EXIST 83
#define UC_THERE_EXISTS 84
#define UC_UPWARDS_ARROW 85
#define UC_VULGAR_FRACTION_ONE_EIGHTH 86
#define UC_VULGAR_FRACTION_ONE_FIFTH 87
#define UC_VULGAR_FRACTION_ONE_HALF 88
#define UC_VULGAR_FRACTION_ONE_QUARTER 89
#define UC_VULGAR_FRACTION_ONE_SIXTH 90
#define UC_VULGAR_FRACTION_ONE_THIRD 91
#define UC_VULGAR_FRACTION_THREE_QUARTERS 92
#define UC_VULGAR_FRACTION_TWO_THIRDS 93
#define UM 94
#define L0 0 // layer_0
#define L1 1 // layer_1
#define L2 2 // layer_2
#define L3 3 // layer_3
#define L4 4 // layer_4
#define L5 5 // layer_5
#define L6 6 // layer_6
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* .------------------------------------.------------------------------------.
* |MO(5)| 1 | 2 | 3 | 4 | 5 |ACUT | GRV | 6 | 7 | 8 | 9 | 0 |CIRC |
* !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
* |MO(4)| X | P | F | W | G |HOME |TG(2)| H | J | K | L | Q | Z |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* |MO(1)| U | I | A | E | O |-----!-----! S | N | R | T | D | SS |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* |MO(3)| UE | OE | AE | C | V |END | TAB | B | M |COMM| DOT| UP | Y |
* '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
* | | |LGUI|LALT|LCTL| !RCTL|RALT|LEFT|DOWN|RGHT|
* '------------------------' '------------------------'
* .-----------. .-----------.
* |INS |TG(2)| !M(UM)|DELT |
* .-----+-----+-----! !-----+-----+-----.
* ! ! | APP | ! PGUP| ! !
* ! ! !-----! !-----! ! !
* |BSPC |LSFT | ESC | ! PGDN|ENTER|SPACE|
* '-----------------' '-----------------'
*/
[L0] = KEYMAP(
MO(5), DE_1, DE_2, DE_3, DE_4, DE_5, DE_ACUT,
MO(4), DE_X, DE_P, DE_F, DE_W, DE_G, KC_HOME,
MO(1), DE_U, DE_I, DE_A, DE_E, DE_O,
MO(3), DE_UE, DE_OE, DE_AE, DE_C, DE_V, KC_END,
KC_TRNS, KC_TRNS, KC_LGUI, KC_LALT, KC_LCTL,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_INS, TG(2),
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_APP,
/*-*/ /*-*/ /*-*/ /*-*/ KC_BSPC, KC_LSFT, KC_ESC,
DE_GRV, DE_6, DE_7, DE_8, DE_9, DE_0, DE_CIRC,
TG(2), DE_H, DE_J, DE_K, DE_L, DE_Q, DE_Z,
/*-*/ DE_S, DE_N, DE_R, DE_T, DE_D, DE_SS,
KC_TAB, DE_B, DE_M, DE_COMM, DE_DOT, KC_UP, DE_Y,
/*-*/ /*-*/ KC_RCTL, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT,
M(UM), KC_DELT,
KC_PGUP,
KC_PGDN, KC_ENTER, KC_SPACE
),
/*
* .------------------------------------.------------------------------------.
* | |EXLM|DQOT|PARA| | | | | | | | |RING| |
* !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
* | |ASTR|PIPE|SLSH|LCBR|RCBR| | |HASH|LESS|MORE| |DQOT| |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | |UNDS|MINS|AMPR|LBRC|RBRC|-----!-----!DLR |LPRN|RPRN|TILD|QUOT| QST |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | |PLUS|EQL | | | | |BSLS|PERC|SCLN|COLN| | |
* '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
* | | | | | | ! | | | | |
* '------------------------' '------------------------'
* .-----------. .-----------.
* | | | ! | |
* .-----+-----+-----! !-----+-----+-----.
* ! ! | | ! | ! !
* ! ! !-----! !-----! ! !
* | | | | ! | | |
* '-----------------' '-----------------'
*/
[L1] = KEYMAP(
KC_TRNS, DE_EXLM, DE_DQOT, DE_PARA, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, DE_ASTR, DE_PIPE, DE_SLSH, DE_LCBR, DE_RCBR, KC_TRNS,
KC_TRNS, DE_UNDS, DE_MINS, DE_AMPR, DE_LBRC, DE_RBRC,
KC_TRNS, KC_TRNS, DE_PLUS, DE_EQL, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DE_RING, KC_TRNS,
KC_TRNS, DE_HASH, DE_LESS, DE_MORE, KC_TRNS, DE_DQOT, KC_TRNS,
/*-*/ DE_DLR, DE_LPRN, DE_RPRN, DE_TILD, DE_QUOT, DE_QST,
KC_TRNS, DE_BSLS, DE_PERC, DE_SCLN, DE_COLN, M(UC_UPWARDS_ARROW), KC_TRNS,
/*-*/ /*-*/ KC_TRNS, KC_TRNS, M(UC_LEFTWARDS_ARROW), M(UC_DOWNWARDS_ARROW), M(UC_RIGHTWARDS_ARROW),
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/*
* .------------------------------------.------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | F11 | F12 | F6 | F7 | F8 | F9 |F10 |PEQL |
* !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
* | | | | | | | | | | P7 | P8 | P9 |PAST|PSLS |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | | | | | |-----!-----! | P4 | P5 | P6 |PMNS|PMNS |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | | | | | | | NLCK| | P1 | P2 | P3 |PPLS|PPLS |
* '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
* | | | | | | ! P0 |PCMM|PDOT|PENT|PENT|
* '------------------------' '------------------------'
* .-----------. .-----------.
* | | | ! | |
* .-----+-----+-----! !-----+-----+-----.
* ! ! | | ! | ! !
* ! ! !-----! !-----! ! !
* | | | | ! | | |
* '-----------------' '-----------------'
*/
[L2] = KEYMAP(
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PEQL,
KC_TRNS, KC_TRNS, KC_P7, KC_P8, KC_P9, KC_PAST, KC_PSLS,
/*-*/ KC_TRNS, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PMNS,
KC_NLCK, KC_TRNS, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PPLS,
/*-*/ /*-*/ KC_P0, KC_PCMM, KC_PDOT, KC_PENT, KC_PENT,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/*
* .------------------------------------.------------------------------------.
* | | ¹ | ² | ³ | | | | | | | | | | |
* !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
* | | × | ½ | ÷ | ¼ | | | | | | | | | |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | | ± | AT |EURO| |-----!-----! | | | | | |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | | | | ¾ | | | |EXLM| | | | | |
* '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
* | | | | | | ! | | | | |
* '------------------------' '------------------------'
* .-----------. .-----------.
* | | | ! | |
* .-----+-----+-----! !-----+-----+-----.
* ! ! | | ! | ! !
* ! ! !-----! !-----! ! !
* | | | | ! | | |
* '-----------------' '-----------------'
*/
[L3] = KEYMAP(
KC_TRNS, M(UC_SUPERSCRIPT_ONE), M(UC_SUPERSCRIPT_TWO), M(UC_SUPERSCRIPT_THREE), M(UC_SUPERSCRIPT_FOUR), M(UC_SUPERSCRIPT_FIVE), M(UC_FOR_ALL),
KC_TRNS, M(UC_MULTIPLICATION_SIGN), M(UC_VULGAR_FRACTION_ONE_HALF), M(UC_DIVISION_SIGN), M(UC_VULGAR_FRACTION_ONE_QUARTER), M(UC_VULGAR_FRACTION_ONE_FIFTH), KC_TRNS,
KC_TRNS, KC_TRNS, M(UC_PLUS_MINUS_SIGN), DE_AT, DE_EURO, M(UC_EMPTY_SET),
KC_TRNS, M(UC_VULGAR_FRACTION_ONE_THIRD), M(UC_NOT_EQUAL_TO), M(UC_VULGAR_FRACTION_TWO_THIRDS), M(UC_VULGAR_FRACTION_THREE_QUARTERS), M(UC_ASYMPTOTICALLY_EQUAL_TO), KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, M(UC_SUPERSCRIPT_SIX), M(UC_SUPERSCRIPT_SEVEN), M(UC_SUPERSCRIPT_EIGHT), M(UC_SUPERSCRIPT_NINE), M(UC_SUPERSCRIPT_ZERO), KC_TRNS,
KC_TRNS, M(UC_VULGAR_FRACTION_ONE_SIXTH), KC_TRNS, M(UC_VULGAR_FRACTION_ONE_EIGHTH), KC_TRNS, KC_TRNS, KC_TRNS,
/*-*/ M(UC_INFINITY), M(UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N), M(UC_THERE_EXISTS), M(UC_ELEMENT_OF), KC_TRNS, KC_TRNS,
KC_TRNS, DE_EXLM, KC_TRNS, M(UC_THERE_DOES_NOT_EXIST), M(UC_NOT_AN_ELEMENT_OF), KC_TRNS, KC_TRNS,
/*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/*
* .------------------------------------.------------------------------------.
* | | | | | | | | | | | | | | |
* !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
* | | χ | π | φ | ω | γ | | | η | ξ | κ | λ | | ζ |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | υ | ι | α | ε | ο |-----!-----! σ | ν | ρ | τ | δ | ς |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | | θ | | | | | | β | μ | | | | ψ |
* '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
* | | | | | | ! | | | | |
* '------------------------' '------------------------'
* .-----------. .-----------.
* | | | ! | |
* .-----+-----+-----! !-----+-----+-----.
* ! ! | | ! | ! !
* ! ! !-----! !-----! ! !
* | | | | ! | | |
* '-----------------' '-----------------'
*/
[L4] = KEYMAP(
KC_TRNS, M(UC_SUBSCRIPT_ONE), M(UC_SUBSCRIPT_TWO), M(UC_SUBSCRIPT_THREE), M(UC_SUBSCRIPT_FOUR), M(UC_SUBSCRIPT_FIVE), KC_TRNS,
KC_TRNS, M(UC_GREEK_SMALL_LETTER_CHI), M(UC_GREEK_SMALL_LETTER_PI), M(UC_GREEK_SMALL_LETTER_PHI), M(UC_GREEK_SMALL_LETTER_OMEGA), M(UC_GREEK_SMALL_LETTER_GAMMA), KC_TRNS,
KC_TRNS, M(UC_GREEK_SMALL_LETTER_UPSILON), M(UC_GREEK_SMALL_LETTER_IOTA), M(UC_GREEK_SMALL_LETTER_ALPHA), M(UC_GREEK_SMALL_LETTER_EPSILON), M(UC_GREEK_SMALL_LETTER_OMICRON),
KC_TRNS, KC_TRNS, M(UC_GREEK_SMALL_LETTER_THETA), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, M(UC_SUBSCRIPT_SIX), M(UC_SUBSCRIPT_SEVEN), M(UC_SUBSCRIPT_EIGHT), M(UC_SUBSCRIPT_NINE), M(UC_SUBSCRIPT_ZERO), KC_TRNS,
KC_TRNS, M(UC_GREEK_SMALL_LETTER_ETA), M(UC_GREEK_SMALL_LETTER_XI), M(UC_GREEK_SMALL_LETTER_KAPPA), M(UC_GREEK_SMALL_LETTER_LAMDA), KC_TRNS, M(UC_GREEK_SMALL_LETTER_ZETA),
/*-*/ M(UC_GREEK_SMALL_LETTER_SIGMA), M(UC_GREEK_SMALL_LETTER_NU), M(UC_GREEK_SMALL_LETTER_RHO), M(UC_GREEK_SMALL_LETTER_TAU), M(UC_GREEK_SMALL_LETTER_DELTA), M(UC_GREEK_SMALL_LETTER_FINAL_SIGMA),
KC_TRNS, M(UC_GREEK_SMALL_LETTER_BETA), M(UC_GREEK_SMALL_LETTER_MU), KC_TRNS, KC_TRNS, KC_TRNS, M(UC_GREEK_SMALL_LETTER_PSI),
/*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/*
* .------------------------------------.------------------------------------.
* | | | | | | | | | | | | | | |
* !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
* | | Χ | Π | Φ | Ω | Γ | | | Η | Ξ | Κ | Λ | | Ζ |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | Υ | Ι | Α | Ε | Ο |-----!-----! Σ | Ν | Ρ | Τ | Δ | |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | | Θ | | | | | | Β | Μ | | | | Ψ |
* '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
* | | | | | | ! | | | | |
* '------------------------' '------------------------'
* .-----------. .-----------.
* | | | ! | |
* .-----+-----+-----! !-----+-----+-----.
* ! ! | | ! | ! !
* ! ! !-----! !-----! ! !
* | | | | ! | | |
* '-----------------' '-----------------'
*/
[L5] = KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_CHI), M(UC_GREEK_CAPITAL_LETTER_PI), M(UC_GREEK_CAPITAL_LETTER_PHI), M(UC_GREEK_CAPITAL_LETTER_OMEGA), M(UC_GREEK_CAPITAL_LETTER_GAMMA), KC_TRNS,
KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_UPSILON), M(UC_GREEK_CAPITAL_LETTER_IOTA), M(UC_GREEK_CAPITAL_LETTER_ALPHA), M(UC_GREEK_CAPITAL_LETTER_EPSILON), M(UC_GREEK_CAPITAL_LETTER_OMICRON),
KC_TRNS, KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_THETA), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_ETA), M(UC_GREEK_CAPITAL_LETTER_XI), M(UC_GREEK_CAPITAL_LETTER_KAPPA), M(UC_GREEK_CAPITAL_LETTER_LAMDA), KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_ZETA),
/*-*/ M(UC_GREEK_CAPITAL_LETTER_SIGMA), M(UC_GREEK_CAPITAL_LETTER_NU), M(UC_GREEK_CAPITAL_LETTER_RHO), M(UC_GREEK_CAPITAL_LETTER_TAU), M(UC_GREEK_CAPITAL_LETTER_DELTA), KC_TRNS,
KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_BETA), M(UC_GREEK_CAPITAL_LETTER_MU), KC_TRNS, KC_TRNS, KC_TRNS, M(UC_GREEK_CAPITAL_LETTER_PSI),
/*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
/*
* .------------------------------------.------------------------------------.
* | | | | | | | | | | | | | | |
* !-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
* | | | | | | | | | | | | | | |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | | | | | |-----!-----! | | | | | |
* !-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
* | | | | | | | | | | | | | | |
* '-----+----+----+----+----+----------'----------+----+----+----+----+-----'
* | | | | | | ! | | | | |
* '------------------------' '------------------------'
* .-----------. .-----------.
* | | | ! | |
* .-----+-----+-----! !-----+-----+-----.
* ! ! | | ! | ! !
* ! ! !-----! !-----! ! !
* | | | | ! | | |
* '-----------------' '-----------------'
*/
[L6] = KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS,
/*-*/ /*-*/ /*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
/*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
/*-*/ /*-*/ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS
),
};
const uint16_t PROGMEM fn_actions[] = {};
#define UC_MODE_WIN 0
#define UC_MODE_LINUX 1
#define UC_MODE_OSX 2
// TODO: allow default mode to be configured
static uint16_t unicode_mode = UC_MODE_WIN;
uint16_t hextokeycode(uint8_t hex) {
if (hex == 0x0) {
return KC_P0;
}
if (hex < 0xA) {
return KC_P1 + (hex - 0x1);
}
return KC_A + (hex - 0xA);
}
void unicode_action_function(uint16_t hi, uint16_t lo) {
switch (unicode_mode) {
case UC_MODE_WIN:
register_code(KC_LALT);
register_code(KC_PPLS);
unregister_code(KC_PPLS);
register_code(hextokeycode((hi & 0xF0) >> 4));
unregister_code(hextokeycode((hi & 0xF0) >> 4));
register_code(hextokeycode((hi & 0x0F)));
unregister_code(hextokeycode((hi & 0x0F)));
register_code(hextokeycode((lo & 0xF0) >> 4));
unregister_code(hextokeycode((lo & 0xF0) >> 4));
register_code(hextokeycode((lo & 0x0F)));
unregister_code(hextokeycode((lo & 0x0F)));
unregister_code(KC_LALT);
break;
case UC_MODE_LINUX:
register_code(KC_LCTL);
register_code(KC_LSFT);
register_code(KC_U);
unregister_code(KC_U);
register_code(hextokeycode((hi & 0xF0) >> 4));
unregister_code(hextokeycode((hi & 0xF0) >> 4));
register_code(hextokeycode((hi & 0x0F)));
unregister_code(hextokeycode((hi & 0x0F)));
register_code(hextokeycode((lo & 0xF0) >> 4));
unregister_code(hextokeycode((lo & 0xF0) >> 4));
register_code(hextokeycode((lo & 0x0F)));
unregister_code(hextokeycode((lo & 0x0F)));
unregister_code(KC_LCTL);
unregister_code(KC_LSFT);
break;
case UC_MODE_OSX:
break;
}
}
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
if (!record->event.pressed) {
return MACRO_NONE;
}
// MACRODOWN only works in this function
switch(id) {
case UM:
unicode_mode = (unicode_mode + 1) % 2;
break;
case UC_GREEK_SMALL_LETTER_OMICRON:
unicode_action_function(0x03, 0xbf);
break;
case UC_LEFTWARDS_ARROW:
unicode_action_function(0x21, 0x90);
break;
case UC_GREEK_CAPITAL_LETTER_RHO:
unicode_action_function(0x03, 0xa1);
break;
case UC_SUBSCRIPT_THREE:
unicode_action_function(0x20, 0x83);
break;
case UC_VULGAR_FRACTION_ONE_EIGHTH:
unicode_action_function(0x21, 0x5b);
break;
case UC_GREEK_SMALL_LETTER_LAMDA:
unicode_action_function(0x03, 0xbb);
break;
case UC_VULGAR_FRACTION_ONE_THIRD:
unicode_action_function(0x21, 0x53);
break;
case UC_GREEK_SMALL_LETTER_XI:
unicode_action_function(0x03, 0xbe);
break;
case UC_THERE_DOES_NOT_EXIST:
unicode_action_function(0x22, 0x04);
break;
case UC_SUPERSCRIPT_ONE:
unicode_action_function(0x00, 0xb9);
break;
case UC_GREEK_SMALL_LETTER_BETA:
unicode_action_function(0x03, 0xb2);
break;
case UC_SUBSCRIPT_FIVE:
unicode_action_function(0x20, 0x85);
break;
case UC_GREEK_CAPITAL_LETTER_IOTA:
unicode_action_function(0x03, 0x99);
break;
case UC_VULGAR_FRACTION_ONE_FIFTH:
unicode_action_function(0x21, 0x55);
break;
case UC_GREEK_SMALL_LETTER_PSI:
unicode_action_function(0x03, 0xc8);
break;
case UC_SUBSCRIPT_NINE:
unicode_action_function(0x20, 0x89);
break;
case UC_SUPERSCRIPT_FOUR:
unicode_action_function(0x20, 0x74);
break;
case UC_RIGHTWARDS_ARROW:
unicode_action_function(0x21, 0x92);
break;
case UC_SUPERSCRIPT_SIX:
unicode_action_function(0x20, 0x76);
break;
case UC_DOWNWARDS_ARROW:
unicode_action_function(0x21, 0x93);
break;
case UC_GREEK_SMALL_LETTER_PI:
unicode_action_function(0x03, 0xc0);
break;
case UC_SUPERSCRIPT_TWO:
unicode_action_function(0x00, 0xb2);
break;
case UC_GREEK_CAPITAL_LETTER_OMEGA:
unicode_action_function(0x03, 0xa9);
break;
case UC_GREEK_CAPITAL_LETTER_PSI:
unicode_action_function(0x03, 0xa8);
break;
case UC_SUBSCRIPT_FOUR:
unicode_action_function(0x20, 0x84);
break;
case UC_GREEK_CAPITAL_LETTER_NU:
unicode_action_function(0x03, 0x9d);
break;
case UC_DIVISION_SIGN:
unicode_action_function(0x00, 0xf7);
break;
case UC_GREEK_SMALL_LETTER_SIGMA:
unicode_action_function(0x03, 0xc3);
break;
case UC_GREEK_SMALL_LETTER_RHO:
unicode_action_function(0x03, 0xc1);
break;
case UC_VULGAR_FRACTION_ONE_SIXTH:
unicode_action_function(0x21, 0x59);
break;
case UC_GREEK_SMALL_LETTER_GAMMA:
unicode_action_function(0x03, 0xb3);
break;
case UC_VULGAR_FRACTION_TWO_THIRDS:
unicode_action_function(0x21, 0x54);
break;
case UC_GREEK_SMALL_LETTER_NU:
unicode_action_function(0x03, 0xbd);
break;
case UC_GREEK_SMALL_LETTER_ZETA:
unicode_action_function(0x03, 0xb6);
break;
case UC_GREEK_SMALL_LETTER_EPSILON:
unicode_action_function(0x03, 0xb5);
break;
case UC_GREEK_SMALL_LETTER_KAPPA:
unicode_action_function(0x03, 0xba);
break;
case UC_SUPERSCRIPT_SEVEN:
unicode_action_function(0x20, 0x77);
break;
case UC_GREEK_CAPITAL_LETTER_PI:
unicode_action_function(0x03, 0xa0);
break;
case UC_GREEK_SMALL_LETTER_FINAL_SIGMA:
unicode_action_function(0x03, 0xc2);
break;
case UC_GREEK_CAPITAL_LETTER_XI:
unicode_action_function(0x03, 0x9e);
break;
case UC_GREEK_SMALL_LETTER_THETA:
unicode_action_function(0x03, 0xb8);
break;
case UC_GREEK_SMALL_LETTER_ETA:
unicode_action_function(0x03, 0xb7);
break;
case UC_SUBSCRIPT_TWO:
unicode_action_function(0x20, 0x82);
break;
case UC_ASYMPTOTICALLY_EQUAL_TO:
unicode_action_function(0x22, 0x43);
break;
case UC_GREEK_SMALL_LETTER_ALPHA:
unicode_action_function(0x03, 0xb1);
break;
case UC_GREEK_CAPITAL_LETTER_PHI:
unicode_action_function(0x03, 0xa6);
break;
case UC_GREEK_SMALL_LETTER_PHI:
unicode_action_function(0x03, 0xc6);
break;
case UC_INFINITY:
unicode_action_function(0x22, 0x1e);
break;
case UC_GREEK_CAPITAL_LETTER_OMICRON:
unicode_action_function(0x03, 0x9f);
break;
case UC_ELEMENT_OF:
unicode_action_function(0x22, 0x08);
break;
case UC_MULTIPLICATION_SIGN:
unicode_action_function(0x00, 0xd7);
break;
case UC_SUBSCRIPT_ZERO:
unicode_action_function(0x20, 0x80);
break;
case UC_GREEK_CAPITAL_LETTER_SIGMA:
unicode_action_function(0x03, 0xa3);
break;
case UC_GREEK_SMALL_LETTER_OMEGA:
unicode_action_function(0x03, 0xc9);
break;
case UC_SUBSCRIPT_ONE:
unicode_action_function(0x20, 0x81);
break;
case UC_GREEK_CAPITAL_LETTER_ZETA:
unicode_action_function(0x03, 0x96);
break;
case UC_GREEK_SMALL_LETTER_TAU:
unicode_action_function(0x03, 0xc4);
break;
case UC_SUPERSCRIPT_FIVE:
unicode_action_function(0x20, 0x75);
break;
case UC_THERE_EXISTS:
unicode_action_function(0x22, 0x03);
break;
case UC_PLUS_MINUS_SIGN:
unicode_action_function(0x00, 0xb1);
break;
case UC_VULGAR_FRACTION_THREE_QUARTERS:
unicode_action_function(0x00, 0xbe);
break;
case UC_SUPERSCRIPT_THREE:
unicode_action_function(0x00, 0xb3);
break;
case UC_EMPTY_SET:
unicode_action_function(0x22, 0x05);
break;
case UC_UPWARDS_ARROW:
unicode_action_function(0x21, 0x91);
break;
case UC_SUPERSCRIPT_NINE:
unicode_action_function(0x20, 0x79);
break;
case UC_GREEK_SMALL_LETTER_DELTA:
unicode_action_function(0x03, 0xb4);
break;
case UC_GREEK_SMALL_LETTER_MU:
unicode_action_function(0x03, 0xbc);
break;
case UC_GREEK_CAPITAL_LETTER_KAPPA:
unicode_action_function(0x03, 0x9a);
break;
case UC_SUBSCRIPT_EIGHT:
unicode_action_function(0x20, 0x88);
break;
case UC_GREEK_CAPITAL_LETTER_ALPHA:
unicode_action_function(0x03, 0x91);
break;
case UC_SUBSCRIPT_SEVEN:
unicode_action_function(0x20, 0x87);
break;
case UC_GREEK_CAPITAL_LETTER_BETA:
unicode_action_function(0x03, 0x92);
break;
case UC_GREEK_CAPITAL_LETTER_ETA:
unicode_action_function(0x03, 0x97);
break;
case UC_SUPERSCRIPT_EIGHT:
unicode_action_function(0x20, 0x78);
break;
case UC_SUPERSCRIPT_ZERO:
unicode_action_function(0x20, 0x70);
break;
case UC_NOT_AN_ELEMENT_OF:
unicode_action_function(0x22, 0x09);
break;
case UC_GREEK_SMALL_LETTER_UPSILON:
unicode_action_function(0x03, 0xc5);
break;
case UC_NOT_EQUAL_TO:
unicode_action_function(0x22, 0x60);
break;
case UC_GREEK_CAPITAL_LETTER_CHI:
unicode_action_function(0x03, 0xa7);
break;
case UC_FOR_ALL:
unicode_action_function(0x22, 0x00);
break;
case UC_GREEK_CAPITAL_LETTER_TAU:
unicode_action_function(0x03, 0xa4);
break;
case UC_VULGAR_FRACTION_ONE_QUARTER:
unicode_action_function(0x00, 0xbc);
break;
case UC_GREEK_SMALL_LETTER_CHI:
unicode_action_function(0x03, 0xc7);
break;
case UC_GREEK_CAPITAL_LETTER_THETA:
unicode_action_function(0x03, 0x98);
break;
case UC_GREEK_SMALL_LETTER_IOTA:
unicode_action_function(0x03, 0xb9);
break;
case UC_GREEK_CAPITAL_LETTER_LAMDA:
unicode_action_function(0x03, 0x9b);
break;
case UC_SUPERSCRIPT_LATIN_SMALL_LETTER_N:
unicode_action_function(0x20, 0x7f);
break;
case UC_GREEK_CAPITAL_LETTER_UPSILON:
unicode_action_function(0x03, 0xa5);
break;
case UC_GREEK_CAPITAL_LETTER_MU:
unicode_action_function(0x03, 0x9c);
break;
case UC_GREEK_CAPITAL_LETTER_EPSILON:
unicode_action_function(0x03, 0x95);
break;
case UC_GREEK_CAPITAL_LETTER_GAMMA:
unicode_action_function(0x03, 0x93);
break;
case UC_SUBSCRIPT_SIX:
unicode_action_function(0x20, 0x86);
break;
case UC_GREEK_CAPITAL_LETTER_DELTA:
unicode_action_function(0x03, 0x94);
break;
case UC_VULGAR_FRACTION_ONE_HALF:
unicode_action_function(0x00, 0xbd);
break;
default:
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 L1:
ergodox_right_led_1_on();
break;
case L2:
ergodox_right_led_2_on();
break;
case L3:
ergodox_right_led_3_on();
break;
case L4:
ergodox_right_led_1_on();
ergodox_right_led_2_on();
break;
case L5:
ergodox_right_led_1_on();
ergodox_right_led_3_on();
break;
// case L6:
// ergodox_right_led_2_on();
// ergodox_right_led_3_on();
// break;
// case L7:
// ergodox_right_led_1_on();
// ergodox_right_led_2_on();
// ergodox_right_led_3_on();
// break;
default:
ergodox_board_led_off();
break;
}
};

@ -0,0 +1,188 @@
# ManuNeo Ergodox Keyboard Layout
Compile this file to a `keymap.c` file using `compile_keymap.py`
python compile_keymap.py keymaps/german-manuneo/keymap.md
Tested with python 2.7 and python 3.4
# Layout Config
{
"layout": "ergodox_ez",
"keymaps_includes": [
"ergodox_ez.h",
"action_layer.h",
"keymap_common.h",
"keymap_extras/keymap_german.h",
],
"key_prefixes": ["DE_", "KC_"],
"macros": {
// TODO: implement macros
// "MUC": "",
},
// TODO: implement default unicode mode
}
# Layers
## Layer 0
.------------------------------------.------------------------------------.
|MO(5)| 1 | 2 | 3 | 4 | 5 |ACUT | GRV | 6 | 7 | 8 | 9 | 0 |CIRC |
!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
|MO(4)| X | P | F | W | G |HOME |TG(2)| H | J | K | L | Q | Z |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
|MO(1)| U | I | A | E | O |-----!-----! S | N | R | T | D | SS |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
|MO(3)| UE | OE | AE | C | V |END | TAB | B | M |COMM| DOT| UP | Y |
'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
| | |LGUI|LALT|LCTL| !RCTL|RALT|LEFT|DOWN|RGHT|
'------------------------' '------------------------'
.-----------. .-----------.
|INS |TG(2)| !M(UM)|DELT |
.-----+-----+-----! !-----+-----+-----.
! ! | APP | ! PGUP| ! !
! ! !-----! !-----! ! !
|BSPC |LSFT | ESC | ! PGDN|ENTER|SPACE|
'-----------------' '-----------------'
## Layer 1
.------------------------------------.------------------------------------.
| |EXLM|DQOT|PARA| | | | | | | | |RING| |
!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
| |ASTR|PIPE|SLSH|LCBR|RCBR| | |HASH|LESS|MORE| |DQOT| |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| |UNDS|MINS|AMPR|LBRC|RBRC|-----!-----!DLR |LPRN|RPRN|TILD|QUOT| QST |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | |PLUS|EQL | | | | |BSLS|PERC|SCLN|COLN| ↑ | |
'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
| | | | | | ! | | ← | ↓ | → |
'------------------------' '------------------------'
.-----------. .-----------.
| | | ! | |
.-----+-----+-----! !-----+-----+-----.
! ! | | ! | ! !
! ! !-----! !-----! ! !
| | | | ! | | |
'-----------------' '-----------------'
## Layer 2
.------------------------------------.------------------------------------.
| | F1 | F2 | F3 | F4 | F5 | F11 | F12 | F6 | F7 | F8 | F9 |F10 |PEQL |
!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
| | | | | | | | | | P7 | P8 | P9 |PAST|PSLS |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | | | | | |-----!-----! | P4 | P5 | P6 |PMNS|PMNS |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | | | | | | | NLCK| | P1 | P2 | P3 |PPLS|PPLS |
'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
| | | | | | ! P0 |PCMM|PDOT|PENT|PENT|
'------------------------' '------------------------'
.-----------. .-----------.
| | | ! | |
.-----+-----+-----! !-----+-----+-----.
! ! | | ! | ! !
! ! !-----! !-----! ! !
| | | | ! | | |
'-----------------' '-----------------'
## Layer 3
http://symbolcodes.tlt.psu.edu/bylanguage/mathchart.html
.------------------------------------.------------------------------------.
| | ¹ | ² | ³ | ⁴ | ⁵ | ∀ | | ⁶ | ⁷ | ⁸ | ⁹ | ⁰ | |
!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
| | × | ½ | ÷ | ¼ | ⅕ | | | ⅙ | | ⅛ | | | |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | | ± | AT |EURO| ∅ |-----!-----! ∞ | ⁿ | ∃ | ∈ | | |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | ⅓ | ≠ | ⅔ | ¾ | ≃ | | |EXLM| | ∄ | ∉ | | |
'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
| | | | | | ! | | | | |
'------------------------' '------------------------'
.-----------. .-----------.
| | | ! | |
.-----+-----+-----! !-----+-----+-----.
! ! | | ! | ! !
! ! !-----! !-----! ! !
| | | | ! | | |
'-----------------' '-----------------'
## Layer 4
.------------------------------------.------------------------------------.
| | ₁ | ₂ | ₃ | ₄ | ₅ | | | ₆ | ₇ | ₈ | ₉ | ₀ | |
!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
| | χ | π | φ | ω | γ | | | η | ξ | κ | λ | | ζ |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | υ | ι | α | ε | ο |-----!-----! σ | ν | ρ | τ | δ | ς |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | | θ | | | | | | β | μ | | | | ψ |
'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
| | | | | | ! | | | | |
'------------------------' '------------------------'
.-----------. .-----------.
| | | ! | |
.-----+-----+-----! !-----+-----+-----.
! ! | | ! | ! !
! ! !-----! !-----! ! !
| | | | ! | | |
'-----------------' '-----------------'
## Layer 5
.------------------------------------.------------------------------------.
| | | | | | | | | | | | | | |
!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
| | Χ | Π | Φ | Ω | Γ | | | Η | Ξ | Κ | Λ | | Ζ |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | Υ | Ι | Α | Ε | Ο |-----!-----! Σ | Ν | Ρ | Τ | Δ | |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | | Θ | | | | | | Β | Μ | | | | Ψ |
'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
| | | | | | ! | | | | |
'------------------------' '------------------------'
.-----------. .-----------.
| | | ! | |
.-----+-----+-----! !-----+-----+-----.
! ! | | ! | ! !
! ! !-----! !-----! ! !
| | | | ! | | |
'-----------------' '-----------------'
## Layer 6
.------------------------------------.------------------------------------.
| | | | | | | | | | | | | | |
!-----+----+----+----+----+----------!-----+----+----+----+----+----+-----!
| | | | | | | | | | | | | | |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | | | | | |-----!-----! | | | | | |
!-----+----+----+----x----x----! ! !----x----x----+----+----+-----!
| | | | | | | | | | | | | | |
'-----+----+----+----+----+----------'----------+----+----+----+----+-----'
| | | | | | ! | | | | |
'------------------------' '------------------------'
.-----------. .-----------.
| | | ! | |
.-----+-----+-----! !-----+-----+-----.
! ! | | ! | ! !
! ! !-----! !-----! ! !
| | | | ! | | |
'-----------------' '-----------------'

@ -13,9 +13,11 @@
#define M_CTRL_CMDV 1 #define M_CTRL_CMDV 1
#define M_CTRL_CMDC 2 #define M_CTRL_CMDC 2
#define M_MEH_SH_ACUT 3 #define M_MEH_SH_ACUT 3
#define M_DE_PLUS_CTRLALT 12 #define M_DE_OSX_PLUS_CTRLALT 12
#define M_DE_CIRC_CTRLCMD 13 #define M_DE_OSX_CIRC_CTRLCMD 13
#define M_TOGGLE_5 14 #define M_TOGGLE_5 14
#define M_CTL_SFT_HASH 15
#define M_LGUI_SHFT 16
#define SM_SMILE 4 #define SM_SMILE 4
#define SM_SMIRK 5 #define SM_SMIRK 5
@ -30,19 +32,19 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap 0: Basic layer /* Keymap 0: Basic layer
* *
* ,--------------------------------------------------. ,--------------------------------------------------. * ,-----------------------------------------------------. ,--------------------------------------------------.
* | ESC | 1 | 2 | 3 | 4 | 5 |CMD-V | |CMD-C | 6 | 7 | 8 | 9 | 0 | ß | * | ESC | 1 | 2 | 3 | 4 | 5 |CTL_SFT/#| |CTL_SFT/#| 6 | 7 | 8 | 9 | 0 | ß |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * |--------+------+------+------+------+----------------| |---------+------+------+------+------+------+--------|
* | TAB | Q | W | E | R | T | CMD | | CMD | Z | U | I | O | P | ü | * | TAB | Q | W | E | R | T | CMD | | CMD | Z | U | I | O | P | ü |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | LALT | A | S | D | F | G |------| |------| H | J | K | L | ö | ä/RALT| * | LALT | A | S | D | F | G |---------| |---------| H | J | K | L | ö | ä/RALT|
* |--------+------+------+------+------+------| LALT | | RALT |------+------+------+------+------+--------| * |--------+------+------+------+------+------| LALT | | RALT |------+------+------+------+------+--------|
* | LShift |Y/Ctrl| X | C | V | B | | | | N | M | , | . |-/Ctrl| RShift | * | LShift |Y/Ctrl| X | C | V | B | | | | N | M | , | . |-/Ctrl| RShift |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * `--------+------+------+------+------+----------------' `-------------+------+------+------+------+--------'
* |</L1| ^° |AltShf| Left | Right| | Up | Down | CMD-SHIFT | + | #/L1 | * |</L1| ^°/CTRL_CMD | +/CTRL_ALT | UP | DOWN| | Left | Right | CMD-SHFT| ALT-SHIFT | +/L1 |
* `----------------------------------' `----------------------------------' * `------------------------------------------' `---------------------------------------------'
* ,-------------. ,---------------. * ,-------------. ,---------------.
* | MDIA | Meh | | Hyper| NUM | * |`/Meh | Media| | NUM | ´/Hyper |
* ,------|------|------| |------+--------+------. * ,------|------|------| |------+--------+------.
* | | | Home | | PgUp | | | * | | | Home | | PgUp | | |
* | Back-| Del |------| |------| Enter | Space| * | Back-| Del |------| |------| Enter | Space|
@ -53,21 +55,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Otherwise, it needs KC_* // Otherwise, it needs KC_*
[BASE] = KEYMAP( // layer 0 : default [BASE] = KEYMAP( // layer 0 : default
// left hand // left hand
KC_ESC, DE_1, DE_2, DE_3, DE_4, DE_5, M(M_CTRL_CMDV), KC_ESC, DE_OSX_1, DE_OSX_2, DE_OSX_3, DE_OSX_4, DE_OSX_5, M(M_CTL_SFT_HASH),
KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, KC_LGUI, KC_TAB, DE_OSX_Q, DE_OSX_W, DE_OSX_E, DE_OSX_R, DE_OSX_T, KC_LGUI,
KC_LALT, DE_A, DE_S, DE_D, DE_F, DE_G, KC_LALT, DE_OSX_A, DE_OSX_S, DE_OSX_D, DE_OSX_F, DE_OSX_G,
KC_LSFT, CTL_T(DE_Y), DE_X, DE_C, DE_V, DE_B, KC_LALT, KC_LSFT, CTL_T(DE_OSX_Y), DE_OSX_X, DE_OSX_C, DE_OSX_V, DE_OSX_B, KC_LALT,
LT(SYMB,DE_LESS), M(M_DE_CIRC_CTRLCMD), M(M_DE_PLUS_CTRLALT), LALT(KC_LSFT), LGUI(KC_LSFT), LT(SYMB,DE_OSX_LESS), M(M_DE_OSX_CIRC_CTRLCMD), M(M_DE_OSX_PLUS_CTRLALT), KC_UP, KC_DOWN,
M(M_MEH_SH_ACUT), TG(2), M(M_MEH_SH_ACUT), TG(MDIA),
KC_HOME, KC_HOME,
KC_BSPC,KC_DEL, LT(SMLY,KC_END), KC_BSPC,KC_DEL, LT(SMLY,KC_END),
// right hand // right hand
M(M_CTRL_CMDC), DE_6, DE_7, DE_8, DE_9, DE_0, DE_SS, M(M_CTL_SFT_HASH), DE_OSX_6, DE_OSX_7, DE_OSX_8, DE_OSX_9, DE_OSX_0, DE_OSX_SS,
KC_RGUI, DE_Z, DE_U, DE_I, DE_O, DE_P, DE_UE, KC_RGUI, DE_OSX_Z, DE_OSX_U, DE_OSX_I, DE_OSX_O, DE_OSX_P, DE_OSX_UE,
DE_H, DE_J, DE_K, DE_L, DE_OE, ALT_T(DE_AE), DE_OSX_H, DE_OSX_J, DE_OSX_K, DE_OSX_L, DE_OSX_OE, ALT_T(DE_OSX_AE),
KC_RALT, DE_N, DE_M, DE_COMM,DE_DOT, CTL_T(DE_MINS), KC_RSFT, KC_RALT, DE_OSX_N, DE_OSX_M, DE_OSX_COMM,DE_OSX_DOT, CTL_T(DE_OSX_MINS), KC_RSFT,
KC_LEFT, KC_UP,KC_DOWN,KC_RIGHT, LT(SYMB,DE_HASH), KC_LEFT, KC_RIGHT,LGUI(KC_LSFT),LALT(KC_LSFT), LT(SYMB,DE_OSX_PLUS),
TG(4), ALL_T(DE_ACUT), TG(NUMB), ALL_T(DE_OSX_ACUT),
KC_PGUP, KC_PGUP,
KC_PGDN,KC_ENT, KC_SPC KC_PGDN,KC_ENT, KC_SPC
), ),
@ -76,42 +78,42 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,--------------------------------------------------. ,--------------------------------------------------. * ,--------------------------------------------------. ,--------------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | | L5 | F6 | F7 | F8 | F9 | F10 | F11 | * | | F1 | F2 | F3 | F4 | F5 | | | L5 | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
* | | < | > | ! | ? | | | | | \ | [ | ] | | | # | F12 | * | | < | > | ! | ? | | | | | \ | [ | ] | < | > | ! |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | # | $ | \ | / | . |------| |------| / | ( | ) | { | } | | * | | # | $ | \ | / | . |------| |------| / | ( | ) | { | } | # |
* |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
* | | | ^ | % | | | ~ | | | | & | < | > | " | ' | ? | * | | | ^ | % | | | ~ | | | | | | ~ | ^ | UP | | $ |
* `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
* | | | | | | | | | . | ! | | * | | | | | | | ' | LEFT| DOWN | RIGHT | |
* `----------------------------------' `----------------------------------' * `----------------------------------' `----------------------------------'
* ,-------------. ,-------------. * ,-------------. ,-------------.
* | | | | | | * | | | | F13 | F12 |
* ,------|------|------| |------+------+------. * ,------|------|------| |------+------+------.
* | | | | | | | | * | | | | | F14 | | |
* | | |------| |------| | | * | | |------| |------| | |
* | | | | | | | | * | | | | | F15 | | |
* `--------------------' `--------------------' * `--------------------' `--------------------'
*/ */
// SYMBOLS // SYMBOLS
[SYMB] = KEYMAP( [SYMB] = KEYMAP(
// left hand // left hand
KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, KC_TRNS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
KC_TRNS,DE_LESS,DE_MORE,DE_EXLM,DE_QST, KC_TRNS,KC_TRNS, KC_TRNS,DE_OSX_LESS,DE_OSX_MORE,DE_OSX_EXLM,DE_OSX_QST, KC_TRNS,KC_TRNS,
KC_TRNS,DE_HASH,DE_DLR, DE_BSLS,DE_SLSH,KC_DOT, KC_TRNS,DE_OSX_HASH,DE_OSX_DLR, DE_OSX_BSLS,DE_OSX_SLSH,KC_DOT,
KC_TRNS,KC_TRNS,DE_LESS,DE_PERC,DE_PIPE,DE_TILD,KC_TRNS, KC_TRNS,KC_TRNS,DE_OSX_LESS,DE_OSX_PERC,DE_OSX_PIPE,DE_OSX_TILD,KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,KC_DEL,KC_TRNS, KC_TRNS,KC_DEL,KC_TRNS,
// right hand // right hand
M(M_TOGGLE_5), KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, M(M_TOGGLE_5), KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, LALT(LSFT(KC_7)), LALT(KC_5), LALT(KC_6), LALT(KC_7), DE_HASH, KC_F12, KC_TRNS, LALT(LSFT(KC_7)), LALT(KC_5), LALT(KC_6), DE_OSX_LESS, DE_OSX_MORE, DE_OSX_EXLM,
DE_SLSH, DE_LPRN, DE_RPRN, LALT(KC_8), LALT(KC_9), KC_TRNS, DE_OSX_SLSH, DE_OSX_LPRN, DE_OSX_RPRN, LALT(KC_8), LALT(KC_9), DE_OSX_HASH,
KC_TRNS, DE_AMPR, KC_GRV, LSFT(KC_GRV), DE_DQOT, DE_QUOT, DE_QST, KC_TRNS, DE_OSX_PIPE, DE_OSX_TILD, DE_OSX_CIRC, KC_UP, DE_OSX_MINS, LSFT(KC_4),
KC_TRNS,KC_DOT, KC_EXLM, KC_TRNS, KC_TRNS, DE_OSX_QUOT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS,
KC_TRNS, KC_TRNS, KC_F13, KC_F12,
KC_TRNS, KC_F14,
KC_TRNS, KC_TRNS, KC_TRNS KC_F15, KC_TRNS, KC_TRNS
), ),
/* Keymap 2: Media and mouse keys /* Keymap 2: Media and mouse keys
* *
@ -135,7 +137,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `--------------------' `--------------------' * `--------------------' `--------------------'
*/ */
// MEDIA AND MOUSE // 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_WH_U, KC_TRNS,
KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D,
@ -177,7 +179,7 @@ KEYMAP(
* | | | | | | | | * | | | | | | | |
* `--------------------' `----------------------' * `--------------------' `----------------------'
*/ */
KEYMAP( [SMLY] = KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@ -197,7 +199,7 @@ KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS KC_TRNS, KC_TRNS, KC_TRNS
), ),
//number pad //number pad
KEYMAP( [NUMB] = KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS,
@ -209,9 +211,9 @@ KEYMAP(
// right hand // right hand
KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
KC_TRNS, KC_UP, KC_7, KC_8, KC_9, LSFT(KC_RBRC), KC_F12, KC_TRNS, KC_UP, KC_7, KC_8, KC_9, LSFT(KC_RBRC), KC_F12,
KC_DOWN, KC_4, KC_5, KC_6, KC_RBRC, DE_MINS, KC_DOWN, KC_4, KC_5, KC_6, KC_RBRC, DE_OSX_MINS,
KC_TRNS, LSFT(KC_6), KC_1, KC_2, KC_3, LSFT(KC_7), KC_TRNS, KC_TRNS, LSFT(KC_6), KC_1, KC_2, KC_3, LSFT(KC_7), KC_TRNS,
KC_0,KC_DOT, KC_0, DE_EQL, KC_TRNS, KC_0,KC_DOT, KC_COMM, DE_OSX_EQL, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS KC_TRNS, KC_TRNS, KC_TRNS
@ -238,7 +240,7 @@ KEYMAP(
* | | | F4 | | | | | * | | | F4 | | | | |
* `--------------------' `----------------------' * `--------------------' `----------------------'
*/ */
KEYMAP( [EGOS] = KEYMAP(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@ -308,11 +310,30 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
if (timer_elapsed(start) > 150){ if (timer_elapsed(start) > 150){
return MACRO(U(LCTRL),U(LSFT),U(LALT),END); return MACRO(U(LCTRL),U(LSFT),U(LALT),END);
} else { } else {
return MACRO(U(LCTRL),U(LALT),T(EQL),U(LSFT),END); //cannot use DE_ACUT here, as macro needs KC_ prefix return MACRO(U(LCTRL),U(LALT),T(EQL),U(LSFT),END); //cannot use DE_OSX_ACUT here, as macro needs KC_ prefix
}
}
break;
case M_LGUI_SHFT:
if (record->event.pressed){
return MACRO(D(LGUI),D(LSFT),END);
}else{
return MACRO(U(LGUI),U(LSFT),END);
}
break;
case M_CTL_SFT_HASH:
if (record->event.pressed) {
start=timer_read();
return MACRO(D(LCTRL),D(LSFT),END);
} else {
if (timer_elapsed(start) > 150){
return MACRO(U(LCTRL),U(LSFT),END);
} else {
return MACRO(U(LCTRL),U(LSFT),T(BSLS),END);
} }
} }
break; break;
case M_DE_CIRC_CTRLCMD: case M_DE_OSX_CIRC_CTRLCMD:
if (record->event.pressed) { if (record->event.pressed) {
start = timer_read(); start = timer_read();
return MACRO(D(LCTRL),D(LGUI),END); return MACRO(D(LCTRL),D(LGUI),END);
@ -324,7 +345,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
} }
} }
break; break;
case M_DE_PLUS_CTRLALT: case M_DE_OSX_PLUS_CTRLALT:
if (record->event.pressed) { if (record->event.pressed) {
start = timer_read(); start = timer_read();
return MACRO(D(LCTRL),D(LALT),END); return MACRO(D(LCTRL),D(LALT),END);

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 732 KiB

After

Width:  |  Height:  |  Size: 669 KiB

@ -0,0 +1,136 @@
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
// this is the style you want to emulate.
//
// Custom style by tak3over. Dropped the dvorak layer as it was not being used by me. Shifted over
// keys to make room for a second function key on the left side. Now has a keypad and most all
// standard keyboard keys. Including Delete. See TK layer.
#include "planck.h"
#ifdef BACKLIGHT_ENABLE
#include "backlight.h"
#endif
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
#define _QW 0
#define _CM 1
#define _TK 2
#define _LW 3
#define _RS 4
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
* ,-----------------------------------------------------------------------------------.
* | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | A | S | D | F | G | H | J | K | L | ; | " |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Ctrl | Alt | GUI | TK |Raise | Space |Lower | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
[_QW] = {
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
{KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
{KC_LCTL, KC_LALT, KC_LGUI, MO(_TK), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
/* Colemak
* ,-----------------------------------------------------------------------------------.
* | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | A | R | S | T | D | H | N | E | I | O | " |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Ctrl | Alt | GUI | TK |Raise | Space |Lower | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
[_CM] = {
{KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
{KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
{KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
{KC_LCTL, KC_LALT, KC_LGUI, MO(_TK), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
/* TenKey, Arrow, and Function key Layer
* ,-----------------------------------------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | Left | Up | Down | Right| Del | * | 4 | 5 | 6 | + | / |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Home | PGUP | PGDN | End | Ins | . | 1 | 2 | 3 | - |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Ctrl | Alt | GUI | TK |Raise | Space |Lower | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
[_TK] = {
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_DEL, KC_ASTR, KC_4, KC_5, KC_6, KC_PLUS, KC_SLSH},
{KC_LSFT, KC_HOME, KC_PGUP, KC_PGDN, KC_END, KC_INS, KC_DOT, KC_1, KC_2, KC_3, KC_MINS, KC_ENT },
{KC_LCTL, KC_LALT, KC_LGUI, MO(_TK), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
},
/* Raise
* ,-----------------------------------------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| F7 | F8 | F9 | F10 | F11 | F12 |Qwerty|Colemk|Brite | Reset|Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Ctrl | Alt | GUI | TK |Raise | Space |Lower | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
[_RS] = {
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
{KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
{KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), M(0), RESET, KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
},
/* Lower
* ,-----------------------------------------------------------------------------------.
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Esc | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| F7 | F8 | F9 | F10 | F11 | F12 |Qwerty|Colemk|Brite | Reset|Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Ctrl | Alt | GUI | TK |Raise | Space |Lower | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
[_LW] = {
{KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
{KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
{KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, DF(_QW), DF(_CM), M(0), RESET, KC_TRNS},
{KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
}
};
const uint16_t PROGMEM fn_actions[] = {
};
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
switch(id) {
case 0:
if (record->event.pressed) {
register_code(KC_RSFT);
#ifdef BACKLIGHT_ENABLE
backlight_step();
#endif
} else {
unregister_code(KC_RSFT);
}
break;
}
return MACRO_NONE;
};

@ -139,8 +139,8 @@ COMMAND_ENABLE = yes # Commands for debug and configuration
# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend # SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
# NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work # NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
# MIDI_ENABLE = YES # MIDI controls MIDI_ENABLE = YES # MIDI controls
# AUDIO_ENABLE = YES # Audio output on port C6 AUDIO_ENABLE = YES # Audio output on port C6
# UNICODE_ENABLE = YES # Unicode # UNICODE_ENABLE = YES # Unicode
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID # BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
# RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with MIDI at the same time. # RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with MIDI at the same time.

@ -88,7 +88,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
return MACRO_NONE; return MACRO_NONE;
}; };
void * matrix_init_user(void) { void matrix_init_user(void) {
#ifdef AUDIO_ENABLE #ifdef AUDIO_ENABLE
init_notes(); init_notes();
play_notes(&start_up, 9, false); play_notes(&start_up, 9, false);

@ -99,7 +99,7 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
return MACRO_NONE; return MACRO_NONE;
}; };
void * matrix_init_user(void) { void matrix_init_user(void) {
init_notes(); init_notes();
play_notes(&start_up, 9, false); play_notes(&start_up, 9, false);
} }

@ -1,16 +1,16 @@
#include "preonic.h" #include "preonic.h"
__attribute__ ((weak)) __attribute__ ((weak))
void * matrix_init_user(void) { void matrix_init_user(void) {
}; };
__attribute__ ((weak)) __attribute__ ((weak))
void * matrix_scan_user(void) { void matrix_scan_user(void) {
}; };
void * matrix_init_kb(void) { void matrix_init_kb(void) {
#ifdef BACKLIGHT_ENABLE #ifdef BACKLIGHT_ENABLE
backlight_init_ports(); backlight_init_ports();
#endif #endif
@ -24,13 +24,9 @@ void * matrix_init_kb(void) {
DDRE |= (1<<6); DDRE |= (1<<6);
PORTE |= (1<<6); PORTE |= (1<<6);
if (matrix_init_user) { matrix_init_user();
(*matrix_init_user)();
}
}; };
void * matrix_scan_kb(void) { void matrix_scan_kb(void) {
if (matrix_scan_user) { matrix_scan_user();
(*matrix_scan_user)();
}
}; };

@ -44,7 +44,7 @@
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b } \ { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b } \
} }
void * matrix_init_user(void); void matrix_init_user(void);
void * matrix_scan_user(void); void matrix_scan_user(void);
#endif #endif

@ -0,0 +1,1713 @@
:100000000C9410030C9454030C9454030C94540358
:100010000C9454030C9454030C9454030C94540304
:100020000C9454030C9454030C9410170C94E21782
:100030000C94BD290C9454030C9454030C94540355
:100040000C9454030C9454030C9454030C945403D4
:100050000C9454030C942A2A0C9454030C945403C7
:100060000C9454030C9454030C9454030C945403B4
:100070000C9454030C9454030C9454030C945403A4
:100080000C94440E0C9454030C9454030C94540399
:100090000C9454030C9454030C9454030C94540384
:1000A0000C9454030C9454030C9454030763423689
:1000B000B79BD8A71A39685618AEBAAB558C1D3CF9
:1000C000B7CC5763BD6DEDFD753EF6177231BF00BD
:1000D0000000803F08000000BE922449123EABAAF7
:1000E000AA2ABECDCCCC4C3E00000080BEABAAAA52
:1000F000AA3E00000000BF000000803F000000009A
:1001000000084178D3BB4387D1133D190E3CC3BDD2
:100110004282AD2B3E68EC8276BED98FE1A93E4C7F
:1001200080EFFFBE01C4FF7F3F00000000003500EC
:100130001E001F00200021002200230024002500B3
:10014000260027002A002B0014001A0008001500C2
:1001500017001C0018000C00120013002A002900D0
:1001600004001600070009000A000B000D000E0035
:100170000F0033003400E1001D001B0006001900D1
:10018000050011001000360037003800280000304C
:10019000E000E200E30003522C002C000452500067
:1001A000510052004F0035001E001F0020002100AA
:1001B0002200230024002500260027002A002B000F
:1001C00014001A00090013000A000D000F001800A7
:1001D0001C0033002A002900040015001600170037
:1001E00007000B00110008000C0012003400E100B1
:1001F0001D001B000600190005000E00100036004F
:100200003700380028000030E000E200E30003522D
:100210002C002C0004525000510052004F003500B9
:100220001E001F00200021002200230024002500C2
:10023000260027002A002B00340036003700130068
:100240001C0009000A00060015000F002A00290002
:1002500004001200080018000C0007000B00170033
:10026000110016003800E100330014000D000E00EC
:100270001B00050010001A0019001D0028000030A6
:10028000E000E200E30003522C002C000452500076
:10029000510052004F0035001E001F0020002100B9
:1002A0002200230024002500260027002A00350212
:1002B0001E021F0220022102220223022402250222
:1002C000260227022A0001003A003B003C003D00C4
:1002D0003E003F002D022E022F02300231020100AB
:1002E00040004100420043004400450000530153D8
:1002F0000253005001000100010001000100010053
:10030000010001000100AB00AA00A900AE00350009
:100310001E001F00200021002200230024002500D1
:10032000260027002A0035001E001F0020002100A3
:100330002200230024002500260027002A000100B7
:100340003A003B003C003D003E003F002D002E00E7
:100350002F00300031000100400041004200430006
:1003600044004500005301530253005001000100B6
:100370000100010001000100010001000100AB00CB
:10038000AA00A900AE00006000600060006000608C
:10039000006000600060006000600060006000605D
:1003A000006000600060006000600060006000604D
:1003B000006000600060006000600060006000603D
:1003C000006000600060006000600060006000602D
:1003D000006000600060006000600060006000601D
:1003E00000600060006000300100010001000100B9
:1003F00001000100010000600060006000602A034D
:1004000054006800650020005000720065006F0015
:100410006E006900630020004B00650079006200F7
:100420006F0061007200640000002C034F00720036
:10043000740068006F006C0069006E006500610068
:10044000720020004B006500790062006F006100BF
:100450007200640073000000040309040902D00064
:10046000060100A0FA0904000001030101000921AE
:1004700011010001223F000705810308000A090459
:1004800001000103010200092111010001224D00B8
:100490000705820308000A090402000103000000A6
:1004A0000921110100012236000705830308000A13
:1004B00009040300020300000009211101000122C8
:1004C0002000070584032000010705040320000124
:1004D00009040400000101000009240100010900D1
:1004E00001050904050002010300000724010001C1
:1004F0004100062402010100062402020200092430
:1005000003010301020100092403020401010100A7
:100510000905060240000500000525010101090545
:1005200085024000050000052501010312011001AC
:1005300000000008EDFE61600100010200010631CB
:10054000FF0974A1010975150025FF952075088123
:10055000020976150025FF952075089102C0050156
:100560000980A101850216010026B7001A01002AA0
:10057000B700751095018100C0050C0901A1018526
:1005800003160100269C021A01002A9C0275109590
:10059000018100C005010902A1010901A1000509AD
:1005A000190129051500250195057501810295019F
:1005B000750381010501093009311581257F9502F7
:1005C0007508810609381581257F95017508810612
:1005D000050C0A38021581257F950175088106C032
:1005E000C005010906A101050719E029E715002545
:1005F00001950875018102950175088101050819A9
:100600000129059505750191029501750391010573
:1006100007190029FF150025FF950675088100C000
:1006200011241FBECFEFDAE0DEBFCDBF04B603FE5C
:1006300024C08091050490910604A0910704B09114
:1006400008048730904BA740B04BB9F410920504D2
:1006500010920604109207041092080414BE84B786
:10066000877F84BF88E10FB6F89480936000109272
:1006700060000FBEE0E0F8E3099512E0A0E0B1E011
:10068000E6ECF9E602C005900D92A832B107D9F761
:1006900014E0A8E2B2E001C01D92A530B107E1F775
:1006A0000E94C8130C94E1340C94000061111DC029
:1006B000FC018281882351F085EE0E94901E0E94E9
:1006C000BC3080E290E0A0E0B0E007C085EE0E9480
:1006D000581F81E090E0A0E0B0E08093E1029093A9
:1006E000E202A093E302B093E40280E090E0089578
:1006F0000E94370E40E050E069E070E080E091E059
:100700000C94880F08950E948B036E9A769A0C942D
:1007100078030C948203279A2F988FEF9FEF909382
:100720008700809386008AE08093800089E180932F
:1007300081000C94653081110BC080918000877F0F
:100740008093800010928D0010928C002F98089555
:100750002F98833041F480918000886080938000DE
:100760008FEF9FEF12C0909180009860909380006F
:1007700023E030E0281B3109220F331F8FEF9FEF5A
:1007800002C0969587952A95E2F790938D00809305
:100790008C0008958B3B910568F4883A910530F5FB
:1007A000853A9105C0F48430910598F4019709F0D9
:1007B0006FC071C0803E910508F46AC0883E910503
:1007C00040F09C01205F31092031310508F060C004
:1007D0005CC09C01A1C0853A910509F45FC0863ACE
:1007E000910509F45EC023E830E496C0883A91058B
:1007F00009F45AC0893A910509F459C08A3A910519
:1008000009F458C08B3A910509F457C08C3A910508
:1008100009F456C08D3A910509F455C0803B910505
:1008200009F454C08E3A910509F453C08F3A9105EA
:1008300009F452C0813B910509F451C0823B9105F6
:1008400009F450C0833B910509F44FC0843B9105E6
:1008500009F44EC0853B910509F44DC0863B9105D6
:1008600009F44CC0873B910509F44BC0883B9105C6
:1008700009F44AC0893B910509F449C08A3B9105B6
:1008800009F048C02AE236E447C09C01306544C004
:1008900020E030E041C021E030E03EC021E830E41B
:1008A0003BC022E830E438C022EE34E435C029EE03
:1008B00034E432C02AEE34E42FC025EB34E42CC0FB
:1008C00026EB34E429C027EB34E426C02CEC34E4D6
:1008D00023C02DEC34E420C023E835E41DC02AE811
:1008E00035E41AC022E935E417C024E935E414C020
:1008F00021E236E411C023E236E40EC024E236E4FD
:100900000BC025E236E408C026E236E405C027E243
:1009100036E402C020E034E4C90108959CE0799FE8
:10092000F00111249CE3899FE00DF11D1124E60FD5
:10093000F11DEE0FFF1FE25DFE4F25913491C901BD
:100940000895880F991F82559040FC01259134919C
:10095000C9010895880F991F825D9E4FFC01259162
:100960003491C90108950E948E049C019A958115C5
:100970009F4110F4C9010895C90190528115904119
:1009800028F4C9019F700E94AA040895C9019053D8
:100990008115904120F4C9019927906C0895C901EF
:1009A0009054409728F4C9018F709927946D089549
:1009B000203180E4380719F480E091ED0895213169
:1009C00090E4390719F480E090ED0895223140E475
:1009D000340719F480E092ED0895233180E438075C
:1009E00019F480E093ED0895211590E53907A1F4FD
:1009F0000E948B2340E065E088E491E00E94880F2C
:100A00002FEF44E38CE0215040408040E1F700C0EC
:100A100000000E944F2A1EC1213090E5390731F4B1
:100A20008091F10281608093F10214C1C901905557
:100A30008115904108F062C0432F55274F7055270C
:100A400041305105F9F4C90174E0880F991F7A9576
:100A5000E1F788279370B901E3E0660F771FEA9505
:100A6000E1F760767727862B972B9C6823703327D6
:100A700002C0440F551F2A95E2F74F715527842B6A
:100A8000952B08954230510529F4922F8827816FC4
:100A9000906A089543305105B9F4C90153E0880FB5
:100AA000991F5A95E1F7807E97702370332741E0B4
:100AB00050E002C0440F551F2A95E2F74F715527A9
:100AC000842B952B9C6808954430510589F5C90104
:100AD00043E0880F991F4A95E1F7807E9770237055
:100AE000332741E050E002C0440F551F2A95E2F73A
:100AF0004F715527842B952B9A680895C9019056FC
:100B00008115904118F4C901906F0895C90190575B
:100B10008115904120F4C9019F7090620895C90128
:100B200090588115904120F4C9019F70906A0895F2
:100B3000203E3105E0F4203C310568F521333105D4
:100B400009F475C048F42932310509F46BC02A3222
:100B5000310509F07BC075C02933310501F1223818
:100B60003105E9F02533310509F070C051C0233E4D
:100B70003105B1F140F4203E3105D1F0223E31057E
:100B800009F064C01CC0263E310579F1273E3105CD
:100B900009F05CC038C0C9010E94A1040895809189
:100BA000020380FD02C081FF51C080EE90E04FC083
:100BB0008091020380FFF9CF89E390E048C08091E3
:100BC000020382FF0AC08091020384FF03C080E019
:100BD00090E03DC083EE90E03AC082EE90E037C0F6
:100BE0008091020382FFEFCFF8CF8091020383FF51
:100BF00007C08091020384FDEACF87EE90E027C012
:100C000086EE90E024C08091020383FFF2CFF8CFFC
:100C10008091020385FF03C089E290E018C085E35C
:100C200090E015C08091020385FDF9CFF5CF80914A
:100C3000020386FF03C08AE290E009C081E390E0EE
:100C400006C08091020386FDF9CFF5CFC9010E944D
:100C5000CA030895089508950C942B065F926F922D
:100C60007F928F929F92AF92BF92CF92DF92EF923C
:100C7000FF920F931F93CF93DF93CDB7DEB72A97E1
:100C80000FB6F894DEBF0FBECDBF9E012F5F3F4F62
:100C90004E018BE0880E911C60E070E000E010E0F7
:100CA000E12CF12CC12CD12CA12CB12C8AE0782E76
:100CB000622E532E41E050E0E3E9F1E0A62DB52D80
:100CC000872D01900D928A95E1F7F901819191911B
:100CD0009F01FC01E07FFF27E032F10559F48F709E
:100CE0009927FA0102C0EE0FFF1F8A95E2F7AE2A9C
:100CF000BF2A37C0E033F10559F48F709927FA0104
:100D000002C0EE0FFF1F8A95E2F7CE2ADF2A29C024
:100D1000E034F10559F48F709927FA0102C0EE0F03
:100D2000FF1F8A95E2F7EE2AFF2A1BC0E035F10586
:100D300059F48F709927FA0102C0EE0FFF1F8A95B0
:100D4000E2F70E2B1F2B0DC0E036F10551F48F702A
:100D50009927FA0102C0EE0FFF1F8A95E2F76E2B6A
:100D60007F2B2815390509F0A7CF94B18A2D8095DE
:100D7000892384B985B18A2985B997B18C2D80954D
:100D8000892387B988B18C2988B99AB18E2D80952D
:100D900089238AB98BB18E298BB99DB1802F80951B
:100DA00089238DB98EB1802B8EB990B3862F809513
:100DB000892380BB81B3862B81BB2A960FB6F8941A
:100DC000DEBF0FBECDBFDF91CF911F910F91FF907E
:100DD000EF90DF90CF90BF90AF909F908F907F90DB
:100DE0006F905F9008955F926F927F928F929F9223
:100DF000AF92BF92CF92DF92EF92FF920F931F9329
:100E0000CF93DF93CDB7DEB768970FB6F894DEBF08
:100E10000FBECDBF85B7806885BF85B7806885BFA9
:100E20000E942E069E012F5F3F4F4E0189E1880EE2
:100E3000911C60E070E000E010E0E12CF12CC12C8E
:100E4000D12CA12CB12C98E1792E622E532E41E0A9
:100E500050E0EDE9F1E0A62DB52D872D01900D9222
:100E60008A95E1F7F901819191919F01FC01E07F61
:100E7000FF27E032F10559F48F709927FA0102C07B
:100E8000EE0FFF1F8A95E2F7AE2ABF2A37C0E03384
:100E9000F10559F48F709927FA0102C0EE0FFF1F78
:100EA0008A95E2F7CE2ADF2A29C0E034F10559F409
:100EB0008F709927FA0102C0EE0FFF1F8A95E2F7A3
:100EC000EE2AFF2A1BC0E035F10559F48F709927EF
:100ED000FA0102C0EE0FFF1F8A95E2F70E2B1F2BBF
:100EE0000DC0E036F10551F48F709927FA0102C068
:100EF000EE0FFF1F8A95E2F76E2B7F2B2815390521
:100F000009F0A7CF94B18A2D8095892384B985B142
:100F10008A2985B997B18C2D8095892387B988B1A5
:100F20008C2988B99AB18E2D809589238AB98BB185
:100F30008E298BB99DB1802F809589238DB98EB173
:100F4000802B8EB990B3862F8095892380BB81B387
:100F5000862B81BB10922902109228021092330234
:100F60001092320210922B0210922A021092350235
:100F70001092340210922D0210922C02109237021D
:100F80001092360210922F0210922E021092390205
:100F900010923802109231021092300210923B02ED
:100FA00010923A0268960FB6F894DEBF0FBECDBF1E
:100FB000DF91CF911F910F91FF90EF90DF90CF9035
:100FC000BF90AF909F908F907F906F905F900C94A8
:100FD00083035F926F927F928F929F92AF92BF92A4
:100FE000CF92DF92EF92FF920F931F93CF93DF93F5
:100FF000CDB7DEB7A2970FB6F894DEBF0FBECDBF58
:101000007E0149E1E40EF11C22E3C22E22E0D22E41
:101010005E0153E2A50EB11C3AE0532E470101E0F8
:1010200010E048E1642E55E0752EE3E9F1E0D401CB
:10103000852D01900D928A95E1F7F70181919191AB
:101040007F019C01207F33272032310589F424B1B0
:101050008F709927A80102C0440F551F8A95E2F7A7
:10106000CA01242B24B995B18095892385B94FC035
:101070002033310589F427B18F709927F80102C018
:10108000EE0FFF1F8A95E2F7CF012E2B27B998B1FB
:101090008095892388B93BC02034310589F42AB171
:1010A0008F709927A80102C0440F551F8A95E2F757
:1010B000CA01242B2AB99BB1809589238BB927C0FB
:1010C0002035310589F42DB18F709927F80102C0C0
:1010D000EE0FFF1F8A95E2F7CF012E2B2DB99EB19F
:1010E000809589238EB913C02036310581F420B351
:1010F0008F709927A80102C0440F551F8A95E2F707
:10110000CA01242B20BB91B38095892381BB50EA6F
:101110005A95F1F7BE016F5F7F4F80E090E020E0CD
:1011200030E0EDE9F1E0DE011196462D01900D92DF
:101130004A95E1F7FB0141915191BF01FA01E07F2E
:10114000FF27E032F10511F4E3B113C0E033F105FC
:1011500011F4E6B10EC0E034F10511F4E9B109C0B3
:10116000E035F10511F4ECB104C0E036F105B9F455
:10117000EFB1F0E04F70552702C0F595E7954A951D
:10118000E2F7E0FD08C0A801022E02C0440F551F7F
:101190000A94E2F702C040E050E0842B952B2F5FC9
:1011A0003F4F2C30310509F0BCCFF6012081318151
:1011B0002817390721F091838083709270010E9473
:1011C0002E06F2E0CF0ED11CEA14FB0409F02DCF5D
:1011D000809170018823A1F1815080937001882350
:1011E00039F08FE99FE00197F1F700C0000028C0B7
:1011F00080913202909133029093290280932802C9
:10120000809134029091350290932B0280932A02B0
:10121000809136029091370290932D0280932C0298
:10122000809138029091390290932F0280932E0280
:1012300080913A0290913B02909331028093300268
:101240000E94890381E0A2960FB6F894DEBF0FBE1C
:10125000CDBFDF91CF911F910F91FF90EF90DF9065
:10126000CF90BF90AF909F908F907F906F905F9046
:101270000895E82FF0E0EE0FFF1FE85DFD4F80813D
:10128000918108950895CF92DF92EF92FF920F938C
:101290001F93CF93DF93CDB7DEB7CC5BD2400FB6B1
:1012A000F894DEBF0FBECDBF8C01862F642F88233C
:1012B00079F0F80192812FE7482F992329F084E0F3
:1012C00093E00E94EC1904C084E093E00E94FC19B2
:1012D000F80180818B3091F59181943009F0A8C29A
:1012E0009281809173019923B1F08F5F8093730194
:1012F00096E4E5EBF1E0DE01A958BD4F01900D92B7
:101300009A95E1F7E0917101F0917201EE0FFF1FE4
:1013100027E732E036C096E4E5EBF1E0DE01AF5CB2
:10132000BD4F01900D929A95E1F7E0917101F09116
:101330007201EE0FFF1F21E332E093C08A3009F003
:10134000CBC0F8019181943009F072C292818091F2
:101350007301992309F473C081508093730196E45B
:10136000E5EBF1E0DE01A551BE4F01900D929A959B
:10137000E1F7E0917101F0917201EE0FFF1F2BEE8A
:1013800031E02C0F3D1FE20FF31F60817181680F68
:10139000711D882777FD8095982F0E94003220E0EC
:1013A00030E040E451E40E94653120E030E040E864
:1013B00050E40E94FD309B01AC0160E070E080E0F1
:1013C00090E40E94173321E230ED42E053E40E94A2
:1013D000B4324CE050E00E94E30F20E04BE760E0C5
:1013E00084E093E00E94DC1920E04BE761E084E0B8
:1013F00093E00E94DC1920E04BE762E084E093E098
:101400000E94DC1920E04BE763E084E093E00E9457
:10141000DC1920E04BE764E084E093E0C454DD4F46
:101420000FB6F894DEBF0FBECDBFDF91CF911F91F5
:101430000F91FF90EF90DF90CF900C94DC1996E421
:10144000E5EBF1E0DE01AB55BE4F01900D929A95B0
:10145000E1F7E0917101F0917201EE0FFF1F25EAB3
:1014600031E02C0F3D1FE20FF31F60817181680F87
:10147000711D882777FD8095982F0E94003220E00B
:1014800030E040E451E40E94653120E030E040E883
:1014900050E40E94FD309B01AC0160E070E080E010
:1014A00090E40E94173321E230ED42E053E40E94C1
:1014B000B4320E94130DC454DD4F0FB6F894DEBF52
:1014C0000FBECDBFDF91CF911F910F91FF90EF9095
:1014D000DF90CF900C94E60C893009F0D3C0F8016E
:1014E0009181943009F0A4C19281992309F4A0C19B
:1014F0008091710190917201019690937201809395
:10150000710120E04BE760E084E093E00E94DC1989
:1015100020E04BE761E084E093E00E94DC1920E0EA
:101520004BE762E084E093E00E94DC1920E04BE7A7
:1015300063E084E093E00E94DC1920E04BE764E084
:1015400084E093E00E94DC190E94E60C00E010E0C9
:10155000E6E4FE2E80917301E5EBF1E0DE01A15A95
:10156000BE4F9F2D01900D929A95E1F7E091710188
:10157000F0917201E00FF11FEE0FFF1F2FE531E038
:101580002C0F3D1FE20FF31F60817181680F711DE9
:10159000882777FD8095982F0E94003220E030E068
:1015A00040E451E40E94653120E030E040E850E43E
:1015B0000E94FD309B01AC0160E070E080E090E4AF
:1015C0000E94173321E230ED42E053E40E94B4322E
:1015D0004CE050E00E94E30F3FEF87EE93E0315084
:1015E00080409040E1F700C0000080917301E5EB7E
:1015F000F1E0DE01A75EBE4F9F2D01900D929A95FE
:10160000E1F7E0917101F0917201E00FF11FEE0F2F
:10161000FF1F29E131E02C0F3D1FE20FF31F608116
:101620007181680F711D882777FD8095982F0E9422
:10163000003220E030E040E451E40E94653120E0D7
:1016400030E040E850E40E94FD309B01AC0160E0D6
:1016500070E080E090E40E94173321E230ED42E038
:1016600053E40E94B4320E94130D8FEF9CE7019760
:10167000F1F700C000000F5F1F4F0830110509F09F
:1016800069CF94C1883009F0D3C0F80191819430BA
:1016900009F0CEC09281992309F4CAC080917101EA
:1016A000909172010197909372018093710120E0F3
:1016B0004BE760E084E093E00E94DC1920E04BE718
:1016C00061E084E093E00E94DC1920E04BE762E0F7
:1016D00084E093E00E94DC1920E04BE763E084E0C3
:1016E00093E00E94DC1920E04BE764E084E093E0A3
:1016F0000E94DC190E94E60C00E010E056E4F52E92
:1017000080917301E5EBF1E0DE01AD52BF4F9F2DFB
:1017100001900D929A95E1F7E0917101F0917201BB
:10172000E00FF11FEE0FFF1F23ED30E02C0F3D1FE8
:10173000E20FF31F60817181680F711D882777FDAB
:101740008095982F0E94003220E030E040E451E480
:101750000E94653120E030E040E850E40E94FD3016
:101760009B01AC0160E070E080E090E40E941733E0
:1017700021E230ED42E053E40E94B4324CE050E00C
:101780000E94E30F3FEF87EE93E03150804090409E
:10179000E1F700C0000080917301E5EBF1E0DE01AC
:1017A000A357BF4F9F2D01900D929A95E1F7E091BD
:1017B0007101F0917201E00FF11FEE0FFF1F2DE894
:1017C00030E02C0F3D1FE20FF31F60817181680F25
:1017D000711D882777FD8095982F0E94003220E0A8
:1017E00030E040E451E40E94653120E030E040E820
:1017F00050E40E94FD309B01AC0160E070E080E0AD
:1018000090E40E94173321E230ED42E053E40E945D
:10181000B4320E94130D8FEF9CE70197F1F700C0DF
:1018200000000F5F1F4F0830110509F069CFBEC0DF
:10183000F801228190917301222309F45DC026E40E
:10184000E5EBF1E0DE01A95BBF4F01900D922A9517
:10185000E1F7E0917101F0917201E80FF11DEE0FD7
:10186000FF1F27E430E02C0F3D1FE20FF31F6081C4
:101870007181690F711D882777FD8095982F0E94CF
:10188000003220E030E040E451E40E9465316B0119
:101890007C01F801818165E070E0681B710988278F
:1018A00077FD8095982F0E9400329B01AC01C70103
:1018B000B6010E94FD309B01AC0160E070E080E069
:1018C00090E40E94173321E230ED42E053E40E949D
:1018D000B4324FE050E0C454DD4F0FB6F894DEBF91
:1018E0000FBECDBFDF91CF911F910F91FF90EF9071
:1018F000DF90CF900C94E30F26E4E5EBF1E0DE01FE
:10190000119601900D922A95E1F7E0917101F09105
:101910007201E80FF11DEE0FFF1F21E030E02C0FE8
:101920003D1FE20FF31F60817181690F711D8827D0
:1019300077FD8095982F0E94003220E030E040E44F
:1019400051E40E9465316B017C01F801818165E001
:1019500070E0681B7109882777FD8095982F0E9499
:1019600000329B01AC01C701B6010E94FD309B0112
:10197000AC0160E070E080E090E40E94173321E267
:1019800030ED42E053E40E94B432C454DD4F0FB650
:10199000F894DEBF0FBECDBFDF91CF911F910F91A5
:1019A000FF90EF90DF90CF900C94130DC454DD4F57
:1019B0000FB6F894DEBF0FBECDBFDF91CF911F9160
:1019C0000F91FF90EF90DF90CF90089510928702D3
:1019D00010928602809171008D7F809371008091BA
:1019E00090008F77809390001092480210924702E7
:1019F0001092800210928102109282021092830251
:101A000010927F0210927E02EEE5F2E0AEE4B2E0C8
:101A100011921192119211921D921D9282E0EE3755
:101A2000F807B1F708956F927F928F929F92AF92CD
:101A3000BF92CF92DF92EF92FF920F931F93CF93BB
:101A4000DF936B017C010EE712E04CE5A42E42E02F
:101A5000B42EC7E0D0E0A7019601F80192918291DF
:101A6000729162918F010E946131882349F0219720
:101A7000F2E0AF1AB108CF3F8FEFD80761F734C05B
:101A8000F8011082118212821382F50111821082F4
:101A9000FE01EE0FFF1FEE0FFF1FE25AFD4FDE01AA
:101AA000AA0FBB1FA25BBD4FCE011AC00196448195
:101AB0005581668177814083518362837383148269
:101AC00015821682178212962D913C9113971196CA
:101AD0003C932E9313961C921E9212973496129654
:101AE0008730910519F7C3CF8091860290918702C4
:101AF000019797FD05C0909387028093860204C0EA
:101B00001092870210928602E0918602F09187027D
:101B10003097C9F4809171008D7F8093710080911E
:101B200090008F7780939000109280021092810233
:101B3000109282021092830210927F0210927E0213
:101B40001092470285C03197DF01AA0FBB1FAA0F71
:101B5000BB1FA25ABD4FCD90DD90ED90FC90EE0FD3
:101B6000FF1FE25BFD4FC081D181609080027090C9
:101B700081028090820290908302A7019601662DD7
:101B8000772D882D992D0E94613187FF25C0262D44
:101B9000372D482D592DC701B6010E94FC3020E099
:101BA00030E04AEF54E40E9465315B018C012A2D3C
:101BB0003B2D402F512F662D772D882D992D0E947A
:101BC000FD303B014C01A7019601772D992D0E9414
:101BD0006131181664F72EC0A7019601662D772D86
:101BE000882D992D0E94B032181634F5A701960160
:101BF000662D772D882D992D0E94FC3020E030E055
:101C00004AEF54E40E9465315B018C012A2D3B2D83
:101C1000402F512F662D772D882D992D0E94FC3055
:101C20003B014C01A7019601772D992D0E94B032FE
:101C300087FFECCF10924D02C0928002D0928102B9
:101C4000E0928202F0928302D0937F02C0937E02E0
:101C5000DF91CF911F910F91FF90EF90DF90CF9088
:101C6000BF90AF909F908F907F906F9008953E9A15
:101C7000E1E7F0E080818D7F808382E080939000B7
:101C80008AE18093910008951F920F920FB60F92F0
:101C90001124CF92DF92EF92FF922F933F934F93B5
:101CA0005F936F937F938F939F93AF93BF93CF93E4
:101CB000DF93EF93FF9380914702882309F479C063
:101CC00020E030E0A9016091800270918102809152
:101CD0008202909183020E94B03218160CF069C003
:101CE00020E030E040E251E46091490270914A0204
:101CF00080914B0290914C020E94B0321816BCF4B5
:101D00008091840290918502019660918602709183
:101D100087020E949C3490938502809384021092E3
:101D2000490210924A0210924B0210924C02C0914A
:101D30008402D0918502CC0FDD1FCC0FDD1FC25A6B
:101D4000DD4F288139814A815B8160E074E284E75C
:101D50009BE40E9465310E94CD317093970060939F
:101D60009600288139814A815B8160E074E284E7D2
:101D70009BE40E9465310E94CD3175956795709303
:101D800099006093980020E030E040E85FE36091C4
:101D9000490270914A0280914B0290914C020E943C
:101DA000FD306093490270934A0280934B029093F6
:101DB0004C0280914802882309F493C0C0904302EA
:101DC000D0904402E0904502F090460220E030E0DE
:101DD000A901C701B6010E94B0321816F4F4A70198
:101DE000960160E074E284E79BE40E9465310E9402
:101DF000CD317093970060939600A701960160E043
:101E000074E284E79BE40E9465310E94CD317595B0
:101E10006795709399006093980060913D0270916E
:101E20003E026F5F7F4F70933E0260933D0280E001
:101E300090E00E94FE3120913F023091400240919B
:101E40004102509142020E94B03287FD4AC0809107
:101E50003C028F5F80933C029091F1038917A0F0C0
:101E60008091F603882319F010923C020DC08091F6
:101E700071008D7F80937100809190008F778093A7
:101E80009000109248022DC0E091F203F091F3030C
:101E900080913C0298E0899FE00DF11D1124808122
:101EA0009181A281B3818093430290934402A093D5
:101EB0004502B093460220E030E040E85EE36481F2
:101EC0007581868197810E94B43260933F0270933E
:101ED0004002809341029093420210923E0210927F
:101EE0003D02FF91EF91DF91CF91BF91AF919F9113
:101EF0008F917F916F915F914F913F912F91FF90C3
:101F0000EF90DF90CF900F900FBE0F901F9018951D
:101F10000F931F93CF93DF9300D0CDB7DEB78C0123
:101F200080914702882331F04A8369830E94E60C3E
:101F300069814A8181E0809348021093F303009302
:101F4000F2036093F1034093F6031092490210925A
:101F50004A0210924B0210924C0210923C02F8017D
:101F600040815181628173814093430250934402C6
:101F7000609345027093460220E030E040E85EE363
:101F800064817581868197810E94B43260933F029B
:101F900070934002809341029093420210923E025D
:101FA00010923D0280917100826080937100809157
:101FB00090008068809390000F900F90DF91CF91F8
:101FC0001F910F9108956F927F928F929F92AF927F
:101FD000BF92CF92DF92EF92FF920F931F93CF9316
:101FE000DF936B017C01EA018091480281110E941C
:101FF000E60C81E08093470220E030E0A901C701B0
:10200000B6010E94B03218160CF09AC0609080029F
:1020100070908102809082029090830220E030E0F4
:10202000A901662D772D882D992D0E94613181118E
:1020300028C0C0928002D0928102E0928202F09287
:102040008302D0937F02C0937E028091860290919A
:102050008702FC01EE0FFF1FEE0FFF1FE25AFD4F3C
:10206000C082D182E282F382FC01EE0FFF1FE25BAD
:10207000FD4FD183C083019690938702809386029F
:102080005FC0A7019601662D772D882D992D0E949E
:10209000613187FF25C0262D372D482D592DC701C9
:1020A000B6010E94FC3020E030E04AEF54E40E9488
:1020B00065315B018C012A2D3B2D402F512F662D60
:1020C000772D882D992D0E94FD303B014C01A701F1
:1020D0009601772D992D0E946131181664F7A9CFCA
:1020E000A7019601662D772D882D992D0E94B0327B
:1020F00018160CF09ECFA7019601662D772D882D1E
:10210000992D0E94FC3020E030E04AEF54E40E9418
:1021100065315B018C012A2D3B2D402F512F662DFF
:10212000772D882D992D0E94FC303B014C01A70191
:102130009601772D992D0E94B03287FFECCF79CF91
:10214000809171008260809371008091900080681E
:1021500080939000DF91CF911F910F91FF90EF90AE
:10216000DF90CF90BF90AF909F908F907F906F90B7
:102170000895809191020895CF93DF9300D01F922C
:10218000CDB7DEB72091FB03243021F523E029836E
:102190009B838A832093E9008FEF06C095ED9A9583
:1021A000F1F70000882329F09091E800815095FF15
:1021B000F5CF8091E80085FF0DC040E050E063E07E
:1021C00070E0CE0101960E94A6148091E8008E77FF
:1021D0008093E8000F900F900F90DF91CF910895BA
:1021E000CF93DF9300D01F92CDB7DEB72091FB03D2
:1021F000243029F522E029839B838A8383E080931E
:10220000E9008FEF06C095ED9A95F1F7000088235D
:1022100029F09091E800815095FFF5CF8091E8007A
:1022200085FF0DC040E050E063E070E0CE01019614
:102230000E94A6148091E8008E778093E8000F90AA
:102240000F900F90DF91CF9108952091FB032430E0
:10225000F9F422E02093E9002FEF06C035ED3A951E
:10226000F1F70000222329F03091E800215035FFDA
:10227000F5CF2091E80025FF0BC040E050E065E07D
:1022800070E00E94A6148091E8008E778093E800A9
:102290000895CF93DF93EC018091FB03843041F5E7
:1022A00081E08093E9008FEF06C095ED9A95F1F7F4
:1022B0000000882329F09091E800815095FFF5CF28
:1022C0008091E80085FF14C040E050E068E070E0D5
:1022D000CE010E94A6148091E8008E778093E800DA
:1022E00088E0FE01A9E8B2E001900D928A95E1F73D
:1022F000DF91CF910895BF92CF92DF92EF92FF923C
:102300000F931F93CF93DF937C01B62EE90100E07A
:1023100010E0C42ED12C0BC04991202F2B0D2F770C
:102320004F776FE0C7010E94DC190F5F1F4F0C153C
:102330001D0594F3DF91CF911F910F91FF90EF90C6
:10234000DF90CF90BF90089570E06F5F7F4F6F7008
:1023500077270C94DC190F931F93CF93C42F63300E
:10236000710509F04AC0842F807F803849F1803997
:1023700009F043C0622F6F7770E080E090E00E9428
:10238000003220E030E040E451E40E9465319B01DE
:10239000AC0160E070E080E090E40E9417330F77BA
:1023A00010E023E0159507952A95E1F72DEC3CEC1C
:1023B00042E053E40E94B432A8010E94E30F1DC022
:1023C000622F6F7770E080E090E00E94003220E0A2
:1023D00030E040E451E40E9465319B01AC0160E0D3
:1023E00070E080E090E40E9417332DEC3CEC42E07A
:1023F00053E40E94B4320E94130DCC3F29F4CF91D4
:102400001F910F910C94E60CCF911F910F9108959D
:102410000F931F93CF93DF93CDB7DEB727970FB6F8
:10242000F894DEBF0FBECDBF8C0114C08A810E941C
:10243000B6199A819D839B819E839C819F83811184
:102440001EC089818430B1F08730A1F08630A1F0C0
:102450008530A1F0BE016F5F7F4F84E791E00E945D
:10246000231D8111E3CF84E791E00E94141D0E9497
:102470008F190DC083E003C082E001C081E0AE018E
:102480004B5F5F4F682FC8010E94491AE3CF279620
:102490000FB6F894DEBF0FBECDBFDF91CF911F9175
:1024A0000F910895EF92FF920F93CF93DF9300D097
:1024B00000D000D0CDB7DEB77B014A832B830C83DD
:1024C000842F2E834D830E94B6192E814D81811158
:1024D0001BC082E0E816F10479F083E0E816F1040D
:1024E00021F0EA94EF2821F50BC0073F11F487E0B3
:1024F00001C084E089830BC0273FD9F786E0FACF7B
:10250000473FB9F785E0F6CF42954F704983BE014A
:102510006F5F7F4F84E791E00E94D91C84E791E0D0
:102520000E94F71C84E791E00E94141D0E948F19FD
:1025300026960FB6F894DEBF0FBECDBFDF91CF91C8
:102540000F91FF90EF9008958091FA03811109C0D7
:102550000E9495160E94F2168091E200846080939A
:10256000E20008951092FA030895089508950C94D6
:10257000B229809192028F5F8093920262E30E945F
:102580007C34911135C0109292028091930288237D
:1025900079F18091FB03843049F58091E9008F70D7
:1025A0009091EC0090FF02C090E801C090E0982B61
:1025B00084E08093E9008091EB0080FF14C080915B
:1025C000EE0087FD03C00FC01092F1008091E8007B
:1025D00085FDFACF8091E80080FF05C08091E8007A
:1025E0008E778093E8009F709093E9001092930299
:1025F000089542E061EC81E00E940B1642E061EC3C
:1026000082E00E940B1642E061EC83E00E940B1610
:1026100042E261EC84E00E940B1642E361E885E04F
:102620000E940B1642E360E886E00C940B16809142
:10263000FD03833009F454C030F4813071F08230EE
:1026400009F0A5C08CC08A3009F479C08B3009F438
:102650005FC0893009F09BC020C08091FC03813AA3
:1026600009F095C08091E800877F8093E800809111
:10267000000490910104892B21F060E080E090E05B
:1026800003C068E089E892E070E00E944415809100
:10269000E8008B778093E80008958091FC038132F5
:1026A00009F075C08091000490910104892B09F014
:1026B0006EC08091E800877F8093E80005C080911C
:1026C000FB03882309F463C08091E80082FFF7CF01
:1026D0008091F100809391028091E8008B7753C044
:1026E0008091FC03813A09F052C0809100049091DE
:1026F0000104892B09F04BC08091E800877F80930B
:10270000E8008091E80080FFFCCF80918A0136C00C
:102710008091FC038132D9F58091000490910104ED
:10272000892BA9F58091E800877F8093E8000E94BB
:1027300042168091FE0380938A010C948B23809132
:10274000FC03813221F58091E800877F8093E800C7
:102750000E9442168091FF03809388020895809121
:10276000FC03813AA1F48091E800877F8093E80020
:102770008091E80080FFFCCF809188028093F10077
:102780008091E8008E778093E8000C9442160895BB
:1027900084E093E00E94181A62E572E184E093E01D
:1027A0000E946E1A68E072E184E093E00E94721A5F
:1027B00084B7877F84BF88E10FB6F8948093600068
:1027C000109260000FBE90E080E80FB6F8948093FE
:1027D0006100909361000FBE0E949C1D0E9495169F
:1027E0000E94F2168091E20084608093E200789467
:1027F0006BEA71E184E093E00E94141A64EA71E1EB
:1028000084E093E00E940C1A6BE771E184E093E0AE
:102810000E94101A0E94370E0E948F190E949E1D5E
:1028200080E891E00E94481D0BC00E946C298091B5
:10283000F903882329F00E949A2981110E9490149B
:102840008091FB03853089F384E093E00E94211C92
:102850000E94A81DF5CF292F332723303105B1F071
:102860004CF42130310509F44DC02230310509F016
:102870004EC007C02132310541F12232310591F1BC
:1028800046C0E0EDF0E08CE594E045C0992781304A
:10289000910569F08230910589F0892B09F037C0E4
:1028A000E8E5F4E0E491F0E088E594E034C0EAE2A1
:1028B000F4E0E491F0E08AE294E02DC0EEEFF3E082
:1028C000E491F0E08EEF93E026C0643000F5E62F4F
:1028D000F0E0EE0FFF1FE550FE4F80819181E9E0AF
:1028E000F0E019C0643098F4E62FF0E0DF01AA0FA1
:1028F000BB1FAD5FBD4F8D919C91E55FFD4FE081AA
:10290000F0E009C0E2E1F0E08CE295E004C0E0E034
:10291000F0E080E090E0DA018D939C93CF01089580
:1029200080E189BD82E189BD09B400FEFDCF8091BF
:10293000D8008F7D8093D8008091E00082608093E2
:10294000E0008091E00081FDFCCF0895BF92CF921E
:10295000DF92EF92FF920F931F93CF93DF937C014F
:102960008B01EA010E946316B82E811133C02097B3
:1029700031F028813981021B130BE20EF31EC12CAA
:10298000D12C23C08091E80085FD15C08091E8001E
:102990008E778093E800209749F0888199818C0D8B
:1029A0009D1D9983888325E0B22E14C00E94631672
:1029B000882359F00EC0F70181917F018093F100C7
:1029C00001501109FFEFCF1ADF0A01151105D1F6E9
:1029D00001C0B82E8B2DDF91CF911F910F91FF90E9
:1029E000EF90DF90CF90BF900895BF92CF92DF928B
:1029F000EF92FF920F931F93CF93DF937C018B0194
:102A0000EA010E946316B82E811133C0209731F07D
:102A100028813981021B130BE20EF31EC12CD12C2D
:102A200023C08091E80085FD15C08091E8008B7778
:102A30008093E800209749F0888199818C0D9D1D35
:102A40009983888345E0B42E14C00E9463168823BE
:102A500059F00EC08091F100F70181937F01015080
:102A60001109FFEFCF1ADF0A01151105D1F601C0D8
:102A7000B82E8B2DDF91CF911F910F91FF90EF908A
:102A8000DF90CF90BF9008954091020450910304CD
:102A90004617570748F06115710539F44091E80071
:102AA0004E774093E80001C0BA01FC0140E033C01A
:102AB0008091FB03882309F444C0853009F443C0A6
:102AC0008091E80083FD41C08091E80082FD33C021
:102AD0008091E80080FF1FC09091F3008091F20088
:102AE000392F20E0A901482BCA0106C0419140932B
:102AF000F1006150710901966115710519F0883076
:102B00009105A0F341E0089709F040E08091E800CA
:102B10008E778093E8006115710551F64111C8CF99
:102B20000AC08091FB03882361F0853061F08091B9
:102B3000E80083FD0AC08091E80082FFF2CF80E0C8
:102B4000089582E0089583E0089581E0089540911A
:102B50000204509103044617570748F061157105A8
:102B600039F44091E8004E774093E80001C0BA0183
:102B7000FC0140E034C08091FB03882309F445C088
:102B8000853009F444C08091E80083FD42C0809103
:102B9000E80082FD34C08091E80080FF20C0909161
:102BA000F3008091F200392F20E0A901482BCA01DF
:102BB00007C044914093F10031966150710901962C
:102BC0006115710519F08830910598F341E0089777
:102BD00009F040E08091E8008E778093E80061156D
:102BE000710549F64111C7CF0AC08091FB038823C4
:102BF00061F0853061F08091E80083FD0AC080912A
:102C0000E80082FFF2CF80E0089582E0089583E03B
:102C1000089581E00895982F2CC09093E9009817AB
:102C200039F07091EC002091ED005091F00003C05C
:102C3000242F762F50E021FD02C09F5F1AC03091F3
:102C4000EB003E7F3093EB003091ED003D7F309301
:102C5000ED003091EB0031603093EB007093EC00AD
:102C60002093ED005093F0002091EE0027FDE5CF7A
:102C700007C0973090F28F708093E90081E008954B
:102C800080E008958091FC0387FD05C08091E800F5
:102C900080FF0EC012C08091E80082FD05C08091C7
:102CA000FB038111F8CF08958091E8008B7708C06D
:102CB0008091FB038111EACF08958091E8008E771F
:102CC0008093E80008958091E4009091E50045E646
:102CD0002091EC0020FD1FC023C02091FB03222384
:102CE00091F0253091F02091EB0025FD10C020914E
:102CF000E4003091E5002817390751F34150C9012C
:102D000039F784E0089582E0089583E0089581E032
:102D1000089580E008952091E80020FFDECFF9CFEC
:102D20002091E80022FFD9CFF4CF0E9403170E9420
:102D30000B17E0EEF0E0808181608083E8EDF0E049
:102D400080818F77808319BCA7EDB0E08C918E7F56
:102D50008C9380818F7E80831092FA0308950F9365
:102D60001F93CF93DF930E9403170E940B17C8EDA8
:102D7000D0E088818F778883888180688883888184
:102D80008F7D888319BC1092FB031092F703109279
:102D9000F9031092F80300EE10E0F80180818B7FB8
:102DA000808388818160888342E060E080E00E94C7
:102DB0000B16E1EEF0E080818E7F8083E2EEF0E0A2
:102DC000808181608083808188608083F801808138
:102DD0008E7F8083888180618883DF91CF911F916E
:102DE0000F910895E8EDF0E080818F7E8083E7ED1C
:102DF000F0E080818160808384E082BF81E0809305
:102E0000FA030C94AF16E8EDF0E080818E7F8083AA
:102E10001092E20008951092DA001092E1000895F5
:102E20001F920F920FB60F9211242F933F934F933F
:102E30005F936F937F938F939F93AF93BF93EF9322
:102E4000FF938091E10082FF0BC08091E20082FF3E
:102E500007C08091E1008B7F8093E1000E94B9124E
:102E60008091DA0080FF1FC08091D80080FF1BC0D6
:102E70008091DA008E7F8093DA008091D90080FF04
:102E80000DC080E189BD82E189BD09B400FEFDCF9E
:102E900081E08093FB030E94A41205C019BC10922C
:102EA000FB030E94B2128091E10080FF19C0809163
:102EB000E20080FF15C08091E2008E7F8093E200E7
:102EC0008091E20080618093E2008091D80080626E
:102ED0008093D80019BC85E08093FB030E94B61252
:102EE0008091E10084FF30C08091E20084FF2CC01B
:102EF00080E189BD82E189BD09B400FEFDCF8091EA
:102F0000D8008F7D8093D8008091E1008F7E8093E0
:102F1000E1008091E2008F7E8093E2008091E200E8
:102F200081608093E2008091F703882311F084E0B0
:102F300007C08091E30087FF02C083E001C081E009
:102F40008093FB030E94B7128091E10083FF29C0A8
:102F50008091E20083FF25C08091E100877F80930C
:102F6000E10082E08093FB031092F7038091E1007F
:102F70008E7F8093E1008091E2008E7F8093E2005B
:102F80008091E20080618093E20042E060E080E0B6
:102F90000E940B168091F00088608093F0000E94E0
:102FA000B512FF91EF91BF91AF919F918F917F915A
:102FB0006F915F914F913F912F910F900FBE0F90A6
:102FC0001F9018951F920F920FB60F9211242F93F6
:102FD0003F934F935F936F937F938F939F93AF93A1
:102FE000BF93CF93EF93FF938091E9008F709091FF
:102FF000EC0090FF02C090E801C090E0C92FC82B00
:103000001092E9008091F000877F8093F00078941F
:103010000E9426181092E9008091F0008860809349
:10302000F000CF70C093E900FF91EF91CF91BF9175
:10303000AF919F918F917F916F915F914F913F9150
:103040002F910F900FBE0F901F9018951F93CF9345
:10305000DF93CDB7DEB7AC970FB6F894DEBF0FBEE7
:10306000CDBFECEFF3E08091F100819324E0E430F8
:10307000F207C9F70E9417138091E80083FF37C158
:103080008091FC039091FD03953009F488C038F4D9
:103090009130B1F170F0933009F029C131C098300E
:1030A00009F4F8C0993009F404C1963009F01FC141
:1030B0009DC0803821F0823809F019C108C0809184
:1030C000F8039091F903992389F082600FC08091F1
:1030D0000004909101048F7099278093E9008091FA
:1030E000EB0085FB882780F91092E9009091E800B9
:1030F000977F9093E8008093F1001092F100D5C083
:10310000882319F0823009F0F2C08F7121F08230EB
:1031100009F0EDC00BC08091FE03813009F0E7C0DB
:10312000933009F080E08093F9032FC08091FE0373
:1031300081112BC080910004909101048F70992718
:10314000009709F4D4C08093E9002091EB0020FFA0
:103150001CC02091FD03233021F48091EB0080629C
:1031600012C09091EB0090619093EB0021E030E071
:1031700001C0220F8A95EAF72093EA001092EA0034
:103180008091EB0088608093EB001092E9008091C1
:10319000E800877F8093E8000E944216A8C0811152
:1031A000A6C08091FE039091FF038F779927182F77
:1031B0009091E3009078982B9093E3008091E80041
:1031C000877F8093E8000E9442168091E80080FF8C
:1031D000FCCF8091E30080688093E300112311F01D
:1031E00083E001C082E08093FB0381C0805882307D
:1031F00008F07DC08091FE039091FF038C3D23E099
:10320000920779F583E08A838AE289834FB7F8943D
:10321000DE01139620E03EE051E2E32FF0E0509310
:103220005700E49120FF03C0E295EF703F5FEF701D
:103230008E2F90E0EA3010F0C79601C0C0968D93B3
:103240009D932F5F243149F74FBF8091E800877F1E
:103250008093E8006AE270E0CE0101960E94441576
:1032600013C0AE01455D5F4F609100040E942B14B6
:103270000097E9F12091E800277F2093E800BC0146
:103280008BA59CA50E94A7158091E8008B77809361
:10329000E8002DC0803859F58091E800877F809341
:1032A000E8008091F7038093F1008091E8008E7729
:1032B00071CF81111CC09091FE039230C0F48091B7
:1032C000E800877F8093E8009093F7030E944216FE
:1032D0008091F703811104C08091E30087FF02C051
:1032E00084E001C081E08093FB030E94F912809189
:1032F000E80083FF0AC08091E800877F8093E800A0
:103300008091EB0080628093EB00AC960FB6F8944E
:10331000DEBF0FBECDBFDF91CF911F910895CF9338
:103320008091FB038823B1F08091E9008F70909128
:10333000EC0090FF02C090E801C090E0C92FC82BBC
:103340001092E9008091E80083FD0E942618CF705A
:10335000C093E900CF910895881F8827881F08959A
:1033600091E0883F08F490E0892F0895982F907F8E
:10337000903B99F038F4903981F0903A71F09038A0
:10338000C9F40BC0903DA1F018F4903C99F410C022
:10339000903E19F0903F71F402C083E00895E82F49
:1033A000E15FEF3038F4F0E0E15FFD4F8081089598
:1033B00082E0089580E008950F932F774F776F7024
:1033C000606BDC01ED91FC91022F242F462F63E00E
:1033D00070E009950F9108950F932F774F776F70D5
:1033E0006069DC01ED91FC91022F242F462F63E0F0
:1033F00070E009950F9108950F932F774F776F70B5
:103400006068DC01ED91FC91022F242F462F63E0D0
:1034100070E009950F910895FC017383628308950C
:10342000FC01738F628F0895FC01758F648F08957E
:10343000CF93DF93EC011DA21FA21EA2BC01685D09
:103440007F4F40EC88519F4F0E94551C1B821A826F
:103450001D821C821F821E82198618861B861A8670
:103460001D861C861F861E86198A188A1B8A1A8A40
:103470001D8A1C8A1F8A1E8A198E188E1B8E1A8E10
:103480001D8E1C8E1F8E1E8E19A218A2DF91CF9149
:103490000895CF92DF92FF920F931F93CF93DF9304
:1034A0001F92CDB7DEB7F62E6A018C0108511F4F6F
:1034B00008C0F60161916F01C80149830E945C1C3C
:1034C00049818C2D841B8F15A0F30F90DF91CF9134
:1034D0001F910F91FF90DF90CF900895FC017183B1
:1034E00060830895FC0171A360A30895AF92BF9219
:1034F000CF92DF92EF92FF920F931F93CF93DF93C0
:1035000000D01F92CDB7DEB77C016B01142FB22E15
:10351000A02EDC0195968C9195978430F1F45A9603
:10352000ED91FC915B97309709F4D8C0CB010197DE
:1035300063E070E00E948834DB01AA0FBB1FA60F76
:10354000B71F49832A830B834C2D4A1B9E012F5F93
:103550003F4FBD01C7010995B1C06230710509F443
:1035600053C06330710529F06130710509F09CC0CA
:1035700083C0842F807F803A01F130F48038B9F025
:10358000803909F0ABC00DC0803EE9F0803F09F101
:10359000803B09F0A3C0D7011296ED91FC911397DF
:1035A00023C0D7011496ED91FC9115971DC0D7014A
:1035B0001696ED91FC91179717C0D7011896ED91CB
:1035C000FC91199711C0D7011A96ED91FC911B97A8
:1035D0000BC0423F09F082C0D7011C96ED91FC91CF
:1035E0001D97309731F47AC0309709F477C0123FB5
:1035F00021F42A2D4B2D62EF04C0612F6F702A2D0C
:103600004B2DC70109955AC0842F807F803D59F00A
:10361000803F79F0803C09F061C0D7011E96ED91A2
:10362000FC911F9719C0D7015096ED91FC915197CD
:1036300013C0433F31F4D7015296ED91FC9153975B
:1036400008C0413F09F04AC0D7015496ED91FC9162
:103650005597309741F442C0309709F43FC0133F6B
:1036600011F0113F19F44B2D612F03C0612F6F70C2
:103670004B2DC701099522C0842F0E94B0198823C1
:1036800031F0D7015696ED91FC91579707C0163F40
:1036900029F5D7015896ED91FC9159973097F1F0A3
:1036A000612FC70109950AC064307105A8F416C0DE
:1036B0000A2D2B2D412FB601C7010995D7015E9622
:1036C000ED91FC915F97309789F00A2D2B2D412FBA
:1036D000B601C70109950AC0C12CD12CD7015C964F
:1036E000ED91FC915D97309719F7E8CF0F900F900F
:1036F0000F90DF91CF911F910F91FF90EF90DF908E
:10370000CF90BF90AF900895EF92FF920F931F93C9
:10371000CF93DF93EC01162F862F0E94B0198823D8
:1037200069F0FDA081E08DA300E020E0412F61E081
:1037300070E0CE010E94761AFDA27CC0812F0E940B
:10374000AC194DA1882309F440C0443029F01AA3D4
:1037500021E030E03FA32EA3812F0E94B6198130D3
:1037600031F070F0823051F0833059F507C08DA3ED
:1037700000E020E0412F61E070E01EC08DA35AC040
:10378000103F19F0173FE9F404C084E08DA31AA399
:103790003FC02EA13FA1C90163E070E00E948834C0
:1037A0008C0F9D1FFC0112A3B9016F5F7F4F7FA398
:1037B0006EA30CA12BA14AA1CE010E94761A1DA2D4
:1037C00039C01DA21FA21EA235C0442399F12EA10B
:1037D0003FA1C90163E070E00E9488347C01FE01D2
:1037E000E80FF91F12A3B9016F5F7F4F7FA36EA38C
:1037F0008130910591F082E0E816F104D9F40CA132
:103800002BA14AA1CE010E94761A8DA1843091F09D
:1038100081E090E09FA38EA30DC0423059F400E0F8
:103820002BA14AA1CE010E94761A8DA1843011F0FD
:10383000FFA2EEA2DF91CF911F910F91FF90EF9029
:103840000895CF92DF92EF92FF920F931F93CF9341
:10385000DF93EC01E8A1F9A1309709F009958E01F9
:1038600008511F4FC8010E948E1CE12CF12CC82E5C
:10387000D12C0FC060E0C8010E94A21C682FCE01AD
:103880000E94841B61E0C8010E94B31C8FEFE81AFC
:10389000F80AEC14FD0470F3DF91CF911F910F91A2
:1038A000FF90EF90DF90CF900895FC0142837483E6
:1038B00063831182108208950F931F93CF93DF9338
:1038C000EC01062F0E94D41C182F298130E0C90179
:1038D00001966A8170E00E949C34488150E0841710
:1038E000950729F4812F0E94D71C80E012C0EB813C
:1038F000FC81E20FF31F00832981822F90E0019663
:103900006A8170E00E949C348983812F0E94D71CB9
:1039100081E0DF91CF911F910F910895CF93DF93B5
:10392000EC010E94D41C29819881291710F0C22F24
:1039300002C0CA81C20FC91B0E94D71C8C2FDF9105
:10394000CF910895FC012081862F90E0820F911D78
:10395000628170E00E949C340380F481E02DE80FC6
:10396000F91F808108950F931F93CF93DF931F92C8
:10397000CDB7DEB78C0169830E94D41C482FF801B3
:1039800080816981262F30E0280F311D6281C901B5
:1039900070E00E949C348083842F0F90DF91CF9140
:1039A0001F910F910C94D71C8FB7F89408958FBF77
:1039B0000895FC01CB012091FB032430B1F4218157
:1039C0002F702093E90040E050E064E070E00E9436
:1039D000A61481110BC09091E80095FD07C090914D
:1039E000E8009E779093E800089582E00895209182
:1039F000FB032430A9F4FC0181818F708093E900DE
:103A00003091F3002091F200932F80E0822B892BDC
:103A100049F08091E8008E778093E8000C9463165B
:103A200082E0089580E008952091FB03243051F452
:103A3000FC0121812F702093E9002091E80020FDF6
:103A40000C94F71C0895FC01CB012091FB0324305A
:103A500011F080E0089526812F702093E9002091D5
:103A6000E80022FFF6CF2091E80025FFF2CF40E0EA
:103A700050E064E070E00E94F5148091E80085FD5C
:103A800005C08091E8008B778093E80081E008957D
:103A900090939502809394020895E0919402F0919E
:103AA0009502309721F00190F081E02D099480E09B
:103AB0000895E0919402F0919502309721F00280F0
:103AC000F381E02D09940895E0919402F09195021C
:103AD000309721F00480F581E02D0994089520911C
:103AE0009602309197028217930771F09093970294
:103AF00080939602E0919402F0919502309721F024
:103B00000680F781E02D0994089520919802309164
:103B100099028217930771F090939902809398020B
:103B2000E0919402F0919502309721F00084F185A4
:103B3000E02D0994089508950C949B1D0E94E62998
:103B40000E94F3060E94BA2A0C9465300C942C064D
:103B50005F926F927F928F929F92AF92BF92CF921D
:103B6000DF92EF92FF920F931F93CF93DF93CDB726
:103B7000DEB72A970FB6F894DEBF0FBECDBF0E9406
:103B8000E9079AE9C92E92E0D92E00E010E0AA24B4
:103B9000A394B12C502E802F0E9439093C01F601CC
:103BA000E190F1906F01E826F926E114F10431F477
:103BB0000F5F1F4F0530110569F73AC08091F10280
:103BC00081FD0E94420920E030E04501022E02C042
:103BD000880C991C0A94E2F7C4018E219F21892B3D
:103BE00009F12E835F826820792081E0672809F43B
:103BF00080E088870E94EF298160782F9A878987E3
:103C00004E815F8168858A850E94611EF801EE0FF2
:103C1000FF1FE656FD4F808191818825992591836C
:103C2000808316C02F5F3F4F2C30310571F6C0CF17
:103C30008FEF89838A831B820E94EF298160782F0E
:103C40009D838C8349815A816B818D810E94611E85
:103C50000E94A72D1091A4020E944D1D1817D9F0A3
:103C60000E944D1D8093A4022A960FB6F894DEBFE1
:103C70000FBECDBFDF91CF911F910F91FF90EF90BD
:103C8000DF90CF90BF90AF909F908F907F906F907C
:103C90005F900C94A61D2A960FB6F894DEBF0FBE57
:103CA000CDBFDF91CF911F910F91FF90EF90DF90EB
:103CB000CF90BF90AF909F908F907F906F905F90CC
:103CC0000895CF93DF93CDB7DEB72B970FB6F89457
:103CD000DEBF0FBECDBF4F83588769877A878B873A
:103CE000DE01119686E0FD0111928A95E9F785E0E3
:103CF000FE01379601900D928A95E1F749815A812C
:103D00006B817C818D819E810E944A262B960FB605
:103D1000F894DEBF0FBECDBFDF91CF910895089517
:103D2000CF93C82F882309F4C1C0823859F40E9468
:103D30004D1D81FDBBC089E30E94B1280E943D2931
:103D400089E30CC0833879F40E944D1D80FDAEC01C
:103D500083E50E94B1280E943D2983E50E94D32873
:103D6000CF910C943D29843859F40E944D1D82FD59
:103D70009DC087E40E94B1280E943D2987E4EECFD0
:103D80008450813A48F48C2F0E94C72F81118EC035
:103D90008C2F0E94B128E4CF8C2F805E883050F4A5
:103DA000C77081E090E001C0880FCA95EAF70E94D1
:103DB000F428D6CF8C2F855A833078F4C53A29F071
:103DC000C63A31F482E890E005C081E890E002C094
:103DD00083E890E0CF910C946F1D8C2F885A83312B
:103DE00008F064C0C83A39F1C93A41F1CA3A49F118
:103DF000CB3A51F1CC3A59F1CD3A61F1C03B69F17E
:103E0000CE3A71F1CF3A79F1C13B81F1C23B89F1F0
:103E1000C33B91F1C43B99F1C53BA1F1C63BA9F16C
:103E2000C73BB1F1C83BB9F1C93BC1F1CA3BC9F5C8
:103E30008AE292E038C082EE90E035C089EE90E0F0
:103E400032C08AEE90E02FC085EB90E02CC086EB6C
:103E500090E029C087EB90E026C08CEC90E023C076
:103E60008DEC90E020C083E891E01DC08AE891E0ED
:103E70001AC082E991E017C084E991E014C081E2A0
:103E800092E011C083E292E00EC084E292E00BC0A7
:103E900085E292E008C086E292E005C087E292E007
:103EA00002C080E090E0CF910C94851DCF910895E1
:103EB000882309F44DC0823859F40E944D1D81FFBA
:103EC00047C089E30E94B1280E943D2989E30CC0C4
:103ED000833871F40E944D1D80FF3AC083E50E9433
:103EE000B1280E943D2983E50E94D3280C943D29E6
:103EF000843859F40E944D1D82FF2AC087E40E9435
:103F0000B1280E943D2987E4EFCF982F9450913A31
:103F100008F4EACF982F905E983058F4282F277035
:103F200081E090E001C0880F2A95EAF70E94FA2804
:103F3000DDCF982F955A933020F480E090E00C94D8
:103F40006F1D885A833120F480E090E00C94851D29
:103F50000895882321F00E94F4280C943D290895A7
:103F6000882321F00E94FA280C943D290895BF92DD
:103F7000CF92DF92EF92FF920F931F93CF93DF9335
:103F8000CDB7DEB727970FB6F894DEBF0FBECDBF13
:103F90008C0185E0F801DE01119601900D928A9561
:103FA000E1F7F801D080E180F280558152955F7091
:103FB00083819481892B41F0FFEFEF1208C081E0EB
:103FC00090E0DF1631F003C081E090E002C080E0B5
:103FD00090E080FD7CC3C8015E830E948F1ED98261
:103FE000EA8289819A810E946E28B92E8F830E946D
:103FF0006D280E9495275E816F81FF2021F00E942D
:1040000011296F815E812B2D22952F7030E0253094
:10401000310509F4E6C06CF4243031050CF0A2C07F
:104020004B2D407F8B2D8F70223031050CF045C019
:1040300017C02C3031054CF42A3031050CF0E7C1A3
:104040002830310509F043C3E5C02D30310509F4AE
:10405000BAC20CF4A2C22F30310509F038C323C311
:10406000182F411101C002C01295107FFF2059F096
:10407000112309F46BC2812F6F830E9404290E94CF
:104080003D296F8163C2862F0E94581F112309F4B6
:104090001EC3812F0E940A2927960FB6F894DEBF0F
:1040A0000FBECDBFDF91CF911F910F91FF90EF9089
:1040B000DF90CF90BF900C943D29403211F0829553
:1040C000807F662319F0613071F523C0FF20B1F0C5
:1040D000511101C032C0513081F527960FB6F894C6
:1040E000DEBF0FBECDBFDF91CF911F910F91FF902B
:1040F000EF90DF90CF90BF900C942429511101C014
:1041000003C0513009F4E3C28E830E9427298E81B7
:104110009AC1FF2021F0563008F0D9C20EC05530A8
:1041200008F0D5C290C1FF20C9F0552331F0F80145
:10413000958190FF0BC29F70958327960FB6F894D8
:10414000DEBF0FBECDBFDF91CF911F910F91FF90CA
:10415000EF90DF90CF90BF900C94A91F552309F4E6
:1041600072C109C22B2D26952695237030E02115AA
:10417000310529F02130310509F0A9C219C0FF200D
:1041800021F0862F9B2D937002C080E090E027964F
:104190000FB6F894DEBF0FBECDBFDF91CF911F9158
:1041A0000F91FF90EF90DF90CF90BF900C946F1D18
:1041B000FF2021F0862F9B2D937002C080E090E0BD
:1041C00027960FB6F894DEBF0FBECDBFDF91CF911B
:1041D0001F910F91FF90EF90DF90CF90BF900C94C4
:1041E000851D862FFF2019F00E94AD2C02C00E9471
:1041F000152D27960FB6F894DEBF0FBECDBFDF9109
:10420000CF911F910F91FF90EF90DF90CF90BF90D3
:104210000C949C2D8B2D837009F079C0F11057C23E
:10422000262F229526952770220F220F862F8F701A
:10423000C82ED12CE12CF12C022E04C0CC0CDD1C9C
:10424000EE1CFF1C0A94D2F764FF10C06FE070E010
:1042500080E090E004C0660F771F881F991F2A95A1
:10426000D2F7609570958095909503C060E070E0FE
:10427000CB012B2D269526952370422F50E04230FE
:104280005105D9F04330510569F16C297D298E29FA
:104290009F294130510551F127960FB6F894DEBFA2
:1042A0000FBECDBFDF91CF911F910F91FF90EF9087
:1042B000DF90CF90BF900C94AA276C297D298E297E
:1042C0009F2927960FB6F894DEBF0FBECDBFDF91B2
:1042D000CF911F910F91FF90EF90DF90CF90BF9003
:1042E0000C94BC270E94AA27C701B60127960FB6D7
:1042F000F894DEBF0FBECDBFDF91CF911F910F911C
:10430000FF90EF90DF90CF90BF900C949827FF2004
:1043100019F08B2D817001C08695882309F4D7C1CF
:10432000262F229526952770220F220F862F8F7019
:10433000C82ED12CE12CF12C022E04C0CC0CDD1C9B
:10434000EE1CFF1C0A94D2F764FF10C06FE070E00F
:1043500080E090E004C0660F771F881F991F2A95A0
:10436000D2F7609570958095909503C060E070E0FD
:10437000CB012B2D269526952370422F50E04230FD
:104380005105D9F04330510569F16C297D298E29F9
:104390009F294130510551F127960FB6F894DEBFA1
:1043A0000FBECDBFDF91CF911F910F91FF90EF9086
:1043B000DF90CF90BF900C9449286C297D298E29DD
:1043C0009F2927960FB6F894DEBF0FBECDBFDF91B1
:1043D000CF911F910F91FF90EF90DF90CF90BF9002
:1043E0000C945B280E944928C701B60127960FB696
:1043F000F894DEBF0FBECDBFDF91CF911F910F911B
:10440000FF90EF90DF90CF90BF900C943728603FE3
:1044100059F120F4603E08F494C008C0623F09F4EA
:1044200067C0F0F1633F09F08CC065C0162F1F70A4
:104430008B2D8F71FF2021F00E94E227812F7DCEEE
:104440000E94FD27812F27960FB6F894DEBF0FBE7E
:10445000CDBFDF91CF911F910F91FF90EF90DF9033
:10446000CF90BF900C94B01FFF20B1F0553008F0F2
:104470002EC18B2D8F7127960FB6F894DEBF0FBE1D
:10448000CDBFDF91CF911F910F91FF90EF90DF9003
:10449000CF90BF900C941C28563008F018C1E9CF7B
:1044A000FF2099F08B2D8F7127960FB6F894DEBF01
:1044B0000FBECDBFDF91CF911F910F91FF90EF9075
:1044C000DF90CF90BF900C94E2278B2D8F712796B1
:1044D0000FB6F894DEBF0FBECDBFDF91CF911F9115
:1044E0000F91FF90EF90DF90CF90BF900C94FD273D
:1044F000F110EBCFD7CFFF2099F08B2D8F7127963E
:104500000FB6F894DEBF0FBECDBFDF91CF911F91E4
:104510000F91FF90EF90DF90CF90BF900C94D32736
:1045200027960FB6F894DEBF0FBECDBFDF91CF91B7
:104530001F910F91FF90EF90DF90CF90BF900C9460
:10454000CE27FF20A9F0552309F4ACCF862F27965C
:104550000FB6F894DEBF0FBECDBFDF91CF911F9194
:104560000F91FF90EF90DF90CF90BF900C94901E32
:10457000552309F4AACF862F27960FB6F894DEBFED
:104580000FBECDBFDF91CF911F910F91FF90EF90A4
:10459000DF90CF90BF900C94581F4B2D4F70C801E7
:1045A0000E94560327960FB6F894DEBF0FBECDBF0C
:1045B000DF91CF911F910F91FF90EF90DF90CF90FF
:1045C000BF900C940027F11082C09B2D9F70492F43
:1045D00050E04230510599F144F44115510569F01C
:1045E0004130510509F073C019C043305105C1F184
:1045F0004430510509F06BC044C027960FB6F894BB
:10460000DEBF0FBECDBFDF91CF911F910F91FF9005
:10461000EF90DF90CF90BF900C94763027960FB636
:10462000F894DEBF0FBECDBFDF91CF911F910F91E8
:10463000FF90EF90DF90CF90BF900C948D30279635
:104640000FB6F894DEBF0FBECDBFDF91CF911F91A3
:104650000F91FF90EF90DF90CF90BF900C94A93016
:1046600027960FB6F894DEBF0FBECDBFDF91CF9176
:104670001F910F91FF90EF90DF90CF90BF900C941F
:10468000BC30862F27960FB6F894DEBF0FBECDBF85
:10469000DF91CF911F910F91FF90EF90DF90CF901E
:1046A000BF900C94E0304B2D4F70C80127960FB689
:1046B000F894DEBF0FBECDBFDF91CF911F910F9158
:1046C000FF90EF90DF90CF90BF900C944309279616
:1046D0000FB6F894DEBF0FBECDBFDF91CF911F9113
:1046E0000F91FF90EF90DF90CF90BF9008950E94C0
:1046F00011290E9421290E94E6280E943D290E943A
:10470000482E0E949C2D80E090E00E946F1D80E06A
:1047100090E00C94851D0E9401290C9477230E943F
:104720006E28292F22952F7030E02C3031054CF463
:104730002A3031056CF4225031092230310590F4D1
:1047400007C02C30310551F02F30310559F406C027
:10475000803E10F0803F31F481E0089593FB88277C
:1047600080F9089580E00895CF93DF9300D000D0C2
:104770001F92CDB7DEB70F900F900F900F900F9054
:10478000DF91CF910895CF93DF9300D000D000D078
:10479000CDB7DEB726960FB6F894DEBF0FBECDBFFD
:1047A000DF91CF9108951F93CF93DF93C091DB02E8
:1047B00016E012C0D0E01C9FF0011D9FF00D1124E7
:1047C000E555FD4F408151816281738184819581DE
:1047D0000E94C3232196C7708091DC02C813EACFE0
:1047E000DF91CF911F9108954091A5025091A602AB
:1047F0006091A7027091A8028091A9029091AA02EB
:104800000C94C3230F931F93CF93DF938091AA023D
:1048100082958F7009F069C08091A702882309F4FE
:1048200064C0A091DB02D091DC02B091A502C091DE
:10483000A6028091A8029091A90221E030E0BF3F3A
:1048400011F020E030E0122FBC016095709506E079
:104850004AC0009721F0CF3F29F4212F05C021E065
:1048600030E002C020E030E020FD3BC04A2F50E0A5
:10487000049FF001059FF00D1124E555FD4F2181A6
:10488000C2132FC02081B2132CC02281211129C054
:10489000238134812817390718F0281B390B02C0EF
:1048A000260F371F283C3105E0F48091AA028F7053
:1048B00080618093AA0286E0849FF001859FF00DBD
:1048C0001124E055FD4F80818F708061808385EADF
:1048D00092E00E94B71FDF91CF911F910F910C942E
:1048E000D323AF5FA770AD13B4CFDF91CF911F91EA
:1048F0000F910895EF92FF920F931F93CF93DF9341
:10490000CDB7DEB762970FB6F894DEBF0FBECDBF4E
:104910008C0185E0F801DE011D9601900D928A95CB
:10492000E1F7D8014C9111965C91119712966C9118
:1049300012971396ED90FC9014977091A502E09158
:10494000A6028091A8029091A902009739F0EF3F4A
:1049500041F421E030E07F3F31F003C021E030E05E
:1049600002C020E030E020FD5CC12091A70222239C
:1049700009F4F1C0E816F90628F09701281B390B55
:10498000C90104C0809590958E0D9F1D883C9105AE
:1049900008F098C08091AA02982F907F09F064C017
:1049A000E51314C0741312C0611110C08F708061C0
:1049B0008093AA020E94F42385EA92E00E94B71F26
:1049C0008091AA02D80115968C9343C1EF2839F043
:1049D0005F3F41F481E090E04F3F31F003C081E060
:1049E00090E002C080E090E080FD03C081E0862777
:1049F00002C080E090E080FF2EC08091DB02209119
:104A0000DC0236E013C090E0389FF001399FF00DD2
:104A10001124E555FD4F7181571306C0708147136E
:104A200003C07281671317C0019687708213EBCFA2
:104A300012C19F7059F0882309F40BC107C09F7001
:104A400029F0F8019581907F09F403C1805E8830D8
:104A500008F4FFC0D2C0662309F4FBC08091AA020B
:104A600081608093AA02F5C0E51308C0741306C0E4
:104A7000611104C0D80115968C939DC04D875E8747
:104A80008D859E856A8B0E948F236A89882309F40D
:104A9000B4C0662309F4B1C02091AA02822F829586
:104AA0008F7090E002970CF4C6C08091A50290919F
:104AB000A60298878F831986FB86EA862C87CE010B
:104AC000079646C08091AA02982F907F59F47E2DB8
:104AD000F98AE88A89890E94B42385EA92E00E94D3
:104AE000B71F95C0E51311C074130FC061110DC03D
:104AF000F8018583C8010E94B71FE5EAF2E086E06D
:104B0000DF011D928A95E9F7A2C04D875E878D85EA
:104B10009E856A8B0E948F236A89882309F46DC061
:104B2000662309F46AC02091AA02822F82958F70B1
:104B300090E002970CF47FC08091A5029091A602AC
:104B40009A8389831B82FD82EC822E83CE0101969B
:104B50000E94B71F70C0E816F90628F09701281BBD
:104B6000390BC90104C0809590958E0D9F1D883C1E
:104B7000910508F046C0662309F43FC0E51330C034
:104B800074132EC02091AA0220FD21C0322F32952D
:104B90003F70832F90E00097D1F0D80115962C93A9
:104BA00015970F9741F0832F8F5F8295807F2F702D
:104BB000282B15962C93C8010E94B71F86E0F80198
:104BC000A5EAB2E001900D928A95E1F73EC086E039
:104BD000F801A5EAB2E001900D928A95E1F737C09D
:104BE0004D875E878D859E850E948F23811123C00E
:104BF0008091AA0281608093AA02C8010E94B71F17
:104C000026C07E2DF98AE88A89890E94B423E5EAC4
:104C1000F2E086E0DF011D928A95E9F70E94F42315
:104C200018C0662351F34D875E878D859E850E944F
:104C30008F23882311F386E0F801A5EAB2E0019002
:104C40000D928A95E1F70E9402240E94F42381E0EC
:104C500014C080E012C04D875E878D859E850E94BE
:104C60006E28292F22952F7030E0223031050CF468
:104C7000E0CE243031050CF6E2CE62960FB6F89401
:104C8000DEBF0FBECDBFDF91CF911F910F91FF907F
:104C9000EF9008951F93CF93DF93CDB7DEB72C9796
:104CA0000FB6F894DEBF0FBECDBF4F83588769871C
:104CB0007A878B879C87CE0107960E947A24882367
:104CC000D9F02F8138858A859B85892B39F03F3F24
:104CD00019F080E090E004C02F3FD9F781E090E028
:104CE000892B09F06DC04F81588569857A858B8540
:104CF0009C850E94C32364C086E0FE013796DE01D6
:104D0000119601900D928A95E1F7FF81E8854A8519
:104D10005B854115510539F0EF3F41F481E090E0AA
:104D2000FF3F31F003C081E090E002C080E090E0FE
:104D300080FD46C02091DC0230E0C90101968770F9
:104D400099276091DB0270E08617970709F440C04D
:104D5000F983EA835D834C8396E0929FD001939F11
:104D6000B00D1124A555BD4FFE01319601900D9255
:104D70009A95E1F78093DC020E94D32321C0189F0B
:104D8000C001112485559D4F0E947A24882371F11A
:104D9000E091DB021E9FF0011124E555FD4F40819B
:104DA000518162817381848195810E94C3238091A6
:104DB000DB0290E00196877099278093DB0201C0A7
:104DC00016E08091DB029091DC028913D8CF0EC0EF
:104DD0000E948B231092DC021092DB02E5EAF2E0E3
:104DE00086E0DF011D928A95E9F7EACF2C960FB68F
:104DF000F894DEBF0FBECDBFDF91CF911F91089514
:104E0000DF92EF92FF920F931F93CF93DF93EC010A
:104E1000009709F46EC0D12CEE24E394F12C8E019E
:104E20000F5F1F4FFE018491843748F4843008F0EF
:104E30004CC0813071F0823009F05BC01EC08537F4
:104E400009F43FC080F1982F9458903708F051C072
:104E50003FC02296F8018491982F905E983050F4CC
:104E60008770FE2D01C0FF0F8A95EAF78F2F0E94F1
:104E7000142913C00E94901E2FC02296F80184911D
:104E8000982F905E983060F48770FE2D01C0FF0F60
:104E90008A95EAF78F2F0E941A290E943D291CC08B
:104EA0000E94581F19C02296F801049107C08FE98B
:104EB0009FE00197F1F700C0000001500111F7CF0A
:104EC0000BC02296F801D49007C00E94901E03C028
:104ED0008F770E94581FE8018D2D07C08150EFE9A0
:104EE000FFE03197F1F700C00000882309F497CF65
:104EF000F5CFDF91CF911F910F91FF90EF90DF9051
:104F000008956093E1027093E2028093E30290932C
:104F1000E4020C9477236093DD027093DE028093A9
:104F2000DF029093E0020C94772308950C9481277C
:104F30000F931F930091E1021091E2022091E3028E
:104F40003091E402602B712B822B932B1F910F91D8
:104F50000C9481270F931F930091E1021091E202BC
:104F60002091E3023091E402602371238223932392
:104F70001F910F910C9481270F931F930091E102D1
:104F80001091E2022091E3023091E4026027712740
:104F9000822793271F910F910C94812760E070E086
:104FA000CB010C948B2741E050E060E070E004C03E
:104FB000440F551F661F771F8A95D2F7CB01BA01A0
:104FC0000C948B2741E050E060E070E004C0440F97
:104FD000551F661F771F8A95D2F78091DD02909149
:104FE000DE02A091DF02B091E002482B592B6A2B20
:104FF0007B2BCB01BA010C948B2741E050E060E0A1
:1050000070E004C0440F551F661F771F8A95D2F7C2
:1050100040955095609570958091DD029091DE02EB
:10502000A091DF02B091E002482359236A237B2339
:10503000CB01BA010C948B2741E050E060E070E0B6
:1050400004C0440F551F661F771F8A95D2F78091C1
:10505000DD029091DE02A091DF02B091E0024827CC
:1050600059276A277B27CB01BA010C948B270F9312
:105070001F930091DD021091DE022091DF0230913A
:10508000E002602B712B822B932B1F910F910C94BC
:105090008B270F931F930091DD021091DE02209168
:1050A000DF023091E00260237123822393231F915A
:1050B0000F910C948B270F931F930091DD02109199
:1050C000DE022091DF023091E00260277127822703
:1050D00093271F910F910C948B270895CF92DF9205
:1050E000EF92FF920F931F93CF93DF93EC01C09049
:1050F000E102D090E202E090E302F090E4028091BD
:10510000DD029091DE02A091DF02B091E002C82A98
:10511000D92AEA2AFB2A0FE110E0B701A601002EE6
:1051200004C076956795579547950A94D2F740FF46
:1051300008C0BE01802F0E94B3048130910509F0A0
:1051400007C00150110948F7BE0180E00E94B30476
:10515000DF91CF911F910F91FF90EF90DF90CF9053
:10516000089540918B0150918C0120E030E09FEF39
:10517000FA01E20FF31F62816817A1F09F3F19F453
:10518000611101C0922F2F5F3F4F2630310581F70B
:1051900007C0FA01E90FF11D97FDFA958283089582
:1051A0009F3FB9F7089540918B0150918C0120E009
:1051B00030E0FA01E20FF31F9281981301C01282CE
:1051C0002F5F3F4F26303105A1F7089581E090E031
:1051D000E0918B01F0918C01E80FF91F108201968C
:1051E00088309105A9F708959091E502982B909346
:1051F000E502089580959091E50298239093E50249
:1052000008951092E50208959091E602982B9093EC
:10521000E602089580959091E60298239093E60225
:1052200008951092E60208959091E702982B9093CA
:10523000E702089580959091E70298239093E70202
:1052400008951092E70208958093E802089510925D
:10525000E802089540918B0150918C0120E030E0EC
:1052600080E0FA01E20FF31F918191118F5F2F5FB0
:105270003F4F27303105A9F70895E0918B01F09158
:105280008C018091E5028083E0918B01F0918C018B
:1052900080819091E602892B8083E0918B01F091CF
:1052A0008C0180819091E702892B80839091E802A4
:1052B000992361F0E0918B01F0918C018081892B21
:1052C00080830E942A2981110E94272980918B01C5
:1052D00090918C010C94591D8091FB03843039F11D
:1052E0001092F20220E488E190E00FB6F894A895BD
:1052F000809360000FBE2093600080E00E949B03BB
:1053000080E00E942C0683B7817F846083BF83B7CF
:10531000816083BF7894889583B78E7F83BF88E14F
:105320000FB6F89480936000109260000FBE08954D
:1053300008950895CF9380E00E949B030E949829CE
:105340000E94E9070E949929C0E08C2F0E94390928
:10535000892B29F4CF5FC530C1F780E001C081E01F
:10536000CF9108950E948B2380E00E949B030E94AE
:1053700065300E944D1D0C942C061F920F920FB6A3
:105380000F9211248F939F93AF93BF938091F2025A
:10539000811113C08091F3029091F402A091F50263
:1053A000B091F6024196A11DB11D8093F302909336
:1053B000F402A093F502B093F602BF91AF919F91D2
:1053C0008F910F900FBE0F901F90189582E084BDB3
:1053D00093E095BD9AEF97BD80936E0008958FB7C7
:1053E000F8944091F3025091F4026091F5027091AB
:1053F000F6028FBFCA010895CF92DF92EF92FF921B
:105400000F931F932FB7F8944091F3025091F40239
:105410006091F5027091F6022FBF6A017B01EE24C4
:10542000FF248C0120E030E0C016D106E206F3062E
:1054300020F09A01281B390B05C09C01209530955E
:10544000240F351FC9011F910F91FF90EF90DF903E
:10545000CF9008951F920F920FB60F9211248F9341
:105460009F93AF93BF938091F3029091F402A09128
:10547000F502B091F6020196A11DB11D8093F302D1
:105480009093F402A093F502B093F602BF91AF910E
:105490009F918F910F900FBE0F901F9018950E94B3
:1054A0009516F8942FEF87EA91E6215080409040BE
:1054B000E1F700C0000087E090EBDC018093050479
:1054C00090930604A0930704B09308042CE088E1AD
:1054D00090E00FB6F894A895809360000FBE2093DB
:1054E0006000FFCFCF92DF92EF92FF920F931F9356
:1054F000CF93DF93C82ED12C01E010E08D2D0E94B8
:1055000039097C01C0E0D0E098010C2E02C0220FC6
:10551000331F0A94E2F72E213F21232B29F42196F1
:10552000CC30D10589F708C06C2F7D2D80E00E941A
:105530008E04C812F4CF06C0D39485E0D812DECF13
:1055400080E001C081E0DF91CF911F910F91FF902A
:10555000EF90DF90CF900895CF93C82F8CE20E94F8
:10556000722A882321F08C2FCF910C94722A80E02C
:10557000CF910895CF930E94FD2B811102C00E940C
:10558000DE2BC5E608C00E94E9078FE39CE901977E
:10559000F1F700C00000C150B1F789E20E94AC2AC7
:1055A00081110AC18AE20E94AC2A81110E94DE2B7D
:1055B00085E00E94AC2A81110E944F2A0E94082C8B
:1055C0008093F10287E00E94AC2A882399F18BE155
:1055D0000E94AC2A882351F09091F10291FB882718
:1055E00080F921E0822780FB91F922C08EE00E94A1
:1055F000AC2A882351F09091F10292FB882780F920
:1056000021E0822780FB92F913C080E10E94AC2A3E
:105610009091F102882341F093FB882780F921E0E3
:10562000822780FB93F904C0892F809580FB90F935
:105630009093F1028091F1020E940C2C0E941A2C8E
:105640008093020380EE0E94AC2A882341F080916F
:105650000203982F909590FB80F98093020389E3D1
:105660000E94AC2A882359F09091020391FB88276D
:1056700080F921E0822780FB91F99093020382EE6A
:105680000E94AC2A882359F09091020392FB88274C
:1056900080F921E0822780FB92F99093020386EE45
:1056A0000E94AC2A882359F09091020393FB88272B
:1056B00080F921E0822780FB93F99093020383EE27
:1056C0000E94AC2A882359F09091020394FB88270A
:1056D00080F921E0822780FB94F99093020385E30F
:1056E0000E94AC2A882359F09091020395FB8827E9
:1056F00080F921E0822780FB95F99093020381E3F2
:105700000E94AC2A882359F09091020396FB8827C7
:1057100080F921E0822780FB96F99093020381E1D2
:105720000E94AC2A882359F09091020397FB8827A6
:1057300080F921E0822780FB97F990930203809102
:1057400002030E941E2C87E20E94AC2AC82F8EE121
:105750000E94AC2A8111C2608FE10E94AC2A8111A3
:10576000C46080E20E94AC2A8111C86081E20E947C
:10577000AC2A8111C06182E20E94AC2A8111C06210
:1057800083E20E94AC2A8111C06484E20E94AC2AA8
:10579000882311F0C06802C0CC2329F08C2F0E940E
:1057A000152C6C2F03C00E94112C682F70E080E034
:1057B00090E0CF910C949627CF9108956DEE7EEFF7
:1057C00080E090E00E94CC3460E082E090E00E94B3
:1057D000BE3460E083E090E00E94BE3460E084E08C
:1057E00090E00E94BE3460E085E090E00E94BE340C
:1057F00060E086E090E00C94BE3480E090E00E948F
:10580000B83421E08D3E9E4F09F020E0822F0895AC
:1058100082E090E00C94B034682F82E090E00C9429
:10582000BE3483E090E00C94B034682F83E090E0C5
:105830000C94BE3484E090E00C94B034682F84E083
:1058400090E00C94BE3486E090E00C94B034682F65
:1058500086E090E00C94BE348091FF0280FF0BC084
:105860006091900185E0689FB0011124759567955E
:10587000759567952AC081FF09C06091900185E008
:10588000689FB0011124759567951FC082FF07C0FE
:105890006091900185E0689FB001112416C040918D
:1058A000F9024423C9F060918F01461788F72091CF
:1058B000900185E0289F90011124429FC001439FE1
:1058C000900D112470E00E949C346038710540F402
:1058D0006115710539F002C065E070E0862F08950A
:1058E0008FE7089581E008958091FF0280FF08C04E
:1058F00060918E0170E0759567957595679521C0EB
:1059000081FF06C060918E0170E07595679519C0A2
:1059100082FF04C060918E0170E010C08091F90296
:105920008823C1F060918D018617A0F790918E01B8
:10593000989FC001112470E00E949C34603871056A
:1059400028F46115710521F0862F08958FE70895D9
:1059500081E0089561E070E0F4CF803F21F40E947F
:105960002C2C819504C0813F29F40E942C2C80931B
:10597000FC020895823F21F40E942C2C819504C0E2
:10598000833F29F40E942C2C8093FB020895893FC9
:1059900019F40E94742C05C08A3F31F40E94742CC3
:1059A00081958093FD0208958B3F21F40E94742C11
:1059B000819504C08C3F29F40E94742C8093FE02D0
:1059C0000895843F21F48091FA02816017C0853FD9
:1059D00021F48091FA02826011C0863F21F4809107
:1059E000FA0284600BC0873F21F48091FA0288603C
:1059F00005C0883F31F48091FA0280618093FA02F9
:105A000008958D3F21F48091FF0281600BC08E3F8D
:105A100021F48091FF02826005C08F3F29F48091BC
:105A2000FF0284608093FF020895803F29F48091F3
:105A3000FC0287FF6EC007C0813F41F48091FC02E9
:105A400018160CF066C01092FC0263C09091FB0225
:105A5000823F19F497FF5DC005C0833F31F41916EA
:105A60000CF057C01092FB0254C0893F31F4809172
:105A7000FD0218160CF04DC006C08A3F39F4809123
:105A8000FD0287FF46C01092FD0243C08B3F29F400
:105A90008091FE0287FF3DC006C08C3F39F48091A3
:105AA000FE021816B4F51092FE0233C0843F21F4B2
:105AB0008091FA028E7F05C0853F31F48091FA0211
:105AC0008D7F8093FA0225C0863F21F48091FA02EF
:105AD0008B7FF7CF873F21F48091FA02877FF1CF48
:105AE000883F21F48091FA028F7EEBCF8D3F21F425
:105AF0008091FF028E7F0BC08E3F21F48091FF02C8
:105B00008D7F05C08F3F29F48091FF028B7F8093AA
:105B1000FF028091FB0281110EC08091FC02811175
:105B20000AC08091FD02811106C08091FE028111A0
:105B300002C01092F90208958AEF92E00E94641D5B
:105B40000E94EF299093F8028093F7020895CF9373
:105B50008091F7029091F8020E94FC294091F9028D
:105B6000442321F02091910130E006C02091920160
:105B70005AE0259F900111248217930708F486C0EC
:105B80008091FB0281110DC09091FC02911109C01E
:105B90009091FD02911105C09091FE02992309F4A4
:105BA00075C04F3F19F04F5F4093F902181624F467
:105BB0000E942C2C8093FB028091FB0287FF05C082
:105BC0000E942C2C81958093FB028091FC02181678
:105BD00024F40E942C2C8093FC028091FC0287FF0D
:105BE00005C00E942C2C81958093FC026091FB02E1
:105BF000662339F1C091FC02CC2319F1772767FDA8
:105C00007095872F972F0E94003223E333E343E3FD
:105C10005FE30E94B4320E94CD316093FB026C2F8F
:105C2000772767FD7095872F972F0E94003223E317
:105C300033E343E35FE30E94B4320E94CD316093CB
:105C4000FC028091FD02181624F40E94742C8093AB
:105C5000FD028091FD0287FF05C00E94742C819592
:105C60008093FD028091FE02181624F40E94742C89
:105C70008093FE028091FE0287FF05C00E94742C73
:105C800081958093FE02CF910C949C2DCF91089525
:105C9000EAEFF2E085E0DF011D928A95E9F71092C4
:105CA000F9021092FF020895833089F130F48130B7
:105CB00061F0823009F06EC019C0853009F449C026
:105CC000B8F1863009F066C055C020919201862F48
:105CD00090E0820F911D8F3F910520F4620F609339
:105CE000920108958FEF8093920108952091910180
:105CF000862F90E0820F911D8F3F910520F4620F57
:105D00006093910108958FEF809391010895209100
:105D10009001862F90E0820F911D8F3F910520F416
:105D2000620F6093900108958FEF80939001089522
:105D300020918F01862F90E0820F911D8F3F91055A
:105D400020F4620F60938F0108958FEF80938F018D
:105D5000089520918E01862F90E0820F911D8F3F34
:105D6000910520F4620F60938E0108958FEF809368
:105D70008E01089520918D01862F90E0820F911D54
:105D80008F3F910520F4620F60938D0108958FEF8E
:105D900080938D010895833021F130F4813059F0E2
:105DA000823009F049C012C0853089F128F186306F
:105DB00009F042C037C080919201681720F4861B19
:105DC000809392010895109292010895809191011B
:105DD000681720F4861B8093910108951092910119
:105DE000089580919001681720F4861B809390019C
:105DF000089510929001089580918F01681720F402
:105E0000861B80938F01089510928F0108958091D1
:105E10008E01681720F4861B80938E0108951092DE
:105E20008E01089580918D01681720F4861B809360
:105E30008D01089510928D01089541E050E060E0D9
:105E400070E004C0440F551F661F771F8A95D2F774
:105E5000CB01BA010E9496270C948B23873200F560
:105E60008E3108F089C08E3009F469C060F4873043
:105E700009F44DC018F4863049F531C0883041F13D
:105E80008B3021F57EC0863109F47BC018F4803157
:105E9000E9F45FC0893109F474C08B31B9F445C0AD
:105EA000883309F46EC048F4893209F467C0853339
:105EB00009F464C0873251F461C0833409F45EC0D0
:105EC00018F48A3318F056C0883499F080E00895A9
:105ED0000E94082C0E941A2C0E94232C52C08091F0
:105EE000F102817F8E7F8093F10281E08093000335
:105EF00008950E948B232FEF83ED90E32150804083
:105F00009040E1F700C000000E944F2A3AC09091F3
:105F1000F102892F8095817080FB90F919F09660CD
:105F2000986025C0997F977F22C09091F10291FBE4
:105F3000882780F921E0822780FB91F913C0909196
:105F4000F10292FB882780F921E0822780FB92F9F9
:105F500009C09091F10293FB882780F921E0822704
:105F600080FB93F99093F102882359F0916090930C
:105F7000F10207C0895303C08D5101C080E00E9427
:105F80001D2F81E0089580E0089580E00895CF936B
:105F9000C82F80910003813071F020F0823009F029
:105FA00089C037C0A0918B01B0918C018C91823255
:105FB00009F082C007C0A0918B01B0918C018C9137
:105FC000823249F48C2F0E94C32F81111EC08C2F66
:105FD0000E942E2F1CC08C2F0E94C52F811115C02E
:105FE000C43169F030F4CB3081F0C03109F068C0C1
:105FF00009C0C93221F0C83309F062C006C010924E
:1060000000035EC082E08093000381E090E0817035
:106010005AC0C932C9F060F4C431B1F020F4C730BD
:1060200009F04CC034C0CE51C63008F047C017C08C
:10603000CE3439F120F4CB3409F040C01CC0C13556
:10604000C1F0C235D9F513C080910103882319F03E
:106050001092010333C081E08093000334C0EC2F21
:10606000F0E0E25EFD4F80818093010327C061E094
:1060700003C061E007C06AE0809101030E94542ED2
:106080001DC06AE0809101030E94CB2E17C08EE1F3
:106090008093920182E3809391018AE08093900142
:1060A00084E180938F0188E080938E0188E2809361
:1060B0008D0104C01092000380E005C081E003C0A0
:1060C00080E090E0A4CFCF9108950E94FD2B811134
:1060D00002C00E94DE2B0E94232C8093040480FFC8
:1060E00002C0869501C080E00C949B03809104045B
:1060F000982F9695292F30E0233031054CF49F5F7F
:10610000990F8170892B8160809304040E94272C51
:106110008091040486950C949B0380910404982F2D
:10612000969591F09158990F8170892B8093040472
:106130008E7F91E009F490E08091040490FB80F957
:10614000809304040E94272C8091040486950C946B
:106150009B0380910404982F909590FB80F9809385
:1061600004040E94272C8091040480FF02C08695BD
:1061700001C080E00C949B0330910404232F2695EA
:106180002F5F2F77822F90E0317004972CF4220F2D
:10619000232B2093040402C0309304048091040450
:1061A000282F2E7F91E009F490E090FB80F98093F6
:1061B00004040E94272C8091040486950C949B0370
:1061C00020910404922F96959827990F822F817021
:1061D000892B809304048E7F91E009F490E08091F4
:1061E000040490FB80F9809304040E94272C809182
:1061F000040486950C949B035058BB27AA270ED005
:1062000075C166D130F06BD120F031F49F3F11F4AD
:106210001EF45BC10EF4E095E7FB51C1E92F77D185
:1062200080F3BA17620773078407950718F071F4B3
:106230009EF58FC10EF4E0950B2EBA2FA02D0B0109
:10624000B90190010C01CA01A0011124FF27591BBB
:1062500099F0593F50F4503E68F11A16F040A22FC1
:10626000232F342F4427585FF3CF46953795279532
:10627000A795F0405395C9F77EF41F16BA0B620B31
:10628000730B840BBAF09150A1F0FF0FBB1F661F78
:10629000771F881FC2F70EC0BA0F621F731F841FBB
:1062A00048F4879577956795B795F7959E3F08F0E1
:1062B000B3CF9395880F08F09927EE0F97958795A0
:1062C0000895D9D008F481E008950CD00FC107D10A
:1062D00040F0FED030F021F45F3F19F0F0C05111D2
:1062E00039C1F3C014D198F39923C9F35523B1F3FD
:1062F000951B550BBB27AA2762177307840738F035
:106300009F5F5F4F220F331F441FAA1FA9F333D093
:106310000E2E3AF0E0E830D091505040E695001C47
:10632000CAF729D0FE2F27D0660F771F881FBB1F03
:10633000261737074807AB07B0E809F0BB0B802DDD
:10634000BF01FF2793585F4F2AF09E3F510568F029
:10635000B6C000C15F3FECF3983EDCF386957795BD
:106360006795B795F7959F5FC9F7880F911D96952B
:10637000879597F90895E1E0660F771F881FBB1F87
:10638000621773078407BA0720F0621B730B840B34
:10639000BA0BEE1F88F7E095089504D06894B11108
:1063A000D9C00895BCD088F09F5790F0B92F992795
:1063B000B751A0F0D1F0660F771F881F991F1AF010
:1063C000BA95C9F712C0B13081F0C3D0B1E00895D9
:1063D000C0C0672F782F8827B85F39F0B93FCCF35A
:1063E000869577956795B395D9F73EF49095809506
:1063F000709561957F4F8F4F9F4F0895E89409C026
:1064000097FB3EF490958095709561957F4F8F4FE7
:106410009F4F9923A9F0F92F96E9BB279395F695FD
:10642000879577956795B795F111F8CFFAF4BB0F7B
:1064300011F460FF1BC06F5F7F4F8F4F9F4F16C0DF
:10644000882311F096E911C0772321F09EE8872F69
:10645000762F05C0662371F096E8862F70E060E025
:106460002AF09A95660F771F881FDAF7880F96959E
:10647000879597F90895990F0008550FAA0BE0E842
:10648000FEEF16161706E807F907C0F012161306F6
:10649000E407F50798F0621B730B840B950B39F436
:1064A0000A2661F0232B242B252B21F408950A269C
:1064B00009F4A140A6958FEF811D811D089597F9DC
:1064C0009F6780E870E060E008959FEF80EC08959A
:1064D00000240A94161617061806090608950024C3
:1064E0000A9412161306140605060895092E03943D
:1064F000000C11F4882352F0BB0F40F4BF2B11F4B1
:1065000060FF04C06F5F7F4F8F4F9F4F089557FD0F
:106510009058440F551F59F05F3F71F04795880F11
:1065200097FB991F61F09F3F79F0879508951216A8
:1065300013061406551FF2CF4695F1DF08C0161654
:1065400017061806991FF1CF869571056105089405
:106550000895E894BB2766277727CB0197F908951C
:106560008ADF08F48FEF08950BD0C0CFB1DF28F099
:10657000B6DF18F0952309F0A2CFA7CF1124EACFF8
:10658000C6DFA0F3959FD1F3950F50E0551F629F92
:10659000F001729FBB27F00DB11D639FAA27F00D7C
:1065A000B11DAA1F649F6627B00DA11D661F829FA3
:1065B0002227B00DA11D621F739FB00DA11D621F88
:1065C000839FA00D611D221F749F3327A00D611DA5
:1065D000231F849F600D211D822F762F6A2F112487
:1065E0009F5750408AF0E1F088234AF0EE0FFF1FDA
:1065F000BB1F661F771F881F91505040A9F79E3F11
:10660000510570F05CCFA6CF5F3FECF3983EDCF312
:10661000869577956795B795F795E7959F5FC1F74D
:10662000FE2B880F911D9695879597F90895FA018D
:10663000EE0FFF1F30962105310599F161157105A7
:1066400061F48038BFE39B0749F168949038810575
:1066500061F08038BFEF9B0741F0992342F5FF3F7F
:10666000E1053105210511F1E8940894E795D90178
:10667000AA2329F4AB2FBE2FF85FD0F310C0FF5F21
:1066800070F4A695E0F7F73950F019F0FF3A38F4B6
:106690009F779F930CD00F9007FC905808953EF081
:1066A00014CF60E070E080E89FE308954FE79F77A4
:1066B0005F934F933F932F939ED02F913F914F9194
:1066C0005F9152DF05C019F40EF0F9CE42CFFDCE36
:1066D00026DFC8F39638C0F707F80F92E8942BE34B
:1066E0003AEA48EB5FE74EDF0F920F920F924DB7F9
:1066F0005EB70F92C0D0ECEAF0E016D04F915F91F8
:10670000EF91FF91E595EE1FFF1F49F0FE57E068FE
:106710004427EE0F441FFA95E1F74195550B32D00F
:106720000F9007FE26C00895DF93CF931F930F931A
:10673000FF92EF92DF927B018C01689405C0DA2E04
:10674000EF011EDFFE01E894A59125913591459159
:106750005591AEF3EF0162DDFE019701A801DA94D5
:1067600079F7DF90EF90FF900F911F91CF91DF911C
:1067700008959B01AC0160E070E080E89FE3A5CD47
:106780009ECEACC0CCDEE8F39923D9F3940F511D13
:10679000BBF39150504094F059F0882332F0660FCB
:1067A000771F881F91505040C1F79E3F510544F715
:1067B000880F911D9695879597F908955F3FACF0E6
:1067C000983E9CF0BB27869577956795B79508F41A
:1067D000B1609395C1F7BB0F58F711F460FFE8CF94
:1067E0006F5F7F4F8F4F9F4FE3CFB4CE0EF076C0D9
:1067F0006CCE689464CE93DEC8F39923D1F3C6F3CC
:10680000DF93CF931F930F93FF92C92FDD27882328
:106810002AF02197660F771F881FDAF720E030E013
:1068200040E85FEB9FE3883920F0803E30F021960E
:106830008F77E3DCE4EDF0E003C0DFDCE1E0F1E0E2
:1068400073DF8B01BE01EC01FB2E6F57710975954B
:10685000771F880B990BD4DD28E132E741E35FE332
:106860008FDEAF2D9801AE01FF900F911F91CF9158
:10687000DF91D4DC3BCEFA01DC01AA0FBB1F9B01E8
:10688000AC01BF5728F422273327442750781FC074
:10689000B75188F4AB2F0024469537952795011CF6
:1068A000A395D2F3002069F0220F331F441FB39544
:1068B000DAF30DD0A1CC61307105A0E88A07B946A2
:1068C00030F49B01AC0166277727882790783096B3
:1068D00021F0208331834283538308959F3F31F019
:1068E000915020F4879577956795B795880F911DFE
:1068F0009695879597F90895991B79E004C0991F9B
:10690000961708F0961B881F7A95C9F78095089509
:10691000AA1BBB1B51E107C0AA1FBB1FA617B707C5
:1069200010F0A61BB70B881F991F5A95A9F78095E1
:106930009095BC01CD01089597FB072E16F40094A5
:1069400007D077FD09D00E94883407FC05D03EF4BB
:10695000909581959F4F0895709561957F4F08950B
:10696000F999FECF92BD81BDF89A992780B5089517
:10697000A8E1B0E042E050E00C94D334262FF9991E
:10698000FECF1FBA92BD81BD20BD0FB6F894FA9A12
:10699000F99A0FBE019608950E94BE34272F0C94D9
:1069A000BF34DC01CB01FC01F999FECF06C0F2BD7A
:1069B000E1BDF89A319600B40D9241505040B8F7BD
:0669C0000895F894FFCFDA
:1069C60055D0A446000016440000000000004842CE
:1069D60061978A460000C843000000000000484254
:1069E60055D024460000C84300000000000048427D
:1069F60000005C460000C84300000000000048425A
:106A060061978A4600007A4455D0A4460000C843E0
:106A1600000000000000484200005C460000C84339
:106A2600000000000000484255D0244600001644ED
:106A36000507000C05854000000106400000010026
:106A4600B91049112511F010BC1001E902280814EB
:106A56000A321E4200450025002600430061006000
:106A660000200037006400650066006700440046A9
:106A7600002400470000000200040005000700098A
:106A8600000B000C000E001000110013001500177B
:106A96000018001A001C001D001F002100230024FE
:106AA600002600280029002B002D002F0030003280
:106AB6000034003500370039003B006E048704A01F
:106AC60004B904E10594055E053E053F4D362002F6
:106AD60003020000010001010101010001010102A0
:086AE60003040506070809007E
:00000001FF

@ -9,92 +9,92 @@
// Alt gr // Alt gr
// normal characters // normal characters
#define DE_Z KC_Y #define DE_OSX_Z KC_Y
#define DE_Y KC_Z #define DE_OSX_Y KC_Z
#define DE_A KC_A #define DE_OSX_A KC_A
#define DE_B KC_B #define DE_OSX_B KC_B
#define DE_C KC_C #define DE_OSX_C KC_C
#define DE_D KC_D #define DE_OSX_D KC_D
#define DE_E KC_E #define DE_OSX_E KC_E
#define DE_F KC_F #define DE_OSX_F KC_F
#define DE_G KC_G #define DE_OSX_G KC_G
#define DE_H KC_H #define DE_OSX_H KC_H
#define DE_I KC_I #define DE_OSX_I KC_I
#define DE_J KC_J #define DE_OSX_J KC_J
#define DE_K KC_K #define DE_OSX_K KC_K
#define DE_L KC_L #define DE_OSX_L KC_L
#define DE_M KC_M #define DE_OSX_M KC_M
#define DE_N KC_N #define DE_OSX_N KC_N
#define DE_O KC_O #define DE_OSX_O KC_O
#define DE_P KC_P #define DE_OSX_P KC_P
#define DE_Q KC_Q #define DE_OSX_Q KC_Q
#define DE_R KC_R #define DE_OSX_R KC_R
#define DE_S KC_S #define DE_OSX_S KC_S
#define DE_T KC_T #define DE_OSX_T KC_T
#define DE_U KC_U #define DE_OSX_U KC_U
#define DE_V KC_V #define DE_OSX_V KC_V
#define DE_W KC_W #define DE_OSX_W KC_W
#define DE_X KC_X #define DE_OSX_X KC_X
#define DE_0 KC_0 #define DE_OSX_0 KC_0
#define DE_1 KC_1 #define DE_OSX_1 KC_1
#define DE_2 KC_2 #define DE_OSX_2 KC_2
#define DE_3 KC_3 #define DE_OSX_3 KC_3
#define DE_4 KC_4 #define DE_OSX_4 KC_4
#define DE_5 KC_5 #define DE_OSX_5 KC_5
#define DE_6 KC_6 #define DE_OSX_6 KC_6
#define DE_7 KC_7 #define DE_OSX_7 KC_7
#define DE_8 KC_8 #define DE_OSX_8 KC_8
#define DE_9 KC_9 #define DE_OSX_9 KC_9
#define DE_DOT KC_DOT #define DE_OSX_DOT KC_DOT
#define DE_COMM KC_COMM #define DE_OSX_COMM KC_COMM
#define DE_SS KC_MINS #define DE_OSX_SS KC_MINS
#define DE_AE KC_QUOT #define DE_OSX_AE KC_QUOT
#define DE_UE KC_LBRC #define DE_OSX_UE KC_LBRC
#define DE_OE KC_SCLN #define DE_OSX_OE KC_SCLN
#define DE_CIRC KC_NUBS // accent circumflex ^ and ring ° #define DE_OSX_CIRC KC_NUBS // accent circumflex ^ and ring °
#define DE_ACUT KC_EQL // accent acute ´ and grave ` #define DE_OSX_ACUT KC_EQL // accent acute ´ and grave `
#define DE_PLUS KC_RBRC // + and * and ~ #define DE_OSX_PLUS KC_RBRC // + and * and ~
#define DE_HASH KC_BSLS // # and ' #define DE_OSX_HASH KC_BSLS // # and '
#define DE_LESS KC_GRV // < and > and | #define DE_OSX_LESS KC_GRV // < and > and |
#define DE_MINS KC_SLSH // - and _ #define DE_OSX_MINS KC_SLSH // - and _
// shifted characters // shifted characters
#define DE_RING LSFT(DE_CIRC) // ° #define DE_OSX_RING LSFT(DE_OSX_CIRC) // °
#define DE_EXLM LSFT(KC_1) // ! #define DE_OSX_EXLM LSFT(KC_1) // !
#define DE_DQOT LSFT(KC_2) // " #define DE_OSX_DQOT LSFT(KC_2) // "
#define DE_PARA LSFT(KC_3) // § #define DE_OSX_PARA LSFT(KC_3) // §
#define DE_DLR LSFT(KC_4) // $ #define DE_OSX_DLR LSFT(KC_4) // $
#define DE_PERC LSFT(KC_5) // % #define DE_OSX_PERC LSFT(KC_5) // %
#define DE_AMPR LSFT(KC_6) // & #define DE_OSX_AMPR LSFT(KC_6) // &
#define DE_SLSH LSFT(KC_7) // / #define DE_OSX_SLSH LSFT(KC_7) // /
#define DE_LPRN LSFT(KC_8) // ( #define DE_OSX_LPRN LSFT(KC_8) // (
#define DE_RPRN LSFT(KC_9) // ) #define DE_OSX_RPRN LSFT(KC_9) // )
#define DE_EQL LSFT(KC_0) // = #define DE_OSX_EQL LSFT(KC_0) // =
#define DE_QST LSFT(DE_SS) // ? #define DE_OSX_QST LSFT(DE_OSX_SS) // ?
#define DE_GRV LSFT(DE_ACUT) // ` #define DE_OSX_GRV LSFT(DE_OSX_ACUT) // `
#define DE_ASTR LSFT(DE_PLUS) // * #define DE_OSX_ASTR LSFT(DE_OSX_PLUS) // *
#define DE_QUOT LSFT(DE_HASH) // ' #define DE_OSX_QUOT LSFT(DE_OSX_HASH) // '
#define DE_MORE LSFT(DE_LESS) // > #define DE_OSX_MORE LSFT(DE_OSX_LESS) // >
#define DE_COLN LSFT(KC_DOT) // : #define DE_OSX_COLN LSFT(KC_DOT) // :
#define DE_SCLN LSFT(KC_COMM) // ; #define DE_OSX_SCLN LSFT(KC_COMM) // ;
#define DE_UNDS LSFT(DE_MINS) // _ #define DE_OSX_UNDS LSFT(DE_OSX_MINS) // _
// Alt-ed characters // Alt-ed characters
#define DE_SQ2 LALT(KC_2) // ² #define DE_OSX_SQ2 LALT(KC_2) // ²
#define DE_SQ3 LALT(KC_3) // ³ #define DE_OSX_SQ3 LALT(KC_3) // ³
#define DE_LCBR LALT(KC_8) // { #define DE_OSX_LCBR LALT(KC_8) // {
#define DE_LBRC LALT(KC_5) // [ #define DE_OSX_LBRC LALT(KC_5) // [
#define DE_RBRC LALT(KC_6) // ] #define DE_OSX_RBRC LALT(KC_6) // ]
#define DE_RCBR LALT(KC_9) // } #define DE_OSX_RCBR LALT(KC_9) // }
#define DE_BSLS LALT(LSFT(KC_7)) // backslash #define DE_OSX_BSLS LALT(LSFT(KC_7)) // backslash
#define DE_AT LALT(DE_L) // @ #define DE_OSX_AT LALT(DE_OSX_L) // @
#define DE_EURO LALT(KC_E) // € #define DE_OSX_EURO LALT(KC_E) // €
#define DE_TILD LALT(DE_N) // ~ #define DE_OSX_TILD LALT(DE_OSX_N) // ~
#define DE_PIPE LALT(DE_7) // | #define DE_OSX_PIPE LALT(DE_OSX_7) // |
#endif #endif

Loading…
Cancel
Save