Merge remote-tracking branch 'origin/master' into develop
This commit is contained in:
		
						commit
						a03849c92c
					
				
					 18 changed files with 2941 additions and 237 deletions
				
			
		
							
								
								
									
										182
									
								
								users/gourdo1/autocorrect/autocorrection.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										182
									
								
								users/gourdo1/autocorrect/autocorrection.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,182 @@
 | 
			
		|||
// Copyright 2021-2022 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.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
// For full documentation, see
 | 
			
		||||
// https://getreuer.info/posts/keyboards/autocorrection
 | 
			
		||||
 | 
			
		||||
#include "autocorrection.h"
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "autocorrection_data.h"
 | 
			
		||||
 | 
			
		||||
#if AUTOCORRECTION_MIN_LENGTH < 4
 | 
			
		||||
// Odd output or hard locks on the board have been observed when the min typo
 | 
			
		||||
// length is 3 or lower (https://github.com/getreuer/qmk-keymap/issues/2).
 | 
			
		||||
// Additionally, autocorrection entries for short typos are more likely to false
 | 
			
		||||
// trigger, so it is suggested that typos be at least 5 characters.
 | 
			
		||||
#error "Min typo length is less than 4. Autocorrection may behave poorly."
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
bool process_autocorrection(uint16_t keycode, keyrecord_t* record) {
 | 
			
		||||
    if (user_config.autocorrect) {
 | 
			
		||||
      static uint8_t typo_buffer[AUTOCORRECTION_MAX_LENGTH] = {0};
 | 
			
		||||
      static uint8_t typo_buffer_size = 0;
 | 
			
		||||
 | 
			
		||||
      // Ignore key release; we only process key presses.
 | 
			
		||||
      if (!record->event.pressed) { return true; }
 | 
			
		||||
 | 
			
		||||
    #ifndef NO_ACTION_ONESHOT
 | 
			
		||||
      const uint8_t mods = get_mods() | get_oneshot_mods();
 | 
			
		||||
    #else
 | 
			
		||||
      const uint8_t mods = get_mods();
 | 
			
		||||
    #endif  // NO_ACTION_ONESHOT
 | 
			
		||||
      // Disable autocorrection while a mod other than shift is active.
 | 
			
		||||
      if ((mods & ~MOD_MASK_SHIFT) != 0) {
 | 
			
		||||
        typo_buffer_size = 0;
 | 
			
		||||
        return true;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // The following switch cases address various kinds of keycodes. This logic is
 | 
			
		||||
      // split over two switches rather than merged into one. The first switch may
 | 
			
		||||
      // extract a basic keycode which is then further handled by the second switch,
 | 
			
		||||
      // e.g. a layer-tap key with Caps Lock `LT(layer, KC_CAPS)`.
 | 
			
		||||
      switch (keycode) {
 | 
			
		||||
    #ifndef NO_ACTION_TAPPING
 | 
			
		||||
        case QK_MOD_TAP ... QK_MOD_TAP_MAX:  // Tap-hold keys.
 | 
			
		||||
    #ifndef NO_ACTION_LAYER
 | 
			
		||||
        case QK_LAYER_TAP ... QK_LAYER_TAP_MAX:
 | 
			
		||||
    #endif  // NO_ACTION_LAYER
 | 
			
		||||
          // Ignore when tap-hold keys are held.
 | 
			
		||||
          if (record->tap.count == 0) { return true; }
 | 
			
		||||
          // Otherwise when tapped, get the basic keycode.
 | 
			
		||||
          // Fallthrough intended.
 | 
			
		||||
    #endif  // NO_ACTION_TAPPING
 | 
			
		||||
 | 
			
		||||
        // Handle shifted keys, e.g. symbols like KC_EXLM = S(KC_1).
 | 
			
		||||
        case QK_LSFT ... QK_LSFT + 255:
 | 
			
		||||
        case QK_RSFT ... QK_RSFT + 255:
 | 
			
		||||
          keycode &= 0xff;  // Get the basic keycode.
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
        // NOTE: Space Cadet keys expose no info to check whether they are being
 | 
			
		||||
        // tapped vs. held. This makes autocorrection ambiguous, e.g. KC_LCPO might
 | 
			
		||||
        // be '(', which we would treat as a word break, or it might be shift, which
 | 
			
		||||
        // we would treat as having no effect. To behave cautiously, we allow Space
 | 
			
		||||
        // Cadet keycodes to fall to the logic below and clear autocorrection state.
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      switch (keycode) {
 | 
			
		||||
        // Ignore shifts, Caps Lock, one-shot mods, and layer switch keys.
 | 
			
		||||
        case KC_NO:
 | 
			
		||||
        case KC_LSFT:
 | 
			
		||||
        case KC_RSFT:
 | 
			
		||||
        case KC_CAPS:
 | 
			
		||||
        case QK_ONE_SHOT_MOD ... QK_ONE_SHOT_MOD_MAX:
 | 
			
		||||
        case QK_TO ... QK_TO_MAX:
 | 
			
		||||
        case QK_MOMENTARY ... QK_MOMENTARY_MAX:
 | 
			
		||||
        case QK_DEF_LAYER ... QK_DEF_LAYER_MAX:
 | 
			
		||||
        case QK_TOGGLE_LAYER ... QK_TOGGLE_LAYER_MAX:
 | 
			
		||||
        case QK_ONE_SHOT_LAYER ... QK_ONE_SHOT_LAYER_MAX:
 | 
			
		||||
        case QK_LAYER_TAP_TOGGLE ... QK_LAYER_TAP_TOGGLE_MAX:
 | 
			
		||||
        case QK_LAYER_MOD ... QK_LAYER_MOD_MAX:
 | 
			
		||||
          return true;  // Ignore these keys.
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      if (keycode == KC_QUOT) {
 | 
			
		||||
        // Treat " (shifted ') as a word boundary.
 | 
			
		||||
        if ((mods & MOD_MASK_SHIFT) != 0) { keycode = KC_SPC; }
 | 
			
		||||
      } else if (!(KC_A <= keycode && keycode <= KC_Z)) {
 | 
			
		||||
        if (keycode == KC_BSPC) {
 | 
			
		||||
          // Remove last character from the buffer.
 | 
			
		||||
          if (typo_buffer_size > 0) { --typo_buffer_size; }
 | 
			
		||||
          return true;
 | 
			
		||||
        } else if (KC_1 <= keycode && keycode <= KC_SLSH && keycode != KC_ESC) {
 | 
			
		||||
          // Set a word boundary if space, period, digit, etc. is pressed.
 | 
			
		||||
          // Behave more conservatively for the enter key. Reset, so that enter
 | 
			
		||||
          // can't be used on a word ending.
 | 
			
		||||
          if (keycode == KC_ENT) { typo_buffer_size = 0; }
 | 
			
		||||
          keycode = KC_SPC;
 | 
			
		||||
        } else {
 | 
			
		||||
          // Clear state if some other non-alpha key is pressed.
 | 
			
		||||
          typo_buffer_size = 0;
 | 
			
		||||
          return true;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // If the buffer is full, rotate it to discard the oldest character.
 | 
			
		||||
      if (typo_buffer_size >= AUTOCORRECTION_MAX_LENGTH) {
 | 
			
		||||
        memmove(typo_buffer, typo_buffer + 1, AUTOCORRECTION_MAX_LENGTH - 1);
 | 
			
		||||
        typo_buffer_size = AUTOCORRECTION_MAX_LENGTH - 1;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // Append `keycode` to the buffer.
 | 
			
		||||
      // NOTE: `keycode` must be a basic keycode (0-255) by this point.
 | 
			
		||||
      typo_buffer[typo_buffer_size++] = (uint8_t) keycode;
 | 
			
		||||
      // Early return if not many characters have been buffered so far.
 | 
			
		||||
      if (typo_buffer_size < AUTOCORRECTION_MIN_LENGTH) { return true; }
 | 
			
		||||
 | 
			
		||||
      // Check whether the buffer ends in a typo. This is done using a trie
 | 
			
		||||
      // stored in `autocorrection_data`.
 | 
			
		||||
      uint16_t state = 0;
 | 
			
		||||
      uint8_t code = pgm_read_byte(autocorrection_data + state);
 | 
			
		||||
      for (int i = typo_buffer_size - 1; i >= 0; --i) {
 | 
			
		||||
        const uint8_t key_i = typo_buffer[i];
 | 
			
		||||
 | 
			
		||||
        if (code & 64) { // Check for match in node with multiple children.
 | 
			
		||||
          code &= 63;
 | 
			
		||||
          for (; code != key_i;
 | 
			
		||||
              code = pgm_read_byte(autocorrection_data + (state += 3))) {
 | 
			
		||||
            if (!code) { return true; }
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          // Follow link to child node.
 | 
			
		||||
          state = (uint16_t)(
 | 
			
		||||
              (uint_fast16_t)pgm_read_byte(autocorrection_data + state + 1)
 | 
			
		||||
              | (uint_fast16_t)pgm_read_byte(autocorrection_data + state + 2) << 8);
 | 
			
		||||
        // Otherwise check for match in node with a single child.
 | 
			
		||||
        } else if (code != key_i) {
 | 
			
		||||
          return true;
 | 
			
		||||
        } else if (!(code = pgm_read_byte(autocorrection_data + (++state)))) {
 | 
			
		||||
          ++state;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Stop if `state` becomes an invalid index. This should not normally
 | 
			
		||||
        // happen, it is a safeguard in case of a bug, data corruption, etc.
 | 
			
		||||
        if (state >= sizeof(autocorrection_data)) {
 | 
			
		||||
          return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Read first byte of the next node.
 | 
			
		||||
        code = pgm_read_byte(autocorrection_data + state);
 | 
			
		||||
 | 
			
		||||
        if (code & 128) { // A typo was found! Apply autocorrection.
 | 
			
		||||
          const int backspaces = code & 63;
 | 
			
		||||
          for (int i = 0; i < backspaces; ++i) { tap_code(KC_BSPC); }
 | 
			
		||||
            send_string_P((char const*)(autocorrection_data + state + 1));
 | 
			
		||||
 | 
			
		||||
          if (keycode == KC_SPC) {
 | 
			
		||||
            typo_buffer[0] = KC_SPC;
 | 
			
		||||
            typo_buffer_size = 1;
 | 
			
		||||
            return true;
 | 
			
		||||
          } else {
 | 
			
		||||
            typo_buffer_size = 0;
 | 
			
		||||
            return false;
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      return true;
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										40
									
								
								users/gourdo1/autocorrect/autocorrection.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								users/gourdo1/autocorrect/autocorrection.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,40 @@
 | 
			
		|||
// Copyright 2021-2022 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.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
// Autocorrection on your keyboard.
 | 
			
		||||
//
 | 
			
		||||
// This library implements rudimentary autocorrection, automatically detecting
 | 
			
		||||
// and fixing some misspellings. Beware that the autocorrection logic is
 | 
			
		||||
// unaware of hotkey or mouse-based cursor movement.
 | 
			
		||||
//
 | 
			
		||||
// For full documentation, see
 | 
			
		||||
// https://getreuer.info/posts/keyboards/autocorrection
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "quantum.h"
 | 
			
		||||
 | 
			
		||||
#include "gourdo1.h"
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
bool process_autocorrection(uint16_t keycode, keyrecord_t* record);
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										722
									
								
								users/gourdo1/autocorrect/autocorrection_data.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										722
									
								
								users/gourdo1/autocorrect/autocorrection_data.h
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,722 @@
 | 
			
		|||
// Generated code.
 | 
			
		||||
 | 
			
		||||
// Autocorrection dictionary (400 entries):
 | 
			
		||||
//   :acheiv    -> achiev
 | 
			
		||||
//   :agian     -> again
 | 
			
		||||
//   :agred     -> agreed
 | 
			
		||||
//   :ajust     -> adjust
 | 
			
		||||
//   :alot:     -> a lot
 | 
			
		||||
//   :andteh    -> and the
 | 
			
		||||
//   :andthe    -> and the
 | 
			
		||||
//   :anual     -> annual
 | 
			
		||||
//   :asign     -> assign
 | 
			
		||||
//   :aslo:     -> also
 | 
			
		||||
//   :asthe     -> as the
 | 
			
		||||
//   :atthe     -> at the
 | 
			
		||||
//   :casue     -> cause
 | 
			
		||||
//   :choses    -> chooses
 | 
			
		||||
//   :eveyr     -> every
 | 
			
		||||
//   :foudn     -> found
 | 
			
		||||
//   :gaurd     -> guard
 | 
			
		||||
//   :goign     -> going
 | 
			
		||||
//   :gonig     -> going
 | 
			
		||||
//   :graet     -> great
 | 
			
		||||
//   :grammer   -> grammar
 | 
			
		||||
//   :guage     -> gauge
 | 
			
		||||
//   :haev      -> have
 | 
			
		||||
//   :hapen     -> happen
 | 
			
		||||
//   :htere     -> there
 | 
			
		||||
//   :htikn     -> think
 | 
			
		||||
//   :htink     -> think
 | 
			
		||||
//   :hwihc     -> which
 | 
			
		||||
//   :hwile     -> while
 | 
			
		||||
//   :idaes     -> ideas
 | 
			
		||||
//   :jstu:     -> just
 | 
			
		||||
//   :jsut:     -> just
 | 
			
		||||
//   :knwo      -> know
 | 
			
		||||
//   :konw      -> know
 | 
			
		||||
//   :kwno      -> know
 | 
			
		||||
//   :moeny     -> money
 | 
			
		||||
//   :ocuntry   -> country
 | 
			
		||||
//   :ocur      -> occur
 | 
			
		||||
//   :olther    -> other
 | 
			
		||||
//   :otehr     -> other
 | 
			
		||||
//   :owudl     -> would
 | 
			
		||||
//   :rference  -> reference
 | 
			
		||||
//   :sicne     -> since
 | 
			
		||||
//   :socre     -> score
 | 
			
		||||
//   :szie      -> size
 | 
			
		||||
//   :the:the:  -> the
 | 
			
		||||
//   :theri     -> their
 | 
			
		||||
//   :thier     -> their
 | 
			
		||||
//   :thsoe     -> those
 | 
			
		||||
//   :tothe     -> to the
 | 
			
		||||
//   :ture      -> true
 | 
			
		||||
//   :turth     -> truth
 | 
			
		||||
//   :uesd:     -> used
 | 
			
		||||
//   :usally    -> usually
 | 
			
		||||
//   :yaers     -> years
 | 
			
		||||
//   :yeasr     -> years
 | 
			
		||||
//   abbout     -> about
 | 
			
		||||
//   aberation  -> aberration
 | 
			
		||||
//   abilties   -> abilities
 | 
			
		||||
//   abilty     -> ability
 | 
			
		||||
//   abotu      -> about
 | 
			
		||||
//   abouta     -> about a
 | 
			
		||||
//   aboutit    -> about it
 | 
			
		||||
//   aboutthe   -> about the
 | 
			
		||||
//   abvove     -> above
 | 
			
		||||
//   accesories -> accessories
 | 
			
		||||
//   accomodate -> accommodate
 | 
			
		||||
//   accross    -> across
 | 
			
		||||
//   acommodate -> accommodate
 | 
			
		||||
//   acomplish  -> accomplish
 | 
			
		||||
//   actualy    -> actually
 | 
			
		||||
//   acurate    -> accurate
 | 
			
		||||
//   acutally   -> actually
 | 
			
		||||
//   addtion    -> addition
 | 
			
		||||
//   adviced    -> advised
 | 
			
		||||
//   againnst   -> against
 | 
			
		||||
//   aganist    -> against
 | 
			
		||||
//   aggreed    -> agreed
 | 
			
		||||
//   agianst    -> against
 | 
			
		||||
//   ahppn      -> happen
 | 
			
		||||
//   aledge     -> allege
 | 
			
		||||
//   alledge    -> allege
 | 
			
		||||
//   allign     -> align
 | 
			
		||||
//   almsot     -> almost
 | 
			
		||||
//   alomst     -> almost
 | 
			
		||||
//   alwasy     -> always
 | 
			
		||||
//   alwyas     -> always
 | 
			
		||||
//   amature    -> amateur
 | 
			
		||||
//   anohter    -> another
 | 
			
		||||
//   anomolous  -> anomalous
 | 
			
		||||
//   anomoly    -> anomaly
 | 
			
		||||
//   anytying   -> anything
 | 
			
		||||
//   aparent    -> apparent
 | 
			
		||||
//   aparrent   -> apparent
 | 
			
		||||
//   apparant   -> apparent
 | 
			
		||||
//   apparrent  -> apparent
 | 
			
		||||
//   aquire     -> acquire
 | 
			
		||||
//   aroud      -> around
 | 
			
		||||
//   arround    -> around
 | 
			
		||||
//   arund      -> around
 | 
			
		||||
//   asthetic   -> aesthetic
 | 
			
		||||
//   auxilary   -> auxiliary
 | 
			
		||||
//   auxillary  -> auxiliary
 | 
			
		||||
//   auxilliary -> auxiliary
 | 
			
		||||
//   availabe   -> available
 | 
			
		||||
//   availaible -> available
 | 
			
		||||
//   availalbe  -> available
 | 
			
		||||
//   availble   -> available
 | 
			
		||||
//   availiable -> available
 | 
			
		||||
//   avalable   -> available
 | 
			
		||||
//   avaliable  -> available
 | 
			
		||||
//   avilable   -> available
 | 
			
		||||
//   baceause   -> because
 | 
			
		||||
//   bandwith   -> bandwidth
 | 
			
		||||
//   bankrupcy  -> bankruptcy
 | 
			
		||||
//   baout      -> about
 | 
			
		||||
//   beacuse    -> because
 | 
			
		||||
//   becasue    -> because
 | 
			
		||||
//   beccause   -> because
 | 
			
		||||
//   becouse    -> because
 | 
			
		||||
//   becuase    -> because
 | 
			
		||||
//   bedore     -> before
 | 
			
		||||
//   beeing     -> being
 | 
			
		||||
//   befoer     -> before
 | 
			
		||||
//   begginer   -> beginner
 | 
			
		||||
//   beleif     -> belief
 | 
			
		||||
//   beleive    -> believe
 | 
			
		||||
//   belive     -> believe
 | 
			
		||||
//   beteen     -> between
 | 
			
		||||
//   beween     -> between
 | 
			
		||||
//   bewteen    -> between
 | 
			
		||||
//   breif      -> brief
 | 
			
		||||
//   burried    -> buried
 | 
			
		||||
//   busness    -> business
 | 
			
		||||
//   bussiness  -> business
 | 
			
		||||
//   cacheing   -> caching
 | 
			
		||||
//   calander   -> calendar
 | 
			
		||||
//   caluclate  -> calculate
 | 
			
		||||
//   caluculate -> calculate
 | 
			
		||||
//   calulate   -> calculate
 | 
			
		||||
//   catagory   -> category
 | 
			
		||||
//   cauhgt     -> caught
 | 
			
		||||
//   ceratin    -> certain
 | 
			
		||||
//   certian    -> certain
 | 
			
		||||
//   cheif      -> chief
 | 
			
		||||
//   chekc      -> check
 | 
			
		||||
//   childen    -> children
 | 
			
		||||
//   chnage     -> change
 | 
			
		||||
//   choosen    -> chosen
 | 
			
		||||
//   cieling    -> ceiling
 | 
			
		||||
//   circut     -> circuit
 | 
			
		||||
//   claer      -> clear
 | 
			
		||||
//   clasic     -> classic
 | 
			
		||||
//   cmoputer   -> computer
 | 
			
		||||
//   coform     -> conform
 | 
			
		||||
//   cognizent  -> cognizant
 | 
			
		||||
//   collegue   -> colleague
 | 
			
		||||
//   comapny    -> company
 | 
			
		||||
//   comittee   -> committee
 | 
			
		||||
//   comming:   -> coming
 | 
			
		||||
//   commitee   -> committee
 | 
			
		||||
//   competance -> competence
 | 
			
		||||
//   competant  -> competent
 | 
			
		||||
//   complier   -> compiler
 | 
			
		||||
//   concensus  -> consensus
 | 
			
		||||
//   considerd  -> considered
 | 
			
		||||
//   contian    -> contain
 | 
			
		||||
//   copywrite: -> copyright
 | 
			
		||||
//   cosnt      -> const
 | 
			
		||||
//   coudl      -> could
 | 
			
		||||
//   dervied    -> derived
 | 
			
		||||
//   desicion   -> decision
 | 
			
		||||
//   didnot     -> did not
 | 
			
		||||
//   diferent   -> different
 | 
			
		||||
//   diferrent  -> different
 | 
			
		||||
//   differnt   -> different
 | 
			
		||||
//   diffrent   -> different
 | 
			
		||||
//   divison    -> division
 | 
			
		||||
//   doulbe     -> double
 | 
			
		||||
//   dyanmic    -> dynamic
 | 
			
		||||
//   effecient  -> efficient
 | 
			
		||||
//   elasped    -> elapsed
 | 
			
		||||
//   eligable   -> eligible
 | 
			
		||||
//   elpased    -> elapsed
 | 
			
		||||
//   embarass   -> embarrass
 | 
			
		||||
//   embeded    -> embedded
 | 
			
		||||
//   encypt     -> encrypt
 | 
			
		||||
//   excecut    -> execut
 | 
			
		||||
//   excercise  -> exercise
 | 
			
		||||
//   failse     -> false
 | 
			
		||||
//   fales      -> false
 | 
			
		||||
//   fasle      -> false
 | 
			
		||||
//   feild      -> field
 | 
			
		||||
//   finaly     -> finally
 | 
			
		||||
//   firend     -> friend
 | 
			
		||||
//   firts      -> first
 | 
			
		||||
//   fitler     -> filter
 | 
			
		||||
//   flase      -> false
 | 
			
		||||
//   follwo     -> follow
 | 
			
		||||
//   foriegn    -> foreign
 | 
			
		||||
//   foward     -> forward
 | 
			
		||||
//   fraciton   -> fraction
 | 
			
		||||
//   freind     -> friend
 | 
			
		||||
//   frequecy   -> frequency
 | 
			
		||||
//   fromthe    -> from the
 | 
			
		||||
//   fucntion   -> function
 | 
			
		||||
//   fufill     -> fulfill
 | 
			
		||||
//   fullfill   -> fulfill
 | 
			
		||||
//   futher     -> further
 | 
			
		||||
//   ganerate   -> generate
 | 
			
		||||
//   garantee   -> guarantee
 | 
			
		||||
//   gaurantee  -> guarantee
 | 
			
		||||
//   generaly   -> generally
 | 
			
		||||
//   govement   -> government
 | 
			
		||||
//   govenment  -> government
 | 
			
		||||
//   goverment  -> government
 | 
			
		||||
//   governmnet -> government
 | 
			
		||||
//   govorment  -> government
 | 
			
		||||
//   govornment -> government
 | 
			
		||||
//   greatful   -> grateful
 | 
			
		||||
//   guaratee   -> guarantee
 | 
			
		||||
//   heigher    -> higher
 | 
			
		||||
//   heigth     -> height
 | 
			
		||||
//   heirarchy  -> hierarchy
 | 
			
		||||
//   higest     -> highest
 | 
			
		||||
//   howver     -> however
 | 
			
		||||
//   hydogen    -> hydrogen
 | 
			
		||||
//   hygeine    -> hygiene
 | 
			
		||||
//   hypocracy  -> hypocrisy
 | 
			
		||||
//   hypocrasy  -> hypocrisy
 | 
			
		||||
//   hypocricy  -> hypocrisy
 | 
			
		||||
//   hypocrit:  -> hypocrite
 | 
			
		||||
//   iamge      -> image
 | 
			
		||||
//   importamt  -> important
 | 
			
		||||
//   inclued    -> include
 | 
			
		||||
//   indeces    -> indices
 | 
			
		||||
//   indecies   -> indices
 | 
			
		||||
//   indicies   -> indices
 | 
			
		||||
//   inital     -> initial
 | 
			
		||||
//   insted     -> instead
 | 
			
		||||
//   interator  -> iterator
 | 
			
		||||
//   intput     -> input
 | 
			
		||||
//   intrest    -> interest
 | 
			
		||||
//   invliad    -> invalid
 | 
			
		||||
//   laguage    -> language
 | 
			
		||||
//   largst     -> largest
 | 
			
		||||
//   learnign   -> learning
 | 
			
		||||
//   lenght     -> length
 | 
			
		||||
//   levle      -> level
 | 
			
		||||
//   liasion    -> liaison
 | 
			
		||||
//   libary     -> library
 | 
			
		||||
//   likly      -> likely
 | 
			
		||||
//   lisense    -> license
 | 
			
		||||
//   listner    -> listener
 | 
			
		||||
//   littel     -> little
 | 
			
		||||
//   looses:    -> loses
 | 
			
		||||
//   looup      -> lookup
 | 
			
		||||
//   macthing   -> matching
 | 
			
		||||
//   maintence  -> maintenance
 | 
			
		||||
//   manefist   -> manifest
 | 
			
		||||
//   mesage     -> message
 | 
			
		||||
//   morgage    -> mortgage
 | 
			
		||||
//   mysefl     -> myself
 | 
			
		||||
//   namesapce  -> namespace
 | 
			
		||||
//   namespcae  -> namespace
 | 
			
		||||
//   naturual   -> natural
 | 
			
		||||
//   neccesary  -> necessary
 | 
			
		||||
//   necesary   -> necessary
 | 
			
		||||
//   nulltpr    -> nullptr
 | 
			
		||||
//   occassion  -> occasion
 | 
			
		||||
//   occured    -> occurred
 | 
			
		||||
//   operaotr   -> operator
 | 
			
		||||
//   ouptut     -> output
 | 
			
		||||
//   ouput      -> output
 | 
			
		||||
//   overide    -> override
 | 
			
		||||
//   ovveride   -> override
 | 
			
		||||
//   pallete    -> palette
 | 
			
		||||
//   paralel    -> parallel
 | 
			
		||||
//   parralel   -> parallel
 | 
			
		||||
//   parrallel  -> parallel
 | 
			
		||||
//   particualr -> particular
 | 
			
		||||
//   paticular  -> particular
 | 
			
		||||
//   peaple     -> people
 | 
			
		||||
//   peice      -> piece
 | 
			
		||||
//   peolpe     -> people
 | 
			
		||||
//   peopel     -> people
 | 
			
		||||
//   perhasp    -> perhaps
 | 
			
		||||
//   perheaps   -> perhaps
 | 
			
		||||
//   perhpas    -> perhaps
 | 
			
		||||
//   perphas    -> perhaps
 | 
			
		||||
//   persue     -> pursue
 | 
			
		||||
//   poeople    -> people
 | 
			
		||||
//   poeple     -> people
 | 
			
		||||
//   poitner    -> pointer
 | 
			
		||||
//   posess     -> possess
 | 
			
		||||
//   postion    -> position
 | 
			
		||||
//   preiod     -> period
 | 
			
		||||
//   primarly   -> primarily
 | 
			
		||||
//   priviledge -> privilege
 | 
			
		||||
//   privte     -> private
 | 
			
		||||
//   probablly  -> probably
 | 
			
		||||
//   probaly    -> probably
 | 
			
		||||
//   probelm    -> problem
 | 
			
		||||
//   proccess   -> process
 | 
			
		||||
//   proeprty   -> property
 | 
			
		||||
//   prominant  -> prominent
 | 
			
		||||
//   proove     -> prove
 | 
			
		||||
//   propery    -> property
 | 
			
		||||
//   propogate  -> propagate
 | 
			
		||||
//   psuedo     -> pseudo
 | 
			
		||||
//   raelly     -> really
 | 
			
		||||
//   realtion   -> relation
 | 
			
		||||
//   realy      -> really
 | 
			
		||||
//   reasearch  -> research
 | 
			
		||||
//   receiev    -> receiv
 | 
			
		||||
//   recepient  -> recipient
 | 
			
		||||
//   reciept    -> receipt
 | 
			
		||||
//   reciev     -> receiv
 | 
			
		||||
//   recipiant  -> recipient
 | 
			
		||||
//   recrod     -> record
 | 
			
		||||
//   recuring   -> recurring
 | 
			
		||||
//   referece   -> reference
 | 
			
		||||
//   refered    -> referred
 | 
			
		||||
//   regluar    -> regular
 | 
			
		||||
//   relaly     -> really
 | 
			
		||||
//   releated   -> related
 | 
			
		||||
//   relevent   -> relevant
 | 
			
		||||
//   repitition -> repetition
 | 
			
		||||
//   reponse    -> response
 | 
			
		||||
//   reprot     -> report
 | 
			
		||||
//   resutl     -> result
 | 
			
		||||
//   retrun     -> return
 | 
			
		||||
//   retun      -> return
 | 
			
		||||
//   reuslt     -> result
 | 
			
		||||
//   reutrn     -> return
 | 
			
		||||
//   reveiw     -> review
 | 
			
		||||
//   saftey     -> safety
 | 
			
		||||
//   safty      -> safety
 | 
			
		||||
//   satisifed  -> satisfied
 | 
			
		||||
//   scheduel   -> schedule
 | 
			
		||||
//   seperat    -> separat
 | 
			
		||||
//   sequnce    -> sequence
 | 
			
		||||
//   shoudl     -> should
 | 
			
		||||
//   similiar   -> similar
 | 
			
		||||
//   simmilar   -> similar
 | 
			
		||||
//   singed     -> signed
 | 
			
		||||
//   singel     -> single
 | 
			
		||||
//   slighly    -> slightly
 | 
			
		||||
//   somehwat   -> somewhat
 | 
			
		||||
//   spectogram -> spectrogram
 | 
			
		||||
//   statment   -> statement
 | 
			
		||||
//   stirng     -> string
 | 
			
		||||
//   stregth    -> strength
 | 
			
		||||
//   strengh    -> strength
 | 
			
		||||
//   strign     -> string
 | 
			
		||||
//   succsess   -> success
 | 
			
		||||
//   sucess     -> success
 | 
			
		||||
//   sugest     -> suggest
 | 
			
		||||
//   sumary     -> summary
 | 
			
		||||
//   supress    -> suppress
 | 
			
		||||
//   surpress   -> suppress
 | 
			
		||||
//   swithc     -> switch
 | 
			
		||||
//   swtich     -> switch
 | 
			
		||||
//   symetric   -> symmetric
 | 
			
		||||
//   teamplate  -> template
 | 
			
		||||
//   tempalte   -> template
 | 
			
		||||
//   theese     -> these
 | 
			
		||||
//   therfore   -> therefore
 | 
			
		||||
//   thign      -> thing
 | 
			
		||||
//   thigsn     -> things
 | 
			
		||||
//   thikn      -> think
 | 
			
		||||
//   thiunk     -> think
 | 
			
		||||
//   thnigs     -> things
 | 
			
		||||
//   thresold   -> threshold
 | 
			
		||||
//   throught   -> thought
 | 
			
		||||
//   tihkn      -> think
 | 
			
		||||
//   tkaes      -> takes
 | 
			
		||||
//   todya      -> today
 | 
			
		||||
//   toghether  -> together
 | 
			
		||||
//   tolerence  -> tolerance
 | 
			
		||||
//   tongiht    -> tonight
 | 
			
		||||
//   tranpose   -> transpose
 | 
			
		||||
//   typcial    -> typical
 | 
			
		||||
//   udpate     -> update
 | 
			
		||||
//   unkown     -> unknown
 | 
			
		||||
//   unqiue     -> unique
 | 
			
		||||
//   ususally   -> usually
 | 
			
		||||
//   verticies  -> vertices
 | 
			
		||||
//   virutal    -> virtual
 | 
			
		||||
//   vitual     -> virtual
 | 
			
		||||
//   whcih      -> which
 | 
			
		||||
//   whereever  -> wherever
 | 
			
		||||
//   wherre     -> where
 | 
			
		||||
//   whihc      -> which
 | 
			
		||||
//   whlch      -> which
 | 
			
		||||
//   widht      -> width
 | 
			
		||||
//   wierd      -> weird
 | 
			
		||||
//   wihch      -> which
 | 
			
		||||
//   woudl      -> would
 | 
			
		||||
//   yeild      -> yield
 | 
			
		||||
 | 
			
		||||
#define AUTOCORRECTION_MIN_LENGTH 5  // "abotu"
 | 
			
		||||
#define AUTOCORRECTION_MAX_LENGTH 10  // "auxilliary"
 | 
			
		||||
 | 
			
		||||
static const uint8_t autocorrection_data[5967] PROGMEM = {108, 67, 0, 4, 212, 0,
 | 
			
		||||
  6, 236, 0, 7, 100, 1, 8, 15, 3, 9, 169, 8, 10, 204, 8, 11, 68, 9, 12, 246, 9,
 | 
			
		||||
  14, 0, 10, 15, 28, 10, 16, 79, 11, 17, 129, 11, 18, 175, 13, 19, 227, 13, 21,
 | 
			
		||||
  253, 13, 22, 194, 15, 23, 121, 17, 24, 201, 20, 25, 210, 20, 26, 8, 21, 28,
 | 
			
		||||
  34, 21, 0, 71, 89, 0, 8, 99, 0, 10, 130, 0, 18, 142, 0, 22, 152, 0, 23, 163,
 | 
			
		||||
  0, 24, 202, 0, 0, 22, 8, 24, 44, 0, 131, 115, 101, 100, 0, 75, 106, 0, 23,
 | 
			
		||||
  115, 0, 0, 23, 44, 8, 11, 23, 44, 0, 132, 0, 12, 21, 26, 28, 19, 18, 6, 0,
 | 
			
		||||
  133, 114, 105, 103, 104, 116, 0, 17, 12, 16, 16, 18, 6, 0, 132, 105, 110, 103,
 | 
			
		||||
  0, 15, 22, 4, 44, 0, 131, 108, 115, 111, 0, 8, 22, 18, 18, 15, 0, 132, 115,
 | 
			
		||||
  101, 115, 0, 76, 173, 0, 18, 183, 0, 24, 193, 0, 0, 21, 6, 18, 19, 28, 11, 0,
 | 
			
		||||
  128, 101, 0, 15, 4, 44, 0, 131, 32, 108, 111, 116, 0, 22, 13, 44, 0, 131, 117,
 | 
			
		||||
  115, 116, 0, 23, 22, 13, 44, 0, 131, 117, 115, 116, 0, 87, 219, 0, 28, 228, 0,
 | 
			
		||||
  0, 24, 18, 5, 4, 0, 128, 32, 97, 0, 7, 18, 23, 0, 129, 97, 121, 0, 75, 246, 0,
 | 
			
		||||
  12, 28, 1, 14, 92, 1, 0, 76, 253, 0, 23, 20, 1, 0, 75, 4, 1, 26, 10, 1, 0, 26,
 | 
			
		||||
  0, 129, 99, 104, 0, 11, 44, 0, 132, 119, 104, 105, 99, 104, 0, 12, 26, 22, 0,
 | 
			
		||||
  129, 99, 104, 0, 80, 41, 1, 21, 53, 1, 22, 67, 1, 23, 76, 1, 0, 17, 4, 28, 7,
 | 
			
		||||
  0, 132, 110, 97, 109, 105, 99, 0, 23, 8, 16, 28, 22, 0, 132, 109, 101, 116,
 | 
			
		||||
  114, 105, 99, 0, 4, 15, 6, 0, 129, 115, 105, 99, 0, 8, 11, 23, 22, 4, 0, 134,
 | 
			
		||||
  101, 115, 116, 104, 101, 116, 105, 99, 0, 8, 11, 6, 0, 129, 99, 107, 0, 68,
 | 
			
		||||
  122, 1, 8, 134, 1, 15, 84, 2, 17, 124, 2, 18, 180, 2, 21, 207, 2, 24, 7, 3, 0,
 | 
			
		||||
  12, 15, 25, 17, 12, 0, 131, 97, 108, 105, 100, 0, 70, 168, 1, 7, 178, 1, 8,
 | 
			
		||||
  188, 1, 9, 199, 1, 10, 212, 1, 12, 222, 1, 19, 248, 1, 21, 3, 2, 22, 38, 2,
 | 
			
		||||
  23, 50, 2, 24, 75, 2, 0, 12, 25, 7, 4, 0, 130, 115, 101, 100, 0, 8, 5, 16, 8,
 | 
			
		||||
  0, 129, 100, 101, 100, 0, 21, 10, 10, 4, 0, 132, 114, 101, 101, 100, 0, 12,
 | 
			
		||||
  22, 12, 23, 4, 22, 0, 131, 102, 105, 101, 100, 0, 17, 12, 22, 0, 131, 103,
 | 
			
		||||
  110, 101, 100, 0, 85, 229, 1, 25, 238, 1, 0, 21, 24, 5, 0, 131, 105, 101, 100,
 | 
			
		||||
  0, 21, 8, 7, 0, 131, 105, 118, 101, 100, 0, 22, 4, 15, 8, 0, 131, 112, 115,
 | 
			
		||||
  101, 100, 0, 72, 13, 2, 10, 22, 2, 24, 29, 2, 0, 9, 8, 21, 0, 129, 114, 101,
 | 
			
		||||
  100, 0, 4, 44, 0, 128, 101, 100, 0, 6, 6, 18, 0, 129, 114, 101, 100, 0, 4, 19,
 | 
			
		||||
  15, 8, 0, 132, 97, 112, 115, 101, 100, 0, 68, 57, 2, 22, 68, 2, 0, 8, 15, 8,
 | 
			
		||||
  21, 0, 132, 97, 116, 101, 100, 0, 17, 12, 0, 128, 97, 100, 0, 15, 6, 17, 12,
 | 
			
		||||
  0, 129, 100, 101, 0, 76, 91, 2, 18, 112, 2, 0, 8, 0, 73, 100, 2, 28, 106, 2,
 | 
			
		||||
  0, 131, 105, 101, 108, 100, 0, 131, 105, 101, 108, 100, 0, 22, 8, 21, 11, 23,
 | 
			
		||||
  0, 130, 104, 111, 108, 100, 0, 72, 134, 2, 12, 145, 2, 24, 155, 2, 0, 21, 12,
 | 
			
		||||
  9, 0, 132, 114, 105, 101, 110, 100, 0, 8, 21, 9, 0, 131, 105, 101, 110, 100,
 | 
			
		||||
  0, 82, 162, 2, 21, 172, 2, 0, 21, 21, 4, 0, 132, 111, 117, 110, 100, 0, 4, 0,
 | 
			
		||||
  130, 111, 117, 110, 100, 0, 76, 187, 2, 21, 198, 2, 0, 8, 21, 19, 0, 132, 101,
 | 
			
		||||
  114, 105, 111, 100, 0, 6, 8, 21, 0, 130, 111, 114, 100, 0, 68, 217, 2, 8, 228,
 | 
			
		||||
  2, 24, 253, 2, 0, 26, 18, 9, 0, 131, 114, 119, 97, 114, 100, 0, 71, 235, 2,
 | 
			
		||||
  12, 245, 2, 0, 12, 22, 17, 18, 6, 0, 128, 101, 100, 0, 26, 0, 131, 101, 105,
 | 
			
		||||
  114, 100, 0, 4, 10, 44, 0, 131, 117, 97, 114, 100, 0, 18, 21, 4, 0, 128, 110,
 | 
			
		||||
  100, 0, 68, 67, 3, 5, 80, 3, 6, 123, 3, 7, 251, 3, 8, 23, 4, 10, 107, 4, 11,
 | 
			
		||||
  227, 4, 12, 52, 5, 15, 61, 5, 17, 0, 6, 18, 27, 6, 19, 37, 6, 21, 47, 6, 22,
 | 
			
		||||
  156, 6, 23, 82, 7, 24, 45, 8, 25, 115, 8, 0, 6, 19, 22, 8, 16, 4, 17, 0, 130,
 | 
			
		||||
  97, 99, 101, 0, 68, 87, 3, 15, 97, 3, 0, 15, 12, 4, 25, 4, 0, 128, 108, 101,
 | 
			
		||||
  0, 68, 104, 3, 24, 115, 3, 0, 15, 12, 4, 25, 4, 0, 130, 98, 108, 101, 0, 18,
 | 
			
		||||
  7, 0, 130, 98, 108, 101, 0, 72, 136, 3, 12, 147, 3, 17, 156, 3, 19, 238, 3, 0,
 | 
			
		||||
  21, 8, 9, 8, 21, 0, 129, 110, 99, 101, 0, 8, 19, 0, 131, 105, 101, 99, 101, 0,
 | 
			
		||||
  68, 166, 3, 8, 179, 3, 24, 228, 3, 0, 23, 8, 19, 16, 18, 6, 0, 131, 101, 110,
 | 
			
		||||
  99, 101, 0, 85, 186, 3, 23, 217, 3, 0, 8, 0, 73, 195, 3, 15, 208, 3, 0, 21,
 | 
			
		||||
  44, 0, 134, 101, 102, 101, 114, 101, 110, 99, 101, 0, 18, 23, 0, 131, 97, 110,
 | 
			
		||||
  99, 101, 0, 17, 12, 4, 16, 0, 129, 97, 110, 99, 101, 0, 20, 8, 22, 0, 130,
 | 
			
		||||
  101, 110, 99, 101, 0, 4, 22, 8, 16, 4, 17, 0, 131, 112, 97, 99, 101, 0, 12,
 | 
			
		||||
  21, 8, 25, 0, 82, 7, 4, 25, 13, 4, 0, 130, 114, 105, 100, 101, 0, 18, 0, 133,
 | 
			
		||||
  101, 114, 114, 105, 100, 101, 0, 23, 0, 68, 38, 4, 12, 49, 4, 17, 59, 4, 23,
 | 
			
		||||
  94, 4, 0, 21, 4, 24, 10, 0, 130, 110, 116, 101, 101, 0, 16, 16, 18, 6, 0, 129,
 | 
			
		||||
  116, 101, 101, 0, 4, 21, 0, 68, 69, 4, 24, 81, 4, 0, 10, 0, 134, 117, 97, 114,
 | 
			
		||||
  97, 110, 116, 101, 101, 0, 4, 10, 0, 135, 117, 97, 114, 97, 110, 116, 101,
 | 
			
		||||
  101, 0, 12, 16, 18, 6, 0, 132, 109, 105, 116, 116, 101, 101, 0, 68, 117, 4, 7,
 | 
			
		||||
  184, 4, 16, 218, 4, 0, 74, 130, 4, 17, 141, 4, 22, 150, 4, 24, 159, 4, 0, 21,
 | 
			
		||||
  18, 16, 0, 131, 116, 103, 97, 103, 101, 0, 11, 6, 0, 131, 97, 110, 103, 101,
 | 
			
		||||
  0, 8, 16, 0, 130, 115, 97, 103, 101, 0, 10, 0, 108, 168, 4, 4, 174, 4, 0, 131,
 | 
			
		||||
  97, 117, 103, 101, 0, 15, 0, 132, 110, 103, 117, 97, 103, 101, 0, 8, 15, 0,
 | 
			
		||||
  68, 197, 4, 12, 203, 4, 15, 212, 4, 0, 131, 108, 101, 103, 101, 0, 25, 12, 21,
 | 
			
		||||
  19, 0, 130, 103, 101, 0, 4, 0, 130, 103, 101, 0, 4, 12, 0, 131, 109, 97, 103,
 | 
			
		||||
  101, 0, 23, 0, 71, 245, 4, 16, 255, 4, 18, 9, 5, 22, 18, 5, 23, 27, 5, 0, 17,
 | 
			
		||||
  4, 44, 0, 130, 32, 116, 104, 101, 0, 18, 21, 9, 0, 130, 32, 116, 104, 101, 0,
 | 
			
		||||
  23, 44, 0, 130, 32, 116, 104, 101, 0, 4, 44, 0, 130, 32, 116, 104, 101, 0, 68,
 | 
			
		||||
  34, 5, 24, 42, 5, 0, 44, 0, 130, 32, 116, 104, 101, 0, 18, 5, 4, 0, 130, 32,
 | 
			
		||||
  116, 104, 101, 0, 29, 22, 44, 0, 130, 105, 122, 101, 0, 69, 77, 5, 12, 190, 5,
 | 
			
		||||
  19, 201, 5, 22, 241, 5, 25, 249, 5, 0, 68, 87, 5, 12, 167, 5, 15, 179, 5, 0,
 | 
			
		||||
  74, 97, 5, 12, 107, 5, 15, 137, 5, 0, 12, 15, 8, 0, 131, 105, 98, 108, 101, 0,
 | 
			
		||||
  15, 0, 68, 116, 5, 12, 127, 5, 0, 25, 4, 0, 133, 105, 108, 97, 98, 108, 101,
 | 
			
		||||
  0, 4, 25, 4, 0, 132, 97, 98, 108, 101, 0, 68, 144, 5, 12, 155, 5, 0, 25, 4, 0,
 | 
			
		||||
  132, 105, 108, 97, 98, 108, 101, 0, 25, 4, 0, 133, 97, 105, 108, 97, 98, 108,
 | 
			
		||||
  101, 0, 4, 15, 12, 4, 25, 4, 0, 131, 98, 108, 101, 0, 12, 4, 25, 4, 0, 130,
 | 
			
		||||
  97, 98, 108, 101, 0, 26, 11, 44, 0, 132, 119, 104, 105, 108, 101, 0, 68, 211,
 | 
			
		||||
  5, 8, 220, 5, 18, 230, 5, 0, 8, 19, 0, 131, 111, 112, 108, 101, 0, 18, 19, 0,
 | 
			
		||||
  132, 101, 111, 112, 108, 101, 0, 8, 18, 19, 0, 133, 101, 111, 112, 108, 101,
 | 
			
		||||
  0, 4, 9, 0, 130, 108, 115, 101, 0, 8, 15, 0, 129, 101, 108, 0, 70, 7, 6, 12,
 | 
			
		||||
  16, 6, 0, 12, 22, 44, 0, 130, 110, 99, 101, 0, 8, 10, 28, 11, 0, 131, 105,
 | 
			
		||||
  101, 110, 101, 0, 22, 11, 23, 44, 0, 130, 111, 115, 101, 0, 15, 18, 8, 19, 0,
 | 
			
		||||
  130, 112, 108, 101, 0, 70, 66, 6, 8, 76, 6, 12, 87, 6, 18, 99, 6, 21, 127, 6,
 | 
			
		||||
  24, 134, 6, 0, 18, 22, 44, 0, 131, 99, 111, 114, 101, 0, 23, 11, 44, 0, 132,
 | 
			
		||||
  116, 104, 101, 114, 101, 0, 24, 20, 4, 0, 132, 99, 113, 117, 105, 114, 101, 0,
 | 
			
		||||
  71, 106, 6, 9, 115, 6, 0, 8, 5, 0, 131, 102, 111, 114, 101, 0, 21, 8, 11, 23,
 | 
			
		||||
  0, 131, 101, 102, 111, 114, 101, 0, 8, 11, 26, 0, 129, 101, 0, 23, 0, 108,
 | 
			
		||||
  143, 6, 4, 148, 6, 0, 130, 114, 117, 101, 0, 16, 4, 0, 130, 101, 117, 114, 0,
 | 
			
		||||
  68, 178, 6, 8, 203, 6, 12, 211, 6, 15, 226, 6, 17, 235, 6, 18, 9, 7, 24, 22,
 | 
			
		||||
  7, 0, 79, 185, 6, 24, 193, 6, 0, 9, 0, 131, 97, 108, 115, 101, 0, 6, 8, 5, 0,
 | 
			
		||||
  131, 97, 117, 115, 101, 0, 8, 11, 23, 0, 130, 115, 101, 0, 6, 21, 8, 6, 27, 8,
 | 
			
		||||
  0, 134, 101, 114, 99, 105, 115, 101, 0, 12, 4, 9, 0, 131, 108, 115, 101, 0,
 | 
			
		||||
  72, 242, 6, 18, 253, 6, 0, 22, 12, 15, 0, 132, 99, 101, 110, 115, 101, 0, 19,
 | 
			
		||||
  8, 21, 0, 132, 115, 112, 111, 110, 115, 101, 0, 19, 17, 4, 21, 23, 0, 131,
 | 
			
		||||
  115, 112, 111, 115, 101, 0, 68, 32, 7, 6, 61, 7, 18, 72, 7, 0, 70, 39, 7, 8,
 | 
			
		||||
  49, 7, 0, 6, 8, 5, 0, 132, 97, 117, 115, 101, 0, 6, 4, 5, 0, 134, 101, 99, 97,
 | 
			
		||||
  117, 115, 101, 0, 4, 8, 5, 0, 132, 99, 97, 117, 115, 101, 0, 6, 8, 5, 0, 131,
 | 
			
		||||
  97, 117, 115, 101, 0, 68, 95, 7, 8, 13, 8, 15, 24, 8, 25, 36, 8, 0, 71, 111,
 | 
			
		||||
  7, 10, 148, 7, 15, 161, 7, 19, 228, 7, 21, 238, 7, 0, 18, 16, 0, 80, 121, 7,
 | 
			
		||||
  18, 136, 7, 0, 18, 6, 4, 0, 135, 99, 111, 109, 109, 111, 100, 97, 116, 101, 0,
 | 
			
		||||
  6, 6, 4, 0, 132, 109, 111, 100, 97, 116, 101, 0, 18, 19, 18, 21, 19, 0, 132,
 | 
			
		||||
  97, 103, 97, 116, 101, 0, 70, 171, 7, 19, 184, 7, 24, 197, 7, 0, 24, 15, 4, 6,
 | 
			
		||||
  0, 133, 99, 117, 108, 97, 116, 101, 0, 16, 4, 8, 23, 0, 134, 109, 112, 108,
 | 
			
		||||
  97, 116, 101, 0, 70, 204, 7, 15, 217, 7, 0, 24, 15, 4, 6, 0, 134, 99, 117,
 | 
			
		||||
  108, 97, 116, 101, 0, 4, 6, 0, 132, 99, 117, 108, 97, 116, 101, 0, 7, 24, 0,
 | 
			
		||||
  132, 112, 100, 97, 116, 101, 0, 72, 245, 7, 24, 2, 8, 0, 17, 4, 10, 0, 134,
 | 
			
		||||
  101, 110, 101, 114, 97, 116, 101, 0, 6, 4, 0, 132, 99, 117, 114, 97, 116, 101,
 | 
			
		||||
  0, 15, 15, 4, 19, 0, 131, 101, 116, 116, 101, 0, 4, 19, 16, 8, 23, 0, 131,
 | 
			
		||||
  108, 97, 116, 101, 0, 12, 21, 19, 0, 129, 97, 116, 101, 0, 74, 55, 8, 12, 67,
 | 
			
		||||
  8, 22, 77, 8, 0, 8, 15, 15, 18, 6, 0, 130, 97, 103, 117, 101, 0, 20, 17, 24,
 | 
			
		||||
  0, 131, 105, 113, 117, 101, 0, 68, 84, 8, 21, 105, 8, 0, 6, 0, 108, 93, 8, 8,
 | 
			
		||||
  98, 8, 0, 130, 117, 115, 101, 0, 5, 0, 130, 117, 115, 101, 0, 8, 19, 0, 132,
 | 
			
		||||
  117, 114, 115, 117, 101, 0, 76, 122, 8, 18, 147, 8, 0, 72, 129, 8, 15, 139, 8,
 | 
			
		||||
  0, 15, 8, 5, 0, 131, 105, 101, 118, 101, 0, 8, 5, 0, 129, 101, 118, 101, 0,
 | 
			
		||||
  82, 154, 8, 25, 161, 8, 0, 21, 19, 0, 130, 118, 101, 0, 5, 4, 0, 131, 111,
 | 
			
		||||
  118, 101, 0, 12, 8, 0, 75, 182, 8, 15, 189, 8, 21, 197, 8, 0, 6, 0, 130, 105,
 | 
			
		||||
  101, 102, 0, 8, 5, 0, 130, 105, 101, 102, 0, 5, 0, 130, 105, 101, 102, 0, 76,
 | 
			
		||||
  211, 8, 17, 221, 8, 0, 17, 18, 10, 44, 0, 130, 105, 110, 103, 0, 76, 228, 8,
 | 
			
		||||
  21, 58, 9, 0, 72, 244, 8, 11, 11, 9, 15, 24, 9, 21, 36, 9, 28, 47, 9, 0, 72,
 | 
			
		||||
  251, 8, 11, 2, 9, 0, 5, 0, 131, 105, 110, 103, 0, 6, 4, 6, 0, 131, 105, 110,
 | 
			
		||||
  103, 0, 23, 6, 4, 16, 0, 133, 116, 99, 104, 105, 110, 103, 0, 8, 12, 6, 0,
 | 
			
		||||
  133, 101, 105, 108, 105, 110, 103, 0, 24, 6, 8, 21, 0, 130, 114, 105, 110,
 | 
			
		||||
  103, 0, 23, 28, 17, 4, 0, 131, 104, 105, 110, 103, 0, 12, 23, 22, 0, 131, 114,
 | 
			
		||||
  105, 110, 103, 0, 70, 87, 9, 8, 142, 9, 10, 154, 9, 12, 164, 9, 22, 173, 9,
 | 
			
		||||
  23, 191, 9, 0, 75, 100, 9, 12, 109, 9, 15, 119, 9, 21, 127, 9, 0, 12, 26, 0,
 | 
			
		||||
  131, 104, 105, 99, 104, 0, 23, 26, 22, 0, 131, 105, 116, 99, 104, 0, 11, 26,
 | 
			
		||||
  0, 130, 105, 99, 104, 0, 4, 8, 22, 4, 8, 21, 0, 134, 115, 101, 97, 114, 99,
 | 
			
		||||
  104, 0, 23, 7, 17, 4, 44, 0, 130, 32, 116, 104, 101, 0, 17, 8, 21, 23, 22, 0,
 | 
			
		||||
  128, 116, 104, 0, 6, 11, 26, 0, 130, 105, 99, 104, 0, 12, 15, 19, 16, 18, 6,
 | 
			
		||||
  4, 0, 134, 99, 111, 109, 112, 108, 105, 115, 104, 0, 74, 201, 9, 12, 225, 9,
 | 
			
		||||
  21, 236, 9, 0, 72, 208, 9, 12, 218, 9, 0, 21, 23, 22, 0, 130, 110, 103, 116,
 | 
			
		||||
  104, 0, 8, 11, 0, 129, 104, 116, 0, 26, 7, 17, 4, 5, 0, 129, 100, 116, 104, 0,
 | 
			
		||||
  24, 23, 44, 0, 131, 114, 117, 116, 104, 0, 21, 8, 11, 23, 44, 0, 129, 105,
 | 
			
		||||
  114, 0, 17, 0, 76, 9, 10, 24, 20, 10, 0, 23, 11, 44, 0, 132, 116, 104, 105,
 | 
			
		||||
  110, 107, 0, 12, 11, 23, 0, 130, 110, 107, 0, 68, 50, 10, 7, 134, 10, 8, 177,
 | 
			
		||||
  10, 9, 17, 11, 15, 26, 11, 23, 55, 11, 24, 64, 11, 0, 76, 60, 10, 23, 71, 10,
 | 
			
		||||
  24, 96, 10, 0, 6, 19, 28, 23, 0, 131, 105, 99, 97, 108, 0, 76, 78, 10, 24, 86,
 | 
			
		||||
  10, 0, 17, 12, 0, 129, 105, 97, 108, 0, 21, 12, 25, 0, 131, 116, 117, 97, 108,
 | 
			
		||||
  0, 81, 106, 10, 21, 115, 10, 23, 124, 10, 0, 4, 44, 0, 130, 110, 117, 97, 108,
 | 
			
		||||
  0, 24, 23, 4, 17, 0, 130, 97, 108, 0, 12, 25, 0, 131, 114, 116, 117, 97, 108,
 | 
			
		||||
  0, 24, 0, 82, 143, 10, 26, 167, 10, 0, 70, 153, 10, 11, 157, 10, 26, 163, 10,
 | 
			
		||||
  0, 129, 108, 100, 0, 22, 0, 129, 108, 100, 0, 129, 108, 100, 0, 18, 44, 0,
 | 
			
		||||
  132, 119, 111, 117, 108, 100, 0, 74, 193, 10, 15, 201, 10, 19, 247, 10, 23,
 | 
			
		||||
  255, 10, 24, 7, 11, 0, 17, 12, 22, 0, 129, 108, 101, 0, 68, 208, 10, 15, 234,
 | 
			
		||||
  10, 0, 21, 0, 68, 217, 10, 21, 224, 10, 0, 19, 0, 129, 108, 101, 108, 0, 4,
 | 
			
		||||
  19, 0, 132, 97, 108, 108, 101, 108, 0, 4, 21, 21, 4, 19, 0, 133, 97, 108, 108,
 | 
			
		||||
  101, 108, 0, 18, 8, 19, 0, 129, 108, 101, 0, 23, 12, 15, 0, 129, 108, 101, 0,
 | 
			
		||||
  7, 8, 11, 6, 22, 0, 129, 108, 101, 0, 8, 22, 28, 16, 0, 129, 108, 102, 0, 12,
 | 
			
		||||
  9, 0, 79, 36, 11, 24, 46, 11, 0, 15, 24, 9, 0, 132, 102, 105, 108, 108, 0, 9,
 | 
			
		||||
  0, 131, 108, 102, 105, 108, 108, 0, 24, 22, 8, 21, 0, 129, 108, 116, 0, 9, 23,
 | 
			
		||||
  4, 8, 21, 10, 0, 133, 97, 116, 101, 102, 117, 108, 0, 68, 89, 11, 15, 106, 11,
 | 
			
		||||
  21, 117, 11, 0, 21, 10, 18, 23, 6, 8, 19, 22, 0, 132, 114, 111, 103, 114, 97,
 | 
			
		||||
  109, 0, 8, 5, 18, 21, 19, 0, 130, 108, 101, 109, 0, 18, 9, 18, 6, 0, 131, 110,
 | 
			
		||||
  102, 111, 114, 109, 0, 68, 166, 11, 7, 206, 11, 8, 215, 11, 10, 58, 12, 12,
 | 
			
		||||
  141, 12, 14, 153, 12, 18, 192, 12, 19, 108, 13, 21, 120, 13, 22, 131, 13, 24,
 | 
			
		||||
  141, 13, 26, 164, 13, 0, 12, 0, 74, 175, 11, 23, 183, 11, 0, 4, 44, 0, 130,
 | 
			
		||||
  97, 105, 110, 0, 81, 190, 11, 21, 198, 11, 0, 18, 6, 0, 130, 97, 105, 110, 0,
 | 
			
		||||
  8, 6, 0, 130, 97, 105, 110, 0, 24, 18, 9, 44, 0, 129, 110, 100, 0, 71, 231,
 | 
			
		||||
  11, 8, 241, 11, 10, 27, 12, 19, 39, 12, 22, 48, 12, 0, 15, 12, 11, 6, 0, 129,
 | 
			
		||||
  114, 101, 110, 0, 87, 248, 11, 26, 17, 12, 0, 72, 255, 11, 26, 7, 12, 0, 5, 0,
 | 
			
		||||
  130, 119, 101, 101, 110, 0, 8, 5, 0, 132, 116, 119, 101, 101, 110, 0, 8, 5, 0,
 | 
			
		||||
  131, 116, 119, 101, 101, 110, 0, 18, 7, 28, 11, 0, 131, 114, 111, 103, 101,
 | 
			
		||||
  110, 0, 4, 11, 44, 0, 129, 112, 101, 110, 0, 18, 18, 11, 6, 0, 131, 115, 101,
 | 
			
		||||
  110, 0, 72, 65, 12, 12, 76, 12, 0, 12, 21, 18, 9, 0, 131, 101, 105, 103, 110,
 | 
			
		||||
  0, 75, 95, 12, 15, 101, 12, 17, 109, 12, 18, 118, 12, 21, 125, 12, 22, 132,
 | 
			
		||||
  12, 0, 23, 0, 129, 110, 103, 0, 15, 4, 0, 131, 105, 103, 110, 0, 21, 4, 8, 15,
 | 
			
		||||
  0, 129, 110, 103, 0, 10, 44, 0, 129, 110, 103, 0, 23, 22, 0, 129, 110, 103, 0,
 | 
			
		||||
  4, 44, 0, 130, 115, 105, 103, 110, 0, 23, 4, 21, 8, 6, 0, 131, 116, 97, 105,
 | 
			
		||||
  110, 0, 75, 160, 12, 12, 169, 12, 0, 12, 23, 0, 131, 104, 105, 110, 107, 0,
 | 
			
		||||
  75, 176, 12, 23, 182, 12, 0, 23, 0, 129, 110, 107, 0, 11, 44, 0, 132, 116,
 | 
			
		||||
  104, 105, 110, 107, 0, 76, 202, 12, 22, 86, 13, 23, 96, 13, 0, 70, 212, 12,
 | 
			
		||||
  22, 225, 12, 23, 251, 12, 0, 12, 22, 8, 7, 0, 133, 99, 105, 115, 105, 111,
 | 
			
		||||
  110, 0, 68, 232, 12, 22, 241, 12, 0, 12, 15, 0, 131, 105, 115, 111, 110, 0, 4,
 | 
			
		||||
  6, 6, 18, 0, 131, 105, 111, 110, 0, 68, 14, 13, 7, 27, 13, 12, 37, 13, 15, 52,
 | 
			
		||||
  13, 17, 64, 13, 22, 76, 13, 0, 21, 8, 5, 4, 0, 132, 114, 97, 116, 105, 111,
 | 
			
		||||
  110, 0, 7, 4, 0, 131, 105, 116, 105, 111, 110, 0, 23, 12, 19, 8, 21, 0, 134,
 | 
			
		||||
  101, 116, 105, 116, 105, 111, 110, 0, 4, 8, 21, 0, 133, 108, 97, 116, 105,
 | 
			
		||||
  111, 110, 0, 6, 24, 9, 0, 133, 110, 99, 116, 105, 111, 110, 0, 18, 19, 0, 131,
 | 
			
		||||
  105, 116, 105, 111, 110, 0, 12, 25, 12, 7, 0, 129, 105, 111, 110, 0, 12, 6, 4,
 | 
			
		||||
  21, 9, 0, 131, 116, 105, 111, 110, 0, 19, 11, 4, 0, 132, 104, 97, 112, 112,
 | 
			
		||||
  101, 110, 0, 23, 24, 8, 21, 0, 131, 116, 117, 114, 110, 0, 10, 12, 11, 23, 0,
 | 
			
		||||
  130, 110, 103, 115, 0, 85, 148, 13, 23, 157, 13, 0, 23, 8, 21, 0, 130, 117,
 | 
			
		||||
  114, 110, 0, 8, 21, 0, 128, 114, 110, 0, 18, 14, 17, 24, 0, 130, 110, 111,
 | 
			
		||||
  119, 110, 0, 71, 185, 13, 17, 196, 13, 26, 205, 13, 0, 8, 24, 22, 19, 0, 131,
 | 
			
		||||
  101, 117, 100, 111, 0, 26, 14, 44, 0, 130, 110, 111, 119, 0, 79, 212, 13, 17,
 | 
			
		||||
  220, 13, 0, 15, 18, 9, 0, 129, 111, 119, 0, 14, 44, 0, 129, 111, 119, 0, 86,
 | 
			
		||||
  234, 13, 24, 244, 13, 0, 4, 11, 21, 8, 19, 0, 129, 112, 115, 0, 18, 18, 15, 0,
 | 
			
		||||
  129, 107, 117, 112, 0, 68, 28, 14, 8, 93, 14, 11, 103, 15, 15, 113, 15, 18,
 | 
			
		||||
  127, 15, 19, 144, 15, 22, 155, 15, 23, 164, 15, 24, 176, 15, 28, 185, 15, 0,
 | 
			
		||||
  76, 38, 14, 15, 48, 14, 24, 82, 14, 0, 15, 12, 16, 12, 22, 0, 130, 97, 114, 0,
 | 
			
		||||
  76, 55, 14, 24, 66, 14, 0, 16, 16, 12, 22, 0, 132, 105, 108, 97, 114, 0, 6,
 | 
			
		||||
  12, 23, 4, 19, 0, 134, 114, 116, 105, 99, 117, 108, 97, 114, 0, 15, 10, 8, 21,
 | 
			
		||||
  0, 131, 117, 108, 97, 114, 0, 68, 124, 14, 7, 132, 14, 11, 145, 14, 12, 203,
 | 
			
		||||
  14, 15, 229, 14, 16, 239, 14, 17, 249, 14, 18, 37, 15, 23, 45, 15, 25, 76, 15,
 | 
			
		||||
  0, 15, 6, 0, 130, 101, 97, 114, 0, 17, 4, 15, 4, 6, 0, 132, 101, 110, 100, 97,
 | 
			
		||||
  114, 0, 74, 152, 14, 23, 163, 14, 0, 12, 8, 11, 0, 133, 105, 103, 104, 101,
 | 
			
		||||
  114, 0, 72, 173, 14, 15, 185, 14, 24, 194, 14, 0, 11, 10, 18, 23, 0, 133, 101,
 | 
			
		||||
  116, 104, 101, 114, 0, 18, 44, 0, 132, 116, 104, 101, 114, 0, 9, 0, 131, 114,
 | 
			
		||||
  116, 104, 101, 114, 0, 75, 210, 14, 15, 218, 14, 0, 23, 44, 0, 130, 101, 105,
 | 
			
		||||
  114, 0, 19, 16, 18, 6, 0, 131, 105, 108, 101, 114, 0, 23, 12, 9, 0, 131, 108,
 | 
			
		||||
  116, 101, 114, 0, 16, 4, 21, 10, 44, 0, 129, 97, 114, 0, 76, 0, 15, 23, 12,
 | 
			
		||||
  15, 0, 10, 10, 8, 5, 0, 132, 105, 110, 110, 101, 114, 0, 76, 19, 15, 22, 28,
 | 
			
		||||
  15, 0, 18, 19, 0, 131, 110, 116, 101, 114, 0, 12, 15, 0, 130, 101, 110, 101,
 | 
			
		||||
  114, 0, 9, 8, 5, 0, 129, 114, 101, 0, 75, 52, 15, 24, 62, 15, 0, 18, 17, 4, 0,
 | 
			
		||||
  131, 116, 104, 101, 114, 0, 19, 18, 16, 6, 0, 134, 111, 109, 112, 117, 116,
 | 
			
		||||
  101, 114, 0, 72, 83, 15, 26, 94, 15, 0, 8, 21, 8, 11, 26, 0, 131, 118, 101,
 | 
			
		||||
  114, 0, 18, 11, 0, 130, 101, 118, 101, 114, 0, 8, 23, 18, 44, 0, 130, 104,
 | 
			
		||||
  101, 114, 0, 4, 24, 6, 12, 23, 21, 4, 19, 0, 130, 108, 97, 114, 0, 23, 4, 21,
 | 
			
		||||
  8, 23, 17, 12, 0, 135, 116, 101, 114, 97, 116, 111, 114, 0, 23, 15, 15, 24,
 | 
			
		||||
  17, 0, 130, 112, 116, 114, 0, 4, 8, 28, 44, 0, 129, 114, 115, 0, 18, 4, 21, 8,
 | 
			
		||||
  19, 18, 0, 130, 116, 111, 114, 0, 6, 18, 44, 0, 129, 99, 117, 114, 0, 8, 25,
 | 
			
		||||
  8, 44, 0, 129, 114, 121, 0, 68, 219, 15, 8, 3, 16, 10, 147, 16, 19, 158, 16,
 | 
			
		||||
  21, 170, 16, 22, 181, 16, 23, 77, 17, 24, 85, 17, 0, 75, 229, 15, 19, 240, 15,
 | 
			
		||||
  28, 250, 15, 0, 19, 21, 8, 19, 0, 131, 104, 97, 112, 115, 0, 11, 21, 8, 19, 0,
 | 
			
		||||
  130, 97, 112, 115, 0, 26, 15, 4, 0, 130, 97, 121, 115, 0, 68, 19, 16, 6, 42,
 | 
			
		||||
  16, 12, 53, 16, 15, 129, 16, 22, 136, 16, 0, 71, 26, 16, 14, 34, 16, 0, 12,
 | 
			
		||||
  44, 0, 130, 101, 97, 115, 0, 23, 0, 131, 97, 107, 101, 115, 0, 8, 7, 17, 12,
 | 
			
		||||
  0, 131, 105, 99, 101, 115, 0, 70, 63, 16, 21, 102, 16, 23, 117, 16, 0, 72, 70,
 | 
			
		||||
  16, 12, 80, 16, 0, 7, 17, 12, 0, 132, 105, 99, 101, 115, 0, 71, 87, 16, 23,
 | 
			
		||||
  94, 16, 0, 17, 12, 0, 130, 101, 115, 0, 21, 8, 25, 0, 130, 101, 115, 0, 18,
 | 
			
		||||
  22, 8, 6, 6, 4, 0, 132, 115, 111, 114, 105, 101, 115, 0, 15, 12, 5, 4, 0, 131,
 | 
			
		||||
  105, 116, 105, 101, 115, 0, 4, 9, 0, 129, 115, 101, 0, 18, 11, 6, 44, 0, 130,
 | 
			
		||||
  111, 115, 101, 115, 0, 12, 17, 11, 23, 0, 131, 105, 110, 103, 115, 0, 4, 8,
 | 
			
		||||
  11, 21, 8, 19, 0, 131, 97, 112, 115, 0, 8, 4, 28, 44, 0, 131, 101, 97, 114,
 | 
			
		||||
  115, 0, 68, 191, 16, 8, 203, 16, 18, 66, 17, 0, 21, 4, 5, 16, 8, 0, 130, 114,
 | 
			
		||||
  97, 115, 115, 0, 70, 216, 16, 17, 240, 16, 21, 13, 17, 22, 42, 17, 0, 70, 223,
 | 
			
		||||
  16, 24, 232, 16, 0, 18, 21, 19, 0, 131, 101, 115, 115, 0, 22, 0, 130, 99, 101,
 | 
			
		||||
  115, 115, 0, 76, 247, 16, 22, 3, 17, 0, 22, 22, 24, 5, 0, 133, 105, 110, 101,
 | 
			
		||||
  115, 115, 0, 24, 5, 0, 131, 105, 110, 101, 115, 115, 0, 19, 0, 85, 22, 17, 24,
 | 
			
		||||
  33, 17, 0, 24, 22, 0, 133, 112, 112, 114, 101, 115, 115, 0, 22, 0, 131, 112,
 | 
			
		||||
  114, 101, 115, 115, 0, 70, 49, 17, 18, 58, 17, 0, 6, 24, 22, 0, 131, 101, 115,
 | 
			
		||||
  115, 0, 19, 0, 130, 115, 101, 115, 115, 0, 21, 6, 6, 4, 0, 132, 114, 111, 115,
 | 
			
		||||
  115, 0, 21, 12, 9, 0, 129, 115, 116, 0, 82, 92, 17, 22, 106, 17, 0, 15, 18,
 | 
			
		||||
  16, 18, 17, 4, 0, 132, 97, 108, 111, 117, 115, 0, 17, 8, 6, 17, 18, 6, 0, 133,
 | 
			
		||||
  115, 101, 110, 115, 117, 115, 0, 68, 158, 17, 8, 188, 17, 10, 217, 17, 11,
 | 
			
		||||
  227, 17, 12, 25, 18, 15, 36, 18, 16, 47, 18, 17, 59, 18, 18, 151, 19, 19, 189,
 | 
			
		||||
  19, 22, 217, 19, 24, 107, 20, 0, 85, 165, 17, 26, 176, 17, 0, 8, 19, 8, 22, 0,
 | 
			
		||||
  131, 97, 114, 97, 116, 0, 11, 8, 16, 18, 22, 0, 131, 119, 104, 97, 116, 0, 68,
 | 
			
		||||
  195, 17, 17, 204, 17, 0, 21, 10, 44, 0, 130, 101, 97, 116, 0, 16, 17, 21, 8,
 | 
			
		||||
  25, 18, 10, 0, 130, 101, 110, 116, 0, 11, 24, 4, 6, 0, 130, 103, 104, 116, 0,
 | 
			
		||||
  71, 237, 17, 10, 244, 17, 12, 14, 18, 0, 12, 26, 0, 129, 116, 104, 0, 81, 251,
 | 
			
		||||
  17, 24, 2, 18, 0, 8, 15, 0, 129, 116, 104, 0, 18, 21, 11, 23, 0, 133, 111,
 | 
			
		||||
  117, 103, 104, 116, 0, 10, 17, 18, 23, 0, 131, 105, 103, 104, 116, 0, 23, 24,
 | 
			
		||||
  18, 5, 4, 0, 129, 32, 105, 116, 0, 22, 24, 8, 21, 0, 131, 115, 117, 108, 116,
 | 
			
		||||
  0, 4, 23, 21, 18, 19, 16, 12, 0, 129, 110, 116, 0, 68, 72, 18, 8, 128, 18, 21,
 | 
			
		||||
  132, 19, 22, 143, 19, 0, 76, 85, 18, 17, 96, 18, 21, 107, 18, 23, 117, 18, 0,
 | 
			
		||||
  19, 12, 6, 8, 21, 0, 130, 101, 110, 116, 0, 12, 16, 18, 21, 19, 0, 130, 101,
 | 
			
		||||
  110, 116, 0, 4, 19, 19, 4, 0, 130, 101, 110, 116, 0, 8, 19, 16, 18, 6, 0, 130,
 | 
			
		||||
  101, 110, 116, 0, 76, 144, 18, 16, 177, 18, 21, 21, 19, 25, 111, 19, 29, 121,
 | 
			
		||||
  19, 0, 70, 151, 18, 19, 164, 18, 0, 8, 9, 9, 8, 0, 133, 105, 99, 105, 101,
 | 
			
		||||
  110, 116, 0, 8, 6, 8, 21, 0, 133, 105, 112, 105, 101, 110, 116, 0, 72, 190,
 | 
			
		||||
  18, 17, 202, 18, 21, 235, 18, 23, 10, 19, 0, 25, 18, 10, 0, 131, 114, 110,
 | 
			
		||||
  109, 101, 110, 116, 0, 72, 209, 18, 21, 221, 18, 0, 25, 18, 10, 0, 132, 114,
 | 
			
		||||
  110, 109, 101, 110, 116, 0, 18, 25, 18, 10, 0, 134, 101, 114, 110, 109, 101,
 | 
			
		||||
  110, 116, 0, 72, 242, 18, 18, 253, 18, 0, 25, 18, 10, 0, 131, 110, 109, 101,
 | 
			
		||||
  110, 116, 0, 25, 18, 10, 0, 133, 101, 114, 110, 109, 101, 110, 116, 0, 4, 23,
 | 
			
		||||
  22, 0, 131, 101, 109, 101, 110, 116, 0, 68, 34, 19, 8, 45, 19, 9, 57, 19, 21,
 | 
			
		||||
  68, 19, 0, 19, 4, 0, 132, 112, 97, 114, 101, 110, 116, 0, 9, 12, 7, 0, 132,
 | 
			
		||||
  102, 101, 114, 101, 110, 116, 0, 9, 12, 7, 0, 131, 101, 114, 101, 110, 116, 0,
 | 
			
		||||
  68, 75, 19, 8, 99, 19, 0, 19, 0, 68, 84, 19, 19, 92, 19, 0, 133, 112, 97, 114,
 | 
			
		||||
  101, 110, 116, 0, 4, 0, 131, 101, 110, 116, 0, 9, 12, 7, 0, 133, 102, 101,
 | 
			
		||||
  114, 101, 110, 116, 0, 8, 15, 8, 21, 0, 130, 97, 110, 116, 0, 12, 17, 10, 18,
 | 
			
		||||
  6, 0, 130, 97, 110, 116, 0, 8, 9, 9, 12, 7, 0, 129, 101, 110, 116, 0, 18, 6,
 | 
			
		||||
  0, 130, 110, 115, 116, 0, 81, 161, 19, 21, 171, 19, 22, 180, 19, 0, 7, 12, 7,
 | 
			
		||||
  0, 130, 32, 110, 111, 116, 0, 19, 8, 21, 0, 130, 111, 114, 116, 0, 16, 15, 4,
 | 
			
		||||
  0, 130, 111, 115, 116, 0, 72, 196, 19, 28, 207, 19, 0, 12, 6, 8, 21, 0, 131,
 | 
			
		||||
  101, 105, 112, 116, 0, 6, 17, 8, 0, 130, 114, 121, 112, 116, 0, 72, 236, 19,
 | 
			
		||||
  10, 21, 20, 12, 30, 20, 16, 59, 20, 17, 69, 20, 24, 96, 20, 0, 74, 243, 19,
 | 
			
		||||
  21, 10, 20, 0, 76, 250, 19, 24, 2, 20, 0, 11, 0, 130, 104, 101, 115, 116, 0,
 | 
			
		||||
  22, 0, 130, 103, 101, 115, 116, 0, 23, 17, 12, 0, 131, 101, 114, 101, 115,
 | 
			
		||||
  116, 0, 21, 4, 15, 0, 129, 101, 115, 116, 0, 73, 37, 20, 17, 49, 20, 0, 8, 17,
 | 
			
		||||
  4, 16, 0, 132, 105, 102, 101, 115, 116, 0, 4, 10, 4, 0, 131, 105, 110, 115,
 | 
			
		||||
  116, 0, 18, 15, 4, 0, 131, 109, 111, 115, 116, 0, 68, 76, 20, 17, 87, 20, 0,
 | 
			
		||||
  12, 10, 4, 0, 132, 97, 105, 110, 115, 116, 0, 12, 4, 10, 4, 0, 130, 115, 116,
 | 
			
		||||
  0, 13, 4, 44, 0, 131, 100, 106, 117, 115, 116, 0, 70, 120, 20, 18, 144, 20,
 | 
			
		||||
  19, 168, 20, 23, 191, 20, 0, 72, 127, 20, 21, 137, 20, 0, 6, 27, 8, 0, 132,
 | 
			
		||||
  101, 99, 117, 116, 0, 12, 6, 0, 128, 105, 116, 0, 68, 151, 20, 5, 160, 20, 0,
 | 
			
		||||
  5, 0, 132, 97, 98, 111, 117, 116, 0, 5, 4, 0, 131, 111, 117, 116, 0, 87, 175,
 | 
			
		||||
  20, 24, 183, 20, 0, 17, 12, 0, 131, 112, 117, 116, 0, 18, 0, 130, 116, 112,
 | 
			
		||||
  117, 116, 0, 19, 24, 18, 0, 131, 116, 112, 117, 116, 0, 23, 18, 5, 4, 0, 129,
 | 
			
		||||
  117, 116, 0, 72, 217, 20, 12, 253, 20, 0, 68, 224, 20, 12, 231, 20, 0, 11, 44,
 | 
			
		||||
  0, 129, 118, 101, 0, 70, 238, 20, 8, 246, 20, 0, 8, 21, 0, 130, 101, 105, 118,
 | 
			
		||||
  0, 6, 8, 21, 0, 129, 118, 0, 8, 11, 6, 4, 44, 0, 130, 105, 101, 118, 0, 76,
 | 
			
		||||
  15, 21, 17, 25, 21, 0, 8, 25, 8, 21, 0, 130, 105, 101, 119, 0, 18, 14, 44, 0,
 | 
			
		||||
  130, 110, 111, 119, 0, 70, 59, 21, 8, 118, 21, 11, 128, 21, 15, 146, 21, 17,
 | 
			
		||||
  87, 22, 21, 114, 22, 22, 12, 23, 23, 39, 23, 0, 68, 72, 21, 8, 84, 21, 12, 95,
 | 
			
		||||
  21, 19, 106, 21, 0, 21, 6, 18, 19, 28, 11, 0, 130, 105, 115, 121, 0, 24, 20,
 | 
			
		||||
  8, 21, 9, 0, 129, 110, 99, 121, 0, 21, 6, 18, 19, 28, 11, 0, 129, 115, 121, 0,
 | 
			
		||||
  24, 21, 14, 17, 4, 5, 0, 129, 116, 99, 121, 0, 23, 9, 4, 22, 0, 130, 101, 116,
 | 
			
		||||
  121, 0, 6, 21, 4, 21, 12, 8, 11, 0, 135, 105, 101, 114, 97, 114, 99, 104, 121,
 | 
			
		||||
  0, 68, 165, 21, 11, 232, 21, 14, 242, 21, 15, 250, 21, 18, 66, 22, 21, 76, 22,
 | 
			
		||||
  0, 69, 184, 21, 8, 193, 21, 15, 199, 21, 17, 208, 21, 21, 215, 21, 24, 224,
 | 
			
		||||
  21, 0, 18, 21, 19, 0, 129, 98, 108, 121, 0, 21, 0, 128, 108, 121, 0, 8, 21, 0,
 | 
			
		||||
  131, 97, 108, 108, 121, 0, 12, 9, 0, 128, 108, 121, 0, 8, 17, 8, 10, 0, 128,
 | 
			
		||||
  108, 121, 0, 23, 6, 4, 0, 128, 108, 121, 0, 10, 12, 15, 22, 0, 129, 116, 108,
 | 
			
		||||
  121, 0, 12, 15, 0, 129, 101, 108, 121, 0, 68, 4, 22, 5, 47, 22, 8, 56, 22, 0,
 | 
			
		||||
  86, 11, 22, 23, 35, 22, 0, 24, 0, 108, 20, 22, 22, 27, 22, 0, 131, 117, 97,
 | 
			
		||||
  108, 108, 121, 0, 24, 0, 132, 97, 108, 108, 121, 0, 24, 6, 4, 0, 133, 116,
 | 
			
		||||
  117, 97, 108, 108, 121, 0, 4, 5, 18, 21, 19, 0, 129, 121, 0, 4, 21, 0, 132,
 | 
			
		||||
  101, 97, 108, 108, 121, 0, 16, 18, 17, 4, 0, 130, 97, 108, 121, 0, 4, 16, 12,
 | 
			
		||||
  21, 19, 0, 129, 105, 108, 121, 0, 72, 94, 22, 19, 103, 22, 0, 18, 16, 44, 0,
 | 
			
		||||
  130, 110, 101, 121, 0, 4, 16, 18, 6, 0, 131, 112, 97, 110, 121, 0, 68, 127,
 | 
			
		||||
  22, 8, 231, 22, 18, 240, 22, 23, 253, 22, 0, 69, 143, 22, 12, 152, 22, 15,
 | 
			
		||||
  165, 22, 16, 193, 22, 22, 202, 22, 0, 12, 15, 0, 130, 114, 97, 114, 121, 0,
 | 
			
		||||
  15, 15, 12, 27, 24, 4, 0, 132, 105, 97, 114, 121, 0, 76, 172, 22, 15, 182, 22,
 | 
			
		||||
  0, 27, 24, 4, 0, 130, 105, 97, 114, 121, 0, 12, 27, 24, 4, 0, 131, 105, 97,
 | 
			
		||||
  114, 121, 0, 24, 22, 0, 130, 109, 97, 114, 121, 0, 8, 6, 0, 70, 212, 22, 8,
 | 
			
		||||
  223, 22, 0, 8, 17, 0, 133, 101, 115, 115, 97, 114, 121, 0, 17, 0, 130, 115,
 | 
			
		||||
  97, 114, 121, 0, 19, 18, 21, 19, 0, 128, 116, 121, 0, 10, 4, 23, 4, 6, 0, 132,
 | 
			
		||||
  101, 103, 111, 114, 121, 0, 17, 24, 6, 18, 44, 0, 134, 99, 111, 117, 110, 116,
 | 
			
		||||
  114, 121, 0, 4, 0, 85, 21, 23, 26, 32, 23, 0, 6, 18, 19, 28, 11, 0, 130, 105,
 | 
			
		||||
  115, 121, 0, 15, 4, 0, 129, 121, 115, 0, 73, 49, 23, 15, 57, 23, 21, 66, 23,
 | 
			
		||||
  0, 4, 22, 0, 129, 101, 116, 121, 0, 12, 5, 4, 0, 129, 105, 116, 121, 0, 19, 8,
 | 
			
		||||
  18, 21, 19, 0, 132, 112, 101, 114, 116, 121, 0};
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										722
									
								
								users/gourdo1/autocorrect/autocorrection_data.h (large)
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										722
									
								
								users/gourdo1/autocorrect/autocorrection_data.h (large)
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,722 @@
 | 
			
		|||
// Generated code.
 | 
			
		||||
 | 
			
		||||
// Autocorrection dictionary (400 entries):
 | 
			
		||||
//   :acheiv    -> achiev
 | 
			
		||||
//   :agian     -> again
 | 
			
		||||
//   :agred     -> agreed
 | 
			
		||||
//   :ajust     -> adjust
 | 
			
		||||
//   :alot:     -> a lot
 | 
			
		||||
//   :andteh    -> and the
 | 
			
		||||
//   :andthe    -> and the
 | 
			
		||||
//   :anual     -> annual
 | 
			
		||||
//   :asign     -> assign
 | 
			
		||||
//   :aslo:     -> also
 | 
			
		||||
//   :asthe     -> as the
 | 
			
		||||
//   :atthe     -> at the
 | 
			
		||||
//   :casue     -> cause
 | 
			
		||||
//   :choses    -> chooses
 | 
			
		||||
//   :eveyr     -> every
 | 
			
		||||
//   :foudn     -> found
 | 
			
		||||
//   :gaurd     -> guard
 | 
			
		||||
//   :goign     -> going
 | 
			
		||||
//   :gonig     -> going
 | 
			
		||||
//   :graet     -> great
 | 
			
		||||
//   :grammer   -> grammar
 | 
			
		||||
//   :guage     -> gauge
 | 
			
		||||
//   :haev      -> have
 | 
			
		||||
//   :hapen     -> happen
 | 
			
		||||
//   :htere     -> there
 | 
			
		||||
//   :htikn     -> think
 | 
			
		||||
//   :htink     -> think
 | 
			
		||||
//   :hwihc     -> which
 | 
			
		||||
//   :hwile     -> while
 | 
			
		||||
//   :idaes     -> ideas
 | 
			
		||||
//   :jstu:     -> just
 | 
			
		||||
//   :jsut:     -> just
 | 
			
		||||
//   :knwo      -> know
 | 
			
		||||
//   :konw      -> know
 | 
			
		||||
//   :kwno      -> know
 | 
			
		||||
//   :moeny     -> money
 | 
			
		||||
//   :ocuntry   -> country
 | 
			
		||||
//   :ocur      -> occur
 | 
			
		||||
//   :olther    -> other
 | 
			
		||||
//   :otehr     -> other
 | 
			
		||||
//   :owudl     -> would
 | 
			
		||||
//   :rference  -> reference
 | 
			
		||||
//   :sicne     -> since
 | 
			
		||||
//   :socre     -> score
 | 
			
		||||
//   :szie      -> size
 | 
			
		||||
//   :the:the:  -> the
 | 
			
		||||
//   :theri     -> their
 | 
			
		||||
//   :thier     -> their
 | 
			
		||||
//   :thsoe     -> those
 | 
			
		||||
//   :tothe     -> to the
 | 
			
		||||
//   :ture      -> true
 | 
			
		||||
//   :turth     -> truth
 | 
			
		||||
//   :uesd:     -> used
 | 
			
		||||
//   :usally    -> usually
 | 
			
		||||
//   :yaers     -> years
 | 
			
		||||
//   :yeasr     -> years
 | 
			
		||||
//   abbout     -> about
 | 
			
		||||
//   aberation  -> aberration
 | 
			
		||||
//   abilties   -> abilities
 | 
			
		||||
//   abilty     -> ability
 | 
			
		||||
//   abotu      -> about
 | 
			
		||||
//   abouta     -> about a
 | 
			
		||||
//   aboutit    -> about it
 | 
			
		||||
//   aboutthe   -> about the
 | 
			
		||||
//   abvove     -> above
 | 
			
		||||
//   accesories -> accessories
 | 
			
		||||
//   accomodate -> accommodate
 | 
			
		||||
//   accross    -> across
 | 
			
		||||
//   acommodate -> accommodate
 | 
			
		||||
//   acomplish  -> accomplish
 | 
			
		||||
//   actualy    -> actually
 | 
			
		||||
//   acurate    -> accurate
 | 
			
		||||
//   acutally   -> actually
 | 
			
		||||
//   addtion    -> addition
 | 
			
		||||
//   adviced    -> advised
 | 
			
		||||
//   againnst   -> against
 | 
			
		||||
//   aganist    -> against
 | 
			
		||||
//   aggreed    -> agreed
 | 
			
		||||
//   agianst    -> against
 | 
			
		||||
//   ahppn      -> happen
 | 
			
		||||
//   aledge     -> allege
 | 
			
		||||
//   alledge    -> allege
 | 
			
		||||
//   allign     -> align
 | 
			
		||||
//   almsot     -> almost
 | 
			
		||||
//   alomst     -> almost
 | 
			
		||||
//   alwasy     -> always
 | 
			
		||||
//   alwyas     -> always
 | 
			
		||||
//   amature    -> amateur
 | 
			
		||||
//   anohter    -> another
 | 
			
		||||
//   anomolous  -> anomalous
 | 
			
		||||
//   anomoly    -> anomaly
 | 
			
		||||
//   anytying   -> anything
 | 
			
		||||
//   aparent    -> apparent
 | 
			
		||||
//   aparrent   -> apparent
 | 
			
		||||
//   apparant   -> apparent
 | 
			
		||||
//   apparrent  -> apparent
 | 
			
		||||
//   aquire     -> acquire
 | 
			
		||||
//   aroud      -> around
 | 
			
		||||
//   arround    -> around
 | 
			
		||||
//   arund      -> around
 | 
			
		||||
//   asthetic   -> aesthetic
 | 
			
		||||
//   auxilary   -> auxiliary
 | 
			
		||||
//   auxillary  -> auxiliary
 | 
			
		||||
//   auxilliary -> auxiliary
 | 
			
		||||
//   availabe   -> available
 | 
			
		||||
//   availaible -> available
 | 
			
		||||
//   availalbe  -> available
 | 
			
		||||
//   availble   -> available
 | 
			
		||||
//   availiable -> available
 | 
			
		||||
//   avalable   -> available
 | 
			
		||||
//   avaliable  -> available
 | 
			
		||||
//   avilable   -> available
 | 
			
		||||
//   baceause   -> because
 | 
			
		||||
//   bandwith   -> bandwidth
 | 
			
		||||
//   bankrupcy  -> bankruptcy
 | 
			
		||||
//   baout      -> about
 | 
			
		||||
//   beacuse    -> because
 | 
			
		||||
//   becasue    -> because
 | 
			
		||||
//   beccause   -> because
 | 
			
		||||
//   becouse    -> because
 | 
			
		||||
//   becuase    -> because
 | 
			
		||||
//   bedore     -> before
 | 
			
		||||
//   beeing     -> being
 | 
			
		||||
//   befoer     -> before
 | 
			
		||||
//   begginer   -> beginner
 | 
			
		||||
//   beleif     -> belief
 | 
			
		||||
//   beleive    -> believe
 | 
			
		||||
//   belive     -> believe
 | 
			
		||||
//   beteen     -> between
 | 
			
		||||
//   beween     -> between
 | 
			
		||||
//   bewteen    -> between
 | 
			
		||||
//   breif      -> brief
 | 
			
		||||
//   burried    -> buried
 | 
			
		||||
//   busness    -> business
 | 
			
		||||
//   bussiness  -> business
 | 
			
		||||
//   cacheing   -> caching
 | 
			
		||||
//   calander   -> calendar
 | 
			
		||||
//   caluclate  -> calculate
 | 
			
		||||
//   caluculate -> calculate
 | 
			
		||||
//   calulate   -> calculate
 | 
			
		||||
//   catagory   -> category
 | 
			
		||||
//   cauhgt     -> caught
 | 
			
		||||
//   ceratin    -> certain
 | 
			
		||||
//   certian    -> certain
 | 
			
		||||
//   cheif      -> chief
 | 
			
		||||
//   chekc      -> check
 | 
			
		||||
//   childen    -> children
 | 
			
		||||
//   chnage     -> change
 | 
			
		||||
//   choosen    -> chosen
 | 
			
		||||
//   cieling    -> ceiling
 | 
			
		||||
//   circut     -> circuit
 | 
			
		||||
//   claer      -> clear
 | 
			
		||||
//   clasic     -> classic
 | 
			
		||||
//   cmoputer   -> computer
 | 
			
		||||
//   coform     -> conform
 | 
			
		||||
//   cognizent  -> cognizant
 | 
			
		||||
//   collegue   -> colleague
 | 
			
		||||
//   comapny    -> company
 | 
			
		||||
//   comittee   -> committee
 | 
			
		||||
//   comming:   -> coming
 | 
			
		||||
//   commitee   -> committee
 | 
			
		||||
//   competance -> competence
 | 
			
		||||
//   competant  -> competent
 | 
			
		||||
//   complier   -> compiler
 | 
			
		||||
//   concensus  -> consensus
 | 
			
		||||
//   considerd  -> considered
 | 
			
		||||
//   contian    -> contain
 | 
			
		||||
//   copywrite: -> copyright
 | 
			
		||||
//   cosnt      -> const
 | 
			
		||||
//   coudl      -> could
 | 
			
		||||
//   dervied    -> derived
 | 
			
		||||
//   desicion   -> decision
 | 
			
		||||
//   didnot     -> did not
 | 
			
		||||
//   diferent   -> different
 | 
			
		||||
//   diferrent  -> different
 | 
			
		||||
//   differnt   -> different
 | 
			
		||||
//   diffrent   -> different
 | 
			
		||||
//   divison    -> division
 | 
			
		||||
//   doulbe     -> double
 | 
			
		||||
//   dyanmic    -> dynamic
 | 
			
		||||
//   effecient  -> efficient
 | 
			
		||||
//   elasped    -> elapsed
 | 
			
		||||
//   eligable   -> eligible
 | 
			
		||||
//   elpased    -> elapsed
 | 
			
		||||
//   embarass   -> embarrass
 | 
			
		||||
//   embeded    -> embedded
 | 
			
		||||
//   encypt     -> encrypt
 | 
			
		||||
//   excecut    -> execut
 | 
			
		||||
//   excercise  -> exercise
 | 
			
		||||
//   failse     -> false
 | 
			
		||||
//   fales      -> false
 | 
			
		||||
//   fasle      -> false
 | 
			
		||||
//   feild      -> field
 | 
			
		||||
//   finaly     -> finally
 | 
			
		||||
//   firend     -> friend
 | 
			
		||||
//   firts      -> first
 | 
			
		||||
//   fitler     -> filter
 | 
			
		||||
//   flase      -> false
 | 
			
		||||
//   follwo     -> follow
 | 
			
		||||
//   foriegn    -> foreign
 | 
			
		||||
//   foward     -> forward
 | 
			
		||||
//   fraciton   -> fraction
 | 
			
		||||
//   freind     -> friend
 | 
			
		||||
//   frequecy   -> frequency
 | 
			
		||||
//   fromthe    -> from the
 | 
			
		||||
//   fucntion   -> function
 | 
			
		||||
//   fufill     -> fulfill
 | 
			
		||||
//   fullfill   -> fulfill
 | 
			
		||||
//   futher     -> further
 | 
			
		||||
//   ganerate   -> generate
 | 
			
		||||
//   garantee   -> guarantee
 | 
			
		||||
//   gaurantee  -> guarantee
 | 
			
		||||
//   generaly   -> generally
 | 
			
		||||
//   govement   -> government
 | 
			
		||||
//   govenment  -> government
 | 
			
		||||
//   goverment  -> government
 | 
			
		||||
//   governmnet -> government
 | 
			
		||||
//   govorment  -> government
 | 
			
		||||
//   govornment -> government
 | 
			
		||||
//   greatful   -> grateful
 | 
			
		||||
//   guaratee   -> guarantee
 | 
			
		||||
//   heigher    -> higher
 | 
			
		||||
//   heigth     -> height
 | 
			
		||||
//   heirarchy  -> hierarchy
 | 
			
		||||
//   higest     -> highest
 | 
			
		||||
//   howver     -> however
 | 
			
		||||
//   hydogen    -> hydrogen
 | 
			
		||||
//   hygeine    -> hygiene
 | 
			
		||||
//   hypocracy  -> hypocrisy
 | 
			
		||||
//   hypocrasy  -> hypocrisy
 | 
			
		||||
//   hypocricy  -> hypocrisy
 | 
			
		||||
//   hypocrit:  -> hypocrite
 | 
			
		||||
//   iamge      -> image
 | 
			
		||||
//   importamt  -> important
 | 
			
		||||
//   inclued    -> include
 | 
			
		||||
//   indeces    -> indices
 | 
			
		||||
//   indecies   -> indices
 | 
			
		||||
//   indicies   -> indices
 | 
			
		||||
//   inital     -> initial
 | 
			
		||||
//   insted     -> instead
 | 
			
		||||
//   interator  -> iterator
 | 
			
		||||
//   intput     -> input
 | 
			
		||||
//   intrest    -> interest
 | 
			
		||||
//   invliad    -> invalid
 | 
			
		||||
//   laguage    -> language
 | 
			
		||||
//   largst     -> largest
 | 
			
		||||
//   learnign   -> learning
 | 
			
		||||
//   lenght     -> length
 | 
			
		||||
//   levle      -> level
 | 
			
		||||
//   liasion    -> liaison
 | 
			
		||||
//   libary     -> library
 | 
			
		||||
//   likly      -> likely
 | 
			
		||||
//   lisense    -> license
 | 
			
		||||
//   listner    -> listener
 | 
			
		||||
//   littel     -> little
 | 
			
		||||
//   looses:    -> loses
 | 
			
		||||
//   looup      -> lookup
 | 
			
		||||
//   macthing   -> matching
 | 
			
		||||
//   maintence  -> maintenance
 | 
			
		||||
//   manefist   -> manifest
 | 
			
		||||
//   mesage     -> message
 | 
			
		||||
//   morgage    -> mortgage
 | 
			
		||||
//   mysefl     -> myself
 | 
			
		||||
//   namesapce  -> namespace
 | 
			
		||||
//   namespcae  -> namespace
 | 
			
		||||
//   naturual   -> natural
 | 
			
		||||
//   neccesary  -> necessary
 | 
			
		||||
//   necesary   -> necessary
 | 
			
		||||
//   nulltpr    -> nullptr
 | 
			
		||||
//   occassion  -> occasion
 | 
			
		||||
//   occured    -> occurred
 | 
			
		||||
//   operaotr   -> operator
 | 
			
		||||
//   ouptut     -> output
 | 
			
		||||
//   ouput      -> output
 | 
			
		||||
//   overide    -> override
 | 
			
		||||
//   ovveride   -> override
 | 
			
		||||
//   pallete    -> palette
 | 
			
		||||
//   paralel    -> parallel
 | 
			
		||||
//   parralel   -> parallel
 | 
			
		||||
//   parrallel  -> parallel
 | 
			
		||||
//   particualr -> particular
 | 
			
		||||
//   paticular  -> particular
 | 
			
		||||
//   peaple     -> people
 | 
			
		||||
//   peice      -> piece
 | 
			
		||||
//   peolpe     -> people
 | 
			
		||||
//   peopel     -> people
 | 
			
		||||
//   perhasp    -> perhaps
 | 
			
		||||
//   perheaps   -> perhaps
 | 
			
		||||
//   perhpas    -> perhaps
 | 
			
		||||
//   perphas    -> perhaps
 | 
			
		||||
//   persue     -> pursue
 | 
			
		||||
//   poeople    -> people
 | 
			
		||||
//   poeple     -> people
 | 
			
		||||
//   poitner    -> pointer
 | 
			
		||||
//   posess     -> possess
 | 
			
		||||
//   postion    -> position
 | 
			
		||||
//   preiod     -> period
 | 
			
		||||
//   primarly   -> primarily
 | 
			
		||||
//   priviledge -> privilege
 | 
			
		||||
//   privte     -> private
 | 
			
		||||
//   probablly  -> probably
 | 
			
		||||
//   probaly    -> probably
 | 
			
		||||
//   probelm    -> problem
 | 
			
		||||
//   proccess   -> process
 | 
			
		||||
//   proeprty   -> property
 | 
			
		||||
//   prominant  -> prominent
 | 
			
		||||
//   proove     -> prove
 | 
			
		||||
//   propery    -> property
 | 
			
		||||
//   propogate  -> propagate
 | 
			
		||||
//   psuedo     -> pseudo
 | 
			
		||||
//   raelly     -> really
 | 
			
		||||
//   realtion   -> relation
 | 
			
		||||
//   realy      -> really
 | 
			
		||||
//   reasearch  -> research
 | 
			
		||||
//   receiev    -> receiv
 | 
			
		||||
//   recepient  -> recipient
 | 
			
		||||
//   reciept    -> receipt
 | 
			
		||||
//   reciev     -> receiv
 | 
			
		||||
//   recipiant  -> recipient
 | 
			
		||||
//   recrod     -> record
 | 
			
		||||
//   recuring   -> recurring
 | 
			
		||||
//   referece   -> reference
 | 
			
		||||
//   refered    -> referred
 | 
			
		||||
//   regluar    -> regular
 | 
			
		||||
//   relaly     -> really
 | 
			
		||||
//   releated   -> related
 | 
			
		||||
//   relevent   -> relevant
 | 
			
		||||
//   repitition -> repetition
 | 
			
		||||
//   reponse    -> response
 | 
			
		||||
//   reprot     -> report
 | 
			
		||||
//   resutl     -> result
 | 
			
		||||
//   retrun     -> return
 | 
			
		||||
//   retun      -> return
 | 
			
		||||
//   reuslt     -> result
 | 
			
		||||
//   reutrn     -> return
 | 
			
		||||
//   reveiw     -> review
 | 
			
		||||
//   saftey     -> safety
 | 
			
		||||
//   safty      -> safety
 | 
			
		||||
//   satisifed  -> satisfied
 | 
			
		||||
//   scheduel   -> schedule
 | 
			
		||||
//   seperat    -> separat
 | 
			
		||||
//   sequnce    -> sequence
 | 
			
		||||
//   shoudl     -> should
 | 
			
		||||
//   similiar   -> similar
 | 
			
		||||
//   simmilar   -> similar
 | 
			
		||||
//   singed     -> signed
 | 
			
		||||
//   singel     -> single
 | 
			
		||||
//   slighly    -> slightly
 | 
			
		||||
//   somehwat   -> somewhat
 | 
			
		||||
//   spectogram -> spectrogram
 | 
			
		||||
//   statment   -> statement
 | 
			
		||||
//   stirng     -> string
 | 
			
		||||
//   stregth    -> strength
 | 
			
		||||
//   strengh    -> strength
 | 
			
		||||
//   strign     -> string
 | 
			
		||||
//   succsess   -> success
 | 
			
		||||
//   sucess     -> success
 | 
			
		||||
//   sugest     -> suggest
 | 
			
		||||
//   sumary     -> summary
 | 
			
		||||
//   supress    -> suppress
 | 
			
		||||
//   surpress   -> suppress
 | 
			
		||||
//   swithc     -> switch
 | 
			
		||||
//   swtich     -> switch
 | 
			
		||||
//   symetric   -> symmetric
 | 
			
		||||
//   teamplate  -> template
 | 
			
		||||
//   tempalte   -> template
 | 
			
		||||
//   theese     -> these
 | 
			
		||||
//   therfore   -> therefore
 | 
			
		||||
//   thign      -> thing
 | 
			
		||||
//   thigsn     -> things
 | 
			
		||||
//   thikn      -> think
 | 
			
		||||
//   thiunk     -> think
 | 
			
		||||
//   thnigs     -> things
 | 
			
		||||
//   thresold   -> threshold
 | 
			
		||||
//   throught   -> thought
 | 
			
		||||
//   tihkn      -> think
 | 
			
		||||
//   tkaes      -> takes
 | 
			
		||||
//   todya      -> today
 | 
			
		||||
//   toghether  -> together
 | 
			
		||||
//   tolerence  -> tolerance
 | 
			
		||||
//   tongiht    -> tonight
 | 
			
		||||
//   tranpose   -> transpose
 | 
			
		||||
//   typcial    -> typical
 | 
			
		||||
//   udpate     -> update
 | 
			
		||||
//   unkown     -> unknown
 | 
			
		||||
//   unqiue     -> unique
 | 
			
		||||
//   ususally   -> usually
 | 
			
		||||
//   verticies  -> vertices
 | 
			
		||||
//   virutal    -> virtual
 | 
			
		||||
//   vitual     -> virtual
 | 
			
		||||
//   whcih      -> which
 | 
			
		||||
//   whereever  -> wherever
 | 
			
		||||
//   wherre     -> where
 | 
			
		||||
//   whihc      -> which
 | 
			
		||||
//   whlch      -> which
 | 
			
		||||
//   widht      -> width
 | 
			
		||||
//   wierd      -> weird
 | 
			
		||||
//   wihch      -> which
 | 
			
		||||
//   woudl      -> would
 | 
			
		||||
//   yeild      -> yield
 | 
			
		||||
 | 
			
		||||
#define AUTOCORRECTION_MIN_LENGTH 5  // "abotu"
 | 
			
		||||
#define AUTOCORRECTION_MAX_LENGTH 10  // "auxilliary"
 | 
			
		||||
 | 
			
		||||
static const uint8_t autocorrection_data[5967] PROGMEM = {108, 67, 0, 4, 212, 0,
 | 
			
		||||
  6, 236, 0, 7, 100, 1, 8, 15, 3, 9, 169, 8, 10, 204, 8, 11, 68, 9, 12, 246, 9,
 | 
			
		||||
  14, 0, 10, 15, 28, 10, 16, 79, 11, 17, 129, 11, 18, 175, 13, 19, 227, 13, 21,
 | 
			
		||||
  253, 13, 22, 194, 15, 23, 121, 17, 24, 201, 20, 25, 210, 20, 26, 8, 21, 28,
 | 
			
		||||
  34, 21, 0, 71, 89, 0, 8, 99, 0, 10, 130, 0, 18, 142, 0, 22, 152, 0, 23, 163,
 | 
			
		||||
  0, 24, 202, 0, 0, 22, 8, 24, 44, 0, 131, 115, 101, 100, 0, 75, 106, 0, 23,
 | 
			
		||||
  115, 0, 0, 23, 44, 8, 11, 23, 44, 0, 132, 0, 12, 21, 26, 28, 19, 18, 6, 0,
 | 
			
		||||
  133, 114, 105, 103, 104, 116, 0, 17, 12, 16, 16, 18, 6, 0, 132, 105, 110, 103,
 | 
			
		||||
  0, 15, 22, 4, 44, 0, 131, 108, 115, 111, 0, 8, 22, 18, 18, 15, 0, 132, 115,
 | 
			
		||||
  101, 115, 0, 76, 173, 0, 18, 183, 0, 24, 193, 0, 0, 21, 6, 18, 19, 28, 11, 0,
 | 
			
		||||
  128, 101, 0, 15, 4, 44, 0, 131, 32, 108, 111, 116, 0, 22, 13, 44, 0, 131, 117,
 | 
			
		||||
  115, 116, 0, 23, 22, 13, 44, 0, 131, 117, 115, 116, 0, 87, 219, 0, 28, 228, 0,
 | 
			
		||||
  0, 24, 18, 5, 4, 0, 128, 32, 97, 0, 7, 18, 23, 0, 129, 97, 121, 0, 75, 246, 0,
 | 
			
		||||
  12, 28, 1, 14, 92, 1, 0, 76, 253, 0, 23, 20, 1, 0, 75, 4, 1, 26, 10, 1, 0, 26,
 | 
			
		||||
  0, 129, 99, 104, 0, 11, 44, 0, 132, 119, 104, 105, 99, 104, 0, 12, 26, 22, 0,
 | 
			
		||||
  129, 99, 104, 0, 80, 41, 1, 21, 53, 1, 22, 67, 1, 23, 76, 1, 0, 17, 4, 28, 7,
 | 
			
		||||
  0, 132, 110, 97, 109, 105, 99, 0, 23, 8, 16, 28, 22, 0, 132, 109, 101, 116,
 | 
			
		||||
  114, 105, 99, 0, 4, 15, 6, 0, 129, 115, 105, 99, 0, 8, 11, 23, 22, 4, 0, 134,
 | 
			
		||||
  101, 115, 116, 104, 101, 116, 105, 99, 0, 8, 11, 6, 0, 129, 99, 107, 0, 68,
 | 
			
		||||
  122, 1, 8, 134, 1, 15, 84, 2, 17, 124, 2, 18, 180, 2, 21, 207, 2, 24, 7, 3, 0,
 | 
			
		||||
  12, 15, 25, 17, 12, 0, 131, 97, 108, 105, 100, 0, 70, 168, 1, 7, 178, 1, 8,
 | 
			
		||||
  188, 1, 9, 199, 1, 10, 212, 1, 12, 222, 1, 19, 248, 1, 21, 3, 2, 22, 38, 2,
 | 
			
		||||
  23, 50, 2, 24, 75, 2, 0, 12, 25, 7, 4, 0, 130, 115, 101, 100, 0, 8, 5, 16, 8,
 | 
			
		||||
  0, 129, 100, 101, 100, 0, 21, 10, 10, 4, 0, 132, 114, 101, 101, 100, 0, 12,
 | 
			
		||||
  22, 12, 23, 4, 22, 0, 131, 102, 105, 101, 100, 0, 17, 12, 22, 0, 131, 103,
 | 
			
		||||
  110, 101, 100, 0, 85, 229, 1, 25, 238, 1, 0, 21, 24, 5, 0, 131, 105, 101, 100,
 | 
			
		||||
  0, 21, 8, 7, 0, 131, 105, 118, 101, 100, 0, 22, 4, 15, 8, 0, 131, 112, 115,
 | 
			
		||||
  101, 100, 0, 72, 13, 2, 10, 22, 2, 24, 29, 2, 0, 9, 8, 21, 0, 129, 114, 101,
 | 
			
		||||
  100, 0, 4, 44, 0, 128, 101, 100, 0, 6, 6, 18, 0, 129, 114, 101, 100, 0, 4, 19,
 | 
			
		||||
  15, 8, 0, 132, 97, 112, 115, 101, 100, 0, 68, 57, 2, 22, 68, 2, 0, 8, 15, 8,
 | 
			
		||||
  21, 0, 132, 97, 116, 101, 100, 0, 17, 12, 0, 128, 97, 100, 0, 15, 6, 17, 12,
 | 
			
		||||
  0, 129, 100, 101, 0, 76, 91, 2, 18, 112, 2, 0, 8, 0, 73, 100, 2, 28, 106, 2,
 | 
			
		||||
  0, 131, 105, 101, 108, 100, 0, 131, 105, 101, 108, 100, 0, 22, 8, 21, 11, 23,
 | 
			
		||||
  0, 130, 104, 111, 108, 100, 0, 72, 134, 2, 12, 145, 2, 24, 155, 2, 0, 21, 12,
 | 
			
		||||
  9, 0, 132, 114, 105, 101, 110, 100, 0, 8, 21, 9, 0, 131, 105, 101, 110, 100,
 | 
			
		||||
  0, 82, 162, 2, 21, 172, 2, 0, 21, 21, 4, 0, 132, 111, 117, 110, 100, 0, 4, 0,
 | 
			
		||||
  130, 111, 117, 110, 100, 0, 76, 187, 2, 21, 198, 2, 0, 8, 21, 19, 0, 132, 101,
 | 
			
		||||
  114, 105, 111, 100, 0, 6, 8, 21, 0, 130, 111, 114, 100, 0, 68, 217, 2, 8, 228,
 | 
			
		||||
  2, 24, 253, 2, 0, 26, 18, 9, 0, 131, 114, 119, 97, 114, 100, 0, 71, 235, 2,
 | 
			
		||||
  12, 245, 2, 0, 12, 22, 17, 18, 6, 0, 128, 101, 100, 0, 26, 0, 131, 101, 105,
 | 
			
		||||
  114, 100, 0, 4, 10, 44, 0, 131, 117, 97, 114, 100, 0, 18, 21, 4, 0, 128, 110,
 | 
			
		||||
  100, 0, 68, 67, 3, 5, 80, 3, 6, 123, 3, 7, 251, 3, 8, 23, 4, 10, 107, 4, 11,
 | 
			
		||||
  227, 4, 12, 52, 5, 15, 61, 5, 17, 0, 6, 18, 27, 6, 19, 37, 6, 21, 47, 6, 22,
 | 
			
		||||
  156, 6, 23, 82, 7, 24, 45, 8, 25, 115, 8, 0, 6, 19, 22, 8, 16, 4, 17, 0, 130,
 | 
			
		||||
  97, 99, 101, 0, 68, 87, 3, 15, 97, 3, 0, 15, 12, 4, 25, 4, 0, 128, 108, 101,
 | 
			
		||||
  0, 68, 104, 3, 24, 115, 3, 0, 15, 12, 4, 25, 4, 0, 130, 98, 108, 101, 0, 18,
 | 
			
		||||
  7, 0, 130, 98, 108, 101, 0, 72, 136, 3, 12, 147, 3, 17, 156, 3, 19, 238, 3, 0,
 | 
			
		||||
  21, 8, 9, 8, 21, 0, 129, 110, 99, 101, 0, 8, 19, 0, 131, 105, 101, 99, 101, 0,
 | 
			
		||||
  68, 166, 3, 8, 179, 3, 24, 228, 3, 0, 23, 8, 19, 16, 18, 6, 0, 131, 101, 110,
 | 
			
		||||
  99, 101, 0, 85, 186, 3, 23, 217, 3, 0, 8, 0, 73, 195, 3, 15, 208, 3, 0, 21,
 | 
			
		||||
  44, 0, 134, 101, 102, 101, 114, 101, 110, 99, 101, 0, 18, 23, 0, 131, 97, 110,
 | 
			
		||||
  99, 101, 0, 17, 12, 4, 16, 0, 129, 97, 110, 99, 101, 0, 20, 8, 22, 0, 130,
 | 
			
		||||
  101, 110, 99, 101, 0, 4, 22, 8, 16, 4, 17, 0, 131, 112, 97, 99, 101, 0, 12,
 | 
			
		||||
  21, 8, 25, 0, 82, 7, 4, 25, 13, 4, 0, 130, 114, 105, 100, 101, 0, 18, 0, 133,
 | 
			
		||||
  101, 114, 114, 105, 100, 101, 0, 23, 0, 68, 38, 4, 12, 49, 4, 17, 59, 4, 23,
 | 
			
		||||
  94, 4, 0, 21, 4, 24, 10, 0, 130, 110, 116, 101, 101, 0, 16, 16, 18, 6, 0, 129,
 | 
			
		||||
  116, 101, 101, 0, 4, 21, 0, 68, 69, 4, 24, 81, 4, 0, 10, 0, 134, 117, 97, 114,
 | 
			
		||||
  97, 110, 116, 101, 101, 0, 4, 10, 0, 135, 117, 97, 114, 97, 110, 116, 101,
 | 
			
		||||
  101, 0, 12, 16, 18, 6, 0, 132, 109, 105, 116, 116, 101, 101, 0, 68, 117, 4, 7,
 | 
			
		||||
  184, 4, 16, 218, 4, 0, 74, 130, 4, 17, 141, 4, 22, 150, 4, 24, 159, 4, 0, 21,
 | 
			
		||||
  18, 16, 0, 131, 116, 103, 97, 103, 101, 0, 11, 6, 0, 131, 97, 110, 103, 101,
 | 
			
		||||
  0, 8, 16, 0, 130, 115, 97, 103, 101, 0, 10, 0, 108, 168, 4, 4, 174, 4, 0, 131,
 | 
			
		||||
  97, 117, 103, 101, 0, 15, 0, 132, 110, 103, 117, 97, 103, 101, 0, 8, 15, 0,
 | 
			
		||||
  68, 197, 4, 12, 203, 4, 15, 212, 4, 0, 131, 108, 101, 103, 101, 0, 25, 12, 21,
 | 
			
		||||
  19, 0, 130, 103, 101, 0, 4, 0, 130, 103, 101, 0, 4, 12, 0, 131, 109, 97, 103,
 | 
			
		||||
  101, 0, 23, 0, 71, 245, 4, 16, 255, 4, 18, 9, 5, 22, 18, 5, 23, 27, 5, 0, 17,
 | 
			
		||||
  4, 44, 0, 130, 32, 116, 104, 101, 0, 18, 21, 9, 0, 130, 32, 116, 104, 101, 0,
 | 
			
		||||
  23, 44, 0, 130, 32, 116, 104, 101, 0, 4, 44, 0, 130, 32, 116, 104, 101, 0, 68,
 | 
			
		||||
  34, 5, 24, 42, 5, 0, 44, 0, 130, 32, 116, 104, 101, 0, 18, 5, 4, 0, 130, 32,
 | 
			
		||||
  116, 104, 101, 0, 29, 22, 44, 0, 130, 105, 122, 101, 0, 69, 77, 5, 12, 190, 5,
 | 
			
		||||
  19, 201, 5, 22, 241, 5, 25, 249, 5, 0, 68, 87, 5, 12, 167, 5, 15, 179, 5, 0,
 | 
			
		||||
  74, 97, 5, 12, 107, 5, 15, 137, 5, 0, 12, 15, 8, 0, 131, 105, 98, 108, 101, 0,
 | 
			
		||||
  15, 0, 68, 116, 5, 12, 127, 5, 0, 25, 4, 0, 133, 105, 108, 97, 98, 108, 101,
 | 
			
		||||
  0, 4, 25, 4, 0, 132, 97, 98, 108, 101, 0, 68, 144, 5, 12, 155, 5, 0, 25, 4, 0,
 | 
			
		||||
  132, 105, 108, 97, 98, 108, 101, 0, 25, 4, 0, 133, 97, 105, 108, 97, 98, 108,
 | 
			
		||||
  101, 0, 4, 15, 12, 4, 25, 4, 0, 131, 98, 108, 101, 0, 12, 4, 25, 4, 0, 130,
 | 
			
		||||
  97, 98, 108, 101, 0, 26, 11, 44, 0, 132, 119, 104, 105, 108, 101, 0, 68, 211,
 | 
			
		||||
  5, 8, 220, 5, 18, 230, 5, 0, 8, 19, 0, 131, 111, 112, 108, 101, 0, 18, 19, 0,
 | 
			
		||||
  132, 101, 111, 112, 108, 101, 0, 8, 18, 19, 0, 133, 101, 111, 112, 108, 101,
 | 
			
		||||
  0, 4, 9, 0, 130, 108, 115, 101, 0, 8, 15, 0, 129, 101, 108, 0, 70, 7, 6, 12,
 | 
			
		||||
  16, 6, 0, 12, 22, 44, 0, 130, 110, 99, 101, 0, 8, 10, 28, 11, 0, 131, 105,
 | 
			
		||||
  101, 110, 101, 0, 22, 11, 23, 44, 0, 130, 111, 115, 101, 0, 15, 18, 8, 19, 0,
 | 
			
		||||
  130, 112, 108, 101, 0, 70, 66, 6, 8, 76, 6, 12, 87, 6, 18, 99, 6, 21, 127, 6,
 | 
			
		||||
  24, 134, 6, 0, 18, 22, 44, 0, 131, 99, 111, 114, 101, 0, 23, 11, 44, 0, 132,
 | 
			
		||||
  116, 104, 101, 114, 101, 0, 24, 20, 4, 0, 132, 99, 113, 117, 105, 114, 101, 0,
 | 
			
		||||
  71, 106, 6, 9, 115, 6, 0, 8, 5, 0, 131, 102, 111, 114, 101, 0, 21, 8, 11, 23,
 | 
			
		||||
  0, 131, 101, 102, 111, 114, 101, 0, 8, 11, 26, 0, 129, 101, 0, 23, 0, 108,
 | 
			
		||||
  143, 6, 4, 148, 6, 0, 130, 114, 117, 101, 0, 16, 4, 0, 130, 101, 117, 114, 0,
 | 
			
		||||
  68, 178, 6, 8, 203, 6, 12, 211, 6, 15, 226, 6, 17, 235, 6, 18, 9, 7, 24, 22,
 | 
			
		||||
  7, 0, 79, 185, 6, 24, 193, 6, 0, 9, 0, 131, 97, 108, 115, 101, 0, 6, 8, 5, 0,
 | 
			
		||||
  131, 97, 117, 115, 101, 0, 8, 11, 23, 0, 130, 115, 101, 0, 6, 21, 8, 6, 27, 8,
 | 
			
		||||
  0, 134, 101, 114, 99, 105, 115, 101, 0, 12, 4, 9, 0, 131, 108, 115, 101, 0,
 | 
			
		||||
  72, 242, 6, 18, 253, 6, 0, 22, 12, 15, 0, 132, 99, 101, 110, 115, 101, 0, 19,
 | 
			
		||||
  8, 21, 0, 132, 115, 112, 111, 110, 115, 101, 0, 19, 17, 4, 21, 23, 0, 131,
 | 
			
		||||
  115, 112, 111, 115, 101, 0, 68, 32, 7, 6, 61, 7, 18, 72, 7, 0, 70, 39, 7, 8,
 | 
			
		||||
  49, 7, 0, 6, 8, 5, 0, 132, 97, 117, 115, 101, 0, 6, 4, 5, 0, 134, 101, 99, 97,
 | 
			
		||||
  117, 115, 101, 0, 4, 8, 5, 0, 132, 99, 97, 117, 115, 101, 0, 6, 8, 5, 0, 131,
 | 
			
		||||
  97, 117, 115, 101, 0, 68, 95, 7, 8, 13, 8, 15, 24, 8, 25, 36, 8, 0, 71, 111,
 | 
			
		||||
  7, 10, 148, 7, 15, 161, 7, 19, 228, 7, 21, 238, 7, 0, 18, 16, 0, 80, 121, 7,
 | 
			
		||||
  18, 136, 7, 0, 18, 6, 4, 0, 135, 99, 111, 109, 109, 111, 100, 97, 116, 101, 0,
 | 
			
		||||
  6, 6, 4, 0, 132, 109, 111, 100, 97, 116, 101, 0, 18, 19, 18, 21, 19, 0, 132,
 | 
			
		||||
  97, 103, 97, 116, 101, 0, 70, 171, 7, 19, 184, 7, 24, 197, 7, 0, 24, 15, 4, 6,
 | 
			
		||||
  0, 133, 99, 117, 108, 97, 116, 101, 0, 16, 4, 8, 23, 0, 134, 109, 112, 108,
 | 
			
		||||
  97, 116, 101, 0, 70, 204, 7, 15, 217, 7, 0, 24, 15, 4, 6, 0, 134, 99, 117,
 | 
			
		||||
  108, 97, 116, 101, 0, 4, 6, 0, 132, 99, 117, 108, 97, 116, 101, 0, 7, 24, 0,
 | 
			
		||||
  132, 112, 100, 97, 116, 101, 0, 72, 245, 7, 24, 2, 8, 0, 17, 4, 10, 0, 134,
 | 
			
		||||
  101, 110, 101, 114, 97, 116, 101, 0, 6, 4, 0, 132, 99, 117, 114, 97, 116, 101,
 | 
			
		||||
  0, 15, 15, 4, 19, 0, 131, 101, 116, 116, 101, 0, 4, 19, 16, 8, 23, 0, 131,
 | 
			
		||||
  108, 97, 116, 101, 0, 12, 21, 19, 0, 129, 97, 116, 101, 0, 74, 55, 8, 12, 67,
 | 
			
		||||
  8, 22, 77, 8, 0, 8, 15, 15, 18, 6, 0, 130, 97, 103, 117, 101, 0, 20, 17, 24,
 | 
			
		||||
  0, 131, 105, 113, 117, 101, 0, 68, 84, 8, 21, 105, 8, 0, 6, 0, 108, 93, 8, 8,
 | 
			
		||||
  98, 8, 0, 130, 117, 115, 101, 0, 5, 0, 130, 117, 115, 101, 0, 8, 19, 0, 132,
 | 
			
		||||
  117, 114, 115, 117, 101, 0, 76, 122, 8, 18, 147, 8, 0, 72, 129, 8, 15, 139, 8,
 | 
			
		||||
  0, 15, 8, 5, 0, 131, 105, 101, 118, 101, 0, 8, 5, 0, 129, 101, 118, 101, 0,
 | 
			
		||||
  82, 154, 8, 25, 161, 8, 0, 21, 19, 0, 130, 118, 101, 0, 5, 4, 0, 131, 111,
 | 
			
		||||
  118, 101, 0, 12, 8, 0, 75, 182, 8, 15, 189, 8, 21, 197, 8, 0, 6, 0, 130, 105,
 | 
			
		||||
  101, 102, 0, 8, 5, 0, 130, 105, 101, 102, 0, 5, 0, 130, 105, 101, 102, 0, 76,
 | 
			
		||||
  211, 8, 17, 221, 8, 0, 17, 18, 10, 44, 0, 130, 105, 110, 103, 0, 76, 228, 8,
 | 
			
		||||
  21, 58, 9, 0, 72, 244, 8, 11, 11, 9, 15, 24, 9, 21, 36, 9, 28, 47, 9, 0, 72,
 | 
			
		||||
  251, 8, 11, 2, 9, 0, 5, 0, 131, 105, 110, 103, 0, 6, 4, 6, 0, 131, 105, 110,
 | 
			
		||||
  103, 0, 23, 6, 4, 16, 0, 133, 116, 99, 104, 105, 110, 103, 0, 8, 12, 6, 0,
 | 
			
		||||
  133, 101, 105, 108, 105, 110, 103, 0, 24, 6, 8, 21, 0, 130, 114, 105, 110,
 | 
			
		||||
  103, 0, 23, 28, 17, 4, 0, 131, 104, 105, 110, 103, 0, 12, 23, 22, 0, 131, 114,
 | 
			
		||||
  105, 110, 103, 0, 70, 87, 9, 8, 142, 9, 10, 154, 9, 12, 164, 9, 22, 173, 9,
 | 
			
		||||
  23, 191, 9, 0, 75, 100, 9, 12, 109, 9, 15, 119, 9, 21, 127, 9, 0, 12, 26, 0,
 | 
			
		||||
  131, 104, 105, 99, 104, 0, 23, 26, 22, 0, 131, 105, 116, 99, 104, 0, 11, 26,
 | 
			
		||||
  0, 130, 105, 99, 104, 0, 4, 8, 22, 4, 8, 21, 0, 134, 115, 101, 97, 114, 99,
 | 
			
		||||
  104, 0, 23, 7, 17, 4, 44, 0, 130, 32, 116, 104, 101, 0, 17, 8, 21, 23, 22, 0,
 | 
			
		||||
  128, 116, 104, 0, 6, 11, 26, 0, 130, 105, 99, 104, 0, 12, 15, 19, 16, 18, 6,
 | 
			
		||||
  4, 0, 134, 99, 111, 109, 112, 108, 105, 115, 104, 0, 74, 201, 9, 12, 225, 9,
 | 
			
		||||
  21, 236, 9, 0, 72, 208, 9, 12, 218, 9, 0, 21, 23, 22, 0, 130, 110, 103, 116,
 | 
			
		||||
  104, 0, 8, 11, 0, 129, 104, 116, 0, 26, 7, 17, 4, 5, 0, 129, 100, 116, 104, 0,
 | 
			
		||||
  24, 23, 44, 0, 131, 114, 117, 116, 104, 0, 21, 8, 11, 23, 44, 0, 129, 105,
 | 
			
		||||
  114, 0, 17, 0, 76, 9, 10, 24, 20, 10, 0, 23, 11, 44, 0, 132, 116, 104, 105,
 | 
			
		||||
  110, 107, 0, 12, 11, 23, 0, 130, 110, 107, 0, 68, 50, 10, 7, 134, 10, 8, 177,
 | 
			
		||||
  10, 9, 17, 11, 15, 26, 11, 23, 55, 11, 24, 64, 11, 0, 76, 60, 10, 23, 71, 10,
 | 
			
		||||
  24, 96, 10, 0, 6, 19, 28, 23, 0, 131, 105, 99, 97, 108, 0, 76, 78, 10, 24, 86,
 | 
			
		||||
  10, 0, 17, 12, 0, 129, 105, 97, 108, 0, 21, 12, 25, 0, 131, 116, 117, 97, 108,
 | 
			
		||||
  0, 81, 106, 10, 21, 115, 10, 23, 124, 10, 0, 4, 44, 0, 130, 110, 117, 97, 108,
 | 
			
		||||
  0, 24, 23, 4, 17, 0, 130, 97, 108, 0, 12, 25, 0, 131, 114, 116, 117, 97, 108,
 | 
			
		||||
  0, 24, 0, 82, 143, 10, 26, 167, 10, 0, 70, 153, 10, 11, 157, 10, 26, 163, 10,
 | 
			
		||||
  0, 129, 108, 100, 0, 22, 0, 129, 108, 100, 0, 129, 108, 100, 0, 18, 44, 0,
 | 
			
		||||
  132, 119, 111, 117, 108, 100, 0, 74, 193, 10, 15, 201, 10, 19, 247, 10, 23,
 | 
			
		||||
  255, 10, 24, 7, 11, 0, 17, 12, 22, 0, 129, 108, 101, 0, 68, 208, 10, 15, 234,
 | 
			
		||||
  10, 0, 21, 0, 68, 217, 10, 21, 224, 10, 0, 19, 0, 129, 108, 101, 108, 0, 4,
 | 
			
		||||
  19, 0, 132, 97, 108, 108, 101, 108, 0, 4, 21, 21, 4, 19, 0, 133, 97, 108, 108,
 | 
			
		||||
  101, 108, 0, 18, 8, 19, 0, 129, 108, 101, 0, 23, 12, 15, 0, 129, 108, 101, 0,
 | 
			
		||||
  7, 8, 11, 6, 22, 0, 129, 108, 101, 0, 8, 22, 28, 16, 0, 129, 108, 102, 0, 12,
 | 
			
		||||
  9, 0, 79, 36, 11, 24, 46, 11, 0, 15, 24, 9, 0, 132, 102, 105, 108, 108, 0, 9,
 | 
			
		||||
  0, 131, 108, 102, 105, 108, 108, 0, 24, 22, 8, 21, 0, 129, 108, 116, 0, 9, 23,
 | 
			
		||||
  4, 8, 21, 10, 0, 133, 97, 116, 101, 102, 117, 108, 0, 68, 89, 11, 15, 106, 11,
 | 
			
		||||
  21, 117, 11, 0, 21, 10, 18, 23, 6, 8, 19, 22, 0, 132, 114, 111, 103, 114, 97,
 | 
			
		||||
  109, 0, 8, 5, 18, 21, 19, 0, 130, 108, 101, 109, 0, 18, 9, 18, 6, 0, 131, 110,
 | 
			
		||||
  102, 111, 114, 109, 0, 68, 166, 11, 7, 206, 11, 8, 215, 11, 10, 58, 12, 12,
 | 
			
		||||
  141, 12, 14, 153, 12, 18, 192, 12, 19, 108, 13, 21, 120, 13, 22, 131, 13, 24,
 | 
			
		||||
  141, 13, 26, 164, 13, 0, 12, 0, 74, 175, 11, 23, 183, 11, 0, 4, 44, 0, 130,
 | 
			
		||||
  97, 105, 110, 0, 81, 190, 11, 21, 198, 11, 0, 18, 6, 0, 130, 97, 105, 110, 0,
 | 
			
		||||
  8, 6, 0, 130, 97, 105, 110, 0, 24, 18, 9, 44, 0, 129, 110, 100, 0, 71, 231,
 | 
			
		||||
  11, 8, 241, 11, 10, 27, 12, 19, 39, 12, 22, 48, 12, 0, 15, 12, 11, 6, 0, 129,
 | 
			
		||||
  114, 101, 110, 0, 87, 248, 11, 26, 17, 12, 0, 72, 255, 11, 26, 7, 12, 0, 5, 0,
 | 
			
		||||
  130, 119, 101, 101, 110, 0, 8, 5, 0, 132, 116, 119, 101, 101, 110, 0, 8, 5, 0,
 | 
			
		||||
  131, 116, 119, 101, 101, 110, 0, 18, 7, 28, 11, 0, 131, 114, 111, 103, 101,
 | 
			
		||||
  110, 0, 4, 11, 44, 0, 129, 112, 101, 110, 0, 18, 18, 11, 6, 0, 131, 115, 101,
 | 
			
		||||
  110, 0, 72, 65, 12, 12, 76, 12, 0, 12, 21, 18, 9, 0, 131, 101, 105, 103, 110,
 | 
			
		||||
  0, 75, 95, 12, 15, 101, 12, 17, 109, 12, 18, 118, 12, 21, 125, 12, 22, 132,
 | 
			
		||||
  12, 0, 23, 0, 129, 110, 103, 0, 15, 4, 0, 131, 105, 103, 110, 0, 21, 4, 8, 15,
 | 
			
		||||
  0, 129, 110, 103, 0, 10, 44, 0, 129, 110, 103, 0, 23, 22, 0, 129, 110, 103, 0,
 | 
			
		||||
  4, 44, 0, 130, 115, 105, 103, 110, 0, 23, 4, 21, 8, 6, 0, 131, 116, 97, 105,
 | 
			
		||||
  110, 0, 75, 160, 12, 12, 169, 12, 0, 12, 23, 0, 131, 104, 105, 110, 107, 0,
 | 
			
		||||
  75, 176, 12, 23, 182, 12, 0, 23, 0, 129, 110, 107, 0, 11, 44, 0, 132, 116,
 | 
			
		||||
  104, 105, 110, 107, 0, 76, 202, 12, 22, 86, 13, 23, 96, 13, 0, 70, 212, 12,
 | 
			
		||||
  22, 225, 12, 23, 251, 12, 0, 12, 22, 8, 7, 0, 133, 99, 105, 115, 105, 111,
 | 
			
		||||
  110, 0, 68, 232, 12, 22, 241, 12, 0, 12, 15, 0, 131, 105, 115, 111, 110, 0, 4,
 | 
			
		||||
  6, 6, 18, 0, 131, 105, 111, 110, 0, 68, 14, 13, 7, 27, 13, 12, 37, 13, 15, 52,
 | 
			
		||||
  13, 17, 64, 13, 22, 76, 13, 0, 21, 8, 5, 4, 0, 132, 114, 97, 116, 105, 111,
 | 
			
		||||
  110, 0, 7, 4, 0, 131, 105, 116, 105, 111, 110, 0, 23, 12, 19, 8, 21, 0, 134,
 | 
			
		||||
  101, 116, 105, 116, 105, 111, 110, 0, 4, 8, 21, 0, 133, 108, 97, 116, 105,
 | 
			
		||||
  111, 110, 0, 6, 24, 9, 0, 133, 110, 99, 116, 105, 111, 110, 0, 18, 19, 0, 131,
 | 
			
		||||
  105, 116, 105, 111, 110, 0, 12, 25, 12, 7, 0, 129, 105, 111, 110, 0, 12, 6, 4,
 | 
			
		||||
  21, 9, 0, 131, 116, 105, 111, 110, 0, 19, 11, 4, 0, 132, 104, 97, 112, 112,
 | 
			
		||||
  101, 110, 0, 23, 24, 8, 21, 0, 131, 116, 117, 114, 110, 0, 10, 12, 11, 23, 0,
 | 
			
		||||
  130, 110, 103, 115, 0, 85, 148, 13, 23, 157, 13, 0, 23, 8, 21, 0, 130, 117,
 | 
			
		||||
  114, 110, 0, 8, 21, 0, 128, 114, 110, 0, 18, 14, 17, 24, 0, 130, 110, 111,
 | 
			
		||||
  119, 110, 0, 71, 185, 13, 17, 196, 13, 26, 205, 13, 0, 8, 24, 22, 19, 0, 131,
 | 
			
		||||
  101, 117, 100, 111, 0, 26, 14, 44, 0, 130, 110, 111, 119, 0, 79, 212, 13, 17,
 | 
			
		||||
  220, 13, 0, 15, 18, 9, 0, 129, 111, 119, 0, 14, 44, 0, 129, 111, 119, 0, 86,
 | 
			
		||||
  234, 13, 24, 244, 13, 0, 4, 11, 21, 8, 19, 0, 129, 112, 115, 0, 18, 18, 15, 0,
 | 
			
		||||
  129, 107, 117, 112, 0, 68, 28, 14, 8, 93, 14, 11, 103, 15, 15, 113, 15, 18,
 | 
			
		||||
  127, 15, 19, 144, 15, 22, 155, 15, 23, 164, 15, 24, 176, 15, 28, 185, 15, 0,
 | 
			
		||||
  76, 38, 14, 15, 48, 14, 24, 82, 14, 0, 15, 12, 16, 12, 22, 0, 130, 97, 114, 0,
 | 
			
		||||
  76, 55, 14, 24, 66, 14, 0, 16, 16, 12, 22, 0, 132, 105, 108, 97, 114, 0, 6,
 | 
			
		||||
  12, 23, 4, 19, 0, 134, 114, 116, 105, 99, 117, 108, 97, 114, 0, 15, 10, 8, 21,
 | 
			
		||||
  0, 131, 117, 108, 97, 114, 0, 68, 124, 14, 7, 132, 14, 11, 145, 14, 12, 203,
 | 
			
		||||
  14, 15, 229, 14, 16, 239, 14, 17, 249, 14, 18, 37, 15, 23, 45, 15, 25, 76, 15,
 | 
			
		||||
  0, 15, 6, 0, 130, 101, 97, 114, 0, 17, 4, 15, 4, 6, 0, 132, 101, 110, 100, 97,
 | 
			
		||||
  114, 0, 74, 152, 14, 23, 163, 14, 0, 12, 8, 11, 0, 133, 105, 103, 104, 101,
 | 
			
		||||
  114, 0, 72, 173, 14, 15, 185, 14, 24, 194, 14, 0, 11, 10, 18, 23, 0, 133, 101,
 | 
			
		||||
  116, 104, 101, 114, 0, 18, 44, 0, 132, 116, 104, 101, 114, 0, 9, 0, 131, 114,
 | 
			
		||||
  116, 104, 101, 114, 0, 75, 210, 14, 15, 218, 14, 0, 23, 44, 0, 130, 101, 105,
 | 
			
		||||
  114, 0, 19, 16, 18, 6, 0, 131, 105, 108, 101, 114, 0, 23, 12, 9, 0, 131, 108,
 | 
			
		||||
  116, 101, 114, 0, 16, 4, 21, 10, 44, 0, 129, 97, 114, 0, 76, 0, 15, 23, 12,
 | 
			
		||||
  15, 0, 10, 10, 8, 5, 0, 132, 105, 110, 110, 101, 114, 0, 76, 19, 15, 22, 28,
 | 
			
		||||
  15, 0, 18, 19, 0, 131, 110, 116, 101, 114, 0, 12, 15, 0, 130, 101, 110, 101,
 | 
			
		||||
  114, 0, 9, 8, 5, 0, 129, 114, 101, 0, 75, 52, 15, 24, 62, 15, 0, 18, 17, 4, 0,
 | 
			
		||||
  131, 116, 104, 101, 114, 0, 19, 18, 16, 6, 0, 134, 111, 109, 112, 117, 116,
 | 
			
		||||
  101, 114, 0, 72, 83, 15, 26, 94, 15, 0, 8, 21, 8, 11, 26, 0, 131, 118, 101,
 | 
			
		||||
  114, 0, 18, 11, 0, 130, 101, 118, 101, 114, 0, 8, 23, 18, 44, 0, 130, 104,
 | 
			
		||||
  101, 114, 0, 4, 24, 6, 12, 23, 21, 4, 19, 0, 130, 108, 97, 114, 0, 23, 4, 21,
 | 
			
		||||
  8, 23, 17, 12, 0, 135, 116, 101, 114, 97, 116, 111, 114, 0, 23, 15, 15, 24,
 | 
			
		||||
  17, 0, 130, 112, 116, 114, 0, 4, 8, 28, 44, 0, 129, 114, 115, 0, 18, 4, 21, 8,
 | 
			
		||||
  19, 18, 0, 130, 116, 111, 114, 0, 6, 18, 44, 0, 129, 99, 117, 114, 0, 8, 25,
 | 
			
		||||
  8, 44, 0, 129, 114, 121, 0, 68, 219, 15, 8, 3, 16, 10, 147, 16, 19, 158, 16,
 | 
			
		||||
  21, 170, 16, 22, 181, 16, 23, 77, 17, 24, 85, 17, 0, 75, 229, 15, 19, 240, 15,
 | 
			
		||||
  28, 250, 15, 0, 19, 21, 8, 19, 0, 131, 104, 97, 112, 115, 0, 11, 21, 8, 19, 0,
 | 
			
		||||
  130, 97, 112, 115, 0, 26, 15, 4, 0, 130, 97, 121, 115, 0, 68, 19, 16, 6, 42,
 | 
			
		||||
  16, 12, 53, 16, 15, 129, 16, 22, 136, 16, 0, 71, 26, 16, 14, 34, 16, 0, 12,
 | 
			
		||||
  44, 0, 130, 101, 97, 115, 0, 23, 0, 131, 97, 107, 101, 115, 0, 8, 7, 17, 12,
 | 
			
		||||
  0, 131, 105, 99, 101, 115, 0, 70, 63, 16, 21, 102, 16, 23, 117, 16, 0, 72, 70,
 | 
			
		||||
  16, 12, 80, 16, 0, 7, 17, 12, 0, 132, 105, 99, 101, 115, 0, 71, 87, 16, 23,
 | 
			
		||||
  94, 16, 0, 17, 12, 0, 130, 101, 115, 0, 21, 8, 25, 0, 130, 101, 115, 0, 18,
 | 
			
		||||
  22, 8, 6, 6, 4, 0, 132, 115, 111, 114, 105, 101, 115, 0, 15, 12, 5, 4, 0, 131,
 | 
			
		||||
  105, 116, 105, 101, 115, 0, 4, 9, 0, 129, 115, 101, 0, 18, 11, 6, 44, 0, 130,
 | 
			
		||||
  111, 115, 101, 115, 0, 12, 17, 11, 23, 0, 131, 105, 110, 103, 115, 0, 4, 8,
 | 
			
		||||
  11, 21, 8, 19, 0, 131, 97, 112, 115, 0, 8, 4, 28, 44, 0, 131, 101, 97, 114,
 | 
			
		||||
  115, 0, 68, 191, 16, 8, 203, 16, 18, 66, 17, 0, 21, 4, 5, 16, 8, 0, 130, 114,
 | 
			
		||||
  97, 115, 115, 0, 70, 216, 16, 17, 240, 16, 21, 13, 17, 22, 42, 17, 0, 70, 223,
 | 
			
		||||
  16, 24, 232, 16, 0, 18, 21, 19, 0, 131, 101, 115, 115, 0, 22, 0, 130, 99, 101,
 | 
			
		||||
  115, 115, 0, 76, 247, 16, 22, 3, 17, 0, 22, 22, 24, 5, 0, 133, 105, 110, 101,
 | 
			
		||||
  115, 115, 0, 24, 5, 0, 131, 105, 110, 101, 115, 115, 0, 19, 0, 85, 22, 17, 24,
 | 
			
		||||
  33, 17, 0, 24, 22, 0, 133, 112, 112, 114, 101, 115, 115, 0, 22, 0, 131, 112,
 | 
			
		||||
  114, 101, 115, 115, 0, 70, 49, 17, 18, 58, 17, 0, 6, 24, 22, 0, 131, 101, 115,
 | 
			
		||||
  115, 0, 19, 0, 130, 115, 101, 115, 115, 0, 21, 6, 6, 4, 0, 132, 114, 111, 115,
 | 
			
		||||
  115, 0, 21, 12, 9, 0, 129, 115, 116, 0, 82, 92, 17, 22, 106, 17, 0, 15, 18,
 | 
			
		||||
  16, 18, 17, 4, 0, 132, 97, 108, 111, 117, 115, 0, 17, 8, 6, 17, 18, 6, 0, 133,
 | 
			
		||||
  115, 101, 110, 115, 117, 115, 0, 68, 158, 17, 8, 188, 17, 10, 217, 17, 11,
 | 
			
		||||
  227, 17, 12, 25, 18, 15, 36, 18, 16, 47, 18, 17, 59, 18, 18, 151, 19, 19, 189,
 | 
			
		||||
  19, 22, 217, 19, 24, 107, 20, 0, 85, 165, 17, 26, 176, 17, 0, 8, 19, 8, 22, 0,
 | 
			
		||||
  131, 97, 114, 97, 116, 0, 11, 8, 16, 18, 22, 0, 131, 119, 104, 97, 116, 0, 68,
 | 
			
		||||
  195, 17, 17, 204, 17, 0, 21, 10, 44, 0, 130, 101, 97, 116, 0, 16, 17, 21, 8,
 | 
			
		||||
  25, 18, 10, 0, 130, 101, 110, 116, 0, 11, 24, 4, 6, 0, 130, 103, 104, 116, 0,
 | 
			
		||||
  71, 237, 17, 10, 244, 17, 12, 14, 18, 0, 12, 26, 0, 129, 116, 104, 0, 81, 251,
 | 
			
		||||
  17, 24, 2, 18, 0, 8, 15, 0, 129, 116, 104, 0, 18, 21, 11, 23, 0, 133, 111,
 | 
			
		||||
  117, 103, 104, 116, 0, 10, 17, 18, 23, 0, 131, 105, 103, 104, 116, 0, 23, 24,
 | 
			
		||||
  18, 5, 4, 0, 129, 32, 105, 116, 0, 22, 24, 8, 21, 0, 131, 115, 117, 108, 116,
 | 
			
		||||
  0, 4, 23, 21, 18, 19, 16, 12, 0, 129, 110, 116, 0, 68, 72, 18, 8, 128, 18, 21,
 | 
			
		||||
  132, 19, 22, 143, 19, 0, 76, 85, 18, 17, 96, 18, 21, 107, 18, 23, 117, 18, 0,
 | 
			
		||||
  19, 12, 6, 8, 21, 0, 130, 101, 110, 116, 0, 12, 16, 18, 21, 19, 0, 130, 101,
 | 
			
		||||
  110, 116, 0, 4, 19, 19, 4, 0, 130, 101, 110, 116, 0, 8, 19, 16, 18, 6, 0, 130,
 | 
			
		||||
  101, 110, 116, 0, 76, 144, 18, 16, 177, 18, 21, 21, 19, 25, 111, 19, 29, 121,
 | 
			
		||||
  19, 0, 70, 151, 18, 19, 164, 18, 0, 8, 9, 9, 8, 0, 133, 105, 99, 105, 101,
 | 
			
		||||
  110, 116, 0, 8, 6, 8, 21, 0, 133, 105, 112, 105, 101, 110, 116, 0, 72, 190,
 | 
			
		||||
  18, 17, 202, 18, 21, 235, 18, 23, 10, 19, 0, 25, 18, 10, 0, 131, 114, 110,
 | 
			
		||||
  109, 101, 110, 116, 0, 72, 209, 18, 21, 221, 18, 0, 25, 18, 10, 0, 132, 114,
 | 
			
		||||
  110, 109, 101, 110, 116, 0, 18, 25, 18, 10, 0, 134, 101, 114, 110, 109, 101,
 | 
			
		||||
  110, 116, 0, 72, 242, 18, 18, 253, 18, 0, 25, 18, 10, 0, 131, 110, 109, 101,
 | 
			
		||||
  110, 116, 0, 25, 18, 10, 0, 133, 101, 114, 110, 109, 101, 110, 116, 0, 4, 23,
 | 
			
		||||
  22, 0, 131, 101, 109, 101, 110, 116, 0, 68, 34, 19, 8, 45, 19, 9, 57, 19, 21,
 | 
			
		||||
  68, 19, 0, 19, 4, 0, 132, 112, 97, 114, 101, 110, 116, 0, 9, 12, 7, 0, 132,
 | 
			
		||||
  102, 101, 114, 101, 110, 116, 0, 9, 12, 7, 0, 131, 101, 114, 101, 110, 116, 0,
 | 
			
		||||
  68, 75, 19, 8, 99, 19, 0, 19, 0, 68, 84, 19, 19, 92, 19, 0, 133, 112, 97, 114,
 | 
			
		||||
  101, 110, 116, 0, 4, 0, 131, 101, 110, 116, 0, 9, 12, 7, 0, 133, 102, 101,
 | 
			
		||||
  114, 101, 110, 116, 0, 8, 15, 8, 21, 0, 130, 97, 110, 116, 0, 12, 17, 10, 18,
 | 
			
		||||
  6, 0, 130, 97, 110, 116, 0, 8, 9, 9, 12, 7, 0, 129, 101, 110, 116, 0, 18, 6,
 | 
			
		||||
  0, 130, 110, 115, 116, 0, 81, 161, 19, 21, 171, 19, 22, 180, 19, 0, 7, 12, 7,
 | 
			
		||||
  0, 130, 32, 110, 111, 116, 0, 19, 8, 21, 0, 130, 111, 114, 116, 0, 16, 15, 4,
 | 
			
		||||
  0, 130, 111, 115, 116, 0, 72, 196, 19, 28, 207, 19, 0, 12, 6, 8, 21, 0, 131,
 | 
			
		||||
  101, 105, 112, 116, 0, 6, 17, 8, 0, 130, 114, 121, 112, 116, 0, 72, 236, 19,
 | 
			
		||||
  10, 21, 20, 12, 30, 20, 16, 59, 20, 17, 69, 20, 24, 96, 20, 0, 74, 243, 19,
 | 
			
		||||
  21, 10, 20, 0, 76, 250, 19, 24, 2, 20, 0, 11, 0, 130, 104, 101, 115, 116, 0,
 | 
			
		||||
  22, 0, 130, 103, 101, 115, 116, 0, 23, 17, 12, 0, 131, 101, 114, 101, 115,
 | 
			
		||||
  116, 0, 21, 4, 15, 0, 129, 101, 115, 116, 0, 73, 37, 20, 17, 49, 20, 0, 8, 17,
 | 
			
		||||
  4, 16, 0, 132, 105, 102, 101, 115, 116, 0, 4, 10, 4, 0, 131, 105, 110, 115,
 | 
			
		||||
  116, 0, 18, 15, 4, 0, 131, 109, 111, 115, 116, 0, 68, 76, 20, 17, 87, 20, 0,
 | 
			
		||||
  12, 10, 4, 0, 132, 97, 105, 110, 115, 116, 0, 12, 4, 10, 4, 0, 130, 115, 116,
 | 
			
		||||
  0, 13, 4, 44, 0, 131, 100, 106, 117, 115, 116, 0, 70, 120, 20, 18, 144, 20,
 | 
			
		||||
  19, 168, 20, 23, 191, 20, 0, 72, 127, 20, 21, 137, 20, 0, 6, 27, 8, 0, 132,
 | 
			
		||||
  101, 99, 117, 116, 0, 12, 6, 0, 128, 105, 116, 0, 68, 151, 20, 5, 160, 20, 0,
 | 
			
		||||
  5, 0, 132, 97, 98, 111, 117, 116, 0, 5, 4, 0, 131, 111, 117, 116, 0, 87, 175,
 | 
			
		||||
  20, 24, 183, 20, 0, 17, 12, 0, 131, 112, 117, 116, 0, 18, 0, 130, 116, 112,
 | 
			
		||||
  117, 116, 0, 19, 24, 18, 0, 131, 116, 112, 117, 116, 0, 23, 18, 5, 4, 0, 129,
 | 
			
		||||
  117, 116, 0, 72, 217, 20, 12, 253, 20, 0, 68, 224, 20, 12, 231, 20, 0, 11, 44,
 | 
			
		||||
  0, 129, 118, 101, 0, 70, 238, 20, 8, 246, 20, 0, 8, 21, 0, 130, 101, 105, 118,
 | 
			
		||||
  0, 6, 8, 21, 0, 129, 118, 0, 8, 11, 6, 4, 44, 0, 130, 105, 101, 118, 0, 76,
 | 
			
		||||
  15, 21, 17, 25, 21, 0, 8, 25, 8, 21, 0, 130, 105, 101, 119, 0, 18, 14, 44, 0,
 | 
			
		||||
  130, 110, 111, 119, 0, 70, 59, 21, 8, 118, 21, 11, 128, 21, 15, 146, 21, 17,
 | 
			
		||||
  87, 22, 21, 114, 22, 22, 12, 23, 23, 39, 23, 0, 68, 72, 21, 8, 84, 21, 12, 95,
 | 
			
		||||
  21, 19, 106, 21, 0, 21, 6, 18, 19, 28, 11, 0, 130, 105, 115, 121, 0, 24, 20,
 | 
			
		||||
  8, 21, 9, 0, 129, 110, 99, 121, 0, 21, 6, 18, 19, 28, 11, 0, 129, 115, 121, 0,
 | 
			
		||||
  24, 21, 14, 17, 4, 5, 0, 129, 116, 99, 121, 0, 23, 9, 4, 22, 0, 130, 101, 116,
 | 
			
		||||
  121, 0, 6, 21, 4, 21, 12, 8, 11, 0, 135, 105, 101, 114, 97, 114, 99, 104, 121,
 | 
			
		||||
  0, 68, 165, 21, 11, 232, 21, 14, 242, 21, 15, 250, 21, 18, 66, 22, 21, 76, 22,
 | 
			
		||||
  0, 69, 184, 21, 8, 193, 21, 15, 199, 21, 17, 208, 21, 21, 215, 21, 24, 224,
 | 
			
		||||
  21, 0, 18, 21, 19, 0, 129, 98, 108, 121, 0, 21, 0, 128, 108, 121, 0, 8, 21, 0,
 | 
			
		||||
  131, 97, 108, 108, 121, 0, 12, 9, 0, 128, 108, 121, 0, 8, 17, 8, 10, 0, 128,
 | 
			
		||||
  108, 121, 0, 23, 6, 4, 0, 128, 108, 121, 0, 10, 12, 15, 22, 0, 129, 116, 108,
 | 
			
		||||
  121, 0, 12, 15, 0, 129, 101, 108, 121, 0, 68, 4, 22, 5, 47, 22, 8, 56, 22, 0,
 | 
			
		||||
  86, 11, 22, 23, 35, 22, 0, 24, 0, 108, 20, 22, 22, 27, 22, 0, 131, 117, 97,
 | 
			
		||||
  108, 108, 121, 0, 24, 0, 132, 97, 108, 108, 121, 0, 24, 6, 4, 0, 133, 116,
 | 
			
		||||
  117, 97, 108, 108, 121, 0, 4, 5, 18, 21, 19, 0, 129, 121, 0, 4, 21, 0, 132,
 | 
			
		||||
  101, 97, 108, 108, 121, 0, 16, 18, 17, 4, 0, 130, 97, 108, 121, 0, 4, 16, 12,
 | 
			
		||||
  21, 19, 0, 129, 105, 108, 121, 0, 72, 94, 22, 19, 103, 22, 0, 18, 16, 44, 0,
 | 
			
		||||
  130, 110, 101, 121, 0, 4, 16, 18, 6, 0, 131, 112, 97, 110, 121, 0, 68, 127,
 | 
			
		||||
  22, 8, 231, 22, 18, 240, 22, 23, 253, 22, 0, 69, 143, 22, 12, 152, 22, 15,
 | 
			
		||||
  165, 22, 16, 193, 22, 22, 202, 22, 0, 12, 15, 0, 130, 114, 97, 114, 121, 0,
 | 
			
		||||
  15, 15, 12, 27, 24, 4, 0, 132, 105, 97, 114, 121, 0, 76, 172, 22, 15, 182, 22,
 | 
			
		||||
  0, 27, 24, 4, 0, 130, 105, 97, 114, 121, 0, 12, 27, 24, 4, 0, 131, 105, 97,
 | 
			
		||||
  114, 121, 0, 24, 22, 0, 130, 109, 97, 114, 121, 0, 8, 6, 0, 70, 212, 22, 8,
 | 
			
		||||
  223, 22, 0, 8, 17, 0, 133, 101, 115, 115, 97, 114, 121, 0, 17, 0, 130, 115,
 | 
			
		||||
  97, 114, 121, 0, 19, 18, 21, 19, 0, 128, 116, 121, 0, 10, 4, 23, 4, 6, 0, 132,
 | 
			
		||||
  101, 103, 111, 114, 121, 0, 17, 24, 6, 18, 44, 0, 134, 99, 111, 117, 110, 116,
 | 
			
		||||
  114, 121, 0, 4, 0, 85, 21, 23, 26, 32, 23, 0, 6, 18, 19, 28, 11, 0, 130, 105,
 | 
			
		||||
  115, 121, 0, 15, 4, 0, 129, 121, 115, 0, 73, 49, 23, 15, 57, 23, 21, 66, 23,
 | 
			
		||||
  0, 4, 22, 0, 129, 101, 116, 121, 0, 12, 5, 4, 0, 129, 105, 116, 121, 0, 19, 8,
 | 
			
		||||
  18, 21, 19, 0, 132, 112, 101, 114, 116, 121, 0};
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										152
									
								
								users/gourdo1/autocorrect/autocorrection_data.h (small)
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								users/gourdo1/autocorrect/autocorrection_data.h (small)
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,152 @@
 | 
			
		|||
// Copyright 2021-2022 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.
 | 
			
		||||
 | 
			
		||||
// Generated code.
 | 
			
		||||
 | 
			
		||||
// Autocorrection dictionary (71 entries):
 | 
			
		||||
//   :guage     -> gauge
 | 
			
		||||
//   :the:the:  -> the
 | 
			
		||||
//   :thier     -> their
 | 
			
		||||
//   :ture      -> true
 | 
			
		||||
//   accomodate -> accommodate
 | 
			
		||||
//   acommodate -> accommodate
 | 
			
		||||
//   aparent    -> apparent
 | 
			
		||||
//   aparrent   -> apparent
 | 
			
		||||
//   apparant   -> apparent
 | 
			
		||||
//   apparrent  -> apparent
 | 
			
		||||
//   aquire     -> acquire
 | 
			
		||||
//   becuase    -> because
 | 
			
		||||
//   cauhgt     -> caught
 | 
			
		||||
//   cheif      -> chief
 | 
			
		||||
//   choosen    -> chosen
 | 
			
		||||
//   cieling    -> ceiling
 | 
			
		||||
//   collegue   -> colleague
 | 
			
		||||
//   concensus  -> consensus
 | 
			
		||||
//   contians   -> contains
 | 
			
		||||
//   cosnt      -> const
 | 
			
		||||
//   dervied    -> derived
 | 
			
		||||
//   dosen't    -> doesn't
 | 
			
		||||
//   fales      -> false
 | 
			
		||||
//   fasle      -> false
 | 
			
		||||
//   fitler     -> filter
 | 
			
		||||
//   flase      -> false
 | 
			
		||||
//   foward     -> forward
 | 
			
		||||
//   frequecy   -> frequency
 | 
			
		||||
//   gaurantee  -> guarantee
 | 
			
		||||
//   guaratee   -> guarantee
 | 
			
		||||
//   heigth     -> height
 | 
			
		||||
//   heirarchy  -> hierarchy
 | 
			
		||||
//   inclued    -> include
 | 
			
		||||
//   interator  -> iterator
 | 
			
		||||
//   intput     -> input
 | 
			
		||||
//   invliad    -> invalid
 | 
			
		||||
//   lenght     -> length
 | 
			
		||||
//   liasion    -> liaison
 | 
			
		||||
//   libary     -> library
 | 
			
		||||
//   listner    -> listener
 | 
			
		||||
//   looses:    -> loses
 | 
			
		||||
//   looup      -> lookup
 | 
			
		||||
//   manefist   -> manifest
 | 
			
		||||
//   namesapce  -> namespace
 | 
			
		||||
//   namespcae  -> namespace
 | 
			
		||||
//   occassion  -> occasion
 | 
			
		||||
//   occured    -> occurred
 | 
			
		||||
//   ouptut     -> output
 | 
			
		||||
//   ouput      -> output
 | 
			
		||||
//   overide    -> override
 | 
			
		||||
//   postion    -> position
 | 
			
		||||
//   priviledge -> privilege
 | 
			
		||||
//   psuedo     -> pseudo
 | 
			
		||||
//   recieve    -> receive
 | 
			
		||||
//   refered    -> referred
 | 
			
		||||
//   relevent   -> relevant
 | 
			
		||||
//   repitition -> repetition
 | 
			
		||||
//   retrun     -> return
 | 
			
		||||
//   retun      -> return
 | 
			
		||||
//   reuslt     -> result
 | 
			
		||||
//   reutrn     -> return
 | 
			
		||||
//   saftey     -> safety
 | 
			
		||||
//   seperate   -> separate
 | 
			
		||||
//   singed     -> signed
 | 
			
		||||
//   stirng     -> string
 | 
			
		||||
//   strign     -> string
 | 
			
		||||
//   swithc     -> switch
 | 
			
		||||
//   swtich     -> switch
 | 
			
		||||
//   thresold   -> threshold
 | 
			
		||||
//   udpate     -> update
 | 
			
		||||
//   widht      -> width
 | 
			
		||||
 | 
			
		||||
#define AUTOCORRECTION_MIN_LENGTH 5  // ":ture"
 | 
			
		||||
#define AUTOCORRECTION_MAX_LENGTH 10  // "accomodate"
 | 
			
		||||
 | 
			
		||||
static const uint8_t autocorrection_data[1120] PROGMEM = {108, 43, 0, 6, 71, 0,
 | 
			
		||||
  7, 81, 0, 8, 199, 0, 9, 240, 1, 10, 250, 1, 11, 26, 2, 17, 53, 2, 18, 190, 2,
 | 
			
		||||
  19, 202, 2, 21, 212, 2, 22, 20, 3, 23, 67, 3, 28, 32, 4, 0, 72, 50, 0, 22, 60,
 | 
			
		||||
  0, 0, 11, 23, 44, 8, 11, 23, 44, 0, 132, 0, 8, 22, 18, 18, 15, 0, 132, 115,
 | 
			
		||||
  101, 115, 0, 11, 23, 12, 26, 22, 0, 129, 99, 104, 0, 68, 94, 0, 8, 106, 0, 15,
 | 
			
		||||
  174, 0, 21, 187, 0, 0, 12, 15, 25, 17, 12, 0, 131, 97, 108, 105, 100, 0, 74,
 | 
			
		||||
  119, 0, 12, 129, 0, 21, 140, 0, 24, 165, 0, 0, 17, 12, 22, 0, 131, 103, 110,
 | 
			
		||||
  101, 100, 0, 25, 21, 8, 7, 0, 131, 105, 118, 101, 100, 0, 72, 147, 0, 24, 156,
 | 
			
		||||
  0, 0, 9, 8, 21, 0, 129, 114, 101, 100, 0, 6, 6, 18, 0, 129, 114, 101, 100, 0,
 | 
			
		||||
  15, 6, 17, 12, 0, 129, 100, 101, 0, 18, 22, 8, 21, 11, 23, 0, 130, 104, 111,
 | 
			
		||||
  108, 100, 0, 4, 26, 18, 9, 0, 131, 114, 119, 97, 114, 100, 0, 68, 233, 0, 6,
 | 
			
		||||
  246, 0, 7, 4, 1, 8, 16, 1, 10, 52, 1, 15, 81, 1, 21, 90, 1, 22, 117, 1, 23,
 | 
			
		||||
  144, 1, 24, 215, 1, 25, 228, 1, 0, 6, 19, 22, 8, 16, 4, 17, 0, 130, 97, 99,
 | 
			
		||||
  101, 0, 19, 4, 22, 8, 16, 4, 17, 0, 131, 112, 97, 99, 101, 0, 12, 21, 8, 25,
 | 
			
		||||
  18, 0, 130, 114, 105, 100, 101, 0, 23, 0, 68, 25, 1, 17, 36, 1, 0, 21, 4, 24,
 | 
			
		||||
  10, 0, 130, 110, 116, 101, 101, 0, 4, 21, 24, 4, 10, 0, 135, 117, 97, 114, 97,
 | 
			
		||||
  110, 116, 101, 101, 0, 68, 59, 1, 7, 69, 1, 0, 24, 10, 44, 0, 131, 97, 117,
 | 
			
		||||
  103, 101, 0, 8, 15, 12, 25, 12, 21, 19, 0, 130, 103, 101, 0, 22, 4, 9, 0, 130,
 | 
			
		||||
  108, 115, 101, 0, 76, 97, 1, 24, 109, 1, 0, 24, 20, 4, 0, 132, 99, 113, 117,
 | 
			
		||||
  105, 114, 101, 0, 23, 44, 0, 130, 114, 117, 101, 0, 4, 0, 79, 126, 1, 24, 134,
 | 
			
		||||
  1, 0, 9, 0, 131, 97, 108, 115, 101, 0, 6, 8, 5, 0, 131, 97, 117, 115, 101, 0,
 | 
			
		||||
  4, 0, 71, 156, 1, 19, 193, 1, 21, 203, 1, 0, 18, 16, 0, 80, 166, 1, 18, 181,
 | 
			
		||||
  1, 0, 18, 6, 4, 0, 135, 99, 111, 109, 109, 111, 100, 97, 116, 101, 0, 6, 6, 4,
 | 
			
		||||
  0, 132, 109, 111, 100, 97, 116, 101, 0, 7, 24, 0, 132, 112, 100, 97, 116, 101,
 | 
			
		||||
  0, 8, 19, 8, 22, 0, 132, 97, 114, 97, 116, 101, 0, 10, 8, 15, 15, 18, 6, 0,
 | 
			
		||||
  130, 97, 103, 117, 101, 0, 8, 12, 6, 8, 21, 0, 131, 101, 105, 118, 101, 0, 12,
 | 
			
		||||
  8, 11, 6, 0, 130, 105, 101, 102, 0, 17, 0, 76, 3, 2, 21, 16, 2, 0, 15, 8, 12,
 | 
			
		||||
  6, 0, 133, 101, 105, 108, 105, 110, 103, 0, 12, 23, 22, 0, 131, 114, 105, 110,
 | 
			
		||||
  103, 0, 70, 33, 2, 23, 44, 2, 0, 12, 23, 26, 22, 0, 131, 105, 116, 99, 104, 0,
 | 
			
		||||
  10, 12, 8, 11, 0, 129, 104, 116, 0, 72, 69, 2, 10, 80, 2, 18, 89, 2, 21, 156,
 | 
			
		||||
  2, 24, 167, 2, 0, 22, 18, 18, 11, 6, 0, 131, 115, 101, 110, 0, 12, 21, 23, 22,
 | 
			
		||||
  0, 129, 110, 103, 0, 12, 0, 86, 98, 2, 23, 124, 2, 0, 68, 105, 2, 22, 114, 2,
 | 
			
		||||
  0, 12, 15, 0, 131, 105, 115, 111, 110, 0, 4, 6, 6, 18, 0, 131, 105, 111, 110,
 | 
			
		||||
  0, 76, 131, 2, 22, 146, 2, 0, 23, 12, 19, 8, 21, 0, 134, 101, 116, 105, 116,
 | 
			
		||||
  105, 111, 110, 0, 18, 19, 0, 131, 105, 116, 105, 111, 110, 0, 23, 24, 8, 21,
 | 
			
		||||
  0, 131, 116, 117, 114, 110, 0, 85, 174, 2, 23, 183, 2, 0, 23, 8, 21, 0, 130,
 | 
			
		||||
  117, 114, 110, 0, 8, 21, 0, 128, 114, 110, 0, 7, 8, 24, 22, 19, 0, 131, 101,
 | 
			
		||||
  117, 100, 111, 0, 24, 18, 18, 15, 0, 129, 107, 117, 112, 0, 72, 219, 2, 18, 3,
 | 
			
		||||
  3, 0, 76, 229, 2, 15, 238, 2, 17, 248, 2, 0, 11, 23, 44, 0, 130, 101, 105,
 | 
			
		||||
  114, 0, 23, 12, 9, 0, 131, 108, 116, 101, 114, 0, 23, 22, 12, 15, 0, 130, 101,
 | 
			
		||||
  110, 101, 114, 0, 23, 4, 21, 8, 23, 17, 12, 0, 135, 116, 101, 114, 97, 116,
 | 
			
		||||
  111, 114, 0, 72, 30, 3, 17, 38, 3, 24, 51, 3, 0, 15, 4, 9, 0, 129, 115, 101,
 | 
			
		||||
  0, 4, 12, 23, 17, 18, 6, 0, 131, 97, 105, 110, 115, 0, 22, 17, 8, 6, 17, 18,
 | 
			
		||||
  6, 0, 133, 115, 101, 110, 115, 117, 115, 0, 116, 89, 3, 10, 102, 3, 11, 112,
 | 
			
		||||
  3, 15, 134, 3, 17, 145, 3, 22, 234, 3, 24, 248, 3, 0, 17, 8, 22, 18, 7, 0,
 | 
			
		||||
  132, 101, 115, 110, 39, 116, 0, 11, 24, 4, 6, 0, 130, 103, 104, 116, 0, 71,
 | 
			
		||||
  119, 3, 10, 126, 3, 0, 12, 26, 0, 129, 116, 104, 0, 17, 8, 15, 0, 129, 116,
 | 
			
		||||
  104, 0, 22, 24, 8, 21, 0, 131, 115, 117, 108, 116, 0, 68, 155, 3, 8, 166, 3,
 | 
			
		||||
  22, 226, 3, 0, 21, 4, 19, 19, 4, 0, 130, 101, 110, 116, 0, 85, 173, 3, 25,
 | 
			
		||||
  216, 3, 0, 68, 180, 3, 21, 191, 3, 0, 19, 4, 0, 132, 112, 97, 114, 101, 110,
 | 
			
		||||
  116, 0, 4, 19, 0, 68, 201, 3, 19, 209, 3, 0, 133, 112, 97, 114, 101, 110, 116,
 | 
			
		||||
  0, 4, 0, 131, 101, 110, 116, 0, 8, 15, 8, 21, 0, 130, 97, 110, 116, 0, 18, 6,
 | 
			
		||||
  0, 130, 110, 115, 116, 0, 12, 9, 8, 17, 4, 16, 0, 132, 105, 102, 101, 115,
 | 
			
		||||
  116, 0, 83, 255, 3, 23, 22, 4, 0, 87, 6, 4, 24, 14, 4, 0, 17, 12, 0, 131, 112,
 | 
			
		||||
  117, 116, 0, 18, 0, 130, 116, 112, 117, 116, 0, 19, 24, 18, 0, 131, 116, 112,
 | 
			
		||||
  117, 116, 0, 70, 45, 4, 8, 57, 4, 11, 67, 4, 21, 85, 4, 0, 8, 24, 20, 8, 21,
 | 
			
		||||
  9, 0, 129, 110, 99, 121, 0, 23, 9, 4, 22, 0, 130, 101, 116, 121, 0, 6, 21, 4,
 | 
			
		||||
  21, 12, 8, 11, 0, 135, 105, 101, 114, 97, 114, 99, 104, 121, 0, 4, 5, 12, 15,
 | 
			
		||||
  0, 130, 114, 97, 114, 121, 0};
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										473
									
								
								users/gourdo1/autocorrect/autocorrection_dict.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										473
									
								
								users/gourdo1/autocorrect/autocorrection_dict.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,473 @@
 | 
			
		|||
# 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
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										303
									
								
								users/gourdo1/autocorrect/make_autocorrection_data.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										303
									
								
								users/gourdo1/autocorrect/make_autocorrection_data.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,303 @@
 | 
			
		|||
# Copyright 2021-2022 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.
 | 
			
		||||
 | 
			
		||||
"""Python program to make autocorrection_data.h.
 | 
			
		||||
 | 
			
		||||
This program reads "autocorrection_dict.txt" and generates a C source file
 | 
			
		||||
"autocorrection_data.h" with a serialized trie embedded as an array. Run this
 | 
			
		||||
program without arguments like
 | 
			
		||||
 | 
			
		||||
$ python3 make_autocorrection_data.py
 | 
			
		||||
 | 
			
		||||
Or to read from a different typo dict file, pass it as the first argument like
 | 
			
		||||
 | 
			
		||||
$ python3 make_autocorrection_data.py dict.txt
 | 
			
		||||
 | 
			
		||||
Each line of the dict file defines one typo and its correction with the syntax
 | 
			
		||||
"typo -> correction". Blank lines or lines starting with '#' are ignored.
 | 
			
		||||
Example:
 | 
			
		||||
 | 
			
		||||
  :thier        -> their
 | 
			
		||||
  dosen't       -> doesn't
 | 
			
		||||
  fitler        -> filter
 | 
			
		||||
  lenght        -> length
 | 
			
		||||
  ouput         -> output
 | 
			
		||||
  widht         -> width
 | 
			
		||||
 | 
			
		||||
See autocorrection_dict_extra.txt for a larger example.
 | 
			
		||||
 | 
			
		||||
For full documentation, see
 | 
			
		||||
https://getreuer.info/posts/keyboards/autocorrection
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
import sys
 | 
			
		||||
import textwrap
 | 
			
		||||
from typing import Any, Dict, Iterator, List, Tuple
 | 
			
		||||
 | 
			
		||||
try:
 | 
			
		||||
  from english_words import english_words_lower_alpha_set as CORRECT_WORDS
 | 
			
		||||
except ImportError:
 | 
			
		||||
  print('Autocorrection will falsely trigger when a typo is a substring of a '
 | 
			
		||||
        'correctly spelled word. To check for this, install the english_words '
 | 
			
		||||
        'package and rerun this script:\n\n  pip install english_words\n')
 | 
			
		||||
  # Use a minimal word list as a fallback.
 | 
			
		||||
  CORRECT_WORDS = ('apparent', 'association', 'available', 'classification',
 | 
			
		||||
                   'effect', 'entertainment', 'fantastic', 'information',
 | 
			
		||||
                   'integrate', 'international', 'language', 'loosest',
 | 
			
		||||
                   'manual', 'nothing', 'provides', 'reference', 'statehood',
 | 
			
		||||
                   'technology', 'virtually', 'wealthier', 'wonderful')
 | 
			
		||||
 | 
			
		||||
KC_A = 4
 | 
			
		||||
KC_SPC = 0x2c
 | 
			
		||||
KC_QUOT = 0x34
 | 
			
		||||
 | 
			
		||||
TYPO_CHARS = dict(
 | 
			
		||||
  [
 | 
			
		||||
    ("'", KC_QUOT),
 | 
			
		||||
    (':', KC_SPC),  # "Word break" character.
 | 
			
		||||
  ] +
 | 
			
		||||
  # Characters a-z.
 | 
			
		||||
  [(chr(c), c + KC_A - ord('a')) for c in range(ord('a'), ord('z') + 1)]
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def parse_file(file_name: str) -> List[Tuple[str, str]]:
 | 
			
		||||
  """Parses autocorrections dictionary file.
 | 
			
		||||
 | 
			
		||||
  Each line of the file defines one typo and its correction with the syntax
 | 
			
		||||
  "typo -> correction". Blank lines or lines starting with '#' are ignored. The
 | 
			
		||||
  function validates that typos only have characters in TYPO_CHARS, that
 | 
			
		||||
  typos are not substrings of other typos, and checking that typos don't trigger
 | 
			
		||||
  on CORRECT_WORDS.
 | 
			
		||||
 | 
			
		||||
  Args:
 | 
			
		||||
    file_name: String, path of the autocorrections dictionary.
 | 
			
		||||
  Returns:
 | 
			
		||||
    List of (typo, correction) tuples.
 | 
			
		||||
  """
 | 
			
		||||
 | 
			
		||||
  autocorrections = []
 | 
			
		||||
  typos = set()
 | 
			
		||||
  for line_number, typo, correction in parse_file_lines(file_name):
 | 
			
		||||
    if typo in typos:
 | 
			
		||||
      print(f'Warning:{line_number}: Ignoring duplicate typo: "{typo}"')
 | 
			
		||||
      continue
 | 
			
		||||
 | 
			
		||||
    # Check that `typo` is valid.
 | 
			
		||||
    if not(all([c in TYPO_CHARS for c in typo])):
 | 
			
		||||
      print(f'Error:{line_number}: Typo "{typo}" has '
 | 
			
		||||
            'characters other than ' + ''.join(TYPO_CHARS.keys()))
 | 
			
		||||
      sys.exit(1)
 | 
			
		||||
    for other_typo in typos:
 | 
			
		||||
      if typo in other_typo or other_typo in typo:
 | 
			
		||||
        print(f'Error:{line_number}: Typos may not be substrings of one '
 | 
			
		||||
              f'another, otherwise the longer typo would never trigger: '
 | 
			
		||||
              f'"{typo}" vs. "{other_typo}".')
 | 
			
		||||
        sys.exit(1)
 | 
			
		||||
    if len(typo) < 5:
 | 
			
		||||
      print(f'Warning:{line_number}: It is suggested that typos are at '
 | 
			
		||||
            f'least 5 characters long to avoid false triggers: "{typo}"')
 | 
			
		||||
 | 
			
		||||
    check_typo_against_dictionary(line_number, typo)
 | 
			
		||||
 | 
			
		||||
    autocorrections.append((typo, correction))
 | 
			
		||||
    typos.add(typo)
 | 
			
		||||
 | 
			
		||||
  return autocorrections
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def make_trie(autocorrections: List[Tuple[str, str]]) -> Dict[str, Any]:
 | 
			
		||||
  """Makes a trie from the the typos, writing in reverse.
 | 
			
		||||
 | 
			
		||||
  Args:
 | 
			
		||||
    autocorrections: List of (typo, correction) tuples.
 | 
			
		||||
  Returns:
 | 
			
		||||
    Dict of dict, representing the trie.
 | 
			
		||||
  """
 | 
			
		||||
  trie = {}
 | 
			
		||||
  for typo, correction in autocorrections:
 | 
			
		||||
    node = trie
 | 
			
		||||
    for letter in typo[::-1]:
 | 
			
		||||
      node = node.setdefault(letter, {})
 | 
			
		||||
    node['LEAF'] = (typo, correction)
 | 
			
		||||
 | 
			
		||||
  return trie
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def parse_file_lines(file_name: str) -> Iterator[Tuple[int, str, str]]:
 | 
			
		||||
  """Parses lines read from `file_name` into typo-correction pairs."""
 | 
			
		||||
 | 
			
		||||
  line_number = 0
 | 
			
		||||
  for line in open(file_name, 'rt'):
 | 
			
		||||
    line_number += 1
 | 
			
		||||
    line = line.strip()
 | 
			
		||||
    if line and line[0] != '#':
 | 
			
		||||
      # Parse syntax "typo -> correction", using strip to ignore indenting.
 | 
			
		||||
      tokens = [token.strip() for token in line.split('->', 1)]
 | 
			
		||||
      if len(tokens) != 2 or not tokens[0]:
 | 
			
		||||
        print(f'Error:{line_number}: Invalid syntax: "{line}"')
 | 
			
		||||
        sys.exit(1)
 | 
			
		||||
 | 
			
		||||
      typo, correction = tokens
 | 
			
		||||
      typo = typo.lower()  # Force typos to lowercase.
 | 
			
		||||
      typo = typo.replace(' ', ':')
 | 
			
		||||
 | 
			
		||||
      yield line_number, typo, correction
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def check_typo_against_dictionary(line_number: int, typo: str) -> None:
 | 
			
		||||
  """Checks `typo` against English dictionary words."""
 | 
			
		||||
 | 
			
		||||
  if typo.startswith(':') and typo.endswith(':'):
 | 
			
		||||
    if typo[1:-1] in CORRECT_WORDS:
 | 
			
		||||
      print(f'Warning:{line_number}: Typo "{typo}" is a correctly spelled '
 | 
			
		||||
            'dictionary word.')
 | 
			
		||||
  elif typo.startswith(':') and not typo.endswith(':'):
 | 
			
		||||
    for word in CORRECT_WORDS:
 | 
			
		||||
      if word.startswith(typo[1:]):
 | 
			
		||||
        print(f'Warning:{line_number}: Typo "{typo}" would falsely trigger '
 | 
			
		||||
              f'on correctly spelled word "{word}".')
 | 
			
		||||
  elif not typo.startswith(':') and typo.endswith(':'):
 | 
			
		||||
    for word in CORRECT_WORDS:
 | 
			
		||||
      if word.endswith(typo[:-1]):
 | 
			
		||||
        print(f'Warning:{line_number}: Typo "{typo}" would falsely trigger '
 | 
			
		||||
              f'on correctly spelled word "{word}".')
 | 
			
		||||
  elif not typo.startswith(':') and not typo.endswith(':'):
 | 
			
		||||
    for word in CORRECT_WORDS:
 | 
			
		||||
      if typo in word:
 | 
			
		||||
        print(f'Warning:{line_number}: Typo "{typo}" would falsely trigger '
 | 
			
		||||
              f'on correctly spelled word "{word}".')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def serialize_trie(autocorrections: List[Tuple[str, str]],
 | 
			
		||||
                   trie: Dict[str, Any]) -> List[int]:
 | 
			
		||||
  """Serializes trie and correction data in a form readable by the C code.
 | 
			
		||||
 | 
			
		||||
  Args:
 | 
			
		||||
    autocorrections: List of (typo, correction) tuples.
 | 
			
		||||
    trie: Dict of dicts.
 | 
			
		||||
  Returns:
 | 
			
		||||
    List of ints in the range 0-255.
 | 
			
		||||
  """
 | 
			
		||||
  table = []
 | 
			
		||||
 | 
			
		||||
  # Traverse trie in depth first order.
 | 
			
		||||
  def traverse(trie_node: Dict[str, Any]) -> Dict[str, Any]:
 | 
			
		||||
    if 'LEAF' in trie_node:  # Handle a leaf trie node.
 | 
			
		||||
      typo, correction = trie_node['LEAF']
 | 
			
		||||
      word_boundary_ending = typo[-1] == ':'
 | 
			
		||||
      typo = typo.strip(':')
 | 
			
		||||
      i = 0  # Make the autocorrection data for this entry and serialize it.
 | 
			
		||||
      while i < min(len(typo), len(correction)) and typo[i] == correction[i]:
 | 
			
		||||
        i += 1
 | 
			
		||||
      backspaces = len(typo) - i - 1 + word_boundary_ending
 | 
			
		||||
      assert 0 <= backspaces <= 63
 | 
			
		||||
      correction = correction[i:]
 | 
			
		||||
      data = [backspaces + 128] + list(bytes(correction, 'ascii')) + [0]
 | 
			
		||||
 | 
			
		||||
      entry = {'data': data, 'links': [], 'byte_offset': 0}
 | 
			
		||||
      table.append(entry)
 | 
			
		||||
    elif len(trie_node) == 1:  # Handle trie node with a single child.
 | 
			
		||||
      c, trie_node = next(iter(trie_node.items()))
 | 
			
		||||
      entry = {'chars': c, 'byte_offset': 0}
 | 
			
		||||
 | 
			
		||||
      # It's common for a trie to have long chains of single-child nodes. We
 | 
			
		||||
      # find the whole chain so that we can serialize it more efficiently.
 | 
			
		||||
      while len(trie_node) == 1 and 'LEAF' not in trie_node:
 | 
			
		||||
        c, trie_node = next(iter(trie_node.items()))
 | 
			
		||||
        entry['chars'] += c
 | 
			
		||||
 | 
			
		||||
      table.append(entry)
 | 
			
		||||
      entry['links'] = [traverse(trie_node)]
 | 
			
		||||
    else:  # Handle trie node with multiple children.
 | 
			
		||||
      entry = {'chars': ''.join(sorted(trie_node.keys())), 'byte_offset': 0}
 | 
			
		||||
      table.append(entry)
 | 
			
		||||
      entry['links'] = [traverse(trie_node[c]) for c in entry['chars']]
 | 
			
		||||
    return entry
 | 
			
		||||
 | 
			
		||||
  traverse(trie)
 | 
			
		||||
 | 
			
		||||
  def serialize(e: Dict[str, Any]) -> List[int]:
 | 
			
		||||
    if not e['links']:  # Handle a leaf table entry.
 | 
			
		||||
      return e['data']
 | 
			
		||||
    elif len(e['links']) == 1:  # Handle a chain table entry.
 | 
			
		||||
      return [TYPO_CHARS[c] for c in e['chars']] + [0]
 | 
			
		||||
    else:  # Handle a branch table entry.
 | 
			
		||||
      data = []
 | 
			
		||||
      for c, link in zip(e['chars'], e['links']):
 | 
			
		||||
        data += [TYPO_CHARS[c] | (0 if data else 64)] + encode_link(link)
 | 
			
		||||
      return data + [0]
 | 
			
		||||
 | 
			
		||||
  byte_offset = 0
 | 
			
		||||
  for e in table:  # To encode links, first compute byte offset of each entry.
 | 
			
		||||
    e['byte_offset'] = byte_offset
 | 
			
		||||
    byte_offset += len(serialize(e))
 | 
			
		||||
 | 
			
		||||
  return [b for e in table for b in serialize(e)]  # Serialize final table.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def encode_link(link: Dict[str, Any]) -> List[int]:
 | 
			
		||||
  """Encodes a node link as two bytes."""
 | 
			
		||||
  byte_offset = link['byte_offset']
 | 
			
		||||
  if not (0 <= byte_offset <= 0xffff):
 | 
			
		||||
    print('Error: The autocorrection table is too large, a node link exceeds '
 | 
			
		||||
          '64KB limit. Try reducing the autocorrection dict to fewer entries.')
 | 
			
		||||
    sys.exit(1)
 | 
			
		||||
  return [byte_offset & 255, byte_offset >> 8]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def write_generated_code(autocorrections: List[Tuple[str, str]],
 | 
			
		||||
                         data: List[int],
 | 
			
		||||
                         file_name: str) -> None:
 | 
			
		||||
  """Writes autocorrection data as generated C code to `file_name`.
 | 
			
		||||
 | 
			
		||||
  Args:
 | 
			
		||||
    autocorrections: List of (typo, correction) tuples.
 | 
			
		||||
    data: List of ints in 0-255, the serialized trie.
 | 
			
		||||
    file_name: String, path of the output C file.
 | 
			
		||||
  """
 | 
			
		||||
  assert all(0 <= b <= 255 for b in data)
 | 
			
		||||
 | 
			
		||||
  def typo_len(e: Tuple[str, str]) -> int:
 | 
			
		||||
    return len(e[0])
 | 
			
		||||
 | 
			
		||||
  min_typo = min(autocorrections, key=typo_len)[0]
 | 
			
		||||
  max_typo = max(autocorrections, key=typo_len)[0]
 | 
			
		||||
  generated_code = ''.join([
 | 
			
		||||
    '// Generated code.\n\n',
 | 
			
		||||
    f'// Autocorrection dictionary ({len(autocorrections)} entries):\n',
 | 
			
		||||
    ''.join(sorted(f'//   {typo:<{len(max_typo)}} -> {correction}\n'
 | 
			
		||||
                   for typo, correction in autocorrections)),
 | 
			
		||||
    f'\n#define AUTOCORRECTION_MIN_LENGTH {len(min_typo)}  // "{min_typo}"\n',
 | 
			
		||||
    f'#define AUTOCORRECTION_MAX_LENGTH {len(max_typo)}  // "{max_typo}"\n\n',
 | 
			
		||||
    textwrap.fill('static const uint8_t autocorrection_data[%d] PROGMEM = {%s};' % (
 | 
			
		||||
      len(data), ', '.join(map(str, data))), width=80, subsequent_indent='  '),
 | 
			
		||||
    '\n\n'])
 | 
			
		||||
 | 
			
		||||
  with open(file_name, 'wt') as f:
 | 
			
		||||
    f.write(generated_code)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def main(argv):
 | 
			
		||||
  dict_file = argv[1] if len(argv) > 1 else 'autocorrection_dict.txt'
 | 
			
		||||
  autocorrections = parse_file(dict_file)
 | 
			
		||||
  trie = make_trie(autocorrections)
 | 
			
		||||
  data = serialize_trie(autocorrections, trie)
 | 
			
		||||
  print(f'Processed %d autocorrection entries to table with %d bytes.'
 | 
			
		||||
        % (len(autocorrections), len(data)))
 | 
			
		||||
  write_generated_code(autocorrections, data, 'autocorrection_data.h')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
  main(sys.argv)
 | 
			
		||||
| 
						 | 
				
			
			@ -71,3 +71,31 @@ static bool process_esc_to_base(uint16_t keycode, keyrecord_t * record) {
 | 
			
		|||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static bool process_lsft_for_caps(uint16_t keycode, keyrecord_t * record) {
 | 
			
		||||
    static bool tapped = false;
 | 
			
		||||
    static uint16_t tap_timer = 0;
 | 
			
		||||
 | 
			
		||||
    if (keycode == KC_LSFT) {
 | 
			
		||||
        if (user_config.double_tap_shift_for_capslock) {
 | 
			
		||||
          if (!keymap_config.no_gui) {
 | 
			
		||||
            if (record->event.pressed) {
 | 
			
		||||
                if (tapped && !timer_expired(record->event.time, tap_timer)) {
 | 
			
		||||
                  // The key was double tapped.
 | 
			
		||||
                  //clear_mods();  // If needed, clear the mods.
 | 
			
		||||
                  // Do something interesting...
 | 
			
		||||
                  register_code(KC_CAPS);
 | 
			
		||||
                }
 | 
			
		||||
                tapped = true;
 | 
			
		||||
                tap_timer = record->event.time + TAPPING_TERM;
 | 
			
		||||
            } else {
 | 
			
		||||
                unregister_code(KC_CAPS);
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
            // On an event with any other key, reset the double tap state.
 | 
			
		||||
            tapped = false;
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,33 +21,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		|||
 | 
			
		||||
#include "custom_double_taps.h"
 | 
			
		||||
 | 
			
		||||
// Tap once for shift, twice for Caps Lock but only if Win Key is not disabled (also disabled by user.config variable)
 | 
			
		||||
void dance_LSFT_each_tap(qk_tap_dance_state_t * state, void * user_data) {
 | 
			
		||||
    if (user_config.double_tap_shift_for_capslock) {
 | 
			
		||||
        if (state -> count == 1 || keymap_config.no_gui) {
 | 
			
		||||
            register_code(KC_LSFT);
 | 
			
		||||
        } else {
 | 
			
		||||
            register_code(KC_CAPS);
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        register_code(KC_LSFT);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void dance_LSFT_reset(qk_tap_dance_state_t * state, void * user_data) {
 | 
			
		||||
    if (state -> count == 1 || keymap_config.no_gui) {
 | 
			
		||||
        unregister_code(KC_LSFT);
 | 
			
		||||
    } else {
 | 
			
		||||
        unregister_code(KC_CAPS);
 | 
			
		||||
        unregister_code(KC_LSFT);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Tap Dance definitions
 | 
			
		||||
qk_tap_dance_action_t tap_dance_actions[] = {
 | 
			
		||||
    // Tap once for shift, twice for Caps Lock
 | 
			
		||||
    [TD_LSFT_CAPS_WIN] = ACTION_TAP_DANCE_FN_ADVANCED(dance_LSFT_each_tap, NULL, dance_LSFT_reset)
 | 
			
		||||
};
 | 
			
		||||
#include "autocorrect/autocorrection.h"
 | 
			
		||||
 | 
			
		||||
// RGB NIGHT MODE
 | 
			
		||||
#ifdef RGB_MATRIX_ENABLE
 | 
			
		||||
| 
						 | 
				
			
			@ -129,6 +103,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) {
 | 
			
		|||
    if (!process_record_keymap(keycode, record)) { return false; }
 | 
			
		||||
    if (!process_capsnum(keycode, record)) { return false; }
 | 
			
		||||
    if (!process_esc_to_base(keycode, record)) { return false; }
 | 
			
		||||
    if (!process_lsft_for_caps(keycode, record)) { return false; }
 | 
			
		||||
    if (!process_autocorrection(keycode, record)) { return false; }
 | 
			
		||||
 | 
			
		||||
    // Key macros ...
 | 
			
		||||
    switch (keycode) {
 | 
			
		||||
| 
						 | 
				
			
			@ -136,66 +112,77 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) {
 | 
			
		|||
        // User configuration toggles
 | 
			
		||||
    case PRNCONF:  // Print verbose status of all user_config toggles (open a text editor before engaging!!)
 | 
			
		||||
        if (record->event.pressed) {
 | 
			
		||||
            //send_string("Left bracket with alt numcodes "SS_LALT(SS_TAP(X_KP_0) SS_TAP(X_KP_0) SS_TAP(X_KP_9) SS_TAP(X_KP_1))"\n");
 | 
			
		||||
            send_string("\n\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x3C\x3C\x3C\x3C\x3C\x3C\x3C\x3C\x3C");
 | 
			
		||||
            send_string(" gourdo1\x27s GMMK Pro User Settings ");
 | 
			
		||||
            send_string("\x3E\x3E\x3E\x3E\x3E\x3E\x3E\x3E\x3E\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\x2D\n");
 | 
			
		||||
            send_string("Hold \x5B \bFn\x5D and the number corresponding to a setting below to toggle.\n");
 | 
			
		||||
            send_string("Re-print this screen with \x5B \bFn\x5D \x5B`\x5D to see your changes reflected.\n");
 | 
			
		||||
            send_string("Config also visible as RGB under number keys by holding \x5B \bFn\x5D.\n");
 | 
			
		||||
            send_string("\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d");
 | 
			
		||||
            send_string("\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d");
 | 
			
		||||
            send_string("\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d");
 | 
			
		||||
            send_string("\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\n");
 | 
			
		||||
            send_string("\n"SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)"#########");
 | 
			
		||||
            send_string(" gourdo1" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_3)SS_TAP(X_KP_9))"s GMMK Pro User Settings ");
 | 
			
		||||
            send_string("#########"SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)"\n");
 | 
			
		||||
            send_string("Hold "SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"Fn"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))" and the number corresponding to a setting below to toggle.\n");
 | 
			
		||||
            send_string("Re"SS_TAP(X_KP_MINUS)"print this screen with "SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"Fn" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3)) SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"`" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))" to see your changes reflected.\n");
 | 
			
		||||
            send_string("Config also visible as RGB under number keys by holding "SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"Fn" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))".\n");
 | 
			
		||||
            send_string(SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS));
 | 
			
		||||
            send_string(SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS));
 | 
			
		||||
            send_string(SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS));
 | 
			
		||||
            send_string(SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)SS_TAP(X_KP_MINUS)"\n");
 | 
			
		||||
            send_string("1. CapsLock RGB highlight alpha keys................ ");
 | 
			
		||||
            if (user_config.rgb_hilite_caps) {
 | 
			
		||||
                send_string("\x5BON\x5D\n");
 | 
			
		||||
                send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"ON" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
 | 
			
		||||
            } else {
 | 
			
		||||
                send_string("\x5BOFF\x5D\n");
 | 
			
		||||
                send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"OFF" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
 | 
			
		||||
            }
 | 
			
		||||
            send_string("2. Numpad RGB highlight layer keys.................. ");
 | 
			
		||||
            if (user_config.rgb_hilite_numpad) {
 | 
			
		||||
                send_string("\x5BON\x5D\n");
 | 
			
		||||
                send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"ON" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
 | 
			
		||||
            } else {
 | 
			
		||||
                send_string("\x5BOFF\x5D\n");
 | 
			
		||||
                send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"OFF" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
 | 
			
		||||
            }
 | 
			
		||||
            send_string("3. Double tap ESC to revert to BASE layer........... ");
 | 
			
		||||
            if (user_config.esc_double_tap_to_baselyr) {
 | 
			
		||||
                send_string("\x5BON\x5D\n");
 | 
			
		||||
                send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"ON" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
 | 
			
		||||
            } else {
 | 
			
		||||
                send_string("\x5BOFF\x5D\n");
 | 
			
		||||
                send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"OFF" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
 | 
			
		||||
            }
 | 
			
		||||
            send_string("4. DEL \x26 HOME key locations......................... ");
 | 
			
		||||
            send_string("4. DEL "SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_3)SS_TAP(X_KP_8))" HOME key locations......................... ");
 | 
			
		||||
            if (user_config.del_right_home_top) {
 | 
			
		||||
                send_string("\x5BHOME on F13\x3B DEL right of BKSPC\x5D\n");
 | 
			
		||||
                send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"HOME on F13"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_5)SS_TAP(X_KP_9))" DEL right of BKSPC" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
 | 
			
		||||
            } else {
 | 
			
		||||
                send_string("\x5B \bDEL on F13\x3B HOME right of BKSPC\x5D\n");
 | 
			
		||||
                send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"DEL on F13"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_5)SS_TAP(X_KP_9))" HOME right of BKSPC" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
 | 
			
		||||
            }
 | 
			
		||||
            send_string("5. Numpad on CapsLock\x3B double tap LSHIFT for Caps... ");
 | 
			
		||||
            send_string("5. Numpad on CapsLock"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_5)SS_TAP(X_KP_9))" double tap LSHIFT for Caps... ");
 | 
			
		||||
            if (user_config.double_tap_shift_for_capslock) {
 | 
			
		||||
                send_string("\x5BON\x5D\n");
 | 
			
		||||
                send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"ON" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
 | 
			
		||||
            } else {
 | 
			
		||||
                send_string("\x5BOFF\x5D\n");
 | 
			
		||||
                send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"OFF" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
 | 
			
		||||
            }
 | 
			
		||||
            send_string("6. Encoder button function.......................... ");
 | 
			
		||||
            if (user_config.encoder_press_mute_or_media) {
 | 
			
		||||
                send_string("\x5BMUTE\x5D\n");
 | 
			
		||||
                send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"MUTE" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
 | 
			
		||||
            } else {
 | 
			
		||||
                send_string("\x5BMEDIA PLAY\x2FPAUSE\x5D\n");
 | 
			
		||||
                send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"MEDIA PLAY"SS_TAP(X_KP_SLASH) "PAUSE" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
 | 
			
		||||
            }
 | 
			
		||||
            send_string("7. Insert function accessed with.................... ");
 | 
			
		||||
            if (user_config.ins_on_shft_bkspc_or_del) {
 | 
			
		||||
                send_string("\x5BSHIFT\x2D \bBKSPC\x5D\n");
 | 
			
		||||
                send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"SHIFT"SS_TAP(X_KP_MINUS)"BKSPC"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
 | 
			
		||||
            } else {
 | 
			
		||||
                send_string("\x5BSHIFT\x2D \bDEL\x5D\n");
 | 
			
		||||
                send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"SHIFT"SS_TAP(X_KP_MINUS)"DEL"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
 | 
			
		||||
            }
 | 
			
		||||
            send_string("8. Force SHIFT \x26 CTRL\x2DSPACE to function like SPACE.. ");
 | 
			
		||||
            send_string("8. Force SHIFT "SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_3)SS_TAP(X_KP_8))" CTRL"SS_TAP(X_KP_MINUS)"SPACE to function like SPACE.. ");
 | 
			
		||||
            if (user_config.disable_space_mods) {
 | 
			
		||||
                send_string("\x5BON\x5D\n");
 | 
			
		||||
                send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"ON"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
 | 
			
		||||
            } else {
 | 
			
		||||
                send_string("\x5BOFF\x5D\n");
 | 
			
		||||
                send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"OFF"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
 | 
			
		||||
            }
 | 
			
		||||
            send_string("\nThe latest firmware updates are always here\x3a https\x3a\x2F\x2Fgithub.com\x2Fgourdo1\x2Fgmmkpro\x2Dmedia\n");
 | 
			
		||||
            send_string("9. AutoCorrect...................................... ");
 | 
			
		||||
            if (user_config.autocorrect) {
 | 
			
		||||
                send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"ON"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
 | 
			
		||||
            } else {
 | 
			
		||||
                send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"OFF"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
 | 
			
		||||
            }
 | 
			
		||||
            send_string("0. CapsLock highlights extended alphas "SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_4)SS_TAP(X_KP_0))"ISO"SS_TAP(X_KP_MINUS)"only"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_4)SS_TAP(X_KP_1))"... ");
 | 
			
		||||
            if (user_config.rgb_english_caps) {
 | 
			
		||||
                send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"OFF"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
 | 
			
		||||
            } else {
 | 
			
		||||
                send_string(SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_1))"ON"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_9)SS_TAP(X_KP_3))"\n");
 | 
			
		||||
            }
 | 
			
		||||
            send_string("\nThe latest firmware updates are always here"SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_5)SS_TAP(X_KP_8))" https" SS_LALT(SS_TAP(X_KP_0)SS_TAP(X_KP_0)SS_TAP(X_KP_5)SS_TAP(X_KP_8))SS_TAP(X_KP_SLASH)SS_TAP(X_KP_SLASH) "github.com"SS_TAP(X_KP_SLASH) "gourdo1"SS_TAP(X_KP_SLASH)"gmmkpro"SS_TAP(X_KP_MINUS)"media\n");
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -247,6 +234,18 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) {
 | 
			
		|||
            eeconfig_update_user(user_config.raw); // Writes the new status to EEPROM
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    case TG_AUTOCR:  // Toggle AutoCorrect
 | 
			
		||||
        if (record->event.pressed) {
 | 
			
		||||
            user_config.autocorrect ^= 1; // Toggles the status
 | 
			
		||||
            eeconfig_update_user(user_config.raw); // Writes the new status to EEPROM
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    case TG_ENGCAP:  // Toggle highlighting Non-English letters during CAPSLOCK
 | 
			
		||||
        if (record->event.pressed) {
 | 
			
		||||
            user_config.rgb_english_caps ^= 1; // Toggles the status
 | 
			
		||||
            eeconfig_update_user(user_config.raw); // Writes the new status to EEPROM
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
        //return false;
 | 
			
		||||
 | 
			
		||||
        // Key to the left of encoder function (default HOME)
 | 
			
		||||
| 
						 | 
				
			
			@ -417,7 +416,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t * record) {
 | 
			
		|||
    case KC_00:
 | 
			
		||||
        if (record -> event.pressed) {
 | 
			
		||||
            // when keycode KC_00 is pressed
 | 
			
		||||
            send_string("00");
 | 
			
		||||
            send_string(SS_TAP(X_KP_0)SS_TAP(X_KP_0));
 | 
			
		||||
        } else unregister_code16(keycode);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -572,7 +571,7 @@ bool caps_word_press_user(uint16_t keycode) {
 | 
			
		|||
        case KC_DQT:
 | 
			
		||||
        case KC_COLN:
 | 
			
		||||
        case KC_RSFT:
 | 
			
		||||
        case LSFTCAPSWIN:
 | 
			
		||||
        case KC_LSFT:
 | 
			
		||||
            add_weak_mods(MOD_BIT(KC_LSFT));  // Apply shift to next key.
 | 
			
		||||
            return true;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -625,6 +624,8 @@ void eeconfig_init_user(void) {
 | 
			
		|||
    user_config.esc_double_tap_to_baselyr     = true;
 | 
			
		||||
    user_config.ins_on_shft_bkspc_or_del      = true;
 | 
			
		||||
    user_config.disable_space_mods            = true;
 | 
			
		||||
    user_config.autocorrect                   = true;
 | 
			
		||||
    user_config.rgb_english_caps              = true;
 | 
			
		||||
 | 
			
		||||
    eeconfig_update_user(user_config.raw);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -57,12 +57,14 @@ enum custom_user_keycodes {
 | 
			
		|||
 | 
			
		||||
        TG_CAPS,       // Toggles RGB highlighting of alphas during capslock
 | 
			
		||||
        TG_PAD,        // Toggles RGB highlighting of keys on numpad+mousekeys layer
 | 
			
		||||
        TG_TDCAP,      // Toggles double tap shift (tapdance) for CapsLock
 | 
			
		||||
        TG_TDCAP,      // Toggles double tap shift for CapsLock
 | 
			
		||||
        TG_DEL,        // Swaps DEL and HOME key locations
 | 
			
		||||
        TG_ENC,        // Toggle Encoder functionality
 | 
			
		||||
        TG_ESC,        // Toggle ESC tapdance for _BASE layer
 | 
			
		||||
        TG_ENC,        // Toggle Encoder button functionality
 | 
			
		||||
        TG_ESC,        // Toggle ESC double tap for _BASE layer
 | 
			
		||||
        TG_INS,        // Toggle location of INS
 | 
			
		||||
        TG_SPCMOD,     // Toggle disabling of modded-SPACE functions
 | 
			
		||||
        TG_AUTOCR,     // Toggle AutoCorrect
 | 
			
		||||
        TG_ENGCAP,     // Toggle highlighting Non-English letters during CAPSLOCK on ISO boards
 | 
			
		||||
 | 
			
		||||
        YAHOO,         // yahoo.com
 | 
			
		||||
        OUTLOOK,       // outlook.com
 | 
			
		||||
| 
						 | 
				
			
			@ -82,12 +84,6 @@ enum custom_user_keycodes {
 | 
			
		|||
        NEW_SAFE_RANGE // New safe range for keymap level custom keycodes
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Tap Dance Definitions
 | 
			
		||||
enum custom_tapdance {
 | 
			
		||||
    TD_LSFT_CAPS_WIN,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Set up boolean variables to track user customizable configuration options
 | 
			
		||||
typedef union {
 | 
			
		||||
  uint32_t raw;
 | 
			
		||||
| 
						 | 
				
			
			@ -100,12 +96,14 @@ typedef union {
 | 
			
		|||
    bool     encoder_press_mute_or_media :1;
 | 
			
		||||
    bool     ins_on_shft_bkspc_or_del :1;
 | 
			
		||||
    bool     disable_space_mods :1;
 | 
			
		||||
    bool     autocorrect :1;
 | 
			
		||||
    bool     rgb_english_caps :1;
 | 
			
		||||
  };
 | 
			
		||||
} user_config_t;
 | 
			
		||||
 | 
			
		||||
user_config_t user_config;
 | 
			
		||||
 | 
			
		||||
#define LSFTCAPSWIN TD(TD_LSFT_CAPS_WIN)
 | 
			
		||||
//#define LSFTCAPSWIN TD(TD_LSFT_CAPS_WIN)
 | 
			
		||||
 | 
			
		||||
// ENCODER ACTIONS
 | 
			
		||||
#ifdef ENCODER_ENABLE
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,6 @@
 | 
			
		|||
SRC += gourdo1.c
 | 
			
		||||
SRC += autocorrect/autocorrection.c
 | 
			
		||||
 | 
			
		||||
ifdef ENCODER_ENABLE
 | 
			
		||||
	# include encoder related code when enabled
 | 
			
		||||
	ifeq ($(strip $(ENCODER_DEFAULTACTIONS_ENABLE)), yes)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue