QMK Programming How To

Check out the new Mechmini!

What this guide is

This guide is not meant as a reaplacment for the Official QMK Firmware,. Nor are any of the tools affliated with the QMK Firmware team in this guide, unless they are directly stated to be from the QMK Fimware team. This guide is meant as an easy way to get your keyboard up and running. It is a length guide, but we're confident we've covered all the bases to get you using your mechkeys.ca's keyboard as effeciently as possible.

Current version 1.1

QMK Overview

QMK ( Quantum Mechanical Keyboard) is an open source community that maintains the Official QMK Firmware, QMK Toolbox, qmk.fm, and other supporting documents. QMK Firmware is a keyboard firmware based on the TMK_keyboard with some useful features for Atmel AVRcontrollers used in most of the keyboards within mechkeys.ca. You can use it to power your own hand-wired or mechkeys.ca keyboard PCB.

The following links are internal to this how-to and take you directly to the section you want:

Join the official Mechkeys.ca Discord
Here  https://discord.gg/vW3dfVU

Programming your mechkeys.ca keyboard v 1.1

Before customizing your keyboard you need know if your keyboard runs bootmapper or QMK. If your PCB does not have a reset button on the bottom, then you have a bootmapper PCB, and this guide does not provide instructions for programming with bootmapper.  Also, you need to understand the ways to program your keyboard, and common terms and acronyms we will use in this guide.

  • GFB - either qmkeyboard.cn or kbfirmware.com are used for compiling firmware. We call either one GUI Firmware Builder (or GFB)
    • Neither kbfirmware nor qmkeyboard are not affiliated with the official QMK Firmware community and are not supported by the official QMK creators/maintainers. As such, both firmware builders are outdated and currently utilizing old builds of the QMK Firmware. Some errors could occur and some awesome features of QMK are not present.
    • If you’d like to incorporate all the features of QMK and aren’t against learning some programming and using command line tools. We recommend going to QMK.fm and reading their through guide
  • KLE - KLE
  • Flash - how you install your firmware to keyboard
  • Compile - the process of putting all the pieces of firmware together into a .hex
  • .hex - the software that is flashed onto your keyboard
  • .json - code used on KLE, GFB, and sharing amongst community used for editing
  • QMK Toolbox - program used to flash .hex to keyboard
  • GUI - graphical user interface
  • kc/KC - stands for keycode, and is the code your keyboard sends to your computer as the key being pressed

Supported programming methods

This can be accomplished in a couple different ways.  The two most frequently used are:  compiling your keyboard settings and keymaps via QMK firmware and a build environment, or utilizing KLE and a GFB to create your keymap and use QMK Toolbox to flash your keymap.  Each has their pros and cons.

QMK Firmware and the GUI firmware builders are two separate entities.  QMK firmware is the entire library of code used to build keyboard firmware and input features.  GFB is a web based GUI that does the compiling of the firmware for you; there are two different websites you can utilize: kbfirmware and qmkeyboard.  These are explained further below.

Utilizing QMK Firmware and a build environment can be quite an undertaking for someone without programming knowledge, it involves a few extra steps, and can be lengthy process to setup your keymap.  However, compiling your keymaps this way affords the greatest range of customizability and allows you to add in QMK features that wouldn’t normally be afforded to you with other options. Once you’ve completed a build with QMK Firmware and build environment a couple times, it becomes incredibly easy.

Using KLE and a web-based firmware builder is the easier of the two options: it’s a great way to get your keyboard up and running quickly, much easier to program, and allows you to utilize a GUI to manipulate your keymaps.  There are quite a few downsides: you have to utilize two different websites, a program to flash your keyboard, less access to QMK features, less customizability, and is not supported by the Official QMK Firmware.

However, combining both ways can offer a reduction in programming time with maximum customizability.  Using KLE to create the keyboard layout > import into a GFB to set pins and other settings > compile and download .zip > open text editor to edit keymap and add Official QMK features > finally use a build environment to create the flashing file (.hex) > use QMK Toolbox or dev environment to flash the .hex to your keyboard.  This gives you a GUI to adjust your keyboard layout and the ability to edit the code exactly to the specifications you want.

Keyboard Layout Editor

Keyboard-layout-editor.com is where you create the layout for your keyboard.  This is important as this correlates with GFB about your key placement on your PCB and what keycode you want the key to register when pressed.



The main features we’ll showcase here are:

  • Presets
  • Add/Delete Key
  • Properties
  • Raw Data
  • Download


This can be a great way to start building for your keyboard layout, as this will save you from having to add each key individually.


Select from the drop down, the closest keyboard to your keyboard.  ALU84 is closest to Keycool 84, ACR60 is closest to Default 60%, Mechmini 2 is closest to JD40 or Planck depending on setup, etc.

From here you can easily add, delete, or modify the key to how you want.

Add Key

This button has several functions, and can be confusing on where it places keys. 

If the last key in the row is selected (bordered in red), the Add Key will place 1 key to the right of the selected key. If the selected key is not last in the row, the Add Key, will place one key below all rows of keys; this can also be done by selecting inside the grey border around all the keys and then clicking the add key.

With the Add Key you can also add a row of 5, 10, and 25 keys, as well as add some specialty keys.

Delete Keys  

The key, or keys, selected will be deleted when clicked.  If a key is accidentally deleted simply click the Undo button.

You can mass delete keys by click-dragging a selection box around a group of keys, shift-click the keys, and alt-click individual keys. 


Under the Properties tab you can change all kinds of settings about individual keys.

It is not advised to group-select keys and edit their data as this can cause unwanted results. Unless you’re moving their placement on the y-axis (for a row of keys)/x-axis (for a column of keys), changing legend colors, changing legend colors, etc.  However, there is always the Undo button at the top if a mistake is made.

The Top Legend, Center Legend, Bottom Legend, and Front Legend all handle the placement of the text on the keycaps. This is not just cosmetic; this will indicate to GFB what key you are wanting to be registered when pressed (some keys don’t transfer correctly, this is explained further below).  However, adding more than one legend on a keycap is cosmetic only and will not be applied into GFB when programming your keyboard.  When adding more than one legend you may notice that once the Raw Data is transferred into GFB only one key is registered, this due to the way GFB

Width and height deal with the size of the keycap and correlate directly into GFB when programming.  It is important to ensure these sizes are correct, and match your key placement on the PCB (1u key is 1, 1.25u key is 1.25, etc.)

Raw Data

The Raw Data is used to edit the code specific data about each key and their placement.  As well as this is the data you need to import into qmkeyboard.cn to have the proper layout.

Once you’ve completed mapping your keyboard this data needs to be imported into the GFB.  Don’t worry about different layers yet, we will do that in the GFB. 

You can also use the Raw Data to import other layouts or saved layouts.  Simply copy all the data in the other layout (from text file, etc.) > either remove all the data from Raw Data (highlight > delete) or highlight all of data > paste data from text.  See you can see below how it changed the entire previous layout.

You can also use this option to correct multiple layouts on one page quickly, for instance a visual representation of all layers.  Highlight the Raw Data > copy > left click after the last “]” (on the last row) > insert a “,” (comma) > press enter to start a blank row > then paste.  If you receive an error code at the bottom it’s likely you didn’t enter the comma after the last bracket “],”.  Now you have another layout where you can visualize your other layer(s) easily, simply repeat for more layers.  To input space between the two layers, start at the very bottom row > utilize row selection > increase the Y-axis (under Properties) by 1 ( i.e. 5 change to 6) > continue for the rest of rows. 


When copying Raw Data from KLE to qmkeyboard.cn with multiple layouts ensure only data for one layout is selected or you will receive an error within qmkeyboard.cn.  Also don’t include the last “,” in the selection. Example:

Try it for your self.  Copy the following code and past it in KLE Raw Data and see how it creates a keymap for us. 

        [{a:4,w:1.5},"Tab","Q","W","E","R","T","Y","U","I","O","P","{\n[","}\n]",{w:1.5},"|\n\\",{a:6},"Page Up"],
        [{a:4,w:1.75},"Caps Lock","A","S","D","F","G","H","J","K","L",":\n;","\"\n'",{a:6,w:2.25},"Enter","Page Down"],

KLE Summary

KLE is what you use to create your keyboard layout, initially set the keycode you want each key to be, and where we extra the Raw Data to import into qmkeyboard.cn for programming.

GUI Firmware Builder Guide

GFB Overview

GFB has two web based GUIs qmkeyboard and kbfirmware.

