From 8e8dabbe6c60d90bce59274d271eacbec154f154 Mon Sep 17 00:00:00 2001 From: Kenneth Shaw Date: Thu, 2 Mar 2017 10:24:35 +0700 Subject: [PATCH] Fixing remaining gofmt/misspell issues for goreportcard --- cdp/debugger/debugger.go | 4 +- cdp/dom/events.go | 4 +- cdp/emulation/emulation.go | 8 +- cdp/heapprofiler/events.go | 2 +- cdp/io/io.go | 4 +- cmd/chromedp-gen/build.sh | 2 + cmd/chromedp-gen/fixup/fixup.go | 14 +- cmd/chromedp-gen/internal/types.go | 1 + cmd/chromedp-gen/internal/util.go | 13 +- cmd/chromedp-gen/main.go | 33 ++ cmd/chromedp-gen/templates/file.qtpl.go | 2 +- cmd/chromedp-gen/templates/util.go | 2 + contrib/meta.sh | 2 + kb/gen.go | 12 +- kb/keys.go | 456 ++++++++++++------------ 15 files changed, 308 insertions(+), 251 deletions(-) diff --git a/cdp/debugger/debugger.go b/cdp/debugger/debugger.go index 9572248..c32e3f1 100644 --- a/cdp/debugger/debugger.go +++ b/cdp/debugger/debugger.go @@ -243,7 +243,7 @@ func (p *RemoveBreakpointParams) Do(ctxt context.Context, h cdp.Handler) (err er // scriptId in start and end range locations should be the same. type GetPossibleBreakpointsParams struct { Start *Location `json:"start"` // Start of range to search possible breakpoint locations in. - End *Location `json:"end,omitempty"` // End of range to search possible breakpoint locations in (excluding). When not specifed, end of scripts is used as end of range. + End *Location `json:"end,omitempty"` // End of range to search possible breakpoint locations in (excluding). When not specified, end of scripts is used as end of range. RestrictToFunction bool `json:"restrictToFunction,omitempty"` // Only consider locations which are in the same (non-nested) function as start. } @@ -259,7 +259,7 @@ func GetPossibleBreakpoints(start *Location) *GetPossibleBreakpointsParams { } // WithEnd end of range to search possible breakpoint locations in -// (excluding). When not specifed, end of scripts is used as end of range. +// (excluding). When not specified, end of scripts is used as end of range. func (p GetPossibleBreakpointsParams) WithEnd(end *Location) *GetPossibleBreakpointsParams { p.End = end return &p diff --git a/cdp/dom/events.go b/cdp/dom/events.go index 6b847d4..ca886ba 100644 --- a/cdp/dom/events.go +++ b/cdp/dom/events.go @@ -95,9 +95,9 @@ type EventPseudoElementRemoved struct { PseudoElementID cdp.NodeID `json:"pseudoElementId,omitempty"` // The removed pseudo element id. } -// EventDistributedNodesUpdated called when distrubution is changed. +// EventDistributedNodesUpdated called when distribution is changed. type EventDistributedNodesUpdated struct { - InsertionPointID cdp.NodeID `json:"insertionPointId,omitempty"` // Insertion point where distrubuted nodes were updated. + InsertionPointID cdp.NodeID `json:"insertionPointId,omitempty"` // Insertion point where distributed nodes were updated. DistributedNodes []*cdp.BackendNode `json:"distributedNodes,omitempty"` // Distributed nodes for given insertion point. } diff --git a/cdp/emulation/emulation.go b/cdp/emulation/emulation.go index 250022d..1acbf9e 100644 --- a/cdp/emulation/emulation.go +++ b/cdp/emulation/emulation.go @@ -100,10 +100,10 @@ func (p *SetDeviceMetricsOverrideParams) Do(ctxt context.Context, h cdp.Handler) return h.Execute(ctxt, cdp.CommandEmulationSetDeviceMetricsOverride, p, nil) } -// ClearDeviceMetricsOverrideParams clears the overriden device metrics. +// ClearDeviceMetricsOverrideParams clears the overridden device metrics. type ClearDeviceMetricsOverrideParams struct{} -// ClearDeviceMetricsOverride clears the overriden device metrics. +// ClearDeviceMetricsOverride clears the overridden device metrics. func ClearDeviceMetricsOverride() *ClearDeviceMetricsOverrideParams { return &ClearDeviceMetricsOverrideParams{} } @@ -289,11 +289,11 @@ func (p *SetGeolocationOverrideParams) Do(ctxt context.Context, h cdp.Handler) ( return h.Execute(ctxt, cdp.CommandEmulationSetGeolocationOverride, p, nil) } -// ClearGeolocationOverrideParams clears the overriden Geolocation Position +// ClearGeolocationOverrideParams clears the overridden Geolocation Position // and Error. type ClearGeolocationOverrideParams struct{} -// ClearGeolocationOverride clears the overriden Geolocation Position and +// ClearGeolocationOverride clears the overridden Geolocation Position and // Error. func ClearGeolocationOverride() *ClearGeolocationOverrideParams { return &ClearGeolocationOverrideParams{} diff --git a/cdp/heapprofiler/events.go b/cdp/heapprofiler/events.go index bde2f43..4aadf4b 100644 --- a/cdp/heapprofiler/events.go +++ b/cdp/heapprofiler/events.go @@ -22,7 +22,7 @@ type EventReportHeapSnapshotProgress struct { } // EventLastSeenObjectID if heap objects tracking has been started then -// backend regulary sends a current value for last seen object id and +// backend regularly sends a current value for last seen object id and // corresponding timestamp. If the were changes in the heap since last event // then one or more heapStatsUpdate events will be sent before a new // lastSeenObjectId event. diff --git a/cdp/io/io.go b/cdp/io/io.go index 0efc3d8..0939340 100644 --- a/cdp/io/io.go +++ b/cdp/io/io.go @@ -48,7 +48,7 @@ func (p ReadParams) WithSize(size int64) *ReadParams { // ReadReturns return values. type ReadReturns struct { Data string `json:"data,omitempty"` // Data that were read. - EOF bool `json:"eof,omitempty"` // Set if the end-of-file condition occured while reading. + EOF bool `json:"eof,omitempty"` // Set if the end-of-file condition occurred while reading. } // Do executes IO.read against the provided context and @@ -56,7 +56,7 @@ type ReadReturns struct { // // returns: // data - Data that were read. -// eof - Set if the end-of-file condition occured while reading. +// eof - Set if the end-of-file condition occurred while reading. func (p *ReadParams) Do(ctxt context.Context, h cdp.Handler) (data string, eof bool, err error) { // execute var res ReadReturns diff --git a/cmd/chromedp-gen/build.sh b/cmd/chromedp-gen/build.sh index 398c1f6..eb81b04 100755 --- a/cmd/chromedp-gen/build.sh +++ b/cmd/chromedp-gen/build.sh @@ -3,6 +3,8 @@ set -ve go generate +gofmt -w -s templates/*.go + go build time ./chromedp-gen $@ diff --git a/cmd/chromedp-gen/fixup/fixup.go b/cmd/chromedp-gen/fixup/fixup.go index 51a7910..26bc571 100644 --- a/cmd/chromedp-gen/fixup/fixup.go +++ b/cmd/chromedp-gen/fixup/fixup.go @@ -103,12 +103,12 @@ func FixDomains(domains []*internal.Domain) { Type: internal.TypeObject, Description: "Message error type.", Properties: []*internal.Type{ - &internal.Type{ + { Name: "code", Type: internal.TypeInteger, Description: "Error code.", }, - &internal.Type{ + { Name: "message", Type: internal.TypeString, Description: "Error message.", @@ -123,27 +123,27 @@ func FixDomains(domains []*internal.Domain) { Type: internal.TypeObject, Description: "Chrome Debugging Protocol message sent to/read over websocket connection.", Properties: []*internal.Type{ - &internal.Type{ + { Name: "id", Type: internal.TypeInteger, Description: "Unique message identifier.", }, - &internal.Type{ + { Name: "method", Ref: "Inspector.MethodType", Description: "Event or command type.", }, - &internal.Type{ + { Name: "params", Type: internal.TypeAny, Description: "Event or command parameters.", }, - &internal.Type{ + { Name: "result", Type: internal.TypeAny, Description: "Command return values.", }, - &internal.Type{ + { Name: "error", Ref: "MessageError", Description: "Error message.", diff --git a/cmd/chromedp-gen/internal/types.go b/cmd/chromedp-gen/internal/types.go index d3e74b5..14e4a40 100644 --- a/cmd/chromedp-gen/internal/types.go +++ b/cmd/chromedp-gen/internal/types.go @@ -213,6 +213,7 @@ func (t Type) IDorName() string { func (t Type) String() string { desc := t.GetDescription() if desc != "" { + desc, _ = MisspellReplacer.Replace(desc) desc = " - " + desc } diff --git a/cmd/chromedp-gen/internal/util.go b/cmd/chromedp-gen/internal/util.go index f680c48..11ba1bb 100644 --- a/cmd/chromedp-gen/internal/util.go +++ b/cmd/chromedp-gen/internal/util.go @@ -5,6 +5,7 @@ import ( "regexp" "strings" + "github.com/client9/misspell" "github.com/knq/snaker" ) @@ -18,6 +19,14 @@ const ( Base64EncodedDescriptionPrefix = "Base64-encoded" ) +// MisspellReplacer is the misspelling replacer +var MisspellReplacer *misspell.Replacer + +func init() { + MisspellReplacer = misspell.New() + MisspellReplacer.Compile() +} + // ForceCamel forces camel case specific to go. func ForceCamel(s string) string { if s == "" { @@ -114,7 +123,9 @@ func structDef(types []*Type, d *Domain, domains []*Domain, noExposeOverride, om // add comment if v.Type != TypeObject && v.Description != "" { - s += " // " + CodeRE.ReplaceAllString(v.Description, "") + comment := CodeRE.ReplaceAllString(v.Description, "") + comment, _ = MisspellReplacer.Replace(comment) + s += " // " + comment } } if len(types) > 0 { diff --git a/cmd/chromedp-gen/main.go b/cmd/chromedp-gen/main.go index 9cfb0bd..4e0f2f3 100644 --- a/cmd/chromedp-gen/main.go +++ b/cmd/chromedp-gen/main.go @@ -111,6 +111,13 @@ func main() { os.Exit(1) } + // gofmt + err = gofmt(files) + if err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) + os.Exit(1) + } + log.Printf("done.") } @@ -249,6 +256,32 @@ func easyjson(pkgs []string) error { return nil } +// gofmt formats all the output file buffers on disk using gofmt. +func gofmt(fileBuffers map[string]*bytes.Buffer) error { + log.Printf("running gofmt") + + var keys []string + for k := range fileBuffers { + keys = append(keys, k) + } + sort.Strings(keys) + + var wg sync.WaitGroup + for _, n := range keys { + wg.Add(1) + go func(wg *sync.WaitGroup, n string) { + defer wg.Done() + buf, err := exec.Command("gofmt", "-w", "-s", out()+"/"+n).CombinedOutput() + if err != nil { + log.Fatalf("error: could not format %s, got:\n%s", n, string(buf)) + } + }(&wg, n) + } + wg.Wait() + + return nil +} + // out returns the output path of the passed package flag. func out() string { return os.Getenv("GOPATH") + "/src/" + *internal.FlagPkg diff --git a/cmd/chromedp-gen/templates/file.qtpl.go b/cmd/chromedp-gen/templates/file.qtpl.go index 634c0cd..8529940 100644 --- a/cmd/chromedp-gen/templates/file.qtpl.go +++ b/cmd/chromedp-gen/templates/file.qtpl.go @@ -107,7 +107,7 @@ func FileHeader(pkgName string, d *internal.Domain) string { func StreamFileImportTemplate(qw422016 *qt422016.Writer, m map[string]string) { //line templates/file.qtpl:22 var keys []string - for k, _ := range m { + for k := range m { keys = append(keys, k) } sort.Strings(keys) diff --git a/cmd/chromedp-gen/templates/util.go b/cmd/chromedp-gen/templates/util.go index a0a0330..0c85412 100644 --- a/cmd/chromedp-gen/templates/util.go +++ b/cmd/chromedp-gen/templates/util.go @@ -28,6 +28,8 @@ func formatComment(s, chop, newstr string) string { } s += "." + s, _ = internal.MisspellReplacer.Replace(s) + return wrap(s, commentWidth-len(commentPrefix), commentPrefix) } diff --git a/contrib/meta.sh b/contrib/meta.sh index 9d1f993..772eb33 100755 --- a/contrib/meta.sh +++ b/contrib/meta.sh @@ -6,6 +6,8 @@ pushd $SRC &> /dev/null gometalinter \ --disable=aligncheck \ + --enable=misspell \ + --enable=gofmt \ --deadline=100s \ --cyclo-over=25 \ --sort=path \ diff --git a/kb/gen.go b/kb/gen.go index 2ff6c0d..7a6679b 100644 --- a/kb/gen.go +++ b/kb/gen.go @@ -68,9 +68,9 @@ func main() { // special characters keys := map[rune]kb.Key{ - '\b': kb.Key{"Backspace", "Backspace", "", "", int64('\b'), int64('\b'), false, false}, - '\t': kb.Key{"Tab", "Tab", "", "", int64('\t'), int64('\t'), false, false}, - '\r': kb.Key{"Enter", "Enter", "\r", "\r", int64('\r'), int64('\r'), false, true}, + '\b': {"Backspace", "Backspace", "", "", int64('\b'), int64('\b'), false, false}, + '\t': {"Tab", "Tab", "", "", int64('\t'), int64('\t'), false, false}, + '\r': {"Enter", "Enter", "\r", "\r", int64('\r'), int64('\r'), false, true}, } // load keys @@ -100,6 +100,12 @@ func main() { if err != nil { log.Fatal(err) } + + // format + err = exec.Command("gofmt", "-s", "-w", *flagOut).Run() + if err != nil { + log.Fatal(err) + } } // loadKeys loads the dom key definitions from the chromium source tree. diff --git a/kb/keys.go b/kb/keys.go index 133a67e..96645c0 100644 --- a/kb/keys.go +++ b/kb/keys.go @@ -100,12 +100,12 @@ const ( AudioVolumeDown = "\u0a0f" AudioVolumeUp = "\u0a10" AudioVolumeMute = "\u0a11" - LaunchCalculator = "\u0b01" + LaunchApplication2 = "\u0b01" LaunchCalendar = "\u0b02" LaunchMail = "\u0b03" LaunchMediaPlayer = "\u0b04" LaunchMusicPlayer = "\u0b05" - LaunchMyComputer = "\u0b06" + LaunchApplication1 = "\u0b06" LaunchScreenSaver = "\u0b07" LaunchSpreadsheet = "\u0b08" LaunchWebBrowser = "\u0b09" @@ -138,230 +138,230 @@ const ( // Keys is the map of unicode characters to their DOM key data. var Keys = map[rune]*Key{ - '\b': &Key{"Backspace", "Backspace", "", "", 8, 8, false, false}, - '\t': &Key{"Tab", "Tab", "", "", 9, 9, false, false}, - '\r': &Key{"Enter", "Enter", "\r", "\r", 13, 13, false, true}, - '\u001b': &Key{"Escape", "Escape", "", "", 27, 27, false, false}, - ' ': &Key{"Space", " ", " ", " ", 32, 32, false, true}, - '!': &Key{"Digit1", "!", "!", "1", 49, 49, true, true}, - '"': &Key{"Quote", "\"", "\"", "'", 222, 222, true, true}, - '#': &Key{"Digit3", "#", "#", "3", 51, 51, true, true}, - '$': &Key{"Digit4", "$", "$", "4", 52, 52, true, true}, - '%': &Key{"Digit5", "%", "%", "5", 53, 53, true, true}, - '&': &Key{"Digit7", "&", "&", "7", 55, 55, true, true}, - '\'': &Key{"Quote", "'", "'", "'", 222, 222, false, true}, - '(': &Key{"Digit9", "(", "(", "9", 57, 57, true, true}, - ')': &Key{"Digit0", ")", ")", "0", 48, 48, true, true}, - '*': &Key{"Digit8", "*", "*", "8", 56, 56, true, true}, - '+': &Key{"Equal", "+", "+", "=", 187, 187, true, true}, - ',': &Key{"Comma", ",", ",", ",", 188, 188, false, true}, - '-': &Key{"Minus", "-", "-", "-", 189, 189, false, true}, - '.': &Key{"Period", ".", ".", ".", 190, 190, false, true}, - '/': &Key{"Slash", "/", "/", "/", 191, 191, false, true}, - '0': &Key{"Digit0", "0", "0", "0", 48, 48, false, true}, - '1': &Key{"Digit1", "1", "1", "1", 49, 49, false, true}, - '2': &Key{"Digit2", "2", "2", "2", 50, 50, false, true}, - '3': &Key{"Digit3", "3", "3", "3", 51, 51, false, true}, - '4': &Key{"Digit4", "4", "4", "4", 52, 52, false, true}, - '5': &Key{"Digit5", "5", "5", "5", 53, 53, false, true}, - '6': &Key{"Digit6", "6", "6", "6", 54, 54, false, true}, - '7': &Key{"Digit7", "7", "7", "7", 55, 55, false, true}, - '8': &Key{"Digit8", "8", "8", "8", 56, 56, false, true}, - '9': &Key{"Digit9", "9", "9", "9", 57, 57, false, true}, - ':': &Key{"Semicolon", ":", ":", ";", 186, 186, true, true}, - ';': &Key{"Semicolon", ";", ";", ";", 186, 186, false, true}, - '<': &Key{"Comma", "<", "<", ",", 188, 188, true, true}, - '=': &Key{"Equal", "=", "=", "=", 187, 187, false, true}, - '>': &Key{"Period", ">", ">", ".", 190, 190, true, true}, - '?': &Key{"Slash", "?", "?", "/", 191, 191, true, true}, - '@': &Key{"Digit2", "@", "@", "2", 50, 50, true, true}, - 'A': &Key{"KeyA", "A", "A", "a", 65, 65, true, true}, - 'B': &Key{"KeyB", "B", "B", "b", 66, 66, true, true}, - 'C': &Key{"KeyC", "C", "C", "c", 67, 67, true, true}, - 'D': &Key{"KeyD", "D", "D", "d", 68, 68, true, true}, - 'E': &Key{"KeyE", "E", "E", "e", 69, 69, true, true}, - 'F': &Key{"KeyF", "F", "F", "f", 70, 70, true, true}, - 'G': &Key{"KeyG", "G", "G", "g", 71, 71, true, true}, - 'H': &Key{"KeyH", "H", "H", "h", 72, 72, true, true}, - 'I': &Key{"KeyI", "I", "I", "i", 73, 73, true, true}, - 'J': &Key{"KeyJ", "J", "J", "j", 74, 74, true, true}, - 'K': &Key{"KeyK", "K", "K", "k", 75, 75, true, true}, - 'L': &Key{"KeyL", "L", "L", "l", 76, 76, true, true}, - 'M': &Key{"KeyM", "M", "M", "m", 77, 77, true, true}, - 'N': &Key{"KeyN", "N", "N", "n", 78, 78, true, true}, - 'O': &Key{"KeyO", "O", "O", "o", 79, 79, true, true}, - 'P': &Key{"KeyP", "P", "P", "p", 80, 80, true, true}, - 'Q': &Key{"KeyQ", "Q", "Q", "q", 81, 81, true, true}, - 'R': &Key{"KeyR", "R", "R", "r", 82, 82, true, true}, - 'S': &Key{"KeyS", "S", "S", "s", 83, 83, true, true}, - 'T': &Key{"KeyT", "T", "T", "t", 84, 84, true, true}, - 'U': &Key{"KeyU", "U", "U", "u", 85, 85, true, true}, - 'V': &Key{"KeyV", "V", "V", "v", 86, 86, true, true}, - 'W': &Key{"KeyW", "W", "W", "w", 87, 87, true, true}, - 'X': &Key{"KeyX", "X", "X", "x", 88, 88, true, true}, - 'Y': &Key{"KeyY", "Y", "Y", "y", 89, 89, true, true}, - 'Z': &Key{"KeyZ", "Z", "Z", "z", 90, 90, true, true}, - '[': &Key{"BracketLeft", "[", "[", "[", 219, 219, false, true}, - '\\': &Key{"Backslash", "\\", "\\", "\\", 220, 220, false, true}, - ']': &Key{"BracketRight", "]", "]", "]", 221, 221, false, true}, - '^': &Key{"Digit6", "^", "^", "6", 54, 54, true, true}, - '_': &Key{"Minus", "_", "_", "-", 189, 189, true, true}, - '`': &Key{"Backquote", "`", "`", "`", 192, 192, false, true}, - 'a': &Key{"KeyA", "a", "a", "a", 65, 65, false, true}, - 'b': &Key{"KeyB", "b", "b", "b", 66, 66, false, true}, - 'c': &Key{"KeyC", "c", "c", "c", 67, 67, false, true}, - 'd': &Key{"KeyD", "d", "d", "d", 68, 68, false, true}, - 'e': &Key{"KeyE", "e", "e", "e", 69, 69, false, true}, - 'f': &Key{"KeyF", "f", "f", "f", 70, 70, false, true}, - 'g': &Key{"KeyG", "g", "g", "g", 71, 71, false, true}, - 'h': &Key{"KeyH", "h", "h", "h", 72, 72, false, true}, - 'i': &Key{"KeyI", "i", "i", "i", 73, 73, false, true}, - 'j': &Key{"KeyJ", "j", "j", "j", 74, 74, false, true}, - 'k': &Key{"KeyK", "k", "k", "k", 75, 75, false, true}, - 'l': &Key{"KeyL", "l", "l", "l", 76, 76, false, true}, - 'm': &Key{"KeyM", "m", "m", "m", 77, 77, false, true}, - 'n': &Key{"KeyN", "n", "n", "n", 78, 78, false, true}, - 'o': &Key{"KeyO", "o", "o", "o", 79, 79, false, true}, - 'p': &Key{"KeyP", "p", "p", "p", 80, 80, false, true}, - 'q': &Key{"KeyQ", "q", "q", "q", 81, 81, false, true}, - 'r': &Key{"KeyR", "r", "r", "r", 82, 82, false, true}, - 's': &Key{"KeyS", "s", "s", "s", 83, 83, false, true}, - 't': &Key{"KeyT", "t", "t", "t", 84, 84, false, true}, - 'u': &Key{"KeyU", "u", "u", "u", 85, 85, false, true}, - 'v': &Key{"KeyV", "v", "v", "v", 86, 86, false, true}, - 'w': &Key{"KeyW", "w", "w", "w", 87, 87, false, true}, - 'x': &Key{"KeyX", "x", "x", "x", 88, 88, false, true}, - 'y': &Key{"KeyY", "y", "y", "y", 89, 89, false, true}, - 'z': &Key{"KeyZ", "z", "z", "z", 90, 90, false, true}, - '{': &Key{"BracketLeft", "{", "{", "[", 219, 219, true, true}, - '|': &Key{"Backslash", "|", "|", "\\", 220, 220, true, true}, - '}': &Key{"BracketRight", "}", "}", "]", 221, 221, true, true}, - '~': &Key{"Backquote", "~", "~", "`", 192, 192, true, true}, - '\u007f': &Key{"Delete", "Delete", "", "", 46, 46, false, false}, - '¥': &Key{"IntlYen", "¥", "¥", "¥", 220, 220, false, true}, - '\u0102': &Key{"AltLeft", "Alt", "", "", 164, 164, false, false}, - '\u0104': &Key{"CapsLock", "CapsLock", "", "", 20, 20, false, false}, - '\u0105': &Key{"ControlLeft", "Control", "", "", 162, 162, false, false}, - '\u0106': &Key{"Fn", "Fn", "", "", 0, 0, false, false}, - '\u0107': &Key{"FnLock", "FnLock", "", "", 0, 0, false, false}, - '\u0108': &Key{"Hyper", "Hyper", "", "", 0, 0, false, false}, - '\u0109': &Key{"MetaLeft", "Meta", "", "", 91, 91, false, false}, - '\u010a': &Key{"NumLock", "NumLock", "", "", 144, 144, false, false}, - '\u010c': &Key{"ScrollLock", "ScrollLock", "", "", 145, 145, false, false}, - '\u010d': &Key{"ShiftLeft", "Shift", "", "", 160, 160, false, false}, - '\u010e': &Key{"Super", "Super", "", "", 0, 0, false, false}, - '\u0301': &Key{"ArrowDown", "ArrowDown", "", "", 40, 40, false, false}, - '\u0302': &Key{"ArrowLeft", "ArrowLeft", "", "", 37, 37, false, false}, - '\u0303': &Key{"ArrowRight", "ArrowRight", "", "", 39, 39, false, false}, - '\u0304': &Key{"ArrowUp", "ArrowUp", "", "", 38, 38, false, false}, - '\u0305': &Key{"End", "End", "", "", 35, 35, false, false}, - '\u0306': &Key{"Home", "Home", "", "", 36, 36, false, false}, - '\u0307': &Key{"PageDown", "PageDown", "", "", 34, 34, false, false}, - '\u0308': &Key{"PageUp", "PageUp", "", "", 33, 33, false, false}, - '\u0401': &Key{"NumpadClear", "Clear", "", "", 12, 12, false, false}, - '\u0402': &Key{"Copy", "Copy", "", "", 0, 0, false, false}, - '\u0404': &Key{"Cut", "Cut", "", "", 0, 0, false, false}, - '\u0407': &Key{"Insert", "Insert", "", "", 45, 45, false, false}, - '\u0408': &Key{"Paste", "Paste", "", "", 0, 0, false, false}, - '\u0409': &Key{"Redo", "Redo", "", "", 0, 0, false, false}, - '\u040a': &Key{"Undo", "Undo", "", "", 0, 0, false, false}, - '\u0502': &Key{"Again", "Again", "", "", 0, 0, false, false}, - '\u0504': &Key{"Abort", "Cancel", "", "", 0, 0, false, false}, - '\u0505': &Key{"ContextMenu", "ContextMenu", "", "", 93, 93, false, false}, - '\u0507': &Key{"Find", "Find", "", "", 0, 0, false, false}, - '\u0508': &Key{"Help", "Help", "", "", 47, 47, false, false}, - '\u0509': &Key{"Pause", "Pause", "", "", 19, 19, false, false}, - '\u050b': &Key{"Props", "Props", "", "", 0, 0, false, false}, - '\u050c': &Key{"Select", "Select", "", "", 41, 41, false, false}, - '\u050d': &Key{"ZoomIn", "ZoomIn", "", "", 0, 0, false, false}, - '\u050e': &Key{"ZoomOut", "ZoomOut", "", "", 0, 0, false, false}, - '\u0601': &Key{"BrightnessDown", "BrightnessDown", "", "", 216, 0, false, false}, - '\u0602': &Key{"BrightnessUp", "BrightnessUp", "", "", 217, 0, false, false}, - '\u0604': &Key{"Eject", "Eject", "", "", 0, 0, false, false}, - '\u0605': &Key{"LogOff", "LogOff", "", "", 0, 0, false, false}, - '\u0606': &Key{"Power", "Power", "", "", 152, 0, false, false}, - '\u0608': &Key{"PrintScreen", "PrintScreen", "", "", 44, 44, false, false}, - '\u060b': &Key{"WakeUp", "WakeUp", "", "", 0, 0, false, false}, - '\u0705': &Key{"Convert", "Convert", "", "", 28, 28, false, false}, - '\u070d': &Key{"NonConvert", "NonConvert", "", "", 29, 29, false, false}, - '\u0711': &Key{"Lang1", "HangulMode", "", "", 21, 21, false, false}, - '\u0712': &Key{"Lang2", "HanjaMode", "", "", 25, 25, false, false}, - '\u0716': &Key{"Lang4", "Hiragana", "", "", 0, 0, false, false}, - '\u0718': &Key{"KanaMode", "KanaMode", "", "", 21, 21, false, false}, - '\u071a': &Key{"Lang3", "Katakana", "", "", 0, 0, false, false}, - '\u071d': &Key{"Lang5", "ZenkakuHankaku", "", "", 0, 0, false, false}, - '\u0801': &Key{"F1", "F1", "", "", 112, 112, false, false}, - '\u0802': &Key{"F2", "F2", "", "", 113, 113, false, false}, - '\u0803': &Key{"F3", "F3", "", "", 114, 114, false, false}, - '\u0804': &Key{"F4", "F4", "", "", 115, 115, false, false}, - '\u0805': &Key{"F5", "F5", "", "", 116, 116, false, false}, - '\u0806': &Key{"F6", "F6", "", "", 117, 117, false, false}, - '\u0807': &Key{"F7", "F7", "", "", 118, 118, false, false}, - '\u0808': &Key{"F8", "F8", "", "", 119, 119, false, false}, - '\u0809': &Key{"F9", "F9", "", "", 120, 120, false, false}, - '\u080a': &Key{"F10", "F10", "", "", 121, 121, false, false}, - '\u080b': &Key{"F11", "F11", "", "", 122, 122, false, false}, - '\u080c': &Key{"F12", "F12", "", "", 123, 123, false, false}, - '\u080d': &Key{"F13", "F13", "", "", 124, 124, false, false}, - '\u080e': &Key{"F14", "F14", "", "", 125, 125, false, false}, - '\u080f': &Key{"F15", "F15", "", "", 126, 126, false, false}, - '\u0810': &Key{"F16", "F16", "", "", 127, 127, false, false}, - '\u0811': &Key{"F17", "F17", "", "", 128, 128, false, false}, - '\u0812': &Key{"F18", "F18", "", "", 129, 129, false, false}, - '\u0813': &Key{"F19", "F19", "", "", 130, 130, false, false}, - '\u0814': &Key{"F20", "F20", "", "", 131, 131, false, false}, - '\u0815': &Key{"F21", "F21", "", "", 132, 132, false, false}, - '\u0816': &Key{"F22", "F22", "", "", 133, 133, false, false}, - '\u0817': &Key{"F23", "F23", "", "", 134, 134, false, false}, - '\u0818': &Key{"F24", "F24", "", "", 135, 135, false, false}, - '\u0a01': &Key{"Close", "Close", "", "", 0, 0, false, false}, - '\u0a02': &Key{"MailForward", "MailForward", "", "", 0, 0, false, false}, - '\u0a03': &Key{"MailReply", "MailReply", "", "", 0, 0, false, false}, - '\u0a04': &Key{"MailSend", "MailSend", "", "", 0, 0, false, false}, - '\u0a05': &Key{"MediaPlayPause", "MediaPlayPause", "", "", 179, 179, false, false}, - '\u0a07': &Key{"MediaStop", "MediaStop", "", "", 178, 178, false, false}, - '\u0a08': &Key{"MediaTrackNext", "MediaTrackNext", "", "", 176, 176, false, false}, - '\u0a09': &Key{"MediaTrackPrevious", "MediaTrackPrevious", "", "", 177, 177, false, false}, - '\u0a0a': &Key{"New", "New", "", "", 0, 0, false, false}, - '\u0a0b': &Key{"Open", "Open", "", "", 43, 43, false, false}, - '\u0a0c': &Key{"Print", "Print", "", "", 0, 0, false, false}, - '\u0a0d': &Key{"Save", "Save", "", "", 0, 0, false, false}, - '\u0a0e': &Key{"SpellCheck", "SpellCheck", "", "", 0, 0, false, false}, - '\u0a0f': &Key{"AudioVolumeDown", "AudioVolumeDown", "", "", 174, 174, false, false}, - '\u0a10': &Key{"AudioVolumeUp", "AudioVolumeUp", "", "", 175, 175, false, false}, - '\u0a11': &Key{"AudioVolumeMute", "AudioVolumeMute", "", "", 173, 173, false, false}, - '\u0b01': &Key{"LaunchApp2", "LaunchCalculator", "", "", 183, 183, false, false}, - '\u0b02': &Key{"LaunchCalendar", "LaunchCalendar", "", "", 0, 0, false, false}, - '\u0b03': &Key{"LaunchMail", "LaunchMail", "", "", 180, 180, false, false}, - '\u0b04': &Key{"MediaSelect", "LaunchMediaPlayer", "", "", 181, 181, false, false}, - '\u0b05': &Key{"LaunchMusicPlayer", "LaunchMusicPlayer", "", "", 0, 0, false, false}, - '\u0b06': &Key{"LaunchApp1", "LaunchMyComputer", "", "", 182, 182, false, false}, - '\u0b07': &Key{"LaunchScreenSaver", "LaunchScreenSaver", "", "", 0, 0, false, false}, - '\u0b08': &Key{"LaunchSpreadsheet", "LaunchSpreadsheet", "", "", 0, 0, false, false}, - '\u0b09': &Key{"LaunchWebBrowser", "LaunchWebBrowser", "", "", 0, 0, false, false}, - '\u0b0c': &Key{"LaunchContacts", "LaunchContacts", "", "", 0, 0, false, false}, - '\u0b0d': &Key{"LaunchPhone", "LaunchPhone", "", "", 0, 0, false, false}, - '\u0c01': &Key{"BrowserBack", "BrowserBack", "", "", 166, 166, false, false}, - '\u0c02': &Key{"BrowserFavorites", "BrowserFavorites", "", "", 171, 171, false, false}, - '\u0c03': &Key{"BrowserForward", "BrowserForward", "", "", 167, 167, false, false}, - '\u0c04': &Key{"BrowserHome", "BrowserHome", "", "", 172, 172, false, false}, - '\u0c05': &Key{"BrowserRefresh", "BrowserRefresh", "", "", 168, 168, false, false}, - '\u0c06': &Key{"BrowserSearch", "BrowserSearch", "", "", 170, 170, false, false}, - '\u0c07': &Key{"BrowserStop", "BrowserStop", "", "", 169, 169, false, false}, - '\u0d0a': &Key{"ChannelDown", "ChannelDown", "", "", 0, 0, false, false}, - '\u0d0b': &Key{"ChannelUp", "ChannelUp", "", "", 0, 0, false, false}, - '\u0d12': &Key{"ClosedCaptionToggle", "ClosedCaptionToggle", "", "", 0, 0, false, false}, - '\u0d15': &Key{"Exit", "Exit", "", "", 0, 0, false, false}, - '\u0d22': &Key{"Guide", "Guide", "", "", 0, 0, false, false}, - '\u0d25': &Key{"Info", "Info", "", "", 0, 0, false, false}, - '\u0d2c': &Key{"MediaFastForward", "MediaFastForward", "", "", 0, 0, false, false}, - '\u0d2d': &Key{"MediaLast", "MediaLast", "", "", 0, 0, false, false}, - '\u0d2f': &Key{"MediaPlay", "MediaPlay", "", "", 0, 0, false, false}, - '\u0d30': &Key{"MediaRecord", "MediaRecord", "", "", 0, 0, false, false}, - '\u0d31': &Key{"MediaRewind", "MediaRewind", "", "", 0, 0, false, false}, - '\u0d43': &Key{"Settings", "Settings", "", "", 0, 0, false, false}, - '\u0d4e': &Key{"ZoomToggle", "ZoomToggle", "", "", 251, 251, false, false}, - '\u0e02': &Key{"AudioBassBoostToggle", "AudioBassBoostToggle", "", "", 0, 0, false, false}, - '\u0f02': &Key{"SpeechInputToggle", "SpeechInputToggle", "", "", 0, 0, false, false}, - '\u1001': &Key{"SelectTask", "AppSwitch", "", "", 0, 0, false, false}, + '\b': {"Backspace", "Backspace", "", "", 8, 8, false, false}, + '\t': {"Tab", "Tab", "", "", 9, 9, false, false}, + '\r': {"Enter", "Enter", "\r", "\r", 13, 13, false, true}, + '\u001b': {"Escape", "Escape", "", "", 27, 27, false, false}, + ' ': {"Space", " ", " ", " ", 32, 32, false, true}, + '!': {"Digit1", "!", "!", "1", 49, 49, true, true}, + '"': {"Quote", "\"", "\"", "'", 222, 222, true, true}, + '#': {"Digit3", "#", "#", "3", 51, 51, true, true}, + '$': {"Digit4", "$", "$", "4", 52, 52, true, true}, + '%': {"Digit5", "%", "%", "5", 53, 53, true, true}, + '&': {"Digit7", "&", "&", "7", 55, 55, true, true}, + '\'': {"Quote", "'", "'", "'", 222, 222, false, true}, + '(': {"Digit9", "(", "(", "9", 57, 57, true, true}, + ')': {"Digit0", ")", ")", "0", 48, 48, true, true}, + '*': {"Digit8", "*", "*", "8", 56, 56, true, true}, + '+': {"Equal", "+", "+", "=", 187, 187, true, true}, + ',': {"Comma", ",", ",", ",", 188, 188, false, true}, + '-': {"Minus", "-", "-", "-", 189, 189, false, true}, + '.': {"Period", ".", ".", ".", 190, 190, false, true}, + '/': {"Slash", "/", "/", "/", 191, 191, false, true}, + '0': {"Digit0", "0", "0", "0", 48, 48, false, true}, + '1': {"Digit1", "1", "1", "1", 49, 49, false, true}, + '2': {"Digit2", "2", "2", "2", 50, 50, false, true}, + '3': {"Digit3", "3", "3", "3", 51, 51, false, true}, + '4': {"Digit4", "4", "4", "4", 52, 52, false, true}, + '5': {"Digit5", "5", "5", "5", 53, 53, false, true}, + '6': {"Digit6", "6", "6", "6", 54, 54, false, true}, + '7': {"Digit7", "7", "7", "7", 55, 55, false, true}, + '8': {"Digit8", "8", "8", "8", 56, 56, false, true}, + '9': {"Digit9", "9", "9", "9", 57, 57, false, true}, + ':': {"Semicolon", ":", ":", ";", 186, 186, true, true}, + ';': {"Semicolon", ";", ";", ";", 186, 186, false, true}, + '<': {"Comma", "<", "<", ",", 188, 188, true, true}, + '=': {"Equal", "=", "=", "=", 187, 187, false, true}, + '>': {"Period", ">", ">", ".", 190, 190, true, true}, + '?': {"Slash", "?", "?", "/", 191, 191, true, true}, + '@': {"Digit2", "@", "@", "2", 50, 50, true, true}, + 'A': {"KeyA", "A", "A", "a", 65, 65, true, true}, + 'B': {"KeyB", "B", "B", "b", 66, 66, true, true}, + 'C': {"KeyC", "C", "C", "c", 67, 67, true, true}, + 'D': {"KeyD", "D", "D", "d", 68, 68, true, true}, + 'E': {"KeyE", "E", "E", "e", 69, 69, true, true}, + 'F': {"KeyF", "F", "F", "f", 70, 70, true, true}, + 'G': {"KeyG", "G", "G", "g", 71, 71, true, true}, + 'H': {"KeyH", "H", "H", "h", 72, 72, true, true}, + 'I': {"KeyI", "I", "I", "i", 73, 73, true, true}, + 'J': {"KeyJ", "J", "J", "j", 74, 74, true, true}, + 'K': {"KeyK", "K", "K", "k", 75, 75, true, true}, + 'L': {"KeyL", "L", "L", "l", 76, 76, true, true}, + 'M': {"KeyM", "M", "M", "m", 77, 77, true, true}, + 'N': {"KeyN", "N", "N", "n", 78, 78, true, true}, + 'O': {"KeyO", "O", "O", "o", 79, 79, true, true}, + 'P': {"KeyP", "P", "P", "p", 80, 80, true, true}, + 'Q': {"KeyQ", "Q", "Q", "q", 81, 81, true, true}, + 'R': {"KeyR", "R", "R", "r", 82, 82, true, true}, + 'S': {"KeyS", "S", "S", "s", 83, 83, true, true}, + 'T': {"KeyT", "T", "T", "t", 84, 84, true, true}, + 'U': {"KeyU", "U", "U", "u", 85, 85, true, true}, + 'V': {"KeyV", "V", "V", "v", 86, 86, true, true}, + 'W': {"KeyW", "W", "W", "w", 87, 87, true, true}, + 'X': {"KeyX", "X", "X", "x", 88, 88, true, true}, + 'Y': {"KeyY", "Y", "Y", "y", 89, 89, true, true}, + 'Z': {"KeyZ", "Z", "Z", "z", 90, 90, true, true}, + '[': {"BracketLeft", "[", "[", "[", 219, 219, false, true}, + '\\': {"Backslash", "\\", "\\", "\\", 220, 220, false, true}, + ']': {"BracketRight", "]", "]", "]", 221, 221, false, true}, + '^': {"Digit6", "^", "^", "6", 54, 54, true, true}, + '_': {"Minus", "_", "_", "-", 189, 189, true, true}, + '`': {"Backquote", "`", "`", "`", 192, 192, false, true}, + 'a': {"KeyA", "a", "a", "a", 65, 65, false, true}, + 'b': {"KeyB", "b", "b", "b", 66, 66, false, true}, + 'c': {"KeyC", "c", "c", "c", 67, 67, false, true}, + 'd': {"KeyD", "d", "d", "d", 68, 68, false, true}, + 'e': {"KeyE", "e", "e", "e", 69, 69, false, true}, + 'f': {"KeyF", "f", "f", "f", 70, 70, false, true}, + 'g': {"KeyG", "g", "g", "g", 71, 71, false, true}, + 'h': {"KeyH", "h", "h", "h", 72, 72, false, true}, + 'i': {"KeyI", "i", "i", "i", 73, 73, false, true}, + 'j': {"KeyJ", "j", "j", "j", 74, 74, false, true}, + 'k': {"KeyK", "k", "k", "k", 75, 75, false, true}, + 'l': {"KeyL", "l", "l", "l", 76, 76, false, true}, + 'm': {"KeyM", "m", "m", "m", 77, 77, false, true}, + 'n': {"KeyN", "n", "n", "n", 78, 78, false, true}, + 'o': {"KeyO", "o", "o", "o", 79, 79, false, true}, + 'p': {"KeyP", "p", "p", "p", 80, 80, false, true}, + 'q': {"KeyQ", "q", "q", "q", 81, 81, false, true}, + 'r': {"KeyR", "r", "r", "r", 82, 82, false, true}, + 's': {"KeyS", "s", "s", "s", 83, 83, false, true}, + 't': {"KeyT", "t", "t", "t", 84, 84, false, true}, + 'u': {"KeyU", "u", "u", "u", 85, 85, false, true}, + 'v': {"KeyV", "v", "v", "v", 86, 86, false, true}, + 'w': {"KeyW", "w", "w", "w", 87, 87, false, true}, + 'x': {"KeyX", "x", "x", "x", 88, 88, false, true}, + 'y': {"KeyY", "y", "y", "y", 89, 89, false, true}, + 'z': {"KeyZ", "z", "z", "z", 90, 90, false, true}, + '{': {"BracketLeft", "{", "{", "[", 219, 219, true, true}, + '|': {"Backslash", "|", "|", "\\", 220, 220, true, true}, + '}': {"BracketRight", "}", "}", "]", 221, 221, true, true}, + '~': {"Backquote", "~", "~", "`", 192, 192, true, true}, + '\u007f': {"Delete", "Delete", "", "", 46, 46, false, false}, + '¥': {"IntlYen", "¥", "¥", "¥", 220, 220, false, true}, + '\u0102': {"AltLeft", "Alt", "", "", 164, 164, false, false}, + '\u0104': {"CapsLock", "CapsLock", "", "", 20, 20, false, false}, + '\u0105': {"ControlLeft", "Control", "", "", 162, 162, false, false}, + '\u0106': {"Fn", "Fn", "", "", 0, 0, false, false}, + '\u0107': {"FnLock", "FnLock", "", "", 0, 0, false, false}, + '\u0108': {"Hyper", "Hyper", "", "", 0, 0, false, false}, + '\u0109': {"MetaLeft", "Meta", "", "", 91, 91, false, false}, + '\u010a': {"NumLock", "NumLock", "", "", 144, 144, false, false}, + '\u010c': {"ScrollLock", "ScrollLock", "", "", 145, 145, false, false}, + '\u010d': {"ShiftLeft", "Shift", "", "", 160, 160, false, false}, + '\u010e': {"Super", "Super", "", "", 0, 0, false, false}, + '\u0301': {"ArrowDown", "ArrowDown", "", "", 40, 40, false, false}, + '\u0302': {"ArrowLeft", "ArrowLeft", "", "", 37, 37, false, false}, + '\u0303': {"ArrowRight", "ArrowRight", "", "", 39, 39, false, false}, + '\u0304': {"ArrowUp", "ArrowUp", "", "", 38, 38, false, false}, + '\u0305': {"End", "End", "", "", 35, 35, false, false}, + '\u0306': {"Home", "Home", "", "", 36, 36, false, false}, + '\u0307': {"PageDown", "PageDown", "", "", 34, 34, false, false}, + '\u0308': {"PageUp", "PageUp", "", "", 33, 33, false, false}, + '\u0401': {"NumpadClear", "Clear", "", "", 12, 12, false, false}, + '\u0402': {"Copy", "Copy", "", "", 0, 0, false, false}, + '\u0404': {"Cut", "Cut", "", "", 0, 0, false, false}, + '\u0407': {"Insert", "Insert", "", "", 45, 45, false, false}, + '\u0408': {"Paste", "Paste", "", "", 0, 0, false, false}, + '\u0409': {"Redo", "Redo", "", "", 0, 0, false, false}, + '\u040a': {"Undo", "Undo", "", "", 0, 0, false, false}, + '\u0502': {"Again", "Again", "", "", 0, 0, false, false}, + '\u0504': {"Abort", "Cancel", "", "", 0, 0, false, false}, + '\u0505': {"ContextMenu", "ContextMenu", "", "", 93, 93, false, false}, + '\u0507': {"Find", "Find", "", "", 0, 0, false, false}, + '\u0508': {"Help", "Help", "", "", 47, 47, false, false}, + '\u0509': {"Pause", "Pause", "", "", 19, 19, false, false}, + '\u050b': {"Props", "Props", "", "", 0, 0, false, false}, + '\u050c': {"Select", "Select", "", "", 41, 41, false, false}, + '\u050d': {"ZoomIn", "ZoomIn", "", "", 0, 0, false, false}, + '\u050e': {"ZoomOut", "ZoomOut", "", "", 0, 0, false, false}, + '\u0601': {"BrightnessDown", "BrightnessDown", "", "", 216, 0, false, false}, + '\u0602': {"BrightnessUp", "BrightnessUp", "", "", 217, 0, false, false}, + '\u0604': {"Eject", "Eject", "", "", 0, 0, false, false}, + '\u0605': {"LogOff", "LogOff", "", "", 0, 0, false, false}, + '\u0606': {"Power", "Power", "", "", 152, 0, false, false}, + '\u0608': {"PrintScreen", "PrintScreen", "", "", 44, 44, false, false}, + '\u060b': {"WakeUp", "WakeUp", "", "", 0, 0, false, false}, + '\u0705': {"Convert", "Convert", "", "", 28, 28, false, false}, + '\u070d': {"NonConvert", "NonConvert", "", "", 29, 29, false, false}, + '\u0711': {"Lang1", "HangulMode", "", "", 21, 21, false, false}, + '\u0712': {"Lang2", "HanjaMode", "", "", 25, 25, false, false}, + '\u0716': {"Lang4", "Hiragana", "", "", 0, 0, false, false}, + '\u0718': {"KanaMode", "KanaMode", "", "", 21, 21, false, false}, + '\u071a': {"Lang3", "Katakana", "", "", 0, 0, false, false}, + '\u071d': {"Lang5", "ZenkakuHankaku", "", "", 0, 0, false, false}, + '\u0801': {"F1", "F1", "", "", 112, 112, false, false}, + '\u0802': {"F2", "F2", "", "", 113, 113, false, false}, + '\u0803': {"F3", "F3", "", "", 114, 114, false, false}, + '\u0804': {"F4", "F4", "", "", 115, 115, false, false}, + '\u0805': {"F5", "F5", "", "", 116, 116, false, false}, + '\u0806': {"F6", "F6", "", "", 117, 117, false, false}, + '\u0807': {"F7", "F7", "", "", 118, 118, false, false}, + '\u0808': {"F8", "F8", "", "", 119, 119, false, false}, + '\u0809': {"F9", "F9", "", "", 120, 120, false, false}, + '\u080a': {"F10", "F10", "", "", 121, 121, false, false}, + '\u080b': {"F11", "F11", "", "", 122, 122, false, false}, + '\u080c': {"F12", "F12", "", "", 123, 123, false, false}, + '\u080d': {"F13", "F13", "", "", 124, 124, false, false}, + '\u080e': {"F14", "F14", "", "", 125, 125, false, false}, + '\u080f': {"F15", "F15", "", "", 126, 126, false, false}, + '\u0810': {"F16", "F16", "", "", 127, 127, false, false}, + '\u0811': {"F17", "F17", "", "", 128, 128, false, false}, + '\u0812': {"F18", "F18", "", "", 129, 129, false, false}, + '\u0813': {"F19", "F19", "", "", 130, 130, false, false}, + '\u0814': {"F20", "F20", "", "", 131, 131, false, false}, + '\u0815': {"F21", "F21", "", "", 132, 132, false, false}, + '\u0816': {"F22", "F22", "", "", 133, 133, false, false}, + '\u0817': {"F23", "F23", "", "", 134, 134, false, false}, + '\u0818': {"F24", "F24", "", "", 135, 135, false, false}, + '\u0a01': {"Close", "Close", "", "", 0, 0, false, false}, + '\u0a02': {"MailForward", "MailForward", "", "", 0, 0, false, false}, + '\u0a03': {"MailReply", "MailReply", "", "", 0, 0, false, false}, + '\u0a04': {"MailSend", "MailSend", "", "", 0, 0, false, false}, + '\u0a05': {"MediaPlayPause", "MediaPlayPause", "", "", 179, 179, false, false}, + '\u0a07': {"MediaStop", "MediaStop", "", "", 178, 178, false, false}, + '\u0a08': {"MediaTrackNext", "MediaTrackNext", "", "", 176, 176, false, false}, + '\u0a09': {"MediaTrackPrevious", "MediaTrackPrevious", "", "", 177, 177, false, false}, + '\u0a0a': {"New", "New", "", "", 0, 0, false, false}, + '\u0a0b': {"Open", "Open", "", "", 43, 43, false, false}, + '\u0a0c': {"Print", "Print", "", "", 0, 0, false, false}, + '\u0a0d': {"Save", "Save", "", "", 0, 0, false, false}, + '\u0a0e': {"SpellCheck", "SpellCheck", "", "", 0, 0, false, false}, + '\u0a0f': {"AudioVolumeDown", "AudioVolumeDown", "", "", 174, 174, false, false}, + '\u0a10': {"AudioVolumeUp", "AudioVolumeUp", "", "", 175, 175, false, false}, + '\u0a11': {"AudioVolumeMute", "AudioVolumeMute", "", "", 173, 173, false, false}, + '\u0b01': {"LaunchApp2", "LaunchApplication2", "", "", 183, 183, false, false}, + '\u0b02': {"LaunchCalendar", "LaunchCalendar", "", "", 0, 0, false, false}, + '\u0b03': {"LaunchMail", "LaunchMail", "", "", 180, 180, false, false}, + '\u0b04': {"MediaSelect", "LaunchMediaPlayer", "", "", 181, 181, false, false}, + '\u0b05': {"LaunchMusicPlayer", "LaunchMusicPlayer", "", "", 0, 0, false, false}, + '\u0b06': {"LaunchApp1", "LaunchApplication1", "", "", 182, 182, false, false}, + '\u0b07': {"LaunchScreenSaver", "LaunchScreenSaver", "", "", 0, 0, false, false}, + '\u0b08': {"LaunchSpreadsheet", "LaunchSpreadsheet", "", "", 0, 0, false, false}, + '\u0b09': {"LaunchWebBrowser", "LaunchWebBrowser", "", "", 0, 0, false, false}, + '\u0b0c': {"LaunchContacts", "LaunchContacts", "", "", 0, 0, false, false}, + '\u0b0d': {"LaunchPhone", "LaunchPhone", "", "", 0, 0, false, false}, + '\u0c01': {"BrowserBack", "BrowserBack", "", "", 166, 166, false, false}, + '\u0c02': {"BrowserFavorites", "BrowserFavorites", "", "", 171, 171, false, false}, + '\u0c03': {"BrowserForward", "BrowserForward", "", "", 167, 167, false, false}, + '\u0c04': {"BrowserHome", "BrowserHome", "", "", 172, 172, false, false}, + '\u0c05': {"BrowserRefresh", "BrowserRefresh", "", "", 168, 168, false, false}, + '\u0c06': {"BrowserSearch", "BrowserSearch", "", "", 170, 170, false, false}, + '\u0c07': {"BrowserStop", "BrowserStop", "", "", 169, 169, false, false}, + '\u0d0a': {"ChannelDown", "ChannelDown", "", "", 0, 0, false, false}, + '\u0d0b': {"ChannelUp", "ChannelUp", "", "", 0, 0, false, false}, + '\u0d12': {"ClosedCaptionToggle", "ClosedCaptionToggle", "", "", 0, 0, false, false}, + '\u0d15': {"Exit", "Exit", "", "", 0, 0, false, false}, + '\u0d22': {"Guide", "Guide", "", "", 0, 0, false, false}, + '\u0d25': {"Info", "Info", "", "", 0, 0, false, false}, + '\u0d2c': {"MediaFastForward", "MediaFastForward", "", "", 0, 0, false, false}, + '\u0d2d': {"MediaLast", "MediaLast", "", "", 0, 0, false, false}, + '\u0d2f': {"MediaPlay", "MediaPlay", "", "", 0, 0, false, false}, + '\u0d30': {"MediaRecord", "MediaRecord", "", "", 0, 0, false, false}, + '\u0d31': {"MediaRewind", "MediaRewind", "", "", 0, 0, false, false}, + '\u0d43': {"Settings", "Settings", "", "", 0, 0, false, false}, + '\u0d4e': {"ZoomToggle", "ZoomToggle", "", "", 251, 251, false, false}, + '\u0e02': {"AudioBassBoostToggle", "AudioBassBoostToggle", "", "", 0, 0, false, false}, + '\u0f02': {"SpeechInputToggle", "SpeechInputToggle", "", "", 0, 0, false, false}, + '\u1001': {"SelectTask", "AppSwitch", "", "", 0, 0, false, false}, }