migrate keymaps to external userspace
Some checks are pending
Build QMK firmware / QMK Userspace Build (push) Waiting to run
Build QMK firmware / QMK Userspace Publish (push) Blocked by required conditions

This commit is contained in:
♥ Minnie ♥ 2025-05-13 18:29:00 +08:00
parent 41ee8332d1
commit 1aae18be19
Signed by: jasmine
GPG key ID: 8563E358D4E8040E
15 changed files with 3692 additions and 52 deletions

View file

@ -1,59 +1,37 @@
# QMK Userspace
# QMK Keymaps
This is a template repository which allows for an external set of QMK keymaps to be defined and compiled. This is useful for users who want to maintain their own keymaps without having to fork the main QMK repository.
![ferris-sweep](./assets/img/keyboards/ferris-sweep.jpg)
## Howto configure your build targets
## Features
* **Autocorrect**
* **Case Modes**
* **Combos**
* **Home Row Mods**
* **Leader Key**
* **Repeat / Magic Keys**
1. Run the normal `qmk setup` procedure if you haven't already done so -- see [QMK Docs](https://docs.qmk.fm/#/newbs) for details.
1. Fork this repository
1. Clone your fork to your local machine
1. Enable userspace in QMK config using `qmk config user.overlay_dir="$(realpath qmk_userspace)"`
1. Add a new keymap for your board using `qmk new-keymap`
* This will create a new keymap in the `keyboards` directory, in the same location that would normally be used in the main QMK repository. For example, if you wanted to add a keymap for the Planck, it will be created in `keyboards/planck/keymaps/<your keymap name>`
* You can also create a new keymap using `qmk new-keymap -kb <your_keyboard> -km <your_keymap>`
* Alternatively, add your keymap manually by placing it in the location specified above.
* `layouts/<layout name>/<your keymap name>/keymap.*` is also supported if you prefer the layout system
1. Add your keymap(s) to the build by running `qmk userspace-add -kb <your_keyboard> -km <your_keymap>`
* This will automatically update your `qmk.json` file
* Corresponding `qmk userspace-remove -kb <your_keyboard> -km <your_keymap>` will delete it
* Listing the build targets can be done with `qmk userspace-list`
1. Commit your changes
## My Keymap
![ferris-keymap](./assets/img/keymaps/ferris-sajenim.svg)
## Howto build with GitHub
See [**magic sturdy**](https://github.com/Ikcelaks/keyboard_layouts/blob/main/magic_sturdy/magic_sturdy.md) for usage of the magic key.
1. In the GitHub Actions tab, enable workflows
1. Push your changes above to your forked GitHub repository
1. Look at the GitHub Actions for a new actions run
1. Wait for the actions run to complete
1. Inspect the Releases tab on your repository for the latest firmware build
## Installation
Follow the [getting started](https://docs.qmk.fm/#/newbs_getting_started) docs to install [QMK Firmware](https://docs.qmk.fm/#/)
## Howto build locally
```sh
# Clone the keymaps
git clone https://git.sajenim.dev/jasmine/qmk_userspace.git
# Setup external userspace
qmk config user.overlay_dir="$(realpath qmk_userspace)"
1. Run the normal `qmk setup` procedure if you haven't already done so -- see [QMK Docs](https://docs.qmk.fm/#/newbs) for details.
1. Fork this repository
1. Clone your fork to your local machine
1. `cd` into this repository's clone directory
1. Set global userspace path: `qmk config user.overlay_dir="$(realpath .)"` -- you MUST be located in the cloned userspace location for this to work correctly
* This will be automatically detected if you've `cd`ed into your userspace repository, but the above makes your userspace available regardless of your shell location.
1. Compile normally: `qmk compile -kb your_keyboard -km your_keymap` or `make your_keyboard:your_keymap`
Alternatively, if you configured your build targets above, you can use `qmk userspace-compile` to build all of your userspace targets at once.
## Extra info
If you wish to point GitHub actions to a different repository, a different branch, or even a different keymap name, you can modify `.github/workflows/build_binaries.yml` to suit your needs.
To override the `build` job, you can change the following parameters to use a different QMK repository or branch:
```
with:
qmk_repo: qmk/qmk_firmware
qmk_ref: master
# Compile the firmware
qmk compile -kb <keyboard> -km <keymap>
```
If you wish to manually manage `qmk_firmware` using git within the userspace repository, you can add `qmk_firmware` as a submodule in the userspace directory instead. GitHub Actions will automatically use the submodule at the pinned revision if it exists, otherwise it will use the default latest revision of `qmk_firmware` from the main repository.
This can also be used to control which fork is used, though only upstream `qmk_firmware` will have support for external userspace until other manufacturers update their forks.
1. (First time only) `git submodule add https://github.com/qmk/qmk_firmware.git`
1. (To update) `git submodule update --init --recursive`
1. Commit your changes to your userspace repository
## References
* [Precondition](https://precondition.github.io/home-row-mods)
* [Pascal Getreuer](https://getreuer.info/posts/keyboards/index.html)
* [Ikcelaks](https://github.com/Ikcelaks/keyboard_layouts/tree/main)
* [Andrew Rae](https://github.com/andrewjrae/kyria-keymap)
* [Jonas Hietala](https://www.jonashietala.se/series/t-34/)

Binary file not shown.

After

Width:  |  Height:  |  Size: 641 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 646 KiB

View file

@ -0,0 +1,779 @@
<svg width="900" height="1379" viewBox="0 0 900 1379" class="keymap" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<style>/* inherit to force styles through use tags */
svg path {
fill: inherit;
}
/* font and background color specifications */
svg.keymap {
font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;
font-size: 14px;
font-kerning: normal;
text-rendering: optimizeLegibility;
fill: #24292e;
}
/* default key styling */
rect.key {
fill: #f6f8fa;
}
rect.key, rect.combo {
stroke: #c9cccf;
stroke-width: 1;
}
/* default key side styling, only used is draw_key_sides is set */
rect.side {
filter: brightness(90%);
}
/* color accent for combo boxes */
rect.combo, rect.combo-separate {
fill: #cdf;
}
/* color accent for held keys */
rect.held, rect.combo.held {
fill: #fdd;
}
/* color accent for ghost (optional) keys */
rect.ghost, rect.combo.ghost {
stroke-dasharray: 4, 4;
stroke-width: 2;
}
text {
text-anchor: middle;
dominant-baseline: middle;
}
/* styling for layer labels */
text.label {
font-weight: bold;
text-anchor: start;
stroke: white;
stroke-width: 4;
paint-order: stroke;
}
/* styling for optional footer */
text.footer {
text-anchor: end;
dominant-baseline: auto;
stroke: white;
stroke-width: 4;
paint-order: stroke;
}
/* styling for combo tap, and key non-tap label text */
text.combo, text.hold, text.shifted, text.left, text.right {
font-size: 11px;
}
text.hold {
text-anchor: middle;
dominant-baseline: auto;
}
text.shifted {
text-anchor: middle;
dominant-baseline: hanging;
}
text.left {
text-anchor: start;
}
text.right {
text-anchor: end;
}
text.layer-activator {
text-decoration: underline;
}
/* styling for hold/shifted label text in combo box */
text.combo.hold, text.combo.shifted, text.combo.left, text.combo.right {
font-size: 8px;
}
/* lighter symbol for transparent keys */
text.trans {
fill: #7b7e81;
}
/* styling for combo dendrons */
path.combo {
stroke-width: 1;
stroke: gray;
fill: none;
}
/* Start Tabler Icons Cleanup */
/* cannot use height/width with glyphs */
.icon-tabler > path {
fill: inherit;
stroke: inherit;
stroke-width: 2;
}
/* hide tabler's default box */
.icon-tabler > path[stroke="none"][fill="none"] {
visibility: hidden;
}
/* End Tabler Icons Cleanup */
@media (prefers-color-scheme: dark) {
svg.keymap { fill: #d1d6db; }
rect.key { fill: #3f4750; }
rect.key, rect.combo { stroke: #60666c; }
rect.combo, rect.combo-separate { fill: #1f3d7a; }
rect.held, rect.combo.held { fill: #854747; }
text.label, text.footer { stroke: black; }
text.trans { fill: #7e8184; }
path.combo { stroke: #7f7f7f; }
}</style>
<g transform="translate(30, 0)" class="layer-QWERTY">
<text x="0" y="28" class="label" id="QWERTY">QWERTY:</text>
<g transform="translate(0, 56)">
<g transform="translate(28, 49)" class="key keypos-0">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Tab</text>
</g>
<g transform="translate(84, 49)" class="key keypos-1">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Q</text>
</g>
<g transform="translate(140, 35)" class="key keypos-2">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">W</text>
</g>
<g transform="translate(196, 28)" class="key keypos-3">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">E</text>
</g>
<g transform="translate(252, 35)" class="key keypos-4">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">R</text>
</g>
<g transform="translate(308, 42)" class="key keypos-5">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">T</text>
</g>
<g transform="translate(532, 42)" class="key keypos-6">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Y</text>
</g>
<g transform="translate(588, 35)" class="key keypos-7">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">U</text>
</g>
<g transform="translate(644, 28)" class="key keypos-8">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">I</text>
</g>
<g transform="translate(700, 35)" class="key keypos-9">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">O</text>
</g>
<g transform="translate(756, 49)" class="key keypos-10">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">P</text>
</g>
<g transform="translate(812, 49)" class="key keypos-11">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Bspace</text>
</g>
<g transform="translate(28, 105)" class="key keypos-12">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">LCtrl</text>
</g>
<g transform="translate(84, 105)" class="key keypos-13">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">A</text>
</g>
<g transform="translate(140, 91)" class="key keypos-14">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">S</text>
</g>
<g transform="translate(196, 84)" class="key keypos-15">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">D</text>
</g>
<g transform="translate(252, 91)" class="key keypos-16">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">F</text>
</g>
<g transform="translate(308, 98)" class="key keypos-17">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">G</text>
</g>
<g transform="translate(532, 98)" class="key keypos-18">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">H</text>
</g>
<g transform="translate(588, 91)" class="key keypos-19">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">J</text>
</g>
<g transform="translate(644, 84)" class="key keypos-20">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">K</text>
</g>
<g transform="translate(700, 91)" class="key keypos-21">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">L</text>
</g>
<g transform="translate(756, 105)" class="key keypos-22">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">;</text>
</g>
<g transform="translate(812, 105)" class="key keypos-23">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">&#x27;</text>
</g>
<g transform="translate(28, 161)" class="key keypos-24">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">LShft</text>
</g>
<g transform="translate(84, 161)" class="key keypos-25">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Z</text>
</g>
<g transform="translate(140, 147)" class="key keypos-26">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">X</text>
</g>
<g transform="translate(196, 140)" class="key keypos-27">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">C</text>
</g>
<g transform="translate(252, 147)" class="key keypos-28">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">V</text>
</g>
<g transform="translate(308, 154)" class="key keypos-29">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">B</text>
</g>
<g transform="translate(532, 154)" class="key keypos-30">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">N</text>
</g>
<g transform="translate(588, 147)" class="key keypos-31">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">M</text>
</g>
<g transform="translate(644, 140)" class="key keypos-32">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">,</text>
</g>
<g transform="translate(700, 147)" class="key keypos-33">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">.</text>
</g>
<g transform="translate(756, 161)" class="key keypos-34">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">/</text>
</g>
<g transform="translate(812, 161)" class="key keypos-35">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Esc</text>
</g>
<g transform="translate(224, 205)" class="key keypos-36">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">LGui</text>
</g>
<g transform="translate(286, 213) rotate(15.0)" class="key keypos-37">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<a href="#FN1">
<text x="0" y="0" class="key tap layer-activator">FN1</text>
</a></g>
<g transform="translate(351, 224) rotate(30.0)" class="key keypos-38">
<rect rx="6" ry="6" x="-26" y="-40" width="52" height="80" class="key"/>
<text x="0" y="0" class="key tap">Space</text>
</g>
<g transform="translate(489, 224) rotate(-30.0)" class="key keypos-39">
<rect rx="6" ry="6" x="-26" y="-40" width="52" height="80" class="key"/>
<text x="0" y="0" class="key tap">Enter</text>
</g>
<g transform="translate(554, 213) rotate(-15.0)" class="key keypos-40">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<a href="#FN2">
<text x="0" y="0" class="key tap layer-activator">FN2</text>
</a></g>
<g transform="translate(616, 205)" class="key keypos-41">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">RAlt</text>
</g>
</g>
</g>
<g transform="translate(30, 331)" class="layer-FN1">
<text x="0" y="28" class="label" id="FN1">FN1:</text>
<g transform="translate(0, 56)">
<g transform="translate(28, 49)" class="key keypos-0">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Tab</text>
</g>
<g transform="translate(84, 49)" class="key keypos-1">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">1</text>
</g>
<g transform="translate(140, 35)" class="key keypos-2">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">2</text>
</g>
<g transform="translate(196, 28)" class="key keypos-3">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">3</text>
</g>
<g transform="translate(252, 35)" class="key keypos-4">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">4</text>
</g>
<g transform="translate(308, 42)" class="key keypos-5">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">5</text>
</g>
<g transform="translate(532, 42)" class="key keypos-6">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">6</text>
</g>
<g transform="translate(588, 35)" class="key keypos-7">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">7</text>
</g>
<g transform="translate(644, 28)" class="key keypos-8">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">8</text>
</g>
<g transform="translate(700, 35)" class="key keypos-9">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">9</text>
</g>
<g transform="translate(756, 49)" class="key keypos-10">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">0</text>
</g>
<g transform="translate(812, 49)" class="key keypos-11">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Bspace</text>
</g>
<g transform="translate(28, 105)" class="key keypos-12">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">LCtrl</text>
</g>
<g transform="translate(84, 105)" class="key keypos-13">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(140, 91)" class="key keypos-14">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(196, 84)" class="key keypos-15">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(252, 91)" class="key keypos-16">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(308, 98)" class="key keypos-17">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(532, 98)" class="key keypos-18">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Left</text>
</g>
<g transform="translate(588, 91)" class="key keypos-19">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Down</text>
</g>
<g transform="translate(644, 84)" class="key keypos-20">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Up</text>
</g>
<g transform="translate(700, 91)" class="key keypos-21">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Right</text>
</g>
<g transform="translate(756, 105)" class="key keypos-22">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(812, 105)" class="key keypos-23">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(28, 161)" class="key keypos-24">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">LShft</text>
</g>
<g transform="translate(84, 161)" class="key keypos-25">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(140, 147)" class="key keypos-26">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(196, 140)" class="key keypos-27">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(252, 147)" class="key keypos-28">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(308, 154)" class="key keypos-29">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(532, 154)" class="key keypos-30">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(588, 147)" class="key keypos-31">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(644, 140)" class="key keypos-32">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(700, 147)" class="key keypos-33">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(756, 161)" class="key keypos-34">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(812, 161)" class="key keypos-35">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(224, 205)" class="key keypos-36">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">LGui</text>
</g>
<g transform="translate(286, 213) rotate(15.0)" class="key held keypos-37">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key held"/>
</g>
<g transform="translate(351, 224) rotate(30.0)" class="key keypos-38">
<rect rx="6" ry="6" x="-26" y="-40" width="52" height="80" class="key"/>
<text x="0" y="0" class="key tap">Space</text>
</g>
<g transform="translate(489, 224) rotate(-30.0)" class="key keypos-39">
<rect rx="6" ry="6" x="-26" y="-40" width="52" height="80" class="key"/>
<text x="0" y="0" class="key tap">Enter</text>
</g>
<g transform="translate(554, 213) rotate(-15.0)" class="key keypos-40">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<a href="#FN3">
<text x="0" y="0" class="key tap layer-activator">FN3</text>
</a></g>
<g transform="translate(616, 205)" class="key keypos-41">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">RAlt</text>
</g>
</g>
</g>
<g transform="translate(30, 661)" class="layer-FN2">
<text x="0" y="28" class="label" id="FN2">FN2:</text>
<g transform="translate(0, 56)">
<g transform="translate(28, 49)" class="key keypos-0">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Tab</text>
</g>
<g transform="translate(84, 49)" class="key keypos-1">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">!</text>
</g>
<g transform="translate(140, 35)" class="key keypos-2">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">@</text>
</g>
<g transform="translate(196, 28)" class="key keypos-3">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">#</text>
</g>
<g transform="translate(252, 35)" class="key keypos-4">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">$</text>
</g>
<g transform="translate(308, 42)" class="key keypos-5">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">%</text>
</g>
<g transform="translate(532, 42)" class="key keypos-6">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">^</text>
</g>
<g transform="translate(588, 35)" class="key keypos-7">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">&amp;</text>
</g>
<g transform="translate(644, 28)" class="key keypos-8">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">*</text>
</g>
<g transform="translate(700, 35)" class="key keypos-9">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">(</text>
</g>
<g transform="translate(756, 49)" class="key keypos-10">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">)</text>
</g>
<g transform="translate(812, 49)" class="key keypos-11">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Bspace</text>
</g>
<g transform="translate(28, 105)" class="key keypos-12">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">LCtrl</text>
</g>
<g transform="translate(84, 105)" class="key keypos-13">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(140, 91)" class="key keypos-14">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(196, 84)" class="key keypos-15">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(252, 91)" class="key keypos-16">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(308, 98)" class="key keypos-17">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(532, 98)" class="key keypos-18">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">-</text>
</g>
<g transform="translate(588, 91)" class="key keypos-19">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">=</text>
</g>
<g transform="translate(644, 84)" class="key keypos-20">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">[</text>
</g>
<g transform="translate(700, 91)" class="key keypos-21">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">]</text>
</g>
<g transform="translate(756, 105)" class="key keypos-22">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">\</text>
</g>
<g transform="translate(812, 105)" class="key keypos-23">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">`</text>
</g>
<g transform="translate(28, 161)" class="key keypos-24">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">LShft</text>
</g>
<g transform="translate(84, 161)" class="key keypos-25">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(140, 147)" class="key keypos-26">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(196, 140)" class="key keypos-27">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(252, 147)" class="key keypos-28">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(308, 154)" class="key keypos-29">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(532, 154)" class="key keypos-30">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">_</text>
</g>
<g transform="translate(588, 147)" class="key keypos-31">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">+</text>
</g>
<g transform="translate(644, 140)" class="key keypos-32">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">{</text>
</g>
<g transform="translate(700, 147)" class="key keypos-33">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">}</text>
</g>
<g transform="translate(756, 161)" class="key keypos-34">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">|</text>
</g>
<g transform="translate(812, 161)" class="key keypos-35">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">~</text>
</g>
<g transform="translate(224, 205)" class="key keypos-36">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">LGui</text>
</g>
<g transform="translate(286, 213) rotate(15.0)" class="key keypos-37">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<a href="#FN3">
<text x="0" y="0" class="key tap layer-activator">FN3</text>
</a></g>
<g transform="translate(351, 224) rotate(30.0)" class="key keypos-38">
<rect rx="6" ry="6" x="-26" y="-40" width="52" height="80" class="key"/>
<text x="0" y="0" class="key tap">Space</text>
</g>
<g transform="translate(489, 224) rotate(-30.0)" class="key keypos-39">
<rect rx="6" ry="6" x="-26" y="-40" width="52" height="80" class="key"/>
<text x="0" y="0" class="key tap">Enter</text>
</g>
<g transform="translate(554, 213) rotate(-15.0)" class="key held keypos-40">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key held"/>
</g>
<g transform="translate(616, 205)" class="key keypos-41">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">RAlt</text>
</g>
</g>
</g>
<g transform="translate(30, 992)" class="layer-FN3">
<text x="0" y="28" class="label" id="FN3">FN3:</text>
<g transform="translate(0, 56)">
<g transform="translate(28, 49)" class="key keypos-0">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Boot</text>
</g>
<g transform="translate(84, 49)" class="key keypos-1">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(140, 35)" class="key keypos-2">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(196, 28)" class="key keypos-3">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(252, 35)" class="key keypos-4">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(308, 42)" class="key keypos-5">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(532, 42)" class="key keypos-6">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(588, 35)" class="key keypos-7">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(644, 28)" class="key keypos-8">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(700, 35)" class="key keypos-9">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(756, 49)" class="key keypos-10">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(812, 49)" class="key keypos-11">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(28, 105)" class="key keypos-12">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">RGB</tspan><tspan x="0" dy="1.2em">Toggle</tspan>
</text>
</g>
<g transform="translate(84, 105)" class="key keypos-13">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">HUE+</text>
</g>
<g transform="translate(140, 91)" class="key keypos-14">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">SAT+</text>
</g>
<g transform="translate(196, 84)" class="key keypos-15">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">VAL+</text>
</g>
<g transform="translate(252, 91)" class="key keypos-16">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(308, 98)" class="key keypos-17">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(532, 98)" class="key keypos-18">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(588, 91)" class="key keypos-19">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(644, 84)" class="key keypos-20">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(700, 91)" class="key keypos-21">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(756, 105)" class="key keypos-22">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(812, 105)" class="key keypos-23">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(28, 161)" class="key keypos-24">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">RGB</tspan><tspan x="0" dy="1.2em">Next</tspan>
</text>
</g>
<g transform="translate(84, 161)" class="key keypos-25">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">HUE-</text>
</g>
<g transform="translate(140, 147)" class="key keypos-26">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">SAT-</text>
</g>
<g transform="translate(196, 140)" class="key keypos-27">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">VAL-</text>
</g>
<g transform="translate(252, 147)" class="key keypos-28">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(308, 154)" class="key keypos-29">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(532, 154)" class="key keypos-30">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(588, 147)" class="key keypos-31">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(644, 140)" class="key keypos-32">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(700, 147)" class="key keypos-33">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(756, 161)" class="key keypos-34">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(812, 161)" class="key keypos-35">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(224, 205)" class="key keypos-36">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">LGui</text>
</g>
<g transform="translate(286, 213) rotate(15.0)" class="key held keypos-37">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key held"/>
</g>
<g transform="translate(351, 224) rotate(30.0)" class="key keypos-38">
<rect rx="6" ry="6" x="-26" y="-40" width="52" height="80" class="key"/>
<text x="0" y="0" class="key tap">Space</text>
</g>
<g transform="translate(489, 224) rotate(-30.0)" class="key keypos-39">
<rect rx="6" ry="6" x="-26" y="-40" width="52" height="80" class="key"/>
<text x="0" y="0" class="key tap">Enter</text>
</g>
<g transform="translate(554, 213) rotate(-15.0)" class="key held keypos-40">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key held"/>
</g>
<g transform="translate(616, 205)" class="key keypos-41">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">RAlt</text>
</g>
</g>
</g>
<text x="870.0" y="1351.0" class="footer">Created with <a href="https://github.com/caksoylar/keymap-drawer">keymap-drawer</a></text></svg>

After

Width:  |  Height:  |  Size: 31 KiB

View file

@ -0,0 +1,813 @@
<svg width="732" height="1411" viewBox="0 0 732 1411" class="keymap" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<style>/* inherit to force styles through use tags */
svg path {
fill: inherit;
}
/* font and background color specifications */
svg.keymap {
font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;
font-size: 14px;
font-kerning: normal;
text-rendering: optimizeLegibility;
fill: #24292e;
}
/* default key styling */
rect.key {
fill: #f6f8fa;
}
rect.key, rect.combo {
stroke: #c9cccf;
stroke-width: 1;
}
/* default key side styling, only used is draw_key_sides is set */
rect.side {
filter: brightness(90%);
}
/* color accent for combo boxes */
rect.combo, rect.combo-separate {
fill: #cdf;
}
/* color accent for held keys */
rect.held, rect.combo.held {
fill: #fdd;
}
/* color accent for ghost (optional) keys */
rect.ghost, rect.combo.ghost {
stroke-dasharray: 4, 4;
stroke-width: 2;
}
text {
text-anchor: middle;
dominant-baseline: middle;
}
/* styling for layer labels */
text.label {
font-weight: bold;
text-anchor: start;
stroke: white;
stroke-width: 4;
paint-order: stroke;
}
/* styling for optional footer */
text.footer {
text-anchor: end;
dominant-baseline: auto;
stroke: white;
stroke-width: 4;
paint-order: stroke;
}
/* styling for combo tap, and key non-tap label text */
text.combo, text.hold, text.shifted, text.left, text.right {
font-size: 11px;
}
text.hold {
text-anchor: middle;
dominant-baseline: auto;
}
text.shifted {
text-anchor: middle;
dominant-baseline: hanging;
}
text.left {
text-anchor: start;
}
text.right {
text-anchor: end;
}
text.layer-activator {
text-decoration: underline;
}
/* styling for hold/shifted label text in combo box */
text.combo.hold, text.combo.shifted, text.combo.left, text.combo.right {
font-size: 8px;
}
/* lighter symbol for transparent keys */
text.trans {
fill: #7b7e81;
}
/* styling for combo dendrons */
path.combo {
stroke-width: 1;
stroke: gray;
fill: none;
}
/* Start Tabler Icons Cleanup */
/* cannot use height/width with glyphs */
.icon-tabler > path {
fill: inherit;
stroke: inherit;
stroke-width: 2;
}
/* hide tabler's default box */
.icon-tabler > path[stroke="none"][fill="none"] {
visibility: hidden;
}
/* End Tabler Icons Cleanup */
@media (prefers-color-scheme: dark) {
svg.keymap { fill: #d1d6db; }
rect.key { fill: #3f4750; }
rect.key, rect.combo { stroke: #60666c; }
rect.combo, rect.combo-separate { fill: #1f3d7a; }
rect.held, rect.combo.held { fill: #854747; }
text.label, text.footer { stroke: black; }
text.trans { fill: #7e8184; }
path.combo { stroke: #7f7f7f; }
}</style>
<g transform="translate(30, 0)" class="layer-CANARY">
<text x="0" y="28" class="label" id="CANARY">CANARY:</text>
<g transform="translate(0, 56)">
<g transform="translate(28, 81)" class="key keypos-0">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">w</text>
</g>
<g transform="translate(84, 46)" class="key keypos-1">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">l</text>
</g>
<g transform="translate(140, 28)" class="key keypos-2">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">y</text>
</g>
<g transform="translate(196, 44)" class="key keypos-3">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">p</text>
</g>
<g transform="translate(252, 52)" class="key keypos-4">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">b</text>
</g>
<g transform="translate(420, 52)" class="key keypos-5">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">z</text>
</g>
<g transform="translate(476, 44)" class="key keypos-6">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">f</text>
</g>
<g transform="translate(532, 28)" class="key keypos-7">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">o</text>
</g>
<g transform="translate(588, 46)" class="key keypos-8">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">u</text>
</g>
<g transform="translate(644, 81)" class="key keypos-9">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">&#x27;</text>
</g>
<g transform="translate(28, 137)" class="key keypos-10">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">c</text>
<text x="0" y="24" class="key hold">Shift</text>
</g>
<g transform="translate(84, 102)" class="key keypos-11">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">r</text>
<text x="0" y="24" class="key hold">Ctrl</text>
</g>
<g transform="translate(140, 84)" class="key keypos-12">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">s</text>
<text x="0" y="24" class="key hold">Alt</text>
</g>
<g transform="translate(196, 100)" class="key keypos-13">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">t</text>
<text x="0" y="24" class="key hold">Gui</text>
</g>
<g transform="translate(252, 108)" class="key keypos-14">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">g</text>
</g>
<g transform="translate(420, 108)" class="key keypos-15">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">m</text>
</g>
<g transform="translate(476, 100)" class="key keypos-16">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">n</text>
<text x="0" y="24" class="key hold">Gui</text>
</g>
<g transform="translate(532, 84)" class="key keypos-17">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">e</text>
<text x="0" y="24" class="key hold">Alt</text>
</g>
<g transform="translate(588, 102)" class="key keypos-18">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">i</text>
<text x="0" y="24" class="key hold">Ctrl</text>
</g>
<g transform="translate(644, 137)" class="key keypos-19">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">a</text>
<text x="0" y="24" class="key hold">Shift</text>
</g>
<g transform="translate(28, 193)" class="key keypos-20">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">q</text>
</g>
<g transform="translate(84, 158)" class="key keypos-21">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">j</text>
</g>
<g transform="translate(140, 140)" class="key keypos-22">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">v</text>
</g>
<g transform="translate(196, 156)" class="key keypos-23">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">d</text>
<text x="0" y="24" class="key hold">Sym</text>
</g>
<g transform="translate(252, 164)" class="key keypos-24">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">k</text>
</g>
<g transform="translate(420, 164)" class="key keypos-25">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">x</text>
</g>
<g transform="translate(476, 156)" class="key keypos-26">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">h</text>
<text x="0" y="24" class="key hold">Sym</text>
</g>
<g transform="translate(532, 140)" class="key keypos-27">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">/</text>
</g>
<g transform="translate(588, 158)" class="key keypos-28">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">,</text>
</g>
<g transform="translate(644, 193)" class="key keypos-29">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">.</text>
</g>
<g transform="translate(221, 221) rotate(15.0)" class="key keypos-30">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Repeat</text>
<text x="0" y="24" class="key hold">Nav</text>
</g>
<g transform="translate(279, 245) rotate(30.0)" class="key keypos-31">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Spc</text>
</g>
<g transform="translate(393, 245) rotate(-30.0)" class="key keypos-32">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Bspc</text>
</g>
<g transform="translate(451, 221) rotate(-15.0)" class="key keypos-33">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Magic</text>
<text x="0" y="24" class="key hold">Num</text>
</g>
<g class="combo combopos-0">
<rect rx="6" ry="6" x="14" y="96" width="28" height="26" class="combo"/>
<text x="28" y="109" class="combo tap">1</text>
</g>
<g class="combo combopos-1">
<rect rx="6" ry="6" x="70" y="61" width="28" height="26" class="combo"/>
<text x="84" y="74" class="combo tap">2</text>
</g>
<g class="combo combopos-2">
<rect rx="6" ry="6" x="126" y="43" width="28" height="26" class="combo"/>
<text x="140" y="56" class="combo tap">3</text>
</g>
<g class="combo combopos-3">
<rect rx="6" ry="6" x="154" y="135" width="28" height="26" class="combo"/>
<text x="168" y="148" class="combo tap">M-a</text>
</g>
<g class="combo combopos-4">
<rect rx="6" ry="6" x="182" y="59" width="28" height="26" class="combo"/>
<text x="196" y="72" class="combo tap">4</text>
</g>
<g class="combo combopos-5">
<rect rx="6" ry="6" x="238" y="67" width="28" height="26" class="combo"/>
<text x="252" y="80" class="combo tap">5</text>
</g>
<g class="combo combopos-6">
<rect rx="6" ry="6" x="406" y="67" width="28" height="26" class="combo"/>
<text x="420" y="80" class="combo tap">6</text>
</g>
<g class="combo combopos-7">
<rect rx="6" ry="6" x="462" y="59" width="28" height="26" class="combo"/>
<text x="476" y="72" class="combo tap">7</text>
</g>
<g class="combo combopos-8">
<rect rx="6" ry="6" x="490" y="135" width="28" height="26" class="combo"/>
<text x="504" y="148" class="combo tap">M1-a</text>
</g>
<g class="combo combopos-9">
<rect rx="6" ry="6" x="518" y="43" width="28" height="26" class="combo"/>
<text x="532" y="56" class="combo tap">8</text>
</g>
<g class="combo combopos-10">
<rect rx="6" ry="6" x="574" y="61" width="28" height="26" class="combo"/>
<text x="588" y="74" class="combo tap">9</text>
</g>
<g class="combo combopos-11">
<rect rx="6" ry="6" x="630" y="96" width="28" height="26" class="combo"/>
<text x="644" y="109" class="combo tap">0</text>
</g>
<g class="combo combopos-12">
<rect rx="6" ry="6" x="98" y="80" width="28" height="26" class="combo"/>
<text x="112" y="93" class="combo tap">Tab</text>
</g>
<g class="combo combopos-13">
<rect rx="6" ry="6" x="154" y="79" width="28" height="26" class="combo"/>
<text x="168" y="92" class="combo tap">C-w</text>
</g>
<g class="combo combopos-14">
<rect rx="6" ry="6" x="490" y="79" width="28" height="26" class="combo"/>
<text x="504" y="92" class="combo tap">Esc</text>
</g>
<g class="combo combopos-15">
<rect rx="6" ry="6" x="546" y="80" width="28" height="26" class="combo"/>
<text x="560" y="93" class="combo tap">Ent</text>
</g>
<g class="combo combopos-16">
<rect rx="6" ry="6" x="98" y="136" width="28" height="26" class="combo"/>
<text x="112" y="149" class="combo tap">:</text>
</g>
<g class="combo combopos-17">
<rect rx="6" ry="6" x="210" y="147" width="28" height="26" class="combo"/>
<text x="224" y="160" class="combo tap">
<tspan x="224" dy="-0.6em">OS</tspan><tspan x="224" dy="1.2em">Shift</tspan>
</text>
</g>
<g class="combo combopos-18">
<rect rx="6" ry="6" x="434" y="147" width="28" height="26" class="combo"/>
<text x="448" y="160" class="combo tap">
<tspan x="448" dy="-0.6em">OS</tspan><tspan x="448" dy="1.2em">Shift</tspan>
</text>
</g>
<g class="combo combopos-19">
<rect rx="6" ry="6" x="546" y="136" width="28" height="26" class="combo"/>
<text x="560" y="149" class="combo tap">\</text>
</g>
</g>
</g>
<g transform="translate(30, 339)" class="layer-NAV">
<text x="0" y="28" class="label" id="NAV">NAV:</text>
<g transform="translate(0, 56)">
<g transform="translate(28, 81)" class="key keypos-0">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(84, 46)" class="key keypos-1">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">Prev</tspan><tspan x="0" dy="1.2em">Track</tspan>
</text>
</g>
<g transform="translate(140, 28)" class="key keypos-2">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">Play</tspan><tspan x="0" dy="1.2em">Pause</tspan>
</text>
</g>
<g transform="translate(196, 44)" class="key keypos-3">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">Next</tspan><tspan x="0" dy="1.2em">Track</tspan>
</text>
</g>
<g transform="translate(252, 52)" class="key keypos-4">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">Vol</tspan><tspan x="0" dy="1.2em">Up</tspan>
</text>
</g>
<g transform="translate(420, 52)" class="key keypos-5">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">Page</tspan><tspan x="0" dy="1.2em">Up</tspan>
</text>
</g>
<g transform="translate(476, 44)" class="key keypos-6">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Home</text>
</g>
<g transform="translate(532, 28)" class="key keypos-7">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Up</text>
</g>
<g transform="translate(588, 46)" class="key keypos-8">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">End</text>
</g>
<g transform="translate(644, 81)" class="key keypos-9">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(28, 137)" class="key keypos-10">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Shift</tspan>
</text>
</g>
<g transform="translate(84, 102)" class="key keypos-11">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Ctrl</tspan>
</text>
</g>
<g transform="translate(140, 84)" class="key keypos-12">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Alt</tspan>
</text>
</g>
<g transform="translate(196, 100)" class="key keypos-13">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Gui</tspan>
</text>
</g>
<g transform="translate(252, 108)" class="key keypos-14">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">Vol</tspan><tspan x="0" dy="1.2em">Down</tspan>
</text>
</g>
<g transform="translate(420, 108)" class="key keypos-15">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">Page</tspan><tspan x="0" dy="1.2em">Down</tspan>
</text>
</g>
<g transform="translate(476, 100)" class="key keypos-16">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Left</text>
</g>
<g transform="translate(532, 84)" class="key keypos-17">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Down</text>
</g>
<g transform="translate(588, 102)" class="key keypos-18">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Right</text>
</g>
<g transform="translate(644, 137)" class="key keypos-19">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">Del</text>
</g>
<g transform="translate(28, 193)" class="key keypos-20">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(84, 158)" class="key keypos-21">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(140, 140)" class="key keypos-22">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(196, 156)" class="key keypos-23">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(252, 164)" class="key keypos-24">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(420, 164)" class="key keypos-25">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(476, 156)" class="key keypos-26">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(532, 140)" class="key keypos-27">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(588, 158)" class="key keypos-28">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(644, 193)" class="key keypos-29">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(221, 221) rotate(15.0)" class="key trans keypos-30">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key trans"/>
<text x="0" y="0" class="key trans tap">Repeat</text>
<text x="0" y="24" class="key trans hold">Nav</text>
</g>
<g transform="translate(279, 245) rotate(30.0)" class="key trans keypos-31">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key trans"/>
<text x="0" y="0" class="key trans tap">Spc</text>
</g>
<g transform="translate(393, 245) rotate(-30.0)" class="key trans keypos-32">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key trans"/>
<text x="0" y="0" class="key trans tap">Bspc</text>
</g>
<g transform="translate(451, 221) rotate(-15.0)" class="key trans keypos-33">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key trans"/>
<text x="0" y="0" class="key trans tap">Magic</text>
<text x="0" y="24" class="key trans hold">Num</text>
</g>
</g>
</g>
<g transform="translate(30, 678)" class="layer-NUM">
<text x="0" y="28" class="label" id="NUM">NUM:</text>
<g transform="translate(0, 56)">
<g transform="translate(28, 81)" class="key keypos-0">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">(</text>
</g>
<g transform="translate(84, 46)" class="key keypos-1">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">7</text>
</g>
<g transform="translate(140, 28)" class="key keypos-2">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">8</text>
</g>
<g transform="translate(196, 44)" class="key keypos-3">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">9</text>
</g>
<g transform="translate(252, 52)" class="key keypos-4">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">)</text>
</g>
<g transform="translate(420, 52)" class="key keypos-5">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(476, 44)" class="key keypos-6">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">*</text>
</g>
<g transform="translate(532, 28)" class="key keypos-7">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">%</text>
</g>
<g transform="translate(588, 46)" class="key keypos-8">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">/</text>
</g>
<g transform="translate(644, 81)" class="key keypos-9">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(28, 137)" class="key keypos-10">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">0</text>
</g>
<g transform="translate(84, 102)" class="key keypos-11">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">4</text>
</g>
<g transform="translate(140, 84)" class="key keypos-12">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">5</text>
</g>
<g transform="translate(196, 100)" class="key keypos-13">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">6</text>
</g>
<g transform="translate(252, 108)" class="key keypos-14">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">.</text>
</g>
<g transform="translate(420, 108)" class="key keypos-15">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(476, 100)" class="key keypos-16">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Gui</tspan>
</text>
</g>
<g transform="translate(532, 84)" class="key keypos-17">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Alt</tspan>
</text>
</g>
<g transform="translate(588, 102)" class="key keypos-18">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Ctrl</tspan>
</text>
</g>
<g transform="translate(644, 137)" class="key keypos-19">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">
<tspan x="0" dy="-0.6em">OS</tspan><tspan x="0" dy="1.2em">Shift</tspan>
</text>
</g>
<g transform="translate(28, 193)" class="key keypos-20">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">&lt;</text>
</g>
<g transform="translate(84, 158)" class="key keypos-21">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">1</text>
</g>
<g transform="translate(140, 140)" class="key keypos-22">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">2</text>
</g>
<g transform="translate(196, 156)" class="key keypos-23">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">3</text>
</g>
<g transform="translate(252, 164)" class="key keypos-24">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">&gt;</text>
</g>
<g transform="translate(420, 164)" class="key keypos-25">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(476, 156)" class="key keypos-26">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">+</text>
</g>
<g transform="translate(532, 140)" class="key keypos-27">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">=</text>
</g>
<g transform="translate(588, 158)" class="key keypos-28">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">-</text>
</g>
<g transform="translate(644, 193)" class="key keypos-29">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(221, 221) rotate(15.0)" class="key trans keypos-30">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key trans"/>
<text x="0" y="0" class="key trans tap">Repeat</text>
<text x="0" y="24" class="key trans hold">Nav</text>
</g>
<g transform="translate(279, 245) rotate(30.0)" class="key trans keypos-31">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key trans"/>
<text x="0" y="0" class="key trans tap">Spc</text>
</g>
<g transform="translate(393, 245) rotate(-30.0)" class="key trans keypos-32">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key trans"/>
<text x="0" y="0" class="key trans tap">Bspc</text>
</g>
<g transform="translate(451, 221) rotate(-15.0)" class="key trans keypos-33">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key trans"/>
<text x="0" y="0" class="key trans tap">Magic</text>
<text x="0" y="24" class="key trans hold">Num</text>
</g>
</g>
</g>
<g transform="translate(30, 1016)" class="layer-SYM">
<text x="0" y="28" class="label" id="SYM">SYM:</text>
<g transform="translate(0, 56)">
<g transform="translate(28, 81)" class="key keypos-0">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">`</text>
</g>
<g transform="translate(84, 46)" class="key keypos-1">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">&lt;</text>
</g>
<g transform="translate(140, 28)" class="key keypos-2">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">-</text>
</g>
<g transform="translate(196, 44)" class="key keypos-3">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">&gt;</text>
</g>
<g transform="translate(252, 52)" class="key keypos-4">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(420, 52)" class="key keypos-5">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(476, 44)" class="key keypos-6">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">[</text>
</g>
<g transform="translate(532, 28)" class="key keypos-7">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">_</text>
</g>
<g transform="translate(588, 46)" class="key keypos-8">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">]</text>
</g>
<g transform="translate(644, 81)" class="key keypos-9">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">+</text>
</g>
<g transform="translate(28, 137)" class="key keypos-10">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">!</text>
</g>
<g transform="translate(84, 102)" class="key keypos-11">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">(</text>
</g>
<g transform="translate(140, 84)" class="key keypos-12">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">=</text>
</g>
<g transform="translate(196, 100)" class="key keypos-13">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">)</text>
</g>
<g transform="translate(252, 108)" class="key keypos-14">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">#</text>
</g>
<g transform="translate(420, 108)" class="key keypos-15">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">%</text>
</g>
<g transform="translate(476, 100)" class="key keypos-16">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">{</text>
</g>
<g transform="translate(532, 84)" class="key keypos-17">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">$</text>
</g>
<g transform="translate(588, 102)" class="key keypos-18">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">}</text>
</g>
<g transform="translate(644, 137)" class="key keypos-19">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">;</text>
</g>
<g transform="translate(28, 193)" class="key keypos-20">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">|</text>
</g>
<g transform="translate(84, 158)" class="key keypos-21">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">&amp;</text>
</g>
<g transform="translate(140, 140)" class="key keypos-22">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">^</text>
</g>
<g transform="translate(196, 156)" class="key keypos-23">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">@</text>
</g>
<g transform="translate(252, 164)" class="key keypos-24">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(420, 164)" class="key keypos-25">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
</g>
<g transform="translate(476, 156)" class="key keypos-26">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key"/>
<text x="0" y="0" class="key tap">*</text>
</g>
<g transform="translate(532, 140)" class="key trans keypos-27">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key trans"/>
<text x="0" y="0" class="key trans tap">/</text>
</g>
<g transform="translate(588, 158)" class="key trans keypos-28">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key trans"/>
<text x="0" y="0" class="key trans tap">,</text>
</g>
<g transform="translate(644, 193)" class="key trans keypos-29">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key trans"/>
<text x="0" y="0" class="key trans tap">.</text>
</g>
<g transform="translate(221, 221) rotate(15.0)" class="key trans keypos-30">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key trans"/>
<text x="0" y="0" class="key trans tap">Repeat</text>
<text x="0" y="24" class="key trans hold">Nav</text>
</g>
<g transform="translate(279, 245) rotate(30.0)" class="key trans keypos-31">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key trans"/>
<text x="0" y="0" class="key trans tap">Spc</text>
</g>
<g transform="translate(393, 245) rotate(-30.0)" class="key trans keypos-32">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key trans"/>
<text x="0" y="0" class="key trans tap">Bspc</text>
</g>
<g transform="translate(451, 221) rotate(-15.0)" class="key trans keypos-33">
<rect rx="6" ry="6" x="-26" y="-26" width="52" height="52" class="key trans"/>
<text x="0" y="0" class="key trans tap">Magic</text>
<text x="0" y="24" class="key trans hold">Num</text>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 32 KiB

View file

@ -0,0 +1,50 @@
layout:
qmk_keyboard: ferris/sweep
layout_name: LAYOUT_split_3x5_2
layers:
CANARY:
- [w, l, y, p, b, z, f, o, u, "'"]
- [{h: Shift, t: c}, {h: Ctrl, t: r}, {h: Alt, t: s}, {h: Gui, t: t}, g, m, {h: Gui, t: n}, {h: Alt, t: e}, {h: Ctrl, t: i}, {h: Shift, t: a}]
- [q, j, v, {h: Sym, t: d}, k, x, {h: Sym, t: h}, "/", ",", "."]
- [{h: Nav, t: Repeat}, Spc, Bspc, {h: Num, t: Magic}]
NAV:
- [Null, Prev Track, Play Pause, Next Track, Vol Up, Page Up, Home, Up, End, Null]
- [OS Shift, OS Ctrl, OS Alt, OS Gui, Vol Down, Page Down, Left, Down, Right, Del]
- [Null, Null, Null, Null, Null, Null, Null, Null, Null, Null]
- [{h: Nav, t: Repeat, type: trans}, {t: Spc, type: trans}, {t: Bspc, type: trans}, {h: Num, t: Magic, type: trans}]
NUM:
- ["(", 7, 8, 9, ")", Null, "*", "%", "/", Null]
- [0, 4, 5, 6, ".", Null, OS Gui, OS Alt, OS Ctrl, OS Shift]
- ["<", 1, 2, 3, ">", Null, "+", "=", "-", Null]
- [{h: Nav, t: Repeat, type: trans}, {t: Spc, type: trans}, {t: Bspc, type: trans}, {h: Num, t: Magic, type: trans}]
SYM:
- ["`", "<", "-", ">", Null, Null, "[", "_", "]", "+"]
- ["!", "(", "=", ")", "#", "%", "{", "$", "}", ";"]
- ["|", "&", "^", "@", Null, Null, "*", {t: "/", type: trans}, {t: ",", type: trans}, {t: ".", type: trans}]
- [{h: Nav, t: Repeat, type: trans}, {t: Spc, type: trans}, {t: Bspc, type: trans}, {h: Num, t: Magic, type: trans}]
combos:
- {p: [0, 10], k: "1", l: ["CANARY"]}
- {p: [1, 11], k: "2", l: ["CANARY"]}
- {p: [2, 12], k: "3", l: ["CANARY"]}
- {p: [3, 13], k: "4", l: ["CANARY"]}
- {p: [4, 14], k: "5", l: ["CANARY"]}
- {p: [5, 15], k: "6", l: ["CANARY"]}
- {p: [6, 16], k: "7", l: ["CANARY"]}
- {p: [7, 17], k: "8", l: ["CANARY"]}
- {p: [8, 18], k: "9", l: ["CANARY"]}
- {p: [9, 19], k: "0", l: ["CANARY"]}
- {p: [11, 12], k: "Tab", l: ["CANARY"]}
- {p: [12, 13], k: "C-w", l: ["CANARY"]}
- {p: [16, 17], k: "Esc", l: ["CANARY"]}
- {p: [17, 18], k: "Ent", l: ["CANARY"]}
- {p: [21, 22], k: ":", l: ["CANARY"]}
- {p: [22, 23], k: "M-a", l: ["CANARY"]}
- {p: [23, 24], k: "OS Shift", l: ["CANARY"]}
- {p: [25, 26], k: "OS Shift", l: ["CANARY"]}
- {p: [26, 27], k: "M1-a", l: ["CANARY"]}
- {p: [27, 28], k: "\\", l: ["CANARY"]}

808
features/autocorrect_data.h Normal file
View file

@ -0,0 +1,808 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
/*******************************************************************************
88888888888 888 d8b .d888 d8b 888 d8b
888 888 Y8P d88P" Y8P 888 Y8P
888 888 888 888
888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
888 888 888 888 X88 888 888 888 Y8b. 888 X88
888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
888 888
888 888
888 888
.d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
"Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
888
Y8b d88P
"Y88P"
*******************************************************************************/
#pragma once
// Autocorrection dictionary (400 entries):
// :htere -> there
// abbout -> about
// abotu -> about
// baout -> about
// :theri -> their
// :thier -> their
// :owudl -> would
// woudl -> would
// peaple -> people
// peolpe -> people
// peopel -> people
// poeple -> people
// poeople -> people
// :hwihc -> which
// whcih -> which
// whihc -> which
// whlch -> which
// wihch -> which
// coudl -> could
// :htikn -> think
// :htink -> think
// thikn -> think
// thiunk -> think
// tihkn -> think
// :olther -> other
// :otehr -> other
// baceause -> because
// beacuse -> because
// becasue -> because
// beccause -> because
// becouse -> because
// becuase -> because
// theese -> these
// :goign -> going
// :gonig -> going
// :yaers -> years
// :yeasr -> years
// :thsoe -> those
// shoudl -> should
// raelly -> really
// realy -> really
// relaly -> really
// bedore -> before
// befoer -> before
// littel -> little
// beeing -> being
// :hwile -> while
// aroud -> around
// arround -> around
// arund -> around
// thign -> thing
// thigsn -> things
// thnigs -> things
// anohter -> another
// beteen -> between
// beween -> between
// bewteen -> between
// :eveyr -> every
// :graet -> great
// :agian -> again
// :sicne -> since
// alwasy -> always
// alwyas -> always
// throught -> thought
// :acheiv -> achiev
// almsot -> almost
// alomst -> almost
// chnage -> change
// chekc -> check
// childen -> children
// claer -> clear
// comapny -> company
// contian -> contain
// elasped -> elapsed
// feild -> field
// fitler -> filter
// firts -> first
// follwo -> follow
// :foudn -> found
// frequecy -> frequency
// firend -> friend
// freind -> friend
// heigth -> height
// iamge -> image
// inital -> initial
// intput -> input
// laguage -> language
// lenght -> length
// levle -> level
// libary -> library
// :moeny -> money
// mysefl -> myself
// ouptut -> output
// ouput -> output
// probaly -> probably
// probelm -> problem
// recrod -> record
// reponse -> response
// reprot -> report
// singel -> single
// stregth -> strength
// strengh -> strength
// tkaes -> takes
// therfore -> therefore
// todya -> today
// toghether -> together
// unkown -> unknown
// unqiue -> unique
// widht -> width
// aberation -> aberration
// accross -> across
// adviced -> advised
// aledge -> allege
// alledge -> allege
// amature -> amateur
// anomolous -> anomalous
// anomoly -> anomaly
// aparent -> apparent
// aparrent -> apparent
// apparant -> apparent
// apparrent -> apparent
// asthetic -> aesthetic
// auxilary -> auxiliary
// auxillary -> auxiliary
// auxilliary -> auxiliary
// bankrupcy -> bankruptcy
// busness -> business
// bussiness -> business
// calander -> calendar
// commitee -> committee
// comittee -> committee
// competance -> competence
// competant -> competent
// concensus -> consensus
// cognizent -> cognizant
// copywrite: -> copyright
// choosen -> chosen
// collegue -> colleague
// excercise -> exercise
// :grammer -> grammar
// :guage -> gauge
// govement -> government
// govenment -> government
// goverment -> government
// governmnet -> government
// govorment -> government
// govornment -> government
// guaratee -> guarantee
// garantee -> guarantee
// gaurantee -> guarantee
// heirarchy -> hierarchy
// hygeine -> hygiene
// hypocracy -> hypocrisy
// hypocrasy -> hypocrisy
// hypocricy -> hypocrisy
// hypocrit: -> hypocrite
// looses: -> loses
// maintence -> maintenance
// morgage -> mortgage
// neccesary -> necessary
// necesary -> necessary
// pallete -> palette
// paralel -> parallel
// parralel -> parallel
// parrallel -> parallel
// priviledge -> privilege
// probablly -> probably
// prominant -> prominent
// propogate -> propagate
// proove -> prove
// psuedo -> pseudo
// reciept -> receipt
// receiev -> receiv
// reciev -> receiv
// recepient -> recipient
// recipiant -> recipient
// relevent -> relevant
// repitition -> repetition
// safty -> safety
// saftey -> safety
// seperat -> separat
// spectogram -> spectrogram
// symetric -> symmetric
// tolerence -> tolerance
// cacheing -> caching
// complier -> compiler
// doulbe -> double
// dyanmic -> dynamic
// excecut -> execut
// failse -> false
// fales -> false
// fasle -> false
// flase -> false
// indeces -> indices
// indecies -> indices
// indicies -> indices
// interator -> iterator
// looup -> lookup
// namesapce -> namespace
// namespcae -> namespace
// nulltpr -> nullptr
// operaotr -> operator
// overide -> override
// ovveride -> override
// poitner -> pointer
// :rference -> reference
// referece -> reference
// singed -> signed
// stirng -> string
// strign -> string
// swithc -> switch
// swtich -> switch
// teamplate -> template
// tempalte -> template
// :ture -> true
// retrun -> return
// retun -> return
// reutrn -> return
// cosnt -> const
// virutal -> virtual
// vitual -> virtual
// yeild -> yield
// :alot: -> a lot
// :andteh -> and the
// :andthe -> and the
// :asthe -> as the
// :atthe -> at the
// abouta -> about a
// aboutit -> about it
// aboutthe -> about the
// :tothe -> to the
// didnot -> did not
// fromthe -> from the
// :agred -> agreed
// :ajust -> adjust
// :anual -> annual
// :asign -> assign
// :aslo: -> also
// :casue -> cause
// :choses -> chooses
// :gaurd -> guard
// :haev -> have
// :hapen -> happen
// :idaes -> ideas
// :jsut: -> just
// :jstu: -> just
// :knwo -> know
// :konw -> know
// :kwno -> know
// :ocuntry -> country
// :ocur -> occur
// :socre -> score
// :szie -> size
// :the:the: -> the
// :turth -> truth
// :uesd: -> used
// :usally -> usually
// abilties -> abilities
// abilty -> ability
// abvove -> above
// accesories -> accessories
// accomodate -> accommodate
// acommodate -> accommodate
// acomplish -> accomplish
// actualy -> actually
// acurate -> accurate
// acutally -> actually
// addtion -> addition
// againnst -> against
// aganist -> against
// aggreed -> agreed
// agianst -> against
// ahppn -> happen
// allign -> align
// anytying -> anything
// aquire -> acquire
// availabe -> available
// availaible -> available
// availalbe -> available
// availble -> available
// availiable -> available
// avalable -> available
// avaliable -> available
// avilable -> available
// bandwith -> bandwidth
// begginer -> beginner
// beleif -> belief
// beleive -> believe
// belive -> believe
// breif -> brief
// burried -> buried
// caluclate -> calculate
// caluculate -> calculate
// calulate -> calculate
// catagory -> category
// cauhgt -> caught
// ceratin -> certain
// certian -> certain
// cheif -> chief
// cieling -> ceiling
// circut -> circuit
// clasic -> classic
// cmoputer -> computer
// coform -> conform
// comming: -> coming
// considerd -> considered
// dervied -> derived
// desicion -> decision
// diferent -> different
// diferrent -> different
// differnt -> different
// diffrent -> different
// divison -> division
// effecient -> efficient
// eligable -> eligible
// elpased -> elapsed
// embarass -> embarrass
// embeded -> embedded
// encypt -> encrypt
// finaly -> finally
// foriegn -> foreign
// foward -> forward
// fraciton -> fraction
// fucntion -> function
// fufill -> fulfill
// fullfill -> fulfill
// futher -> further
// ganerate -> generate
// generaly -> generally
// greatful -> grateful
// heigher -> higher
// higest -> highest
// howver -> however
// hydogen -> hydrogen
// importamt -> important
// inclued -> include
// insted -> instead
// intrest -> interest
// invliad -> invalid
// largst -> largest
// learnign -> learning
// liasion -> liaison
// likly -> likely
// lisense -> license
// listner -> listener
// macthing -> matching
// manefist -> manifest
// mesage -> message
// naturual -> natural
// occassion -> occasion
// occured -> occurred
// particualr -> particular
// paticular -> particular
// peice -> piece
// perhasp -> perhaps
// perheaps -> perhaps
// perhpas -> perhaps
// perphas -> perhaps
// persue -> pursue
// posess -> possess
// postion -> position
// preiod -> period
// primarly -> primarily
// privte -> private
// proccess -> process
// proeprty -> property
// propery -> property
// realtion -> relation
// reasearch -> research
// recuring -> recurring
// refered -> referred
// regluar -> regular
// releated -> related
// resutl -> result
// reuslt -> result
// reveiw -> review
// satisifed -> satisfied
// scheduel -> schedule
// sequnce -> sequence
// similiar -> similar
// simmilar -> similar
// slighly -> slightly
// somehwat -> somewhat
// statment -> statement
// sucess -> success
// succsess -> success
// sugest -> suggest
// sumary -> summary
// supress -> suppress
// surpress -> suppress
// thresold -> threshold
// tongiht -> tonight
// tranpose -> transpose
// typcial -> typical
// udpate -> update
// ususally -> usually
// verticies -> vertices
// whereever -> wherever
// wherre -> where
// wierd -> weird
#define AUTOCORRECT_MIN_LENGTH 5 // "abotu"
#define AUTOCORRECT_MAX_LENGTH 10 // "auxilliary"
#define DICTIONARY_SIZE 5967
static const uint8_t autocorrect_data[DICTIONARY_SIZE] PROGMEM = {
0x6C, 0x43, 0x00, 0x04, 0xD4, 0x00, 0x06, 0xEC, 0x00, 0x07, 0x64, 0x01, 0x08, 0x0F, 0x03, 0x09,
0xA9, 0x08, 0x0A, 0xCC, 0x08, 0x0B, 0x44, 0x09, 0x0C, 0xF6, 0x09, 0x0E, 0x00, 0x0A, 0x0F, 0x1C,
0x0A, 0x10, 0x4F, 0x0B, 0x11, 0x81, 0x0B, 0x12, 0xAF, 0x0D, 0x13, 0xE3, 0x0D, 0x15, 0xFD, 0x0D,
0x16, 0xC2, 0x0F, 0x17, 0x79, 0x11, 0x18, 0xC9, 0x14, 0x19, 0xD2, 0x14, 0x1A, 0x08, 0x15, 0x1C,
0x22, 0x15, 0x00, 0x47, 0x59, 0x00, 0x08, 0x63, 0x00, 0x0A, 0x82, 0x00, 0x12, 0x8E, 0x00, 0x16,
0x98, 0x00, 0x17, 0xA3, 0x00, 0x18, 0xCA, 0x00, 0x00, 0x16, 0x08, 0x18, 0x2C, 0x00, 0x83, 0x73,
0x65, 0x64, 0x00, 0x4B, 0x6A, 0x00, 0x17, 0x73, 0x00, 0x00, 0x17, 0x2C, 0x08, 0x0B, 0x17, 0x2C,
0x00, 0x84, 0x00, 0x0C, 0x15, 0x1A, 0x1C, 0x13, 0x12, 0x06, 0x00, 0x85, 0x72, 0x69, 0x67, 0x68,
0x74, 0x00, 0x11, 0x0C, 0x10, 0x10, 0x12, 0x06, 0x00, 0x84, 0x69, 0x6E, 0x67, 0x00, 0x0F, 0x16,
0x04, 0x2C, 0x00, 0x83, 0x6C, 0x73, 0x6F, 0x00, 0x08, 0x16, 0x12, 0x12, 0x0F, 0x00, 0x84, 0x73,
0x65, 0x73, 0x00, 0x4C, 0xAD, 0x00, 0x12, 0xB7, 0x00, 0x18, 0xC1, 0x00, 0x00, 0x15, 0x06, 0x12,
0x13, 0x1C, 0x0B, 0x00, 0x80, 0x65, 0x00, 0x0F, 0x04, 0x2C, 0x00, 0x83, 0x20, 0x6C, 0x6F, 0x74,
0x00, 0x16, 0x0D, 0x2C, 0x00, 0x83, 0x75, 0x73, 0x74, 0x00, 0x17, 0x16, 0x0D, 0x2C, 0x00, 0x83,
0x75, 0x73, 0x74, 0x00, 0x57, 0xDB, 0x00, 0x1C, 0xE4, 0x00, 0x00, 0x18, 0x12, 0x05, 0x04, 0x00,
0x80, 0x20, 0x61, 0x00, 0x07, 0x12, 0x17, 0x00, 0x81, 0x61, 0x79, 0x00, 0x4B, 0xF6, 0x00, 0x0C,
0x1C, 0x01, 0x0E, 0x5C, 0x01, 0x00, 0x4C, 0xFD, 0x00, 0x17, 0x14, 0x01, 0x00, 0x4B, 0x04, 0x01,
0x1A, 0x0A, 0x01, 0x00, 0x1A, 0x00, 0x81, 0x63, 0x68, 0x00, 0x0B, 0x2C, 0x00, 0x84, 0x77, 0x68,
0x69, 0x63, 0x68, 0x00, 0x0C, 0x1A, 0x16, 0x00, 0x81, 0x63, 0x68, 0x00, 0x50, 0x29, 0x01, 0x15,
0x35, 0x01, 0x16, 0x43, 0x01, 0x17, 0x4C, 0x01, 0x00, 0x11, 0x04, 0x1C, 0x07, 0x00, 0x84, 0x6E,
0x61, 0x6D, 0x69, 0x63, 0x00, 0x17, 0x08, 0x10, 0x1C, 0x16, 0x00, 0x84, 0x6D, 0x65, 0x74, 0x72,
0x69, 0x63, 0x00, 0x04, 0x0F, 0x06, 0x00, 0x81, 0x73, 0x69, 0x63, 0x00, 0x08, 0x0B, 0x17, 0x16,
0x04, 0x00, 0x86, 0x65, 0x73, 0x74, 0x68, 0x65, 0x74, 0x69, 0x63, 0x00, 0x08, 0x0B, 0x06, 0x00,
0x81, 0x63, 0x6B, 0x00, 0x44, 0x7A, 0x01, 0x08, 0x86, 0x01, 0x0F, 0x54, 0x02, 0x11, 0x7C, 0x02,
0x12, 0xB4, 0x02, 0x15, 0xCF, 0x02, 0x18, 0x07, 0x03, 0x00, 0x0C, 0x0F, 0x19, 0x11, 0x0C, 0x00,
0x83, 0x61, 0x6C, 0x69, 0x64, 0x00, 0x46, 0xA8, 0x01, 0x07, 0xB2, 0x01, 0x08, 0xBC, 0x01, 0x09,
0xC7, 0x01, 0x0A, 0xD4, 0x01, 0x0C, 0xDE, 0x01, 0x13, 0xF8, 0x01, 0x15, 0x03, 0x02, 0x16, 0x26,
0x02, 0x17, 0x32, 0x02, 0x18, 0x4B, 0x02, 0x00, 0x0C, 0x19, 0x07, 0x04, 0x00, 0x82, 0x73, 0x65,
0x64, 0x00, 0x08, 0x05, 0x10, 0x08, 0x00, 0x81, 0x64, 0x65, 0x64, 0x00, 0x15, 0x0A, 0x0A, 0x04,
0x00, 0x84, 0x72, 0x65, 0x65, 0x64, 0x00, 0x0C, 0x16, 0x0C, 0x17, 0x04, 0x16, 0x00, 0x83, 0x66,
0x69, 0x65, 0x64, 0x00, 0x11, 0x0C, 0x16, 0x00, 0x83, 0x67, 0x6E, 0x65, 0x64, 0x00, 0x55, 0xE5,
0x01, 0x19, 0xEE, 0x01, 0x00, 0x15, 0x18, 0x05, 0x00, 0x83, 0x69, 0x65, 0x64, 0x00, 0x15, 0x08,
0x07, 0x00, 0x83, 0x69, 0x76, 0x65, 0x64, 0x00, 0x16, 0x04, 0x0F, 0x08, 0x00, 0x83, 0x70, 0x73,
0x65, 0x64, 0x00, 0x48, 0x0D, 0x02, 0x0A, 0x16, 0x02, 0x18, 0x1D, 0x02, 0x00, 0x09, 0x08, 0x15,
0x00, 0x81, 0x72, 0x65, 0x64, 0x00, 0x04, 0x2C, 0x00, 0x80, 0x65, 0x64, 0x00, 0x06, 0x06, 0x12,
0x00, 0x81, 0x72, 0x65, 0x64, 0x00, 0x04, 0x13, 0x0F, 0x08, 0x00, 0x84, 0x61, 0x70, 0x73, 0x65,
0x64, 0x00, 0x44, 0x39, 0x02, 0x16, 0x44, 0x02, 0x00, 0x08, 0x0F, 0x08, 0x15, 0x00, 0x84, 0x61,
0x74, 0x65, 0x64, 0x00, 0x11, 0x0C, 0x00, 0x80, 0x61, 0x64, 0x00, 0x0F, 0x06, 0x11, 0x0C, 0x00,
0x81, 0x64, 0x65, 0x00, 0x4C, 0x5B, 0x02, 0x12, 0x70, 0x02, 0x00, 0x08, 0x00, 0x49, 0x64, 0x02,
0x1C, 0x6A, 0x02, 0x00, 0x83, 0x69, 0x65, 0x6C, 0x64, 0x00, 0x83, 0x69, 0x65, 0x6C, 0x64, 0x00,
0x16, 0x08, 0x15, 0x0B, 0x17, 0x00, 0x82, 0x68, 0x6F, 0x6C, 0x64, 0x00, 0x48, 0x86, 0x02, 0x0C,
0x91, 0x02, 0x18, 0x9B, 0x02, 0x00, 0x15, 0x0C, 0x09, 0x00, 0x84, 0x72, 0x69, 0x65, 0x6E, 0x64,
0x00, 0x08, 0x15, 0x09, 0x00, 0x83, 0x69, 0x65, 0x6E, 0x64, 0x00, 0x52, 0xA2, 0x02, 0x15, 0xAC,
0x02, 0x00, 0x15, 0x15, 0x04, 0x00, 0x84, 0x6F, 0x75, 0x6E, 0x64, 0x00, 0x04, 0x00, 0x82, 0x6F,
0x75, 0x6E, 0x64, 0x00, 0x4C, 0xBB, 0x02, 0x15, 0xC6, 0x02, 0x00, 0x08, 0x15, 0x13, 0x00, 0x84,
0x65, 0x72, 0x69, 0x6F, 0x64, 0x00, 0x06, 0x08, 0x15, 0x00, 0x82, 0x6F, 0x72, 0x64, 0x00, 0x44,
0xD9, 0x02, 0x08, 0xE4, 0x02, 0x18, 0xFD, 0x02, 0x00, 0x1A, 0x12, 0x09, 0x00, 0x83, 0x72, 0x77,
0x61, 0x72, 0x64, 0x00, 0x47, 0xEB, 0x02, 0x0C, 0xF5, 0x02, 0x00, 0x0C, 0x16, 0x11, 0x12, 0x06,
0x00, 0x80, 0x65, 0x64, 0x00, 0x1A, 0x00, 0x83, 0x65, 0x69, 0x72, 0x64, 0x00, 0x04, 0x0A, 0x2C,
0x00, 0x83, 0x75, 0x61, 0x72, 0x64, 0x00, 0x12, 0x15, 0x04, 0x00, 0x80, 0x6E, 0x64, 0x00, 0x44,
0x43, 0x03, 0x05, 0x50, 0x03, 0x06, 0x7B, 0x03, 0x07, 0xFB, 0x03, 0x08, 0x17, 0x04, 0x0A, 0x6B,
0x04, 0x0B, 0xE3, 0x04, 0x0C, 0x34, 0x05, 0x0F, 0x3D, 0x05, 0x11, 0x00, 0x06, 0x12, 0x1B, 0x06,
0x13, 0x25, 0x06, 0x15, 0x2F, 0x06, 0x16, 0x9C, 0x06, 0x17, 0x52, 0x07, 0x18, 0x2D, 0x08, 0x19,
0x73, 0x08, 0x00, 0x06, 0x13, 0x16, 0x08, 0x10, 0x04, 0x11, 0x00, 0x82, 0x61, 0x63, 0x65, 0x00,
0x44, 0x57, 0x03, 0x0F, 0x61, 0x03, 0x00, 0x0F, 0x0C, 0x04, 0x19, 0x04, 0x00, 0x80, 0x6C, 0x65,
0x00, 0x44, 0x68, 0x03, 0x18, 0x73, 0x03, 0x00, 0x0F, 0x0C, 0x04, 0x19, 0x04, 0x00, 0x82, 0x62,
0x6C, 0x65, 0x00, 0x12, 0x07, 0x00, 0x82, 0x62, 0x6C, 0x65, 0x00, 0x48, 0x88, 0x03, 0x0C, 0x93,
0x03, 0x11, 0x9C, 0x03, 0x13, 0xEE, 0x03, 0x00, 0x15, 0x08, 0x09, 0x08, 0x15, 0x00, 0x81, 0x6E,
0x63, 0x65, 0x00, 0x08, 0x13, 0x00, 0x83, 0x69, 0x65, 0x63, 0x65, 0x00, 0x44, 0xA6, 0x03, 0x08,
0xB3, 0x03, 0x18, 0xE4, 0x03, 0x00, 0x17, 0x08, 0x13, 0x10, 0x12, 0x06, 0x00, 0x83, 0x65, 0x6E,
0x63, 0x65, 0x00, 0x55, 0xBA, 0x03, 0x17, 0xD9, 0x03, 0x00, 0x08, 0x00, 0x49, 0xC3, 0x03, 0x0F,
0xD0, 0x03, 0x00, 0x15, 0x2C, 0x00, 0x86, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6E, 0x63, 0x65, 0x00,
0x12, 0x17, 0x00, 0x83, 0x61, 0x6E, 0x63, 0x65, 0x00, 0x11, 0x0C, 0x04, 0x10, 0x00, 0x81, 0x61,
0x6E, 0x63, 0x65, 0x00, 0x14, 0x08, 0x16, 0x00, 0x82, 0x65, 0x6E, 0x63, 0x65, 0x00, 0x04, 0x16,
0x08, 0x10, 0x04, 0x11, 0x00, 0x83, 0x70, 0x61, 0x63, 0x65, 0x00, 0x0C, 0x15, 0x08, 0x19, 0x00,
0x52, 0x07, 0x04, 0x19, 0x0D, 0x04, 0x00, 0x82, 0x72, 0x69, 0x64, 0x65, 0x00, 0x12, 0x00, 0x85,
0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x00, 0x17, 0x00, 0x44, 0x26, 0x04, 0x0C, 0x31, 0x04, 0x11,
0x3B, 0x04, 0x17, 0x5E, 0x04, 0x00, 0x15, 0x04, 0x18, 0x0A, 0x00, 0x82, 0x6E, 0x74, 0x65, 0x65,
0x00, 0x10, 0x10, 0x12, 0x06, 0x00, 0x81, 0x74, 0x65, 0x65, 0x00, 0x04, 0x15, 0x00, 0x44, 0x45,
0x04, 0x18, 0x51, 0x04, 0x00, 0x0A, 0x00, 0x86, 0x75, 0x61, 0x72, 0x61, 0x6E, 0x74, 0x65, 0x65,
0x00, 0x04, 0x0A, 0x00, 0x87, 0x75, 0x61, 0x72, 0x61, 0x6E, 0x74, 0x65, 0x65, 0x00, 0x0C, 0x10,
0x12, 0x06, 0x00, 0x84, 0x6D, 0x69, 0x74, 0x74, 0x65, 0x65, 0x00, 0x44, 0x75, 0x04, 0x07, 0xB8,
0x04, 0x10, 0xDA, 0x04, 0x00, 0x4A, 0x82, 0x04, 0x11, 0x8D, 0x04, 0x16, 0x96, 0x04, 0x18, 0x9F,
0x04, 0x00, 0x15, 0x12, 0x10, 0x00, 0x83, 0x74, 0x67, 0x61, 0x67, 0x65, 0x00, 0x0B, 0x06, 0x00,
0x83, 0x61, 0x6E, 0x67, 0x65, 0x00, 0x08, 0x10, 0x00, 0x82, 0x73, 0x61, 0x67, 0x65, 0x00, 0x0A,
0x00, 0x6C, 0xA8, 0x04, 0x04, 0xAE, 0x04, 0x00, 0x83, 0x61, 0x75, 0x67, 0x65, 0x00, 0x0F, 0x00,
0x84, 0x6E, 0x67, 0x75, 0x61, 0x67, 0x65, 0x00, 0x08, 0x0F, 0x00, 0x44, 0xC5, 0x04, 0x0C, 0xCB,
0x04, 0x0F, 0xD4, 0x04, 0x00, 0x83, 0x6C, 0x65, 0x67, 0x65, 0x00, 0x19, 0x0C, 0x15, 0x13, 0x00,
0x82, 0x67, 0x65, 0x00, 0x04, 0x00, 0x82, 0x67, 0x65, 0x00, 0x04, 0x0C, 0x00, 0x83, 0x6D, 0x61,
0x67, 0x65, 0x00, 0x17, 0x00, 0x47, 0xF5, 0x04, 0x10, 0xFF, 0x04, 0x12, 0x09, 0x05, 0x16, 0x12,
0x05, 0x17, 0x1B, 0x05, 0x00, 0x11, 0x04, 0x2C, 0x00, 0x82, 0x20, 0x74, 0x68, 0x65, 0x00, 0x12,
0x15, 0x09, 0x00, 0x82, 0x20, 0x74, 0x68, 0x65, 0x00, 0x17, 0x2C, 0x00, 0x82, 0x20, 0x74, 0x68,
0x65, 0x00, 0x04, 0x2C, 0x00, 0x82, 0x20, 0x74, 0x68, 0x65, 0x00, 0x44, 0x22, 0x05, 0x18, 0x2A,
0x05, 0x00, 0x2C, 0x00, 0x82, 0x20, 0x74, 0x68, 0x65, 0x00, 0x12, 0x05, 0x04, 0x00, 0x82, 0x20,
0x74, 0x68, 0x65, 0x00, 0x1D, 0x16, 0x2C, 0x00, 0x82, 0x69, 0x7A, 0x65, 0x00, 0x45, 0x4D, 0x05,
0x0C, 0xBE, 0x05, 0x13, 0xC9, 0x05, 0x16, 0xF1, 0x05, 0x19, 0xF9, 0x05, 0x00, 0x44, 0x57, 0x05,
0x0C, 0xA7, 0x05, 0x0F, 0xB3, 0x05, 0x00, 0x4A, 0x61, 0x05, 0x0C, 0x6B, 0x05, 0x0F, 0x89, 0x05,
0x00, 0x0C, 0x0F, 0x08, 0x00, 0x83, 0x69, 0x62, 0x6C, 0x65, 0x00, 0x0F, 0x00, 0x44, 0x74, 0x05,
0x0C, 0x7F, 0x05, 0x00, 0x19, 0x04, 0x00, 0x85, 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x00, 0x04,
0x19, 0x04, 0x00, 0x84, 0x61, 0x62, 0x6C, 0x65, 0x00, 0x44, 0x90, 0x05, 0x0C, 0x9B, 0x05, 0x00,
0x19, 0x04, 0x00, 0x84, 0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x00, 0x19, 0x04, 0x00, 0x85, 0x61,
0x69, 0x6C, 0x61, 0x62, 0x6C, 0x65, 0x00, 0x04, 0x0F, 0x0C, 0x04, 0x19, 0x04, 0x00, 0x83, 0x62,
0x6C, 0x65, 0x00, 0x0C, 0x04, 0x19, 0x04, 0x00, 0x82, 0x61, 0x62, 0x6C, 0x65, 0x00, 0x1A, 0x0B,
0x2C, 0x00, 0x84, 0x77, 0x68, 0x69, 0x6C, 0x65, 0x00, 0x44, 0xD3, 0x05, 0x08, 0xDC, 0x05, 0x12,
0xE6, 0x05, 0x00, 0x08, 0x13, 0x00, 0x83, 0x6F, 0x70, 0x6C, 0x65, 0x00, 0x12, 0x13, 0x00, 0x84,
0x65, 0x6F, 0x70, 0x6C, 0x65, 0x00, 0x08, 0x12, 0x13, 0x00, 0x85, 0x65, 0x6F, 0x70, 0x6C, 0x65,
0x00, 0x04, 0x09, 0x00, 0x82, 0x6C, 0x73, 0x65, 0x00, 0x08, 0x0F, 0x00, 0x81, 0x65, 0x6C, 0x00,
0x46, 0x07, 0x06, 0x0C, 0x10, 0x06, 0x00, 0x0C, 0x16, 0x2C, 0x00, 0x82, 0x6E, 0x63, 0x65, 0x00,
0x08, 0x0A, 0x1C, 0x0B, 0x00, 0x83, 0x69, 0x65, 0x6E, 0x65, 0x00, 0x16, 0x0B, 0x17, 0x2C, 0x00,
0x82, 0x6F, 0x73, 0x65, 0x00, 0x0F, 0x12, 0x08, 0x13, 0x00, 0x82, 0x70, 0x6C, 0x65, 0x00, 0x46,
0x42, 0x06, 0x08, 0x4C, 0x06, 0x0C, 0x57, 0x06, 0x12, 0x63, 0x06, 0x15, 0x7F, 0x06, 0x18, 0x86,
0x06, 0x00, 0x12, 0x16, 0x2C, 0x00, 0x83, 0x63, 0x6F, 0x72, 0x65, 0x00, 0x17, 0x0B, 0x2C, 0x00,
0x84, 0x74, 0x68, 0x65, 0x72, 0x65, 0x00, 0x18, 0x14, 0x04, 0x00, 0x84, 0x63, 0x71, 0x75, 0x69,
0x72, 0x65, 0x00, 0x47, 0x6A, 0x06, 0x09, 0x73, 0x06, 0x00, 0x08, 0x05, 0x00, 0x83, 0x66, 0x6F,
0x72, 0x65, 0x00, 0x15, 0x08, 0x0B, 0x17, 0x00, 0x83, 0x65, 0x66, 0x6F, 0x72, 0x65, 0x00, 0x08,
0x0B, 0x1A, 0x00, 0x81, 0x65, 0x00, 0x17, 0x00, 0x6C, 0x8F, 0x06, 0x04, 0x94, 0x06, 0x00, 0x82,
0x72, 0x75, 0x65, 0x00, 0x10, 0x04, 0x00, 0x82, 0x65, 0x75, 0x72, 0x00, 0x44, 0xB2, 0x06, 0x08,
0xCB, 0x06, 0x0C, 0xD3, 0x06, 0x0F, 0xE2, 0x06, 0x11, 0xEB, 0x06, 0x12, 0x09, 0x07, 0x18, 0x16,
0x07, 0x00, 0x4F, 0xB9, 0x06, 0x18, 0xC1, 0x06, 0x00, 0x09, 0x00, 0x83, 0x61, 0x6C, 0x73, 0x65,
0x00, 0x06, 0x08, 0x05, 0x00, 0x83, 0x61, 0x75, 0x73, 0x65, 0x00, 0x08, 0x0B, 0x17, 0x00, 0x82,
0x73, 0x65, 0x00, 0x06, 0x15, 0x08, 0x06, 0x1B, 0x08, 0x00, 0x86, 0x65, 0x72, 0x63, 0x69, 0x73,
0x65, 0x00, 0x0C, 0x04, 0x09, 0x00, 0x83, 0x6C, 0x73, 0x65, 0x00, 0x48, 0xF2, 0x06, 0x12, 0xFD,
0x06, 0x00, 0x16, 0x0C, 0x0F, 0x00, 0x84, 0x63, 0x65, 0x6E, 0x73, 0x65, 0x00, 0x13, 0x08, 0x15,
0x00, 0x84, 0x73, 0x70, 0x6F, 0x6E, 0x73, 0x65, 0x00, 0x13, 0x11, 0x04, 0x15, 0x17, 0x00, 0x83,
0x73, 0x70, 0x6F, 0x73, 0x65, 0x00, 0x44, 0x20, 0x07, 0x06, 0x3D, 0x07, 0x12, 0x48, 0x07, 0x00,
0x46, 0x27, 0x07, 0x08, 0x31, 0x07, 0x00, 0x06, 0x08, 0x05, 0x00, 0x84, 0x61, 0x75, 0x73, 0x65,
0x00, 0x06, 0x04, 0x05, 0x00, 0x86, 0x65, 0x63, 0x61, 0x75, 0x73, 0x65, 0x00, 0x04, 0x08, 0x05,
0x00, 0x84, 0x63, 0x61, 0x75, 0x73, 0x65, 0x00, 0x06, 0x08, 0x05, 0x00, 0x83, 0x61, 0x75, 0x73,
0x65, 0x00, 0x44, 0x5F, 0x07, 0x08, 0x0D, 0x08, 0x0F, 0x18, 0x08, 0x19, 0x24, 0x08, 0x00, 0x47,
0x6F, 0x07, 0x0A, 0x94, 0x07, 0x0F, 0xA1, 0x07, 0x13, 0xE4, 0x07, 0x15, 0xEE, 0x07, 0x00, 0x12,
0x10, 0x00, 0x50, 0x79, 0x07, 0x12, 0x88, 0x07, 0x00, 0x12, 0x06, 0x04, 0x00, 0x87, 0x63, 0x6F,
0x6D, 0x6D, 0x6F, 0x64, 0x61, 0x74, 0x65, 0x00, 0x06, 0x06, 0x04, 0x00, 0x84, 0x6D, 0x6F, 0x64,
0x61, 0x74, 0x65, 0x00, 0x12, 0x13, 0x12, 0x15, 0x13, 0x00, 0x84, 0x61, 0x67, 0x61, 0x74, 0x65,
0x00, 0x46, 0xAB, 0x07, 0x13, 0xB8, 0x07, 0x18, 0xC5, 0x07, 0x00, 0x18, 0x0F, 0x04, 0x06, 0x00,
0x85, 0x63, 0x75, 0x6C, 0x61, 0x74, 0x65, 0x00, 0x10, 0x04, 0x08, 0x17, 0x00, 0x86, 0x6D, 0x70,
0x6C, 0x61, 0x74, 0x65, 0x00, 0x46, 0xCC, 0x07, 0x0F, 0xD9, 0x07, 0x00, 0x18, 0x0F, 0x04, 0x06,
0x00, 0x86, 0x63, 0x75, 0x6C, 0x61, 0x74, 0x65, 0x00, 0x04, 0x06, 0x00, 0x84, 0x63, 0x75, 0x6C,
0x61, 0x74, 0x65, 0x00, 0x07, 0x18, 0x00, 0x84, 0x70, 0x64, 0x61, 0x74, 0x65, 0x00, 0x48, 0xF5,
0x07, 0x18, 0x02, 0x08, 0x00, 0x11, 0x04, 0x0A, 0x00, 0x86, 0x65, 0x6E, 0x65, 0x72, 0x61, 0x74,
0x65, 0x00, 0x06, 0x04, 0x00, 0x84, 0x63, 0x75, 0x72, 0x61, 0x74, 0x65, 0x00, 0x0F, 0x0F, 0x04,
0x13, 0x00, 0x83, 0x65, 0x74, 0x74, 0x65, 0x00, 0x04, 0x13, 0x10, 0x08, 0x17, 0x00, 0x83, 0x6C,
0x61, 0x74, 0x65, 0x00, 0x0C, 0x15, 0x13, 0x00, 0x81, 0x61, 0x74, 0x65, 0x00, 0x4A, 0x37, 0x08,
0x0C, 0x43, 0x08, 0x16, 0x4D, 0x08, 0x00, 0x08, 0x0F, 0x0F, 0x12, 0x06, 0x00, 0x82, 0x61, 0x67,
0x75, 0x65, 0x00, 0x14, 0x11, 0x18, 0x00, 0x83, 0x69, 0x71, 0x75, 0x65, 0x00, 0x44, 0x54, 0x08,
0x15, 0x69, 0x08, 0x00, 0x06, 0x00, 0x6C, 0x5D, 0x08, 0x08, 0x62, 0x08, 0x00, 0x82, 0x75, 0x73,
0x65, 0x00, 0x05, 0x00, 0x82, 0x75, 0x73, 0x65, 0x00, 0x08, 0x13, 0x00, 0x84, 0x75, 0x72, 0x73,
0x75, 0x65, 0x00, 0x4C, 0x7A, 0x08, 0x12, 0x93, 0x08, 0x00, 0x48, 0x81, 0x08, 0x0F, 0x8B, 0x08,
0x00, 0x0F, 0x08, 0x05, 0x00, 0x83, 0x69, 0x65, 0x76, 0x65, 0x00, 0x08, 0x05, 0x00, 0x81, 0x65,
0x76, 0x65, 0x00, 0x52, 0x9A, 0x08, 0x19, 0xA1, 0x08, 0x00, 0x15, 0x13, 0x00, 0x82, 0x76, 0x65,
0x00, 0x05, 0x04, 0x00, 0x83, 0x6F, 0x76, 0x65, 0x00, 0x0C, 0x08, 0x00, 0x4B, 0xB6, 0x08, 0x0F,
0xBD, 0x08, 0x15, 0xC5, 0x08, 0x00, 0x06, 0x00, 0x82, 0x69, 0x65, 0x66, 0x00, 0x08, 0x05, 0x00,
0x82, 0x69, 0x65, 0x66, 0x00, 0x05, 0x00, 0x82, 0x69, 0x65, 0x66, 0x00, 0x4C, 0xD3, 0x08, 0x11,
0xDD, 0x08, 0x00, 0x11, 0x12, 0x0A, 0x2C, 0x00, 0x82, 0x69, 0x6E, 0x67, 0x00, 0x4C, 0xE4, 0x08,
0x15, 0x3A, 0x09, 0x00, 0x48, 0xF4, 0x08, 0x0B, 0x0B, 0x09, 0x0F, 0x18, 0x09, 0x15, 0x24, 0x09,
0x1C, 0x2F, 0x09, 0x00, 0x48, 0xFB, 0x08, 0x0B, 0x02, 0x09, 0x00, 0x05, 0x00, 0x83, 0x69, 0x6E,
0x67, 0x00, 0x06, 0x04, 0x06, 0x00, 0x83, 0x69, 0x6E, 0x67, 0x00, 0x17, 0x06, 0x04, 0x10, 0x00,
0x85, 0x74, 0x63, 0x68, 0x69, 0x6E, 0x67, 0x00, 0x08, 0x0C, 0x06, 0x00, 0x85, 0x65, 0x69, 0x6C,
0x69, 0x6E, 0x67, 0x00, 0x18, 0x06, 0x08, 0x15, 0x00, 0x82, 0x72, 0x69, 0x6E, 0x67, 0x00, 0x17,
0x1C, 0x11, 0x04, 0x00, 0x83, 0x68, 0x69, 0x6E, 0x67, 0x00, 0x0C, 0x17, 0x16, 0x00, 0x83, 0x72,
0x69, 0x6E, 0x67, 0x00, 0x46, 0x57, 0x09, 0x08, 0x8E, 0x09, 0x0A, 0x9A, 0x09, 0x0C, 0xA4, 0x09,
0x16, 0xAD, 0x09, 0x17, 0xBF, 0x09, 0x00, 0x4B, 0x64, 0x09, 0x0C, 0x6D, 0x09, 0x0F, 0x77, 0x09,
0x15, 0x7F, 0x09, 0x00, 0x0C, 0x1A, 0x00, 0x83, 0x68, 0x69, 0x63, 0x68, 0x00, 0x17, 0x1A, 0x16,
0x00, 0x83, 0x69, 0x74, 0x63, 0x68, 0x00, 0x0B, 0x1A, 0x00, 0x82, 0x69, 0x63, 0x68, 0x00, 0x04,
0x08, 0x16, 0x04, 0x08, 0x15, 0x00, 0x86, 0x73, 0x65, 0x61, 0x72, 0x63, 0x68, 0x00, 0x17, 0x07,
0x11, 0x04, 0x2C, 0x00, 0x82, 0x20, 0x74, 0x68, 0x65, 0x00, 0x11, 0x08, 0x15, 0x17, 0x16, 0x00,
0x80, 0x74, 0x68, 0x00, 0x06, 0x0B, 0x1A, 0x00, 0x82, 0x69, 0x63, 0x68, 0x00, 0x0C, 0x0F, 0x13,
0x10, 0x12, 0x06, 0x04, 0x00, 0x86, 0x63, 0x6F, 0x6D, 0x70, 0x6C, 0x69, 0x73, 0x68, 0x00, 0x4A,
0xC9, 0x09, 0x0C, 0xE1, 0x09, 0x15, 0xEC, 0x09, 0x00, 0x48, 0xD0, 0x09, 0x0C, 0xDA, 0x09, 0x00,
0x15, 0x17, 0x16, 0x00, 0x82, 0x6E, 0x67, 0x74, 0x68, 0x00, 0x08, 0x0B, 0x00, 0x81, 0x68, 0x74,
0x00, 0x1A, 0x07, 0x11, 0x04, 0x05, 0x00, 0x81, 0x64, 0x74, 0x68, 0x00, 0x18, 0x17, 0x2C, 0x00,
0x83, 0x72, 0x75, 0x74, 0x68, 0x00, 0x15, 0x08, 0x0B, 0x17, 0x2C, 0x00, 0x81, 0x69, 0x72, 0x00,
0x11, 0x00, 0x4C, 0x09, 0x0A, 0x18, 0x14, 0x0A, 0x00, 0x17, 0x0B, 0x2C, 0x00, 0x84, 0x74, 0x68,
0x69, 0x6E, 0x6B, 0x00, 0x0C, 0x0B, 0x17, 0x00, 0x82, 0x6E, 0x6B, 0x00, 0x44, 0x32, 0x0A, 0x07,
0x86, 0x0A, 0x08, 0xB1, 0x0A, 0x09, 0x11, 0x0B, 0x0F, 0x1A, 0x0B, 0x17, 0x37, 0x0B, 0x18, 0x40,
0x0B, 0x00, 0x4C, 0x3C, 0x0A, 0x17, 0x47, 0x0A, 0x18, 0x60, 0x0A, 0x00, 0x06, 0x13, 0x1C, 0x17,
0x00, 0x83, 0x69, 0x63, 0x61, 0x6C, 0x00, 0x4C, 0x4E, 0x0A, 0x18, 0x56, 0x0A, 0x00, 0x11, 0x0C,
0x00, 0x81, 0x69, 0x61, 0x6C, 0x00, 0x15, 0x0C, 0x19, 0x00, 0x83, 0x74, 0x75, 0x61, 0x6C, 0x00,
0x51, 0x6A, 0x0A, 0x15, 0x73, 0x0A, 0x17, 0x7C, 0x0A, 0x00, 0x04, 0x2C, 0x00, 0x82, 0x6E, 0x75,
0x61, 0x6C, 0x00, 0x18, 0x17, 0x04, 0x11, 0x00, 0x82, 0x61, 0x6C, 0x00, 0x0C, 0x19, 0x00, 0x83,
0x72, 0x74, 0x75, 0x61, 0x6C, 0x00, 0x18, 0x00, 0x52, 0x8F, 0x0A, 0x1A, 0xA7, 0x0A, 0x00, 0x46,
0x99, 0x0A, 0x0B, 0x9D, 0x0A, 0x1A, 0xA3, 0x0A, 0x00, 0x81, 0x6C, 0x64, 0x00, 0x16, 0x00, 0x81,
0x6C, 0x64, 0x00, 0x81, 0x6C, 0x64, 0x00, 0x12, 0x2C, 0x00, 0x84, 0x77, 0x6F, 0x75, 0x6C, 0x64,
0x00, 0x4A, 0xC1, 0x0A, 0x0F, 0xC9, 0x0A, 0x13, 0xF7, 0x0A, 0x17, 0xFF, 0x0A, 0x18, 0x07, 0x0B,
0x00, 0x11, 0x0C, 0x16, 0x00, 0x81, 0x6C, 0x65, 0x00, 0x44, 0xD0, 0x0A, 0x0F, 0xEA, 0x0A, 0x00,
0x15, 0x00, 0x44, 0xD9, 0x0A, 0x15, 0xE0, 0x0A, 0x00, 0x13, 0x00, 0x81, 0x6C, 0x65, 0x6C, 0x00,
0x04, 0x13, 0x00, 0x84, 0x61, 0x6C, 0x6C, 0x65, 0x6C, 0x00, 0x04, 0x15, 0x15, 0x04, 0x13, 0x00,
0x85, 0x61, 0x6C, 0x6C, 0x65, 0x6C, 0x00, 0x12, 0x08, 0x13, 0x00, 0x81, 0x6C, 0x65, 0x00, 0x17,
0x0C, 0x0F, 0x00, 0x81, 0x6C, 0x65, 0x00, 0x07, 0x08, 0x0B, 0x06, 0x16, 0x00, 0x81, 0x6C, 0x65,
0x00, 0x08, 0x16, 0x1C, 0x10, 0x00, 0x81, 0x6C, 0x66, 0x00, 0x0C, 0x09, 0x00, 0x4F, 0x24, 0x0B,
0x18, 0x2E, 0x0B, 0x00, 0x0F, 0x18, 0x09, 0x00, 0x84, 0x66, 0x69, 0x6C, 0x6C, 0x00, 0x09, 0x00,
0x83, 0x6C, 0x66, 0x69, 0x6C, 0x6C, 0x00, 0x18, 0x16, 0x08, 0x15, 0x00, 0x81, 0x6C, 0x74, 0x00,
0x09, 0x17, 0x04, 0x08, 0x15, 0x0A, 0x00, 0x85, 0x61, 0x74, 0x65, 0x66, 0x75, 0x6C, 0x00, 0x44,
0x59, 0x0B, 0x0F, 0x6A, 0x0B, 0x15, 0x75, 0x0B, 0x00, 0x15, 0x0A, 0x12, 0x17, 0x06, 0x08, 0x13,
0x16, 0x00, 0x84, 0x72, 0x6F, 0x67, 0x72, 0x61, 0x6D, 0x00, 0x08, 0x05, 0x12, 0x15, 0x13, 0x00,
0x82, 0x6C, 0x65, 0x6D, 0x00, 0x12, 0x09, 0x12, 0x06, 0x00, 0x83, 0x6E, 0x66, 0x6F, 0x72, 0x6D,
0x00, 0x44, 0xA6, 0x0B, 0x07, 0xCE, 0x0B, 0x08, 0xD7, 0x0B, 0x0A, 0x3A, 0x0C, 0x0C, 0x8D, 0x0C,
0x0E, 0x99, 0x0C, 0x12, 0xC0, 0x0C, 0x13, 0x6C, 0x0D, 0x15, 0x78, 0x0D, 0x16, 0x83, 0x0D, 0x18,
0x8D, 0x0D, 0x1A, 0xA4, 0x0D, 0x00, 0x0C, 0x00, 0x4A, 0xAF, 0x0B, 0x17, 0xB7, 0x0B, 0x00, 0x04,
0x2C, 0x00, 0x82, 0x61, 0x69, 0x6E, 0x00, 0x51, 0xBE, 0x0B, 0x15, 0xC6, 0x0B, 0x00, 0x12, 0x06,
0x00, 0x82, 0x61, 0x69, 0x6E, 0x00, 0x08, 0x06, 0x00, 0x82, 0x61, 0x69, 0x6E, 0x00, 0x18, 0x12,
0x09, 0x2C, 0x00, 0x81, 0x6E, 0x64, 0x00, 0x47, 0xE7, 0x0B, 0x08, 0xF1, 0x0B, 0x0A, 0x1B, 0x0C,
0x13, 0x27, 0x0C, 0x16, 0x30, 0x0C, 0x00, 0x0F, 0x0C, 0x0B, 0x06, 0x00, 0x81, 0x72, 0x65, 0x6E,
0x00, 0x57, 0xF8, 0x0B, 0x1A, 0x11, 0x0C, 0x00, 0x48, 0xFF, 0x0B, 0x1A, 0x07, 0x0C, 0x00, 0x05,
0x00, 0x82, 0x77, 0x65, 0x65, 0x6E, 0x00, 0x08, 0x05, 0x00, 0x84, 0x74, 0x77, 0x65, 0x65, 0x6E,
0x00, 0x08, 0x05, 0x00, 0x83, 0x74, 0x77, 0x65, 0x65, 0x6E, 0x00, 0x12, 0x07, 0x1C, 0x0B, 0x00,
0x83, 0x72, 0x6F, 0x67, 0x65, 0x6E, 0x00, 0x04, 0x0B, 0x2C, 0x00, 0x81, 0x70, 0x65, 0x6E, 0x00,
0x12, 0x12, 0x0B, 0x06, 0x00, 0x83, 0x73, 0x65, 0x6E, 0x00, 0x48, 0x41, 0x0C, 0x0C, 0x4C, 0x0C,
0x00, 0x0C, 0x15, 0x12, 0x09, 0x00, 0x83, 0x65, 0x69, 0x67, 0x6E, 0x00, 0x4B, 0x5F, 0x0C, 0x0F,
0x65, 0x0C, 0x11, 0x6D, 0x0C, 0x12, 0x76, 0x0C, 0x15, 0x7D, 0x0C, 0x16, 0x84, 0x0C, 0x00, 0x17,
0x00, 0x81, 0x6E, 0x67, 0x00, 0x0F, 0x04, 0x00, 0x83, 0x69, 0x67, 0x6E, 0x00, 0x15, 0x04, 0x08,
0x0F, 0x00, 0x81, 0x6E, 0x67, 0x00, 0x0A, 0x2C, 0x00, 0x81, 0x6E, 0x67, 0x00, 0x17, 0x16, 0x00,
0x81, 0x6E, 0x67, 0x00, 0x04, 0x2C, 0x00, 0x82, 0x73, 0x69, 0x67, 0x6E, 0x00, 0x17, 0x04, 0x15,
0x08, 0x06, 0x00, 0x83, 0x74, 0x61, 0x69, 0x6E, 0x00, 0x4B, 0xA0, 0x0C, 0x0C, 0xA9, 0x0C, 0x00,
0x0C, 0x17, 0x00, 0x83, 0x68, 0x69, 0x6E, 0x6B, 0x00, 0x4B, 0xB0, 0x0C, 0x17, 0xB6, 0x0C, 0x00,
0x17, 0x00, 0x81, 0x6E, 0x6B, 0x00, 0x0B, 0x2C, 0x00, 0x84, 0x74, 0x68, 0x69, 0x6E, 0x6B, 0x00,
0x4C, 0xCA, 0x0C, 0x16, 0x56, 0x0D, 0x17, 0x60, 0x0D, 0x00, 0x46, 0xD4, 0x0C, 0x16, 0xE1, 0x0C,
0x17, 0xFB, 0x0C, 0x00, 0x0C, 0x16, 0x08, 0x07, 0x00, 0x85, 0x63, 0x69, 0x73, 0x69, 0x6F, 0x6E,
0x00, 0x44, 0xE8, 0x0C, 0x16, 0xF1, 0x0C, 0x00, 0x0C, 0x0F, 0x00, 0x83, 0x69, 0x73, 0x6F, 0x6E,
0x00, 0x04, 0x06, 0x06, 0x12, 0x00, 0x83, 0x69, 0x6F, 0x6E, 0x00, 0x44, 0x0E, 0x0D, 0x07, 0x1B,
0x0D, 0x0C, 0x25, 0x0D, 0x0F, 0x34, 0x0D, 0x11, 0x40, 0x0D, 0x16, 0x4C, 0x0D, 0x00, 0x15, 0x08,
0x05, 0x04, 0x00, 0x84, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x07, 0x04, 0x00, 0x83, 0x69,
0x74, 0x69, 0x6F, 0x6E, 0x00, 0x17, 0x0C, 0x13, 0x08, 0x15, 0x00, 0x86, 0x65, 0x74, 0x69, 0x74,
0x69, 0x6F, 0x6E, 0x00, 0x04, 0x08, 0x15, 0x00, 0x85, 0x6C, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x00,
0x06, 0x18, 0x09, 0x00, 0x85, 0x6E, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x12, 0x13, 0x00, 0x83,
0x69, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x0C, 0x19, 0x0C, 0x07, 0x00, 0x81, 0x69, 0x6F, 0x6E, 0x00,
0x0C, 0x06, 0x04, 0x15, 0x09, 0x00, 0x83, 0x74, 0x69, 0x6F, 0x6E, 0x00, 0x13, 0x0B, 0x04, 0x00,
0x84, 0x68, 0x61, 0x70, 0x70, 0x65, 0x6E, 0x00, 0x17, 0x18, 0x08, 0x15, 0x00, 0x83, 0x74, 0x75,
0x72, 0x6E, 0x00, 0x0A, 0x0C, 0x0B, 0x17, 0x00, 0x82, 0x6E, 0x67, 0x73, 0x00, 0x55, 0x94, 0x0D,
0x17, 0x9D, 0x0D, 0x00, 0x17, 0x08, 0x15, 0x00, 0x82, 0x75, 0x72, 0x6E, 0x00, 0x08, 0x15, 0x00,
0x80, 0x72, 0x6E, 0x00, 0x12, 0x0E, 0x11, 0x18, 0x00, 0x82, 0x6E, 0x6F, 0x77, 0x6E, 0x00, 0x47,
0xB9, 0x0D, 0x11, 0xC4, 0x0D, 0x1A, 0xCD, 0x0D, 0x00, 0x08, 0x18, 0x16, 0x13, 0x00, 0x83, 0x65,
0x75, 0x64, 0x6F, 0x00, 0x1A, 0x0E, 0x2C, 0x00, 0x82, 0x6E, 0x6F, 0x77, 0x00, 0x4F, 0xD4, 0x0D,
0x11, 0xDC, 0x0D, 0x00, 0x0F, 0x12, 0x09, 0x00, 0x81, 0x6F, 0x77, 0x00, 0x0E, 0x2C, 0x00, 0x81,
0x6F, 0x77, 0x00, 0x56, 0xEA, 0x0D, 0x18, 0xF4, 0x0D, 0x00, 0x04, 0x0B, 0x15, 0x08, 0x13, 0x00,
0x81, 0x70, 0x73, 0x00, 0x12, 0x12, 0x0F, 0x00, 0x81, 0x6B, 0x75, 0x70, 0x00, 0x44, 0x1C, 0x0E,
0x08, 0x5D, 0x0E, 0x0B, 0x67, 0x0F, 0x0F, 0x71, 0x0F, 0x12, 0x7F, 0x0F, 0x13, 0x90, 0x0F, 0x16,
0x9B, 0x0F, 0x17, 0xA4, 0x0F, 0x18, 0xB0, 0x0F, 0x1C, 0xB9, 0x0F, 0x00, 0x4C, 0x26, 0x0E, 0x0F,
0x30, 0x0E, 0x18, 0x52, 0x0E, 0x00, 0x0F, 0x0C, 0x10, 0x0C, 0x16, 0x00, 0x82, 0x61, 0x72, 0x00,
0x4C, 0x37, 0x0E, 0x18, 0x42, 0x0E, 0x00, 0x10, 0x10, 0x0C, 0x16, 0x00, 0x84, 0x69, 0x6C, 0x61,
0x72, 0x00, 0x06, 0x0C, 0x17, 0x04, 0x13, 0x00, 0x86, 0x72, 0x74, 0x69, 0x63, 0x75, 0x6C, 0x61,
0x72, 0x00, 0x0F, 0x0A, 0x08, 0x15, 0x00, 0x83, 0x75, 0x6C, 0x61, 0x72, 0x00, 0x44, 0x7C, 0x0E,
0x07, 0x84, 0x0E, 0x0B, 0x91, 0x0E, 0x0C, 0xCB, 0x0E, 0x0F, 0xE5, 0x0E, 0x10, 0xEF, 0x0E, 0x11,
0xF9, 0x0E, 0x12, 0x25, 0x0F, 0x17, 0x2D, 0x0F, 0x19, 0x4C, 0x0F, 0x00, 0x0F, 0x06, 0x00, 0x82,
0x65, 0x61, 0x72, 0x00, 0x11, 0x04, 0x0F, 0x04, 0x06, 0x00, 0x84, 0x65, 0x6E, 0x64, 0x61, 0x72,
0x00, 0x4A, 0x98, 0x0E, 0x17, 0xA3, 0x0E, 0x00, 0x0C, 0x08, 0x0B, 0x00, 0x85, 0x69, 0x67, 0x68,
0x65, 0x72, 0x00, 0x48, 0xAD, 0x0E, 0x0F, 0xB9, 0x0E, 0x18, 0xC2, 0x0E, 0x00, 0x0B, 0x0A, 0x12,
0x17, 0x00, 0x85, 0x65, 0x74, 0x68, 0x65, 0x72, 0x00, 0x12, 0x2C, 0x00, 0x84, 0x74, 0x68, 0x65,
0x72, 0x00, 0x09, 0x00, 0x83, 0x72, 0x74, 0x68, 0x65, 0x72, 0x00, 0x4B, 0xD2, 0x0E, 0x0F, 0xDA,
0x0E, 0x00, 0x17, 0x2C, 0x00, 0x82, 0x65, 0x69, 0x72, 0x00, 0x13, 0x10, 0x12, 0x06, 0x00, 0x83,
0x69, 0x6C, 0x65, 0x72, 0x00, 0x17, 0x0C, 0x09, 0x00, 0x83, 0x6C, 0x74, 0x65, 0x72, 0x00, 0x10,
0x04, 0x15, 0x0A, 0x2C, 0x00, 0x81, 0x61, 0x72, 0x00, 0x4C, 0x00, 0x0F, 0x17, 0x0C, 0x0F, 0x00,
0x0A, 0x0A, 0x08, 0x05, 0x00, 0x84, 0x69, 0x6E, 0x6E, 0x65, 0x72, 0x00, 0x4C, 0x13, 0x0F, 0x16,
0x1C, 0x0F, 0x00, 0x12, 0x13, 0x00, 0x83, 0x6E, 0x74, 0x65, 0x72, 0x00, 0x0C, 0x0F, 0x00, 0x82,
0x65, 0x6E, 0x65, 0x72, 0x00, 0x09, 0x08, 0x05, 0x00, 0x81, 0x72, 0x65, 0x00, 0x4B, 0x34, 0x0F,
0x18, 0x3E, 0x0F, 0x00, 0x12, 0x11, 0x04, 0x00, 0x83, 0x74, 0x68, 0x65, 0x72, 0x00, 0x13, 0x12,
0x10, 0x06, 0x00, 0x86, 0x6F, 0x6D, 0x70, 0x75, 0x74, 0x65, 0x72, 0x00, 0x48, 0x53, 0x0F, 0x1A,
0x5E, 0x0F, 0x00, 0x08, 0x15, 0x08, 0x0B, 0x1A, 0x00, 0x83, 0x76, 0x65, 0x72, 0x00, 0x12, 0x0B,
0x00, 0x82, 0x65, 0x76, 0x65, 0x72, 0x00, 0x08, 0x17, 0x12, 0x2C, 0x00, 0x82, 0x68, 0x65, 0x72,
0x00, 0x04, 0x18, 0x06, 0x0C, 0x17, 0x15, 0x04, 0x13, 0x00, 0x82, 0x6C, 0x61, 0x72, 0x00, 0x17,
0x04, 0x15, 0x08, 0x17, 0x11, 0x0C, 0x00, 0x87, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6F, 0x72, 0x00,
0x17, 0x0F, 0x0F, 0x18, 0x11, 0x00, 0x82, 0x70, 0x74, 0x72, 0x00, 0x04, 0x08, 0x1C, 0x2C, 0x00,
0x81, 0x72, 0x73, 0x00, 0x12, 0x04, 0x15, 0x08, 0x13, 0x12, 0x00, 0x82, 0x74, 0x6F, 0x72, 0x00,
0x06, 0x12, 0x2C, 0x00, 0x81, 0x63, 0x75, 0x72, 0x00, 0x08, 0x19, 0x08, 0x2C, 0x00, 0x81, 0x72,
0x79, 0x00, 0x44, 0xDB, 0x0F, 0x08, 0x03, 0x10, 0x0A, 0x93, 0x10, 0x13, 0x9E, 0x10, 0x15, 0xAA,
0x10, 0x16, 0xB5, 0x10, 0x17, 0x4D, 0x11, 0x18, 0x55, 0x11, 0x00, 0x4B, 0xE5, 0x0F, 0x13, 0xF0,
0x0F, 0x1C, 0xFA, 0x0F, 0x00, 0x13, 0x15, 0x08, 0x13, 0x00, 0x83, 0x68, 0x61, 0x70, 0x73, 0x00,
0x0B, 0x15, 0x08, 0x13, 0x00, 0x82, 0x61, 0x70, 0x73, 0x00, 0x1A, 0x0F, 0x04, 0x00, 0x82, 0x61,
0x79, 0x73, 0x00, 0x44, 0x13, 0x10, 0x06, 0x2A, 0x10, 0x0C, 0x35, 0x10, 0x0F, 0x81, 0x10, 0x16,
0x88, 0x10, 0x00, 0x47, 0x1A, 0x10, 0x0E, 0x22, 0x10, 0x00, 0x0C, 0x2C, 0x00, 0x82, 0x65, 0x61,
0x73, 0x00, 0x17, 0x00, 0x83, 0x61, 0x6B, 0x65, 0x73, 0x00, 0x08, 0x07, 0x11, 0x0C, 0x00, 0x83,
0x69, 0x63, 0x65, 0x73, 0x00, 0x46, 0x3F, 0x10, 0x15, 0x66, 0x10, 0x17, 0x75, 0x10, 0x00, 0x48,
0x46, 0x10, 0x0C, 0x50, 0x10, 0x00, 0x07, 0x11, 0x0C, 0x00, 0x84, 0x69, 0x63, 0x65, 0x73, 0x00,
0x47, 0x57, 0x10, 0x17, 0x5E, 0x10, 0x00, 0x11, 0x0C, 0x00, 0x82, 0x65, 0x73, 0x00, 0x15, 0x08,
0x19, 0x00, 0x82, 0x65, 0x73, 0x00, 0x12, 0x16, 0x08, 0x06, 0x06, 0x04, 0x00, 0x84, 0x73, 0x6F,
0x72, 0x69, 0x65, 0x73, 0x00, 0x0F, 0x0C, 0x05, 0x04, 0x00, 0x83, 0x69, 0x74, 0x69, 0x65, 0x73,
0x00, 0x04, 0x09, 0x00, 0x81, 0x73, 0x65, 0x00, 0x12, 0x0B, 0x06, 0x2C, 0x00, 0x82, 0x6F, 0x73,
0x65, 0x73, 0x00, 0x0C, 0x11, 0x0B, 0x17, 0x00, 0x83, 0x69, 0x6E, 0x67, 0x73, 0x00, 0x04, 0x08,
0x0B, 0x15, 0x08, 0x13, 0x00, 0x83, 0x61, 0x70, 0x73, 0x00, 0x08, 0x04, 0x1C, 0x2C, 0x00, 0x83,
0x65, 0x61, 0x72, 0x73, 0x00, 0x44, 0xBF, 0x10, 0x08, 0xCB, 0x10, 0x12, 0x42, 0x11, 0x00, 0x15,
0x04, 0x05, 0x10, 0x08, 0x00, 0x82, 0x72, 0x61, 0x73, 0x73, 0x00, 0x46, 0xD8, 0x10, 0x11, 0xF0,
0x10, 0x15, 0x0D, 0x11, 0x16, 0x2A, 0x11, 0x00, 0x46, 0xDF, 0x10, 0x18, 0xE8, 0x10, 0x00, 0x12,
0x15, 0x13, 0x00, 0x83, 0x65, 0x73, 0x73, 0x00, 0x16, 0x00, 0x82, 0x63, 0x65, 0x73, 0x73, 0x00,
0x4C, 0xF7, 0x10, 0x16, 0x03, 0x11, 0x00, 0x16, 0x16, 0x18, 0x05, 0x00, 0x85, 0x69, 0x6E, 0x65,
0x73, 0x73, 0x00, 0x18, 0x05, 0x00, 0x83, 0x69, 0x6E, 0x65, 0x73, 0x73, 0x00, 0x13, 0x00, 0x55,
0x16, 0x11, 0x18, 0x21, 0x11, 0x00, 0x18, 0x16, 0x00, 0x85, 0x70, 0x70, 0x72, 0x65, 0x73, 0x73,
0x00, 0x16, 0x00, 0x83, 0x70, 0x72, 0x65, 0x73, 0x73, 0x00, 0x46, 0x31, 0x11, 0x12, 0x3A, 0x11,
0x00, 0x06, 0x18, 0x16, 0x00, 0x83, 0x65, 0x73, 0x73, 0x00, 0x13, 0x00, 0x82, 0x73, 0x65, 0x73,
0x73, 0x00, 0x15, 0x06, 0x06, 0x04, 0x00, 0x84, 0x72, 0x6F, 0x73, 0x73, 0x00, 0x15, 0x0C, 0x09,
0x00, 0x81, 0x73, 0x74, 0x00, 0x52, 0x5C, 0x11, 0x16, 0x6A, 0x11, 0x00, 0x0F, 0x12, 0x10, 0x12,
0x11, 0x04, 0x00, 0x84, 0x61, 0x6C, 0x6F, 0x75, 0x73, 0x00, 0x11, 0x08, 0x06, 0x11, 0x12, 0x06,
0x00, 0x85, 0x73, 0x65, 0x6E, 0x73, 0x75, 0x73, 0x00, 0x44, 0x9E, 0x11, 0x08, 0xBC, 0x11, 0x0A,
0xD9, 0x11, 0x0B, 0xE3, 0x11, 0x0C, 0x19, 0x12, 0x0F, 0x24, 0x12, 0x10, 0x2F, 0x12, 0x11, 0x3B,
0x12, 0x12, 0x97, 0x13, 0x13, 0xBD, 0x13, 0x16, 0xD9, 0x13, 0x18, 0x6B, 0x14, 0x00, 0x55, 0xA5,
0x11, 0x1A, 0xB0, 0x11, 0x00, 0x08, 0x13, 0x08, 0x16, 0x00, 0x83, 0x61, 0x72, 0x61, 0x74, 0x00,
0x0B, 0x08, 0x10, 0x12, 0x16, 0x00, 0x83, 0x77, 0x68, 0x61, 0x74, 0x00, 0x44, 0xC3, 0x11, 0x11,
0xCC, 0x11, 0x00, 0x15, 0x0A, 0x2C, 0x00, 0x82, 0x65, 0x61, 0x74, 0x00, 0x10, 0x11, 0x15, 0x08,
0x19, 0x12, 0x0A, 0x00, 0x82, 0x65, 0x6E, 0x74, 0x00, 0x0B, 0x18, 0x04, 0x06, 0x00, 0x82, 0x67,
0x68, 0x74, 0x00, 0x47, 0xED, 0x11, 0x0A, 0xF4, 0x11, 0x0C, 0x0E, 0x12, 0x00, 0x0C, 0x1A, 0x00,
0x81, 0x74, 0x68, 0x00, 0x51, 0xFB, 0x11, 0x18, 0x02, 0x12, 0x00, 0x08, 0x0F, 0x00, 0x81, 0x74,
0x68, 0x00, 0x12, 0x15, 0x0B, 0x17, 0x00, 0x85, 0x6F, 0x75, 0x67, 0x68, 0x74, 0x00, 0x0A, 0x11,
0x12, 0x17, 0x00, 0x83, 0x69, 0x67, 0x68, 0x74, 0x00, 0x17, 0x18, 0x12, 0x05, 0x04, 0x00, 0x81,
0x20, 0x69, 0x74, 0x00, 0x16, 0x18, 0x08, 0x15, 0x00, 0x83, 0x73, 0x75, 0x6C, 0x74, 0x00, 0x04,
0x17, 0x15, 0x12, 0x13, 0x10, 0x0C, 0x00, 0x81, 0x6E, 0x74, 0x00, 0x44, 0x48, 0x12, 0x08, 0x80,
0x12, 0x15, 0x84, 0x13, 0x16, 0x8F, 0x13, 0x00, 0x4C, 0x55, 0x12, 0x11, 0x60, 0x12, 0x15, 0x6B,
0x12, 0x17, 0x75, 0x12, 0x00, 0x13, 0x0C, 0x06, 0x08, 0x15, 0x00, 0x82, 0x65, 0x6E, 0x74, 0x00,
0x0C, 0x10, 0x12, 0x15, 0x13, 0x00, 0x82, 0x65, 0x6E, 0x74, 0x00, 0x04, 0x13, 0x13, 0x04, 0x00,
0x82, 0x65, 0x6E, 0x74, 0x00, 0x08, 0x13, 0x10, 0x12, 0x06, 0x00, 0x82, 0x65, 0x6E, 0x74, 0x00,
0x4C, 0x90, 0x12, 0x10, 0xB1, 0x12, 0x15, 0x15, 0x13, 0x19, 0x6F, 0x13, 0x1D, 0x79, 0x13, 0x00,
0x46, 0x97, 0x12, 0x13, 0xA4, 0x12, 0x00, 0x08, 0x09, 0x09, 0x08, 0x00, 0x85, 0x69, 0x63, 0x69,
0x65, 0x6E, 0x74, 0x00, 0x08, 0x06, 0x08, 0x15, 0x00, 0x85, 0x69, 0x70, 0x69, 0x65, 0x6E, 0x74,
0x00, 0x48, 0xBE, 0x12, 0x11, 0xCA, 0x12, 0x15, 0xEB, 0x12, 0x17, 0x0A, 0x13, 0x00, 0x19, 0x12,
0x0A, 0x00, 0x83, 0x72, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x48, 0xD1, 0x12, 0x15, 0xDD, 0x12,
0x00, 0x19, 0x12, 0x0A, 0x00, 0x84, 0x72, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x12, 0x19, 0x12,
0x0A, 0x00, 0x86, 0x65, 0x72, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x48, 0xF2, 0x12, 0x12, 0xFD,
0x12, 0x00, 0x19, 0x12, 0x0A, 0x00, 0x83, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x19, 0x12, 0x0A,
0x00, 0x85, 0x65, 0x72, 0x6E, 0x6D, 0x65, 0x6E, 0x74, 0x00, 0x04, 0x17, 0x16, 0x00, 0x83, 0x65,
0x6D, 0x65, 0x6E, 0x74, 0x00, 0x44, 0x22, 0x13, 0x08, 0x2D, 0x13, 0x09, 0x39, 0x13, 0x15, 0x44,
0x13, 0x00, 0x13, 0x04, 0x00, 0x84, 0x70, 0x61, 0x72, 0x65, 0x6E, 0x74, 0x00, 0x09, 0x0C, 0x07,
0x00, 0x84, 0x66, 0x65, 0x72, 0x65, 0x6E, 0x74, 0x00, 0x09, 0x0C, 0x07, 0x00, 0x83, 0x65, 0x72,
0x65, 0x6E, 0x74, 0x00, 0x44, 0x4B, 0x13, 0x08, 0x63, 0x13, 0x00, 0x13, 0x00, 0x44, 0x54, 0x13,
0x13, 0x5C, 0x13, 0x00, 0x85, 0x70, 0x61, 0x72, 0x65, 0x6E, 0x74, 0x00, 0x04, 0x00, 0x83, 0x65,
0x6E, 0x74, 0x00, 0x09, 0x0C, 0x07, 0x00, 0x85, 0x66, 0x65, 0x72, 0x65, 0x6E, 0x74, 0x00, 0x08,
0x0F, 0x08, 0x15, 0x00, 0x82, 0x61, 0x6E, 0x74, 0x00, 0x0C, 0x11, 0x0A, 0x12, 0x06, 0x00, 0x82,
0x61, 0x6E, 0x74, 0x00, 0x08, 0x09, 0x09, 0x0C, 0x07, 0x00, 0x81, 0x65, 0x6E, 0x74, 0x00, 0x12,
0x06, 0x00, 0x82, 0x6E, 0x73, 0x74, 0x00, 0x51, 0xA1, 0x13, 0x15, 0xAB, 0x13, 0x16, 0xB4, 0x13,
0x00, 0x07, 0x0C, 0x07, 0x00, 0x82, 0x20, 0x6E, 0x6F, 0x74, 0x00, 0x13, 0x08, 0x15, 0x00, 0x82,
0x6F, 0x72, 0x74, 0x00, 0x10, 0x0F, 0x04, 0x00, 0x82, 0x6F, 0x73, 0x74, 0x00, 0x48, 0xC4, 0x13,
0x1C, 0xCF, 0x13, 0x00, 0x0C, 0x06, 0x08, 0x15, 0x00, 0x83, 0x65, 0x69, 0x70, 0x74, 0x00, 0x06,
0x11, 0x08, 0x00, 0x82, 0x72, 0x79, 0x70, 0x74, 0x00, 0x48, 0xEC, 0x13, 0x0A, 0x15, 0x14, 0x0C,
0x1E, 0x14, 0x10, 0x3B, 0x14, 0x11, 0x45, 0x14, 0x18, 0x60, 0x14, 0x00, 0x4A, 0xF3, 0x13, 0x15,
0x0A, 0x14, 0x00, 0x4C, 0xFA, 0x13, 0x18, 0x02, 0x14, 0x00, 0x0B, 0x00, 0x82, 0x68, 0x65, 0x73,
0x74, 0x00, 0x16, 0x00, 0x82, 0x67, 0x65, 0x73, 0x74, 0x00, 0x17, 0x11, 0x0C, 0x00, 0x83, 0x65,
0x72, 0x65, 0x73, 0x74, 0x00, 0x15, 0x04, 0x0F, 0x00, 0x81, 0x65, 0x73, 0x74, 0x00, 0x49, 0x25,
0x14, 0x11, 0x31, 0x14, 0x00, 0x08, 0x11, 0x04, 0x10, 0x00, 0x84, 0x69, 0x66, 0x65, 0x73, 0x74,
0x00, 0x04, 0x0A, 0x04, 0x00, 0x83, 0x69, 0x6E, 0x73, 0x74, 0x00, 0x12, 0x0F, 0x04, 0x00, 0x83,
0x6D, 0x6F, 0x73, 0x74, 0x00, 0x44, 0x4C, 0x14, 0x11, 0x57, 0x14, 0x00, 0x0C, 0x0A, 0x04, 0x00,
0x84, 0x61, 0x69, 0x6E, 0x73, 0x74, 0x00, 0x0C, 0x04, 0x0A, 0x04, 0x00, 0x82, 0x73, 0x74, 0x00,
0x0D, 0x04, 0x2C, 0x00, 0x83, 0x64, 0x6A, 0x75, 0x73, 0x74, 0x00, 0x46, 0x78, 0x14, 0x12, 0x90,
0x14, 0x13, 0xA8, 0x14, 0x17, 0xBF, 0x14, 0x00, 0x48, 0x7F, 0x14, 0x15, 0x89, 0x14, 0x00, 0x06,
0x1B, 0x08, 0x00, 0x84, 0x65, 0x63, 0x75, 0x74, 0x00, 0x0C, 0x06, 0x00, 0x80, 0x69, 0x74, 0x00,
0x44, 0x97, 0x14, 0x05, 0xA0, 0x14, 0x00, 0x05, 0x00, 0x84, 0x61, 0x62, 0x6F, 0x75, 0x74, 0x00,
0x05, 0x04, 0x00, 0x83, 0x6F, 0x75, 0x74, 0x00, 0x57, 0xAF, 0x14, 0x18, 0xB7, 0x14, 0x00, 0x11,
0x0C, 0x00, 0x83, 0x70, 0x75, 0x74, 0x00, 0x12, 0x00, 0x82, 0x74, 0x70, 0x75, 0x74, 0x00, 0x13,
0x18, 0x12, 0x00, 0x83, 0x74, 0x70, 0x75, 0x74, 0x00, 0x17, 0x12, 0x05, 0x04, 0x00, 0x81, 0x75,
0x74, 0x00, 0x48, 0xD9, 0x14, 0x0C, 0xFD, 0x14, 0x00, 0x44, 0xE0, 0x14, 0x0C, 0xE7, 0x14, 0x00,
0x0B, 0x2C, 0x00, 0x81, 0x76, 0x65, 0x00, 0x46, 0xEE, 0x14, 0x08, 0xF6, 0x14, 0x00, 0x08, 0x15,
0x00, 0x82, 0x65, 0x69, 0x76, 0x00, 0x06, 0x08, 0x15, 0x00, 0x81, 0x76, 0x00, 0x08, 0x0B, 0x06,
0x04, 0x2C, 0x00, 0x82, 0x69, 0x65, 0x76, 0x00, 0x4C, 0x0F, 0x15, 0x11, 0x19, 0x15, 0x00, 0x08,
0x19, 0x08, 0x15, 0x00, 0x82, 0x69, 0x65, 0x77, 0x00, 0x12, 0x0E, 0x2C, 0x00, 0x82, 0x6E, 0x6F,
0x77, 0x00, 0x46, 0x3B, 0x15, 0x08, 0x76, 0x15, 0x0B, 0x80, 0x15, 0x0F, 0x92, 0x15, 0x11, 0x57,
0x16, 0x15, 0x72, 0x16, 0x16, 0x0C, 0x17, 0x17, 0x27, 0x17, 0x00, 0x44, 0x48, 0x15, 0x08, 0x54,
0x15, 0x0C, 0x5F, 0x15, 0x13, 0x6A, 0x15, 0x00, 0x15, 0x06, 0x12, 0x13, 0x1C, 0x0B, 0x00, 0x82,
0x69, 0x73, 0x79, 0x00, 0x18, 0x14, 0x08, 0x15, 0x09, 0x00, 0x81, 0x6E, 0x63, 0x79, 0x00, 0x15,
0x06, 0x12, 0x13, 0x1C, 0x0B, 0x00, 0x81, 0x73, 0x79, 0x00, 0x18, 0x15, 0x0E, 0x11, 0x04, 0x05,
0x00, 0x81, 0x74, 0x63, 0x79, 0x00, 0x17, 0x09, 0x04, 0x16, 0x00, 0x82, 0x65, 0x74, 0x79, 0x00,
0x06, 0x15, 0x04, 0x15, 0x0C, 0x08, 0x0B, 0x00, 0x87, 0x69, 0x65, 0x72, 0x61, 0x72, 0x63, 0x68,
0x79, 0x00, 0x44, 0xA5, 0x15, 0x0B, 0xE8, 0x15, 0x0E, 0xF2, 0x15, 0x0F, 0xFA, 0x15, 0x12, 0x42,
0x16, 0x15, 0x4C, 0x16, 0x00, 0x45, 0xB8, 0x15, 0x08, 0xC1, 0x15, 0x0F, 0xC7, 0x15, 0x11, 0xD0,
0x15, 0x15, 0xD7, 0x15, 0x18, 0xE0, 0x15, 0x00, 0x12, 0x15, 0x13, 0x00, 0x81, 0x62, 0x6C, 0x79,
0x00, 0x15, 0x00, 0x80, 0x6C, 0x79, 0x00, 0x08, 0x15, 0x00, 0x83, 0x61, 0x6C, 0x6C, 0x79, 0x00,
0x0C, 0x09, 0x00, 0x80, 0x6C, 0x79, 0x00, 0x08, 0x11, 0x08, 0x0A, 0x00, 0x80, 0x6C, 0x79, 0x00,
0x17, 0x06, 0x04, 0x00, 0x80, 0x6C, 0x79, 0x00, 0x0A, 0x0C, 0x0F, 0x16, 0x00, 0x81, 0x74, 0x6C,
0x79, 0x00, 0x0C, 0x0F, 0x00, 0x81, 0x65, 0x6C, 0x79, 0x00, 0x44, 0x04, 0x16, 0x05, 0x2F, 0x16,
0x08, 0x38, 0x16, 0x00, 0x56, 0x0B, 0x16, 0x17, 0x23, 0x16, 0x00, 0x18, 0x00, 0x6C, 0x14, 0x16,
0x16, 0x1B, 0x16, 0x00, 0x83, 0x75, 0x61, 0x6C, 0x6C, 0x79, 0x00, 0x18, 0x00, 0x84, 0x61, 0x6C,
0x6C, 0x79, 0x00, 0x18, 0x06, 0x04, 0x00, 0x85, 0x74, 0x75, 0x61, 0x6C, 0x6C, 0x79, 0x00, 0x04,
0x05, 0x12, 0x15, 0x13, 0x00, 0x81, 0x79, 0x00, 0x04, 0x15, 0x00, 0x84, 0x65, 0x61, 0x6C, 0x6C,
0x79, 0x00, 0x10, 0x12, 0x11, 0x04, 0x00, 0x82, 0x61, 0x6C, 0x79, 0x00, 0x04, 0x10, 0x0C, 0x15,
0x13, 0x00, 0x81, 0x69, 0x6C, 0x79, 0x00, 0x48, 0x5E, 0x16, 0x13, 0x67, 0x16, 0x00, 0x12, 0x10,
0x2C, 0x00, 0x82, 0x6E, 0x65, 0x79, 0x00, 0x04, 0x10, 0x12, 0x06, 0x00, 0x83, 0x70, 0x61, 0x6E,
0x79, 0x00, 0x44, 0x7F, 0x16, 0x08, 0xE7, 0x16, 0x12, 0xF0, 0x16, 0x17, 0xFD, 0x16, 0x00, 0x45,
0x8F, 0x16, 0x0C, 0x98, 0x16, 0x0F, 0xA5, 0x16, 0x10, 0xC1, 0x16, 0x16, 0xCA, 0x16, 0x00, 0x0C,
0x0F, 0x00, 0x82, 0x72, 0x61, 0x72, 0x79, 0x00, 0x0F, 0x0F, 0x0C, 0x1B, 0x18, 0x04, 0x00, 0x84,
0x69, 0x61, 0x72, 0x79, 0x00, 0x4C, 0xAC, 0x16, 0x0F, 0xB6, 0x16, 0x00, 0x1B, 0x18, 0x04, 0x00,
0x82, 0x69, 0x61, 0x72, 0x79, 0x00, 0x0C, 0x1B, 0x18, 0x04, 0x00, 0x83, 0x69, 0x61, 0x72, 0x79,
0x00, 0x18, 0x16, 0x00, 0x82, 0x6D, 0x61, 0x72, 0x79, 0x00, 0x08, 0x06, 0x00, 0x46, 0xD4, 0x16,
0x08, 0xDF, 0x16, 0x00, 0x08, 0x11, 0x00, 0x85, 0x65, 0x73, 0x73, 0x61, 0x72, 0x79, 0x00, 0x11,
0x00, 0x82, 0x73, 0x61, 0x72, 0x79, 0x00, 0x13, 0x12, 0x15, 0x13, 0x00, 0x80, 0x74, 0x79, 0x00,
0x0A, 0x04, 0x17, 0x04, 0x06, 0x00, 0x84, 0x65, 0x67, 0x6F, 0x72, 0x79, 0x00, 0x11, 0x18, 0x06,
0x12, 0x2C, 0x00, 0x86, 0x63, 0x6F, 0x75, 0x6E, 0x74, 0x72, 0x79, 0x00, 0x04, 0x00, 0x55, 0x15,
0x17, 0x1A, 0x20, 0x17, 0x00, 0x06, 0x12, 0x13, 0x1C, 0x0B, 0x00, 0x82, 0x69, 0x73, 0x79, 0x00,
0x0F, 0x04, 0x00, 0x81, 0x79, 0x73, 0x00, 0x49, 0x31, 0x17, 0x0F, 0x39, 0x17, 0x15, 0x42, 0x17,
0x00, 0x04, 0x16, 0x00, 0x81, 0x65, 0x74, 0x79, 0x00, 0x0C, 0x05, 0x04, 0x00, 0x81, 0x69, 0x74,
0x79, 0x00, 0x13, 0x08, 0x12, 0x15, 0x13, 0x00, 0x84, 0x70, 0x65, 0x72, 0x74, 0x79, 0x00
};

View file

@ -0,0 +1,474 @@
# Copyright 2021 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# This is a larger example typo dictionary containing 400 entries. It builds to
# a table of about 6000 bytes, so you'll need a keyboard with a generous
# amount of free firmware space to use the full dictionary. Alternatively, pick
# out a subset of entries to a separate file, then build a table from that.
#
# Dictionary syntax:
# Each line of this file defines one typo correction entry with the syntax
# "typo -> correction". Typos and corrections are case insensitive, and any
# whitespace before or after the typo and correction is ignored. The typo must be
# only the letters a-z, or the special character : representing a word break.
#
# For documentation about how to use this dictionary, see
# https://getreuer.info/posts/keyboards/autocorrection
#
# Further resources:
# * Wikipedia has a large list of common typos at
# https://en.wikipedia.org/wiki/Wikipedia:Lists_of_common_misspellings/For_machines
#
# * EmacsWiki has another list of typos at
# https://www.emacswiki.org/emacs/autocorrection_abbrev_defs
#
# * You can find data on English word frequencies at
# https://www.wordfrequency.info/samples.asp
## 10 most common words.
# The words "there", "about", "their", "would", "people", "which", "could",
# "think", "other", and "because" are among the most common words in English
# that are 5 letters or longer. (We don't include entries for words shorter than
# that to avoid false triggering.)
:htere -> there
abbout -> about
abotu -> about
baout -> about
:theri -> their
:thier -> their
:owudl -> would
woudl -> would
peaple -> people
peolpe -> people
peopel -> people
poeple -> people
poeople -> people
:hwihc -> which
whcih -> which
whihc -> which
whlch -> which
wihch -> which
coudl -> could
:htikn -> think
:htink -> think
thikn -> think
thiunk -> think
tihkn -> think
:olther -> other
:otehr -> other
baceause -> because
beacuse -> because
becasue -> because
beccause -> because
becouse -> because
becuase -> because
## Common words, 11-20.
theese -> these
:goign -> going
:gonig -> going
:yaers -> years
:yeasr -> years
:thsoe -> those
shoudl -> should
raelly -> really
realy -> really
relaly -> really
bedore -> before
befoer -> before
littel -> little
beeing -> being
:hwile -> while
## Common words, 21-30.
aroud -> around
arround -> around
arund -> around
thign -> thing
thigsn -> things
thnigs -> things
anohter -> another
beteen -> between
beween -> between
bewteen -> between
:eveyr -> every
:graet -> great
:agian -> again
:sicne -> since
alwasy -> always
alwyas -> always
throught -> thought
## Words especially susceptible to skipping or transposing a letter.
# These entries are for words that are easy enough to spell, but not necessarily
# easy to press the keys in the right order.
# Catch misspellings of "achieves", "achieving", etc.
:acheiv -> achiev
almsot -> almost
alomst -> almost
chnage -> change
chekc -> check
childen -> children
claer -> clear
comapny -> company
contian -> contain
elasped -> elapsed
feild -> field
fitler -> filter
firts -> first
follwo -> follow
:foudn -> found
frequecy -> frequency
firend -> friend
freind -> friend
heigth -> height
iamge -> image
inital -> initial
intput -> input
laguage -> language
lenght -> length
levle -> level
libary -> library
:moeny -> money
mysefl -> myself
ouptut -> output
ouput -> output
probaly -> probably
probelm -> problem
recrod -> record
reponse -> response
reprot -> report
singel -> single
stregth -> strength
strengh -> strength
tkaes -> takes
therfore -> therefore
todya -> today
toghether -> together
unkown -> unknown
unqiue -> unique
widht -> width
## Words with tricky spelling.
# If you are a good speller, you could drop this section.
aberation -> aberration
accross -> across
adviced -> advised
aledge -> allege
alledge -> allege
amature -> amateur
anomolous -> anomalous
anomoly -> anomaly
aparent -> apparent
aparrent -> apparent
apparant -> apparent
apparrent -> apparent
asthetic -> aesthetic
auxilary -> auxiliary
auxillary -> auxiliary
auxilliary -> auxiliary
bankrupcy -> bankruptcy
busness -> business
bussiness -> business
calander -> calendar
commitee -> committee
comittee -> committee
competance -> competence
competant -> competent
concensus -> consensus
cognizent -> cognizant
copywrite: -> copyright
choosen -> chosen
collegue -> colleague
excercise -> exercise
:grammer -> grammar
:guage -> gauge
govement -> government
govenment -> government
goverment -> government
governmnet -> government
govorment -> government
govornment -> government
guaratee -> guarantee
garantee -> guarantee
gaurantee -> guarantee
heirarchy -> hierarchy
hygeine -> hygiene
hypocracy -> hypocrisy
hypocrasy -> hypocrisy
hypocricy -> hypocrisy
hypocrit: -> hypocrite
looses: -> loses
maintence -> maintenance
morgage -> mortgage
neccesary -> necessary
necesary -> necessary
pallete -> palette
paralel -> parallel
parralel -> parallel
parrallel -> parallel
priviledge -> privilege
probablly -> probably
prominant -> prominent
propogate -> propagate
proove -> prove
psuedo -> pseudo
reciept -> receipt
# Catch misspellings of "receives", "receiving", etc.
receiev -> receiv
reciev -> receiv
recepient -> recipient
recipiant -> recipient
relevent -> relevant
repitition -> repetition
safty -> safety
saftey -> safety
# Catch misspellings of "separate", "separating", etc.
seperat -> separat
spectogram -> spectrogram
symetric -> symmetric
tolerence -> tolerance
## Words particularly for coding.
# Entries for common code keywords ("const") and terminology ("lookup").
cacheing -> caching
complier -> compiler
doulbe -> double
dyanmic -> dynamic
# As in "execute", "executable", "executing", ...
excecut -> execut
failse -> false
fales -> false
fasle -> false
flase -> false
indeces -> indices
indecies -> indices
indicies -> indices
interator -> iterator
looup -> lookup
namesapce -> namespace
namespcae -> namespace
nulltpr -> nullptr
operaotr -> operator
overide -> override
ovveride -> override
poitner -> pointer
:rference -> reference
referece -> reference
singed -> signed
stirng -> string
strign -> string
swithc -> switch
swtich -> switch
teamplate -> template
tempalte -> template
:ture -> true
retrun -> return
retun -> return
reutrn -> return
cosnt -> const
virutal -> virtual
vitual -> virtual
yeild -> yield
## Catch skipped spaces between common words.
:alot: -> a lot
:andteh -> and the
:andthe -> and the
:asthe -> as the
:atthe -> at the
abouta -> about a
aboutit -> about it
aboutthe -> about the
:tothe -> to the
didnot -> did not
fromthe -> from the
## Various additional entries.
:agred -> agreed
:ajust -> adjust
:anual -> annual
:asign -> assign
:aslo: -> also
:casue -> cause
:choses -> chooses
:gaurd -> guard
:haev -> have
:hapen -> happen
:idaes -> ideas
:jsut: -> just
:jstu: -> just
:knwo -> know
:konw -> know
:kwno -> know
:ocuntry -> country
:ocur -> occur
:socre -> score
:szie -> size
:the:the: -> the
:turth -> truth
:uesd: -> used
:usally -> usually
abilties -> abilities
abilty -> ability
abvove -> above
accesories -> accessories
accomodate -> accommodate
acommodate -> accommodate
acomplish -> accomplish
actualy -> actually
acurate -> accurate
acutally -> actually
addtion -> addition
againnst -> against
aganist -> against
aggreed -> agreed
agianst -> against
ahppn -> happen
allign -> align
anytying -> anything
aquire -> acquire
availabe -> available
availaible -> available
availalbe -> available
availble -> available
availiable -> available
avalable -> available
avaliable -> available
avilable -> available
bandwith -> bandwidth
begginer -> beginner
beleif -> belief
beleive -> believe
belive -> believe
breif -> brief
burried -> buried
caluclate -> calculate
caluculate -> calculate
calulate -> calculate
catagory -> category
cauhgt -> caught
ceratin -> certain
certian -> certain
cheif -> chief
cieling -> ceiling
circut -> circuit
clasic -> classic
cmoputer -> computer
coform -> conform
comming: -> coming
considerd -> considered
dervied -> derived
desicion -> decision
diferent -> different
diferrent -> different
differnt -> different
diffrent -> different
divison -> division
effecient -> efficient
eligable -> eligible
elpased -> elapsed
embarass -> embarrass
embeded -> embedded
encypt -> encrypt
finaly -> finally
foriegn -> foreign
foward -> forward
fraciton -> fraction
fucntion -> function
fufill -> fulfill
fullfill -> fulfill
futher -> further
ganerate -> generate
generaly -> generally
greatful -> grateful
heigher -> higher
higest -> highest
howver -> however
hydogen -> hydrogen
importamt -> important
inclued -> include
insted -> instead
intrest -> interest
invliad -> invalid
largst -> largest
learnign -> learning
liasion -> liaison
likly -> likely
lisense -> license
listner -> listener
macthing -> matching
manefist -> manifest
mesage -> message
naturual -> natural
occassion -> occasion
occured -> occurred
particualr -> particular
paticular -> particular
peice -> piece
perhasp -> perhaps
perheaps -> perhaps
perhpas -> perhaps
perphas -> perhaps
persue -> pursue
posess -> possess
postion -> position
preiod -> period
primarly -> primarily
privte -> private
proccess -> process
proeprty -> property
propery -> property
realtion -> relation
reasearch -> research
recuring -> recurring
refered -> referred
regluar -> regular
releated -> related
resutl -> result
reuslt -> result
reveiw -> review
satisifed -> satisfied
scheduel -> schedule
sequnce -> sequence
similiar -> similar
simmilar -> similar
slighly -> slightly
somehwat -> somewhat
statment -> statement
sucess -> success
succsess -> success
sugest -> suggest
sumary -> summary
supress -> suppress
surpress -> suppress
thresold -> threshold
tongiht -> tonight
tranpose -> transpose
typcial -> typical
udpate -> update
ususally -> usually
verticies -> vertices
whereever -> wherever
wherre -> where
wierd -> weird

264
features/casemodes.c Normal file
View file

@ -0,0 +1,264 @@
/* Copyright 2021 Andrew Rae ajrae.nv@gmail.com @andrewjrae
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "casemodes.h"
/* The caps word concept started with me @iaap on splitkb.com discord.
* However it has been implemented and extended by many splitkb.com users:
* - @theol0403 made many improvements to initial implementation
* - @precondition used caps lock rather than shifting
* - @dnaq his own implementation which also used caps lock
* - @sevanteri added underscores on spaces
* - @metheon extended on @sevanteri's work and added specific modes for
* snake_case and SCREAMING_SNAKE_CASE
* - @baffalop came up with the idea for xcase, which he implements in his own
* repo, however this is implemented by @iaap with support also for one-shot-shift.
* - @sevanteri
* - fixed xcase waiting mode to allow more modified keys and keys from other layers.
* - Added @baffalop's separator defaulting on first keypress, with a
* configurable default separator and overrideable function to determine
* if the default should be used.
*/
#ifndef DEFAULT_XCASE_SEPARATOR
#define DEFAULT_XCASE_SEPARATOR KC_UNDS
#endif
#define IS_OSM(keycode) (keycode >= QK_ONE_SHOT_MOD && keycode <= QK_ONE_SHOT_MOD_MAX)
// bool to keep track of the caps word state
static bool caps_word_on = false;
// enum to keep track of the xcase state
static enum xcase_state xcase_state = XCASE_OFF;
// the keycode of the xcase delimiter
static uint16_t xcase_delimiter;
// the number of keys to the last delimiter
static int8_t distance_to_last_delim = -1;
// Check whether caps word is on
bool caps_word_enabled(void) {
return caps_word_on;
}
// Enable caps word
void enable_caps_word(void) {
caps_word_on = true;
#ifndef CAPSWORD_USE_SHIFT
if (!host_keyboard_led_state().caps_lock) {
tap_code(KC_CAPS);
}
#endif
}
// Disable caps word
void disable_caps_word(void) {
caps_word_on = false;
#ifndef CAPSWORD_USE_SHIFT
if (host_keyboard_led_state().caps_lock) {
tap_code(KC_CAPS);
}
#else
unregister_mods(MOD_LSFT);
#endif
}
// Toggle caps word
void toggle_caps_word(void) {
if (caps_word_on) {
disable_caps_word();
}
else {
enable_caps_word();
}
}
// Get xcase state
enum xcase_state get_xcase_state(void) {
return xcase_state;
}
// Enable xcase and pickup the next keystroke as the delimiter
void enable_xcase(void) {
xcase_state = XCASE_WAIT;
}
// Enable xcase with the specified delimiter
void enable_xcase_with(uint16_t delimiter) {
xcase_state = XCASE_ON;
xcase_delimiter = delimiter;
distance_to_last_delim = -1;
}
// Disable xcase
void disable_xcase(void) {
xcase_state = XCASE_OFF;
}
// Place the current xcase delimiter
static void place_delimiter(void) {
if (IS_OSM(xcase_delimiter)) {
// apparently set_oneshot_mods() is dumb and doesn't deal with handedness for you
uint8_t mods = xcase_delimiter & 0x10 ? (xcase_delimiter & 0x0F) << 4 : xcase_delimiter & 0xFF;
set_oneshot_mods(mods);
} else {
tap_code16(xcase_delimiter);
}
}
// Removes a delimiter, used for double tap space exit
static void remove_delimiter(void) {
if (IS_OSM(xcase_delimiter)) {
clear_oneshot_mods();
} else {
tap_code(KC_BSPC);
}
}
// overrideable function to determine whether the case mode should stop
__attribute__ ((weak))
bool terminate_case_modes(uint16_t keycode, const keyrecord_t *record) {
switch (keycode) {
// Keycodes to ignore (don't disable caps word)
case KC_A ... KC_Z:
case KC_1 ... KC_0:
case KC_MINS:
case KC_UNDS:
case KC_BSPC:
// If mod chording disable the mods
if (record->event.pressed && (get_mods() != 0)) {
return true;
}
break;
default:
if (record->event.pressed) {
return true;
}
break;
}
return false;
}
/* overrideable function to determine whether to use the default separator on
* first keypress when waiting for the separator. */
__attribute__ ((weak))
bool use_default_xcase_separator(uint16_t keycode, const keyrecord_t *record) {
// for example:
/* switch (keycode) { */
/* case KC_A ... KC_Z: */
/* case KC_1 ... KC_0: */
/* return true; */
/* } */
return false;
}
bool process_case_modes(uint16_t keycode, const keyrecord_t *record) {
if (caps_word_on || xcase_state) {
if ((QK_MOD_TAP <= keycode && keycode <= QK_MOD_TAP_MAX)
|| (QK_LAYER_TAP <= keycode && keycode <= QK_LAYER_TAP_MAX)) {
// Earlier return if this has not been considered tapped yet
if (record->tap.count == 0)
return true;
keycode = keycode & 0xFF;
}
if (keycode >= QK_LAYER_TAP && keycode <= QK_ONE_SHOT_LAYER_MAX) {
// let special keys and normal modifiers go through
return true;
}
if (xcase_state == XCASE_WAIT) {
// grab the next input to be the delimiter
if (use_default_xcase_separator(keycode, record)) {
enable_xcase_with(DEFAULT_XCASE_SEPARATOR);
}
else if (record->event.pressed) {
// factor in mods
if (get_mods() & MOD_MASK_SHIFT) {
keycode = LSFT(keycode);
}
else if (get_mods() & MOD_BIT(KC_RALT)) {
keycode = RALT(keycode);
}
enable_xcase_with(keycode);
return false;
}
else {
if (IS_OSM(keycode)) {
// this catches the OSM release if no other key was pressed
set_oneshot_mods(0);
enable_xcase_with(keycode);
return false;
}
// let other special keys go through
return true;
}
}
if (record->event.pressed) {
// handle xcase mode
if (xcase_state == XCASE_ON) {
// place the delimiter if space is tapped
if (keycode == KC_SPACE) {
if (distance_to_last_delim != 0) {
place_delimiter();
distance_to_last_delim = 0;
return false;
}
// remove the delimiter and disable modes
else {
remove_delimiter();
disable_xcase();
disable_caps_word();
return true;
}
}
// decrement distance to delimiter on back space
else if (keycode == KC_BSPC) {
--distance_to_last_delim;
}
// don't increment distance to last delim if negative
else if (distance_to_last_delim >= 0) {
// puts back a one shot delimiter if you we're back to the delimiter pos
if (distance_to_last_delim == 0 && (IS_OSM(xcase_delimiter))) {
place_delimiter();
}
++distance_to_last_delim;
}
} // end XCASE_ON
// check if the case modes have been terminated
if (terminate_case_modes(keycode, record)) {
disable_caps_word();
disable_xcase();
}
#ifdef CAPSWORD_USE_SHIFT
else if (caps_word_on && keycode >= KC_A && keycode <= KC_Z){
tap_code16(LSFT(keycode));
return false;
}
#endif
} // end if event.pressed
return true;
}
return true;
}

47
features/casemodes.h Normal file
View file

@ -0,0 +1,47 @@
/* Copyright 2021 Andrew Rae ajrae.nv@gmail.com @andrewjrae
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include QMK_KEYBOARD_H
// Check whether caps word is on
bool caps_word_enabled(void);
// Enable caps word
void enable_caps_word(void);
// Disable caps word
void disable_caps_word(void);
// Toggle caps word
void toggle_caps_word(void);
// enum for the xcase states
enum xcase_state {
XCASE_OFF = 0, // xcase is off
XCASE_ON, // xcase is actively on
XCASE_WAIT, // xcase is waiting for the delimiter input
};
// Get xcase state
enum xcase_state get_xcase_state(void);
// Enable xcase and pickup the next keystroke as the delimiter
void enable_xcase(void);
// Enable xcase with the specified delimiter
void enable_xcase_with(uint16_t delimiter);
// Disable xcase
void disable_xcase(void);
// Function to be put in process user
bool process_case_modes(uint16_t keycode, const keyrecord_t *record);

View file

@ -0,0 +1,39 @@
#define CK_DQUO "\"\""SS_TAP(X_LEFT)
#define CK_QUOT "\'\'"SS_TAP(X_LEFT)
// name result 1st chord key 2nd chord key 3rd chord key
// vertical
COMB(NUM_1, KC_1, KC_W, HRM_C)
COMB(NUM_2, KC_2, KC_L, HRM_R)
COMB(NUM_3, KC_3, KC_Y, HRM_S)
COMB(NUM_4, KC_4, KC_P, HRM_T)
COMB(NUM_5, KC_5, KC_B, KC_G)
COMB(NUM_6, KC_6, KC_Z, KC_M)
COMB(NUM_7, KC_7, KC_F, HRM_N)
COMB(NUM_8, KC_8, KC_O, HRM_E)
COMB(NUM_9, KC_9, KC_U, HRM_I)
COMB(NUM_0, KC_0, KC_QUOT, HRM_A)
// middle row
COMB(rs_tab, KC_TAB, HRM_R, HRM_S)
SUBS(rt_dquo, CK_DQUO, HRM_R, HRM_T)
COMB(st_delwrd, C(KC_BSPC), HRM_S, HRM_T)
COMB(ne_esc, KC_ESC, HRM_N, HRM_E)
SUBS(ni_quot, CK_QUOT, HRM_N, HRM_I)
COMB(ei_ent, KC_ENT, HRM_E, HRM_I)
SUBS(nei_write, "\e:w\n", HRM_N, HRM_E, HRM_I)
// bottom row
COMB(jv_coln, KC_COLN, KC_J, KC_V)
COMB(vd_m1a, G(KC_A), KC_V, SYM_D)
COMB(dk_shift, OSM(MOD_LSFT), SYM_D, KC_K)
COMB(xh_shift, OSM(MOD_RSFT), KC_X, SYM_H)
COMB(h_slsh_m4a, A(KC_A), SYM_H, KC_SLSH)
COMB(h_comm_lead, QK_LEAD, SYM_H, KC_COMM)
COMB(slsh_comm_bsls, KC_BSLS, KC_SLSH, KC_COMM)
/* vim: set filetype=c: */

View file

@ -0,0 +1,37 @@
/* Copyright 2022 @ sajenim (https://github.com/sajenim)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
// By default, the firmware does not know which side is which.
#define MASTER_LEFT
// Tap-Hold configuration for home row mods.
#define TAPPING_TERM 175
#define PERMISSIVE_HOLD
#define CHORDAL_HOLD
#define QUICK_TAP_TERM 0
// Leader
#define LEADER_NO_TIMEOUT // disable initial timeout
#define LEADER_PER_KEY_TIMING // reset timeout for each key
#define LEADER_TIMEOUT 250
// Timeouts
#define ONESHOT_TIMEOUT 5000
// Combo keys are always checked from layer 0.
#define COMBO_ONLY_FROM_LAYER 0

View file

@ -0,0 +1,329 @@
/* Copyright 2022 @ sajenim (https://github.com/sajenim)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
#include "features/casemodes.h"
enum layers {
CANARY,
NAV,
NUM,
SYM,
FUN,
};
enum custom_keycodes {
// Magic Keycodes
MG_EFORE = SAFE_RANGE,
MG_ON,
MG_UST,
MG_ENT,
MG_ION,
MG_MENT,
MG_ER,
MG_HICH,
MG_ES,
MG_BUT,
MG_THE,
};
/* Thumb Keys:
* dual role keys for accessing layers and to offload shift from pinkies */
#define NAV_REP LT(NAV, QK_REP)
#define NUM_MAG LT(NUM, QK_AREP)
/* Home Row Mods:
* https://precondition.github.io/home-row-mods */
#define HRM_C LSFT_T(KC_C)
#define HRM_R LCTL_T(KC_R)
#define HRM_S LALT_T(KC_S)
#define HRM_T LGUI_T(KC_T)
#define HRM_N RGUI_T(KC_N)
#define HRM_E RALT_T(KC_E)
#define HRM_I RCTL_T(KC_I)
#define HRM_A RSFT_T(KC_A)
#define SYM_D LT(SYM, KC_D)
#define SYM_H LT(SYM, KC_H)
/* One Shot Keys:
* https://github.com/qmk/qmk_firmware/blob/master/docs/one_shot_keys.md */
#define OS_LCTL OSM(MOD_LCTL)
#define OS_LSFT OSM(MOD_LSFT)
#define OS_LALT OSM(MOD_LALT)
#define OS_LGUI OSM(MOD_LGUI)
#define OS_RCTL OSM(MOD_RCTL)
#define OS_RSFT OSM(MOD_RSFT)
#define OS_RALT OSM(MOD_RALT)
#define OS_RGUI OSM(MOD_RGUI)
#include "g/keymap_combo.h" // layer names must be defined before engine include
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// clang-format off
[CANARY] = LAYOUT_split_3x5_2(
//,--------------------------------------------. ,--------------------------------------------.
KC_W, KC_L, KC_Y, KC_P, KC_B, KC_Z, KC_F, KC_O, KC_U, KC_QUOT,
//|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
HRM_C, HRM_R, HRM_S, HRM_T, KC_G, KC_M, HRM_N, HRM_E, HRM_I, HRM_A,
//|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
KC_Q, KC_J, KC_V, SYM_D, KC_K, KC_X, SYM_H, KC_SLSH, KC_COMM, KC_DOT,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
NAV_REP, KC_SPC, KC_BSPC, NUM_MAG
//`-----------------' `-----------------'
),
[NAV] = LAYOUT_split_3x5_2(
//,--------------------------------------------. ,--------------------------------------------.
XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLU, KC_PGUP, KC_HOME, KC_UP, KC_END, XXXXXXX,
//|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
OS_LSFT, OS_LCTL, OS_LALT, OS_LGUI, KC_VOLD, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL,
//|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
_______, _______, _______, _______
//`-----------------' `-----------------'
),
[NUM] = LAYOUT_split_3x5_2(
//,--------------------------------------------. ,--------------------------------------------.
KC_LPRN, KC_7, KC_8, KC_9, KC_RPRN, XXXXXXX, KC_ASTR, KC_PERC, KC_SLSH, XXXXXXX,
//|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
KC_0, KC_4, KC_5, KC_6, KC_DOT, XXXXXXX, OS_RGUI, OS_RALT, OS_RCTL, OS_RSFT,
//|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
KC_LABK, KC_1, KC_2, KC_3, KC_RABK, XXXXXXX, KC_PLUS, KC_EQL, KC_MINS, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
_______, _______, _______, _______
//`-----------------' `-----------------'
),
[SYM] = LAYOUT_split_3x5_2(
//,--------------------------------------------. ,--------------------------------------------.
KC_GRV, KC_LABK, KC_MINS, KC_RABK, XXXXXXX, XXXXXXX, KC_LBRC, KC_UNDS, KC_RBRC, KC_PLUS,
//|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
KC_EXLM, KC_LPRN, KC_EQL, KC_RPRN, KC_HASH, KC_PERC, KC_LCBR, KC_DLR, KC_RCBR, KC_SCLN,
//|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
KC_PIPE, KC_AMPR, KC_CIRC, KC_AT, XXXXXXX, XXXXXXX, KC_ASTR, _______, _______, _______,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
_______, _______, _______, _______
//`-----------------' `-----------------'
),
[FUN] = LAYOUT_split_3x5_2(
//,--------------------------------------------. ,--------------------------------------------.
KC_F12, KC_F7, KC_F8, KC_F9, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT,
//|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
KC_F11, KC_F4, KC_F5, KC_F6, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SLEP,
//|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------|
KC_F10, KC_F1, KC_F2, KC_F3, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_RBT,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
_______, _______, _______, _______
//`-----------------' `-----------------'
),
// clang-format on
};
/* Tri-state Layers:
* setup FUN layer to activate when NAV & NUM is held */
layer_state_t layer_state_set_user(layer_state_t state) {
// Activate function layer
state = update_tri_layer_state(state, NAV, NUM, FUN);
return state;
}
/* Caseword:
* configure which keys are "word breaking" */
bool use_default_xcase_separator(uint16_t keycode, const keyrecord_t *record) {
switch (keycode) {
case KC_A ... KC_Z:
case KC_1 ... KC_0:
return true;
}
return false;
}
/* Repeat key:
* configure additional keys */
bool remember_last_key_user(uint16_t keycode, keyrecord_t *record, uint8_t *remembered_mods) {
switch (keycode) {
case NAV_REP:
return false;
case NUM_MAG:
return false;
// Forget Shift on letter keys when Shift or AltGr are the only mods.
case KC_A ... KC_Z:
if ((*remembered_mods & ~(MOD_MASK_SHIFT | MOD_BIT(KC_RALT))) == 0) {
*remembered_mods &= ~MOD_MASK_SHIFT;
}
break;
}
return true;
}
/* Alternate repeat key:
* dynamically adjust output based on the most recent previous keycode */
uint16_t get_alt_repeat_key_keycode_user(uint16_t keycode, uint8_t mods) {
// clang-format off
switch (keycode) {
// Same Finger Bigrams
case KC_Y: return KC_S; // "YS" sfb (0.123%)
case HRM_E: return KC_O; // "EO" sfb (0.121%)
case HRM_R: return KC_L; // "RL" sfb (0.114%)
case KC_U: return KC_I; // "UI" sfb (0.073%)
case KC_O: return KC_E; // "OE" sfb (0.060%)
case KC_P: return KC_T; // "PT" sfb (0.050%)
case HRM_S: return KC_Y; // "SY" sfb (0.024%)
case SYM_D: return KC_G; // "DG" sfb (0.021%)
// Coding shortcuts
case KC_PLUS: return KC_EQL;
case KC_MINS: return KC_EQL;
// Magic Keycodes
case KC_B: return MG_EFORE;
case HRM_I: return MG_ON;
case KC_J: return MG_UST;
case KC_M: return MG_ENT;
case HRM_N: return MG_ION;
case HRM_T: return MG_MENT;
case KC_V: return MG_ER;
case KC_W: return MG_HICH;
case KC_X: return MG_ES;
case KC_COMM: return MG_BUT;
case KC_SPC: return MG_THE;
}
return KC_TRNS;
// clang-format on
}
/* Custom keycodes:
* program the behaviour of any keycode */
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// Process case modes
if (!process_case_modes(keycode, record)) {
return false;
}
// Process our custom keys
switch (keycode) {
case NAV_REP:
if (record->tap.count) {
process_repeat_key(QK_REP, record);
return false;
}
return true;
case NUM_MAG:
if (record->tap.count) {
process_repeat_key(QK_AREP, record);
return false;
}
return true;
}
// clang-format off
if (record->event.pressed) {
int rep_count = get_repeat_key_count();
switch (keycode) {
// Magic keycodes
case MG_EFORE: SEND_STRING(/*b*/ "efore"); return false;
case MG_ON: SEND_STRING(/*i*/ "on" ); return false;
case MG_UST: SEND_STRING(/*j*/ "ust" ); return false;
case MG_ENT: SEND_STRING(/*m*/ "ent" ); return false;
case MG_ION: SEND_STRING(/*n*/ "ion" ); return false;
case MG_MENT: SEND_STRING(/*t*/ "ment" ); return false;
case MG_ER: SEND_STRING(/*v*/ "er" ); return false;
case MG_HICH: SEND_STRING(/*w*/ "hich" ); return false;
case MG_ES: SEND_STRING(/*x*/ "es" ); return false;
case MG_BUT: SEND_STRING(/*,*/ " but" ); return false;
case MG_THE: SEND_STRING(/* */ "the" ); return false;
}
if (rep_count > 0) {
switch (keycode) {
// Repeat Key Overrides
case HRM_A: SEND_STRING(/*a*/ "nd" ); return false; // "and" trigram (3.293%)
case HRM_I: SEND_STRING(/*i*/ "ng" ); return false; // "ing" trigram (3.476%)
case KC_Y: SEND_STRING(/*y*/ "ou" ); return false; // "you" trigram (3.492%)
case HRM_N: SEND_STRING(/*n*/ "f" ); return false; // "nf" sfb (0.036%)
case KC_B: SEND_STRING(/*b*/ "ecause"); return false; // "because" brief
case KC_W: SEND_STRING(/*w*/ "ould" ); return false; // "would" brief
case KC_COMM: SEND_STRING(/*,*/ " and" ); return false; // ", and" brief
case KC_SPC: SEND_STRING(/* */ "for" ); return false; // " for" brief
// Miscellaneous
case KC_GRV: SEND_STRING("\b~/"); return false;
case KC_DOT:
if (rep_count > 1) {
SEND_STRING("../");
return false;
}
SEND_STRING("./");
return false;
}
}
}
return true;
// clang-format on
}
/* Leader Key:
* hit sequences of keys to trigger custom functionality */
void leader_end_user() {
if (leader_sequence_one_key(KC_ESC)) {
layer_clear();
// shortcuts
} else if (leader_sequence_one_key(KC_Y)) { // yank
tap_code16(C(KC_C));
} else if (leader_sequence_one_key(KC_P)) { // paste
tap_code16(C(KC_V));
} else if (leader_sequence_one_key(KC_D)) { // delete
tap_code16(C(KC_X));
} else if (leader_sequence_one_key(KC_U)) { // undo
tap_code16(C(KC_Z));
} else if (leader_sequence_one_key(KC_W)) { // write
tap_code16(C(KC_S));
// casemodes
} else if (leader_sequence_one_key(KC_C)) { // camelCase
enable_xcase_with(OSM(MOD_LSFT));
} else if (leader_sequence_one_key(KC_S)) { // snake_case
enable_xcase_with(KC_UNDS);
} else if (leader_sequence_one_key(KC_K)) { // kebab-case
enable_xcase_with(KC_MINS);
} else if (leader_sequence_one_key(KC_M)) { // MACRO_CASE
enable_caps_word();
enable_xcase_with(KC_UNDS);
// toggle layers
} else if (leader_sequence_two_keys(KC_L, KC_E)) { // e for extend as n for num is taken
layer_on(NAV);
} else if (leader_sequence_two_keys(KC_L, KC_N)) {
layer_on(NUM);
} else if (leader_sequence_two_keys(KC_L, KC_S)) {
layer_on(SYM);
} else if (leader_sequence_two_keys(KC_L, KC_F)) {
layer_on(FUN);
}
}

View file

@ -0,0 +1,20 @@
# We are using a Splinky RP2040 as a drop-in pro-micro replacement
CONVERT_TO = helios
BOOTLOADER = rp2040
# Reduce compiled size of firmware
LTO_ENABLE = yes
# Software features
AUTOCORRECT_ENABLE = yes
COMBO_ENABLE = yes
REPEAT_KEY_ENABLE = yes
LEADER_ENABLE = yes
# Combo dictionary
ifeq ($(COMBO_ENABLE),yes)
VPATH += keyboards/gboards
endif
# Enable casemode
SRC += features/casemodes.c

View file

@ -1,4 +1,6 @@
{
"userspace_version": "1.0",
"build_targets": []
"userspace_version": "1.1",
"build_targets": [
["ferris/sweep", "sajenim"]
]
}