   'ArrowLeft': 'left',
   'ArrowRight': 'right'
 }
+MATCH_TYPES = {
+  EXACT: 'exact'
+  KEYDOWN_EXACT: 'keydownExact'
+  PARTIAL: 'partial'
+}
 
 isASCIICharacter = (character) ->
   character? and character.length is 1 and character.charCodeAt(0) <= 127

{calculateSpecificity} = require 'clear-cut'
KeyboardLayout = require 'keyboard-layout'

Modifiers = new Set(['ctrl', 'alt', 'shift', 'cmd'])
EndsInModifierRegex = /(ctrl|alt|shift|cmd)$/
WhitespaceRegex = /\s+/
ExactMatch = 'exact'
KeydownExactMatch = 'keydownExact'
PartialMatch = 'partial'
NonCharacterKeyNamesByDOM3Key = {
  'Control': 'ctrl',
  'Meta': 'cmd',
  'ArrowDown': 'down',

  return false if userKeystrokeIndex < userKeystrokes.length - 1

  if isPartialMatch and bindingRemainderContainsOnlyKeyups
    MATCH_TYPES.KEYDOWN_EXACT
  else if isPartialMatch
    MATCH_TYPES.PARTIAL
  else
    MATCH_TYPES.EXACT

normalizeKeystroke = (keystroke) ->
  if isKeyup = keystroke.startsWith('^')