You can utilize one of these GUIs to create your keymap, set wiring diagram, set pins from the micro-controller, set macros, and compile .hex file for your keyboard.  GFB does not have all the features that QMK Firmware offers, and is only recommended if you don’t need these extra features or don’t want to compile your firmware via command line and build environment. 

Here at mechkeys.ca we mostly recommend qmkeyboard, if you aren’t compiling via a build environment, as our boards correlate directly with some presets there.

On the main page there are three selection options: .json upload, KLE import, or choose a preset. 

Utilize the .json upload if you have a saved .json from GFB, if you downloaded a .json from mechkeys.ca, or someone else.  The .json upload will not correlate correctly from KLE, if you downloaded the .json from there, and vice versa a downloaded .json from GFB will not import into KLE correctly. 

Importing a keymap from KLE uses the data from the Raw Data tab within KLE.



This will NOT correctly set your wiring diagram, pin selection, layers, or settings correctly.  You need to manually set these and ensure they are correct to avoid problems when flashing your firmware. See each specific keyboard programming guide from the menu at the top under QMK.

Simply copy the Raw Data from KLE and paste it in the box, then click import.

Choosing a preset serves two purposes for you: it sets a standard PCB layout that is utilized by mechkeys.ca keyboards, and allows you to see what pins to set for the micro-controller and what settings should be applied before compiling the firmware.


If you didn’t download your .hex from mechkeys.ca always check a .hex file with an accompanying .json in GFB to ensure the correct pins and settings are set before you flash.

For reference ONLY, the following keyboards use the same pin layout and settings as the indicated preset layout within GFB. See specific programming instructions for your specific keyboard programming guide from the menu at the top under QMK.

  • ALU84 – KBD75 (ver 1)
  • ACR60 – DZ60
  • MechMini 2 – DZ40

QFB wiring

Setting the wiring diagram is just as crucial as setting the correct pin configuration.  Remember to reference mechkeys.ca specific keyboard settings for each keyboard.  If you imported a .json from mechkeys.ca the wiring should already be set for you.

Here you set the number of rows and columns on your PCB. Selecting a specific key will allow you change the specifics of how it is wired.

GFB pins

These settings are crucial to the correct function of your PCB’s micro-controller, which controls everything about your keyboard. 


Failure to follow mechkeys.ca pin settings could result in the following problems with your keyboard: the inability to use the reset button for flashing, keys inoperative, LEDs inoperative, PCB bricking, etc.  Ensure these settings are correct if creating your own layout.

Rows and columns are directly connected to the micro-controller’s pins within the PCB.  If these settings are incorrect a key, row, or column could not function properly.

Set your LED pins of your keyboard using the menus below he row and column pins.  If your keyboard supports Num, Caps, or Scroll Lock LED indicator(s) you set this here.  Backlight is the setting for LEDs beneath the keycaps on top of the key switch.  WS2812 Strip is the RGB LEDs on the bottom of your keyboard that create the ambient RGB lighting.

GFB Keymap

This tab is where you set the keycode to match the key switch you want to want to be registered (output). 

It is crucial to reference the Official QMK keycode documentation when setting keycode.

GFB key selection

How it works

Select the key you want to change (in this case Q) then select the box that says KC_Q (keycode_Q) to change the keycode that will be sent to your computer when pressed.  KC stands for keycode; after the underscore is the actual keycode sent to your computer.  There are numerous keycode possibilities, reference the Official QMK keycode documentation for the complete list of keycodes.

The different tabs within the configure tools are:

  • Primary – standard alpha keys, number keys, backspace, etc.
  • Secondary – punctuation keys, F1 – F24, page up, volume control, etc.
  • Keypad – number-pad keys found on full-size keyboards or numeric keypads
  • Lighting – BL controls for backlighting, RGB controls for underglow
  • FN – function keys (not F1 – F24) explained below
  • Other – set specific keycode value, use only if you know the specific keycode you want to set

When creating your keymap, it is highly recommended to add a RESET keycode on a different layer to your keyboard.  This will keep you from having to open the case and press the reset button on the PCB to flash. 

GFB keymap FN tab

The FN tab handles functions, which can be anything from momentary switching to a layer, to having a single key do multiple things.

When working with these keycodes it is imperative you reference the Official QMK keycode documentation.

FN - Modifier keys

LCTL() through ALTG() – allows to you combine a mod (i.e. LCTRL) with a keycode.  When pressed down the keydown for the modifier will be sent first, and then the KC will be sent. When released the keyup for the KC will be sent first and then the modifier will be sent.

  • LSFT(kc) - applies left Shift to   kc  
  • RSFT(kc)  - applies right Shift to   kc
  • LCTL(kc)  - applies left Control to   kc
  • RCTL(kc)  - applies right Control to   kc
  • LALT(kc)  - applies left Alt to   kc
  • RALT(kc)  - applies right Alt to   kc
  • LGUI(kc)  - applies left GUI (command/win) to   kc
  • RGUI(kc)  - applies right GUI (command/win) to   kc
  • HYPR(kc)  - applies Hyper (all modifiers) to   kc
  • MEH(kc)  - applies Meh (all modifiers except Win/Cmd) to   kc
  • LCAG(kc)  - applies Ctrl + Alt + Gui to   kc
  • ALTG(kc) – applies RCtl + RAlt to kc

You can also chain these, like this:

LALT(LCTL(KC_DEL)) -- this makes a key that sends Alt, Control, and Delete in a single keypress.

FN -  Layer switching and toggling

LT() through MT() – these functions allow you to activate layers in various ways.  Care must be taken when switching layers; it’s possible to lock yourself into a layer with no way to deactivate that layer (without unplugging your keyboard).

  • LT(layer, kc) - momentary switch to  layer  when held, and   kc  when tapped.
  • TO(layer) - Goes to a layer. This code is special, because it lets you go directly to the layer  you want. So while other codes only let you go   up  the stack (from  layer 0 to layer  3, for example), TO(2) is going to take you directly to layer 2, no matter where you activate it from -- even if you're currently on layer 8. This gets activated on keydown (as soon as the key is pressed).
  • MO(layer)- momentary switch to a layer when pressed. As soon as release the key, the layer is deactivated and you pop back out to the previous layer.
  • DF(layer) – sets the base layer (not recommended for use).
  • TG(layer) - toggles a layer on or off.
  • OSL(layer) – switch to layer for one single keypress. Will switch back to previous layer after any other single keypress.
  • OSM(layer) -  Momentarily hold down mod. You must use the MOD_* keycodes as shown in Mod Tap, not the KC_*
    • OSM(layer) – is a one shot key and you should read the QMK documentation before
  • MT(mod, kc) - is mod (modifier key - MOD_LCTL, MOD_LSFT) when held, and kc when tapped.
    • MT(mod, kc) -  is a mod tap keycode and you should read the mod tap section below, or the QMK Mod Tap documentation before implementing.
  • TT(layer) - Layer Tap-Toggle. If you hold the keydown, the layer becomes active, and then deactivates when you let go. If you tap it, the layer simply becomes active (toggles on). It needs 5 taps by default, but you can set it by defining TAPPING_TOGGLE, for example, #define TAPPING_TOGGLE 2 for just two taps.
    • TT(layer) –  is not currently available within GFB, nor can you set it within GFB.  This is an example of the limitations within GFB, and the features within QMK when building from build environment.

FN – Mod tap

CTL_T() through ALL_T() – these are mod tap keys.  These send a modifier (i.e LCTL) when held, and kc when tapped. In other words, you can have a key that sends Esc (or the letter Q, or whatever) when you tap it, but works as a Control key or a Shift key when you hold it down.

These can also be combined like MOD_LCTL | MOD_LSFT e.g. MT(MOD_LCTL | MOD_LSFT, KC_ESC)which would activate Control and Shift when held, and send Escape when tapped. Note however, that you cannot mix right and left side modifiers.

  • CTL_T(kc)C - is LCTL when held and kc when tapped
  • SFT_T(kc) - is LSFT when held and kc when tapped
  • ALT_T(kc) - is LALT when held and kc when tapped
  • ALGR_T(kc) - is ALTGR ( RCTL + RALT + kc when held and kc when tapped
  • GUI_T(kc) - is LGUI when held and kc when tapped
  • ALL_T(kc) - is HYPER (all mods - LCTL + LSFT + LALT + LGUI + kc) when held and kc when tapped. To read more about what you can do with a HYPER key, see this blog post by Brett Terpstra
  • LCAG_T(kc) - is LCAG ( LCTL + LALT + LGUI + kc when held and kc when tapped
  • MEH_T(kc) - is like HYPER, but not as cool -- does not include the CMD/WIN key, so just sends ALT + CTRL + SHIFT.

FN – Macro and Tricky_ESC

M() through Tricky_ESC – these two are complete different from one another. M() sets the macro keycode then has you select which macro you want to set, setting macros is explained below. Tricky_ESC is essentially another mod tap key with a twist.  This key will output ESC normally, but when pressed with SHIFT or GUI ( GUI does not work on Mac) will send a ~. If you press ALT ( OPT on Mac) + Shift + TRICKY_ESC then TRICKY_ESC will send `. Any other modifiers used in conjunction with TRICKY_ESC will yield a normal ESC key press.


Realeasing Alt (Opt on Mac) + Shift before releasing Tricky_ESC will result in a continuous ` that won’t be stopped until another input is made.  The same can happen with Shift + Tricky_ESC resulting in a continuous ~ that won’t be stopped until another input is made.

TRICKY_ESC is very similar to KC_GESC(see QMK documentation), however TRICKY_ESC is an older code from TMK. KC_GESC does not have the same issue (above) that TRICKY_ESC, and is recommend to be used instead of TRICKY_ESC. You can implement KC_GESC by inputting the keycode in the 'Other' tab in GFB keymap setting.

FN – Setting keycode

When utilizing a FN tab keycode within GFB (i.e. MO(layer)), GFB will open a new box.  This box represents the additional setting (or keycode) you want to set for the selected 'FN' keycode.  In this example MO() is selected, GFB now wants you to define what layer you want to go to when the key is pressed containing MO(layer), using the button(s) or input box below MO.  The same applies for the FN tab keycodes: a new box will appear now QFB wants you to input more information. This example is how to set MO() to switch to layer 1 (the next layer up from the base layer).

GFB keymap - layers

On the keymap tab, GFB always shows the ‘Select a layer to modify’ setting.  Changing this value moves you up and down within the layers. When the up arrow is pressed (or input the number value) of the layer you want modify, GFB will transition to that layer. Allowing you to modify the layer you set.  Layers work on scale starting at 0 (0, 1, 2, etc.), so that your base layer is 0. Think of layers as a tree layout, where layer 0 is the root, layer 1 is above layer 0, layer 2 is above layer 1, and so forth. 

Using the previous MO(1) keycode you have set, pressing that key will take you to layer 1 when pressed.

Now you can set a whole new keymap for this layer.  In the above example layer 1 is used to modify the lighting (RGB underlow and backlighting). You will also notice a lot of TRNS keycodes.  The TRNS keycode basically means that key is transparent, meaning it will utilize the key’s keycode from the lower layer. With multiple layers TRNS will continue through all the layers until it finds a keycode other than TRNS and send that keycode when pressed. 

If you are only working with additional layers it is recommended to add a RESET keycode, somewhere on a layer other than the base layer, to allow you to reset the keyboard (flashing mode) without pressing the reset button on the PCB.

GFB Macros

Macros allow you to set multiple keystrokes to be sent to your computer with a single key press (or two depending on your settings).  Within GFB after you set a M() keycode you need to actually tell QFB what that macro is.  Do this by seleting the macro number ( M(1), M(2), etc.) you want to apply a macro to.  There are three buttons to edit the macro:

  • Add action – allows you to set each individual step in the macro
  • Record macro – allows you to type out your macro, once complete the button now says stop recording, click that to stop the recording of your macro
  • Clear macro – removes all the steps of the macro you set up
  • More information about macros can be found in the QMK documentation.

Here is a simple one-click copy macro.

When creating macros with the Add Action button a new box appears with an No Action label.  You use this to set the type of press you want the key to be.

  • No action – means no action placed
  • Set interval – changes the stroke interval in milliseconds
  • Press – represents a key press (the down stroke)
  • Release – represents releasing a key press (the up stroke)
  • Type – is a press and release of a key
  • Wait – is how long to wait in milliseconds

In the above example you can see how to combine the press, type and release macro actions to form a macro for copy.

GFB quantum

The quantum setting is used to input custom Quantum functions.  This should not be used unless you know what you’re doing, as such mechkeys.ca does not provide instructions for this in this how-to.

GFB Settings

This tab allows you to finalize your settings.  It is another crucial step in the keyboard firmware building process, and must be properly configured to ensure your keyboard is working properly.

  • Layout name –configure your keyboard layout’s name
  • Bootloader size – crucial this remains 4096 KB for the ATmega32u4
  • WS2812 LEDs – this is dependent on your actual keyboard
  • Backlight levels –change how many levels of brightness backlighting has
  • Save configuration button –save a .json for sharing or editing later in QFB
  • Check errors and warning – will report stuff like missing keys (example below shows missing a soft reset key)

GFB compiling

When you are finally ready to flash your new keyboard this is the tab to go to.  It offers two options: download .hex and download .zip.  Downloading the .hex allows you to immediately flash the .hex with the flashing application of your choice.  Downloading the .zip allows you to scrub through and change the QMK/TMK files.  This should only be done if you want to look through everything or if you plan to compile and flash your keyboard firmware via a build environment and command line tools.

Once you compile (download your .hex) the next step is to flash your .hex to your keyboard.

Flashing – QMK toolbox

This is the tool you utilize in order to flash your .hex file to your keyboard.  It has many different functions let are described below.

Recommend downloading the  Official QMK Toolbox from the GitHub repository (as the current release is missing a windows driver).  Once you navigate there, simply click the 'Clone or download' button > download .zip. 

  • Local file – navigate or drag and drop your .hex here.
    • For Mac users drag and dropping from the downloads folder (if on the dock does not work), drag and drop the file from the desktop
  • Microcontroller – for all QMK mechkeys.ca keyboards it needs to be set to atmega32u4
  • Keyboard from qmk.fm – allows you to download the keyboard .hex from qmk.fm
    • Keymap – is the individual keymap .hex pre-made by others for the selected keyboard. This function is currently in beta.
    • Load – will download the seleteced .hex from qmk.fm
  • Flashers enabled – ensure dfu is selected
  • Flash button – flashes the selected .hex to the keyboard
  • Reset button – resets the keyboard getting out of dfu mode
  • Auto-flash – this checkbox will automatically flash when your keyboard is put into dfu mode
  • Reset EEPROM – resets the EEPROM, should only be used in a last case scenario

How to use steps:

  1. Selct (or drag and drop) your .hex in the Local File box/dropdown.
  2. Ensure the microcontroller is set to 'atmega32u4'.
  3. Put your keyboard programming (dfu mode) by either pushing the reset button on the bottom of the PCB or pressing the KC_RESET keycode.
  4. Ensure *** DFU device connected appears in the main screen.
  5. Click the flash button to flash your .hex to your keyboard.
  6. When your computer reboots, you have now successfully flashed your new .hex to your keyboard!

When attempting to flash .hex without the keyboard in dfu mode the! There are no devices available warning will appear. Simply press the reset button on the bottom of the PCB to put it in dfu-programming mode.


To update your driver (Windows): Navigate to your Device Manager > press reset button on bottom of keyboard PCB > locate the 'Other Device' that has a '!' > select on Other device > then right click on ATmega32U4 > select Update Driver Software > click 'Browse my computer for driver'.

Once again, download the whole repo for QMK Toolbox, this will ensure you get the correct drivers. If you see 'ATm32U4DFU' in QMK Toolbox this means you have the incorrect driver and you need to update the driver.

The location for this driver is in the qmk_toolbox_installer folder you downloaded for QMK Toolbox. The driver should be in C:/.../qmk toolbox/windows/qmktoolbox/dfu-prog-usb/atmel_usb_dfu.inf where ...is your local folder location you downloaded QMK Toolbox to.


Once you boot the keyboard into dfu mode *** DFU device connected will appear.  Then click flash and QMK Toolbox will run through the steps of erasing the previous .hex and flashing the new .hex.  Finally the keyboard will reset, which will give you the *** DFU device disconnected.


Putting it all together

Here are the steps in order to make, compile and flash your own keyboard layout to your keyboard.

  1. Layout your keymap with KLE
  2. Copy Raw Data from KLE into GFB
  3. Finish setting keymap (to include layers) in GFB
  4. Ensure wiring, pins, and settings are correct in GFB
  5. Download .hex from GFB
  6. Flash your .hex via QMK Toolbox

Need more help? 

Join the official Mechkeys.ca Discord
Here  https://discord.gg/vW3dfVU



This guide is protected under Digital Millennium Copyright Act (DMCA ) and is the intellectual property of mechkeys.ca and /u/TurboMech, who is the author of this guide.