removed SkSLLayoutLexer

Bug: skia:
Change-Id: Iad4c89fbde8bc1f6c3d022af9aec2ec5faa8a4ef
Reviewed-on: https://skia-review.googlesource.com/142583
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
diff --git a/gn/sksl.gni b/gn/sksl.gni
index bce75c8..5cf376f 100644
--- a/gn/sksl.gni
+++ b/gn/sksl.gni
@@ -16,7 +16,6 @@
   "$_src/sksl/SkSLIRGenerator.cpp",
   "$_src/sksl/SkSLJIT.cpp",
   "$_src/sksl/SkSLLexer.cpp",
-  "$_src/sksl/SkSLLayoutLexer.cpp",
   "$_src/sksl/SkSLMetalCodeGenerator.cpp",
   "$_src/sksl/SkSLParser.cpp",
   "$_src/sksl/SkSLSPIRVCodeGenerator.cpp",
diff --git a/src/sksl/SkSLLayoutLexer.cpp b/src/sksl/SkSLLayoutLexer.cpp
deleted file mode 100644
index 58af170..0000000
--- a/src/sksl/SkSLLayoutLexer.cpp
+++ /dev/null
@@ -1,555 +0,0 @@
-/*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-/*****************************************************************************************
- ******************** This file was generated by sksllex. Do not edit. *******************
- *****************************************************************************************/
-#include "SkSLLayoutLexer.h"
-
-namespace SkSL {
-
-static int16_t mappings[127] = {
-        0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  2,  1,  1, 1, 1, 1,  1,  1,  1,  1,  1,  1,
-        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 1, 1, 1,  1,  1,  1,  1,  1,  1,
-        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 1, 1, 1,  1,  1,  1,  1,  1,  1,
-        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 1, 1, 1,  1,  1,  1,  1,  1,  1,
-        1,  1,  1,  1,  1,  1,  1,  3,  1,  4,  5,  6,  7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
-        17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 1, 1, 1, 1,  1};
-static int16_t transitions[29][326] = {
-        {
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        },
-        {
-                0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        },
-        {
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        },
-        {
-                0,   2, 0,   0, 0,  0, 0, 0, 0, 0, 0,   0,   0,   14, 0,   0, 0, 0,   0,   0,   0,
-                22,  0, 0,   0, 26, 0, 0, 0, 0, 0, 0,   0,   0,   0,  0,   0, 0, 0,   0,   0,   0,
-                0,   0, 0,   0, 0,  0, 0, 0, 0, 0, 0,   0,   0,   0,  0,   0, 0, 0,   0,   0,   0,
-                0,   0, 0,   0, 0,  0, 0, 0, 0, 0, 0,   0,   0,   0,  0,   0, 0, 0,   0,   0,   0,
-                85,  0, 0,   0, 0,  0, 0, 0, 0, 0, 0,   0,   0,   0,  0,   0, 0, 0,   0,   0,   0,
-                0,   0, 0,   0, 0,  0, 0, 0, 0, 0, 0,   0,   0,   0,  0,   0, 0, 0,   0,   0,   0,
-                0,   0, 0,   0, 0,  0, 0, 0, 0, 0, 0,   0,   0,   0,  0,   0, 0, 0,   0,   0,   0,
-                0,   0, 0,   0, 0,  0, 0, 0, 0, 0, 0,   0,   0,   0,  0,   0, 0, 0,   0,   0,   0,
-                169, 0, 0,   0, 0,  0, 0, 0, 0, 0, 0,   180, 0,   0,  0,   0, 0, 0,   0,   0,   0,
-                0,   0, 0,   0, 0,  0, 0, 0, 0, 0, 0,   0,   202, 0,  0,   0, 0, 0,   0,   209, 0,
-                0,   0, 0,   0, 0,  0, 0, 0, 0, 0, 0,   0,   0,   0,  0,   0, 0, 0,   229, 0,   0,
-                0,   0, 0,   0, 0,  0, 0, 0, 0, 0, 0,   0,   0,   0,  0,   0, 0, 249, 0,   0,   0,
-                0,   0, 255, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0,   0,  267, 0, 0, 0,   0,   0,   0,
-                0,   0, 0,   0, 0,  0, 0, 0, 0, 0, 0,   285, 0,   0,  0,   0, 0, 0,   0,   0,   0,
-                0,   0, 0,   0, 0,  0, 0, 0, 0, 0, 305, 0,   0,   0,  0,   0, 0, 312, 0,   0,   0,
-                0,   0, 0,   0, 0,  0, 0, 0, 0, 0, 0,
-        },
-        {
-                0,   2, 0,  0, 0,   0, 0,   0, 0,   0,   0,   0, 0,   0,   0,  0,   0, 0, 0, 0,
-                0,   0, 23, 0, 0,   0, 0,   0, 0,   30,  0,   0, 0,   0,   0,  0,   0, 0, 0, 0,
-                0,   0, 0,  0, 0,   0, 0,   0, 0,   0,   51,  0, 0,   0,   0,  0,   0, 0, 0, 0,
-                0,   0, 0,  0, 0,   0, 0,   0, 0,   0,   0,   0, 0,   0,   75, 0,   0, 0, 0, 0,
-                0,   0, 0,  0, 0,   0, 0,   0, 0,   0,   0,   0, 0,   0,   0,  0,   0, 0, 0, 0,
-                0,   0, 0,  0, 105, 0, 0,   0, 109, 0,   0,   0, 0,   0,   0,  0,   0, 0, 0, 0,
-                0,   0, 0,  0, 0,   0, 0,   0, 0,   0,   0,   0, 0,   134, 0,  0,   0, 0, 0, 0,
-                0,   0, 0,  0, 0,   0, 0,   0, 0,   0,   0,   0, 0,   0,   0,  0,   0, 0, 0, 0,
-                0,   0, 0,  0, 0,   0, 0,   0, 0,   170, 0,   0, 173, 0,   0,  0,   0, 0, 0, 0,
-                0,   0, 0,  0, 0,   0, 0,   0, 189, 0,   0,   0, 0,   0,   0,  0,   0, 0, 0, 0,
-                0,   0, 0,  0, 0,   0, 0,   0, 0,   210, 0,   0, 213, 0,   0,  0,   0, 0, 0, 0,
-                221, 0, 0,  0, 0,   0, 227, 0, 0,   0,   0,   0, 0,   0,   0,  0,   0, 0, 0, 0,
-                0,   0, 0,  0, 0,   0, 0,   0, 0,   0,   0,   0, 0,   0,   0,  0,   0, 0, 0, 0,
-                0,   0, 0,  0, 0,   0, 0,   0, 0,   0,   0,   0, 273, 0,   0,  0,   0, 0, 0, 0,
-                0,   0, 0,  0, 0,   0, 0,   0, 0,   0,   291, 0, 0,   0,   0,  0,   0, 0, 0, 300,
-                0,   0, 0,  0, 0,   0, 0,   0, 0,   0,   0,   0, 313, 0,   0,  316, 0, 0, 0, 0,
-                0,   0, 0,  0, 0,   0,
-        },
-        {
-                0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0,
-        },
-        {
-                0, 156, 0, 0,   0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
-                0, 36,  0, 0,   0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
-                0, 0,   0, 0,   0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   63,
-                0, 0,   0, 67,  0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
-                0, 86,  0, 0,   0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
-                0, 0,   0, 0,   0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
-                0, 0,   0, 0,   0,   0,   0,   0, 0, 0,   137, 0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
-                0, 0,   0, 0,   0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
-                0, 0,   0, 0,   0,   174, 0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 188, 0,
-                0, 0,   0, 0,   0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
-                0, 0,   0, 214, 0,   0,   217, 0, 0, 220, 0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
-                0, 0,   0, 235, 0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
-                0, 0,   0, 0,   0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 268, 0, 0, 0, 0,   0,
-                0, 0,   0, 0,   0,   0,   0,   0, 0, 0,   0,   0, 286, 0, 0, 0,   0, 0, 0, 0,   0,
-                0, 0,   0, 0,   0,   0,   0,   0, 0, 0,   0,   0, 0,   0, 0, 0,   0, 0, 0, 0,   0,
-                0, 317, 0, 0,   320, 0,   0,   0, 0, 0,   0,
-        },
-        {
-                0,   2,   0, 0, 0,  6, 0, 0, 0, 0, 0, 0, 13, 0, 0,   0, 0,  0, 0,   0, 0, 0, 50, 0,
-                0,   0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 45, 0, 0,   0, 0, 0, 47, 0,
-                0,   0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0,  0, 0,   0, 0, 0, 0,  0,
-                0,   0,   0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0,  0, 0,   0, 0, 0, 0,  0,
-                0,   0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0,  0, 0,   0, 0, 0, 0,  0,
-                0,   0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0,  0, 0,   0, 0, 0, 0,  0,
-                0,   0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0,  0, 163, 0, 0, 0, 0,  0,
-                0,   0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 183, 0, 0,  0, 0,   0, 0, 0, 0,  0,
-                0,   0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0,  0, 211, 0, 0, 0, 0,  0,
-                0,   0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0,  0, 0,   0, 0, 0, 0,  0,
-                0,   0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0,  0, 0,   0, 0, 0, 0,  0,
-                265, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0,  0, 0,   0, 0, 0, 0,  0,
-                0,   0,   0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0,  0, 0,   0, 0, 0, 0,  0,
-                0,   314, 0, 0, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,
-        },
-        {
-                0,   2,   0,   0,   0, 0,   0,   0,  0,   0,   11,  0,   0,  0,   0,   0,   0,
-                0,   0,   0,   0,   0, 65,  0,   0,  0,   27,  0,   0,   0,  0,   0,   0,   0,
-                0,   0,   0,   0,   0, 0,   0,   0,  0,   0,   0,   0,   0,  0,   49,  0,   0,
-                0,   0,   54,  0,   0, 0,   0,   59, 0,   61,  0,   0,   64, 0,   0,   0,   0,
-                0,   0,   0,   0,   0, 0,   0,   0,  0,   0,   0,   0,   0,  0,   0,   0,   0,
-                0,   0,   0,   0,   0, 0,   0,   93, 0,   0,   0,   0,   0,  0,   0,   0,   0,
-                0,   0,   0,   0,   0, 0,   0,   0,  0,   0,   0,   0,   0,  0,   0,   0,   119,
-                0,   0,   0,   0,   0, 0,   0,   0,  0,   0,   0,   131, 0,  0,   0,   0,   0,
-                0,   0,   139, 140, 0, 0,   0,   0,  0,   0,   0,   0,   0,  0,   0,   0,   0,
-                0,   0,   0,   0,   0, 0,   160, 0,  0,   0,   164, 0,   0,  0,   0,   0,   0,
-                0,   0,   0,   0,   0, 0,   177, 0,  0,   0,   0,   0,   0,  184, 0,   0,   0,
-                0,   0,   0,   0,   0, 0,   0,   0,  196, 0,   0,   0,   0,  201, 0,   0,   0,
-                0,   0,   0,   0,   0, 0,   0,   0,  0,   0,   215, 0,   0,  0,   0,   0,   0,
-                0,   0,   0,   0,   0, 0,   0,   0,  0,   231, 0,   0,   0,  0,   236, 0,   0,
-                0,   0,   0,   242, 0, 0,   0,   0,  0,   0,   0,   0,   0,  0,   253, 0,   0,
-                0,   257, 0,   0,   0, 261, 0,   0,  0,   0,   266, 0,   0,  0,   0,   271, 0,
-                0,   0,   275, 0,   0, 0,   0,   0,  0,   0,   0,   0,   0,  0,   0,   0,   0,
-                0,   0,   0,   0,   0, 295, 0,   0,  0,   0,   0,   0,   0,  0,   304, 0,   0,
-                0,   0,   0,   0,   0, 0,   0,   0,  0,   0,   0,   318, 0,  0,   0,   0,   0,
-                324, 0,   0,
-        },
-        {
-                0, 2, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0, 0, 0, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 143, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 239, 240,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0, 0, 0, 0,
-        },
-        {
-                0, 2, 0,   0, 0, 0,   0, 0,  9, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 48,
-                0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0,   0, 80, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 116, 0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-                0, 0, 147, 0, 0, 0,   0, 0,  0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-                0, 0, 0,   0, 0, 246, 0, 0,  0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0,   0, 0,  0, 274, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0, 302, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0, 0,
-        },
-        {
-                0, 2, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0, 74, 0,
-                0, 0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0, 0,  0,
-                0, 0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0, 0,  0,
-                0, 0, 0, 0,   0, 0, 0,   0, 81, 0, 0,   0, 0, 91, 0, 0, 0, 0, 0, 0,   0,   0, 0,  0,
-                0, 0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   117, 0, 0,  0,
-                0, 0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0, 0,  0,
-                0, 0, 0, 148, 0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0, 0,  0,
-                0, 0, 0, 0,   0, 0, 175, 0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0, 0,  0,
-                0, 0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0, 0,  0,
-                0, 0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0, 0,  0,
-                0, 0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0, 0,  0,
-                0, 0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 284, 0,   0, 0,  0,
-                0, 0, 0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0, 0,  0, 0, 0, 0, 0, 0,   0,   0, 0,  0,
-                0, 0, 0, 0,   0, 0, 0,   0, 0,  0, 323, 0, 0, 0,
-        },
-        {
-                0,   161, 0,   4, 0, 0, 7,   0,   0, 0,   0,   0,   0,   0,  0,  0, 0,   0,
-                0,   0,   0,   0, 0, 0, 0,   0,   0, 0,   0,   0,   0,   32, 0,  0, 0,   0,
-                0,   0,   0,   0, 0, 0, 0,   0,   0, 0,   0,   0,   0,   0,  56, 0, 0,   0,
-                0,   0,   0,   0, 0, 0, 0,   0,   0, 0,   0,   0,   0,   0,  0,  0, 71,  0,
-                0,   0,   0,   0, 0, 0, 79,  0,   0, 0,   0,   0,   0,   0,  0,  0, 0,   0,
-                0,   0,   0,   0, 0, 0, 97,  0,   0, 0,   101, 0,   0,   0,  0,  0, 0,   0,
-                0,   0,   111, 0, 0, 0, 115, 0,   0, 0,   0,   0,   0,   0,  0,  0, 125, 0,
-                0,   0,   0,   0, 0, 0, 0,   0,   0, 0,   0,   0,   0,   0,  0,  0, 0,   0,
-                0,   146, 0,   0, 0, 0, 151, 0,   0, 154, 0,   0,   0,   0,  0,  0, 0,   0,
-                0,   0,   0,   0, 0, 0, 0,   0,   0, 0,   0,   0,   0,   0,  0,  0, 0,   0,
-                181, 0,   0,   0, 0, 0, 0,   0,   0, 0,   191, 0,   0,   0,  0,  0, 0,   0,
-                199, 0,   0,   0, 0, 0, 0,   206, 0, 0,   0,   0,   0,   0,  0,  0, 0,   0,
-                0,   0,   0,   0, 0, 0, 223, 0,   0, 0,   0,   0,   0,   0,  0,  0, 0,   234,
-                0,   0,   0,   0, 0, 0, 0,   0,   0, 0,   245, 0,   247, 0,  0,  0, 0,   0,
-                0,   0,   0,   0, 0, 0, 0,   0,   0, 0,   0,   264, 0,   0,  0,  0, 0,   0,
-                0,   0,   0,   0, 0, 0, 0,   278, 0, 0,   0,   0,   0,   0,  0,  0, 0,   0,
-                0,   0,   0,   0, 0, 0, 0,   0,   0, 0,   299, 0,   0,   0,  0,  0, 0,   0,
-                0,   0,   309, 0, 0, 0, 0,   0,   0, 0,   0,   0,   0,   0,  0,  0, 0,   0,
-                0,   0,
-        },
-        {
-                0, 2, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0,   212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 315, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        },
-        {
-                0,  195, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                53, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0,  0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        },
-        {
-                0,   198, 0,  10, 0, 0, 0, 0, 0, 0, 0, 0,  0,   0,   0, 0,  0,   0,  0, 0,   0, 0,
-                114, 24,  25, 0,  0, 0, 0, 0, 0, 0, 0, 0,  0,   0,   0, 38, 0,   0,  0, 0,   0, 0,
-                0,   0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  0,   0,   0, 0,  0,   0,  0, 0,   0, 0,
-                0,   68,  0,  0,  0, 0, 0, 0, 0, 0, 0, 78, 0,   0,   0, 0,  0,   84, 0, 94,  0, 88,
-                0,   0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  0,   0,   0, 0,  0,   0,  0, 0,   0, 0,
-                0,   0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  123, 0,   0, 0,  127, 0,  0, 0,   0, 0,
-                133, 0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  145, 0,   0, 0,  0,   0,  0, 152, 0, 0,
-                0,   0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  0,   0,   0, 0,  0,   0,  0, 0,   0, 0,
-                0,   0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  0,   0,   0, 0,  0,   0,  0, 0,   0, 0,
-                0,   0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  0,   0,   0, 0,  0,   0,  0, 0,   0, 0,
-                0,   0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  0,   0,   0, 0,  0,   0,  0, 0,   0, 0,
-                0,   0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  0,   256, 0, 0,  0,   0,  0, 0,   0, 0,
-                0,   0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  0,   0,   0, 0,  0,   0,  0, 0,   0, 0,
-                0,   0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  0,   0,   0, 0,  303, 0,  0, 0,   0, 0,
-                0,   0,   0,  0,  0, 0, 0, 0, 0, 0, 0, 0,  0,   0,   0, 0,  0,   0,
-        },
-        {
-                0, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0, 121, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0, 0,   0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0, 0,   0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0,   0, 0, 0,   0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0, 0,   0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0, 0,   0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 176, 0, 0, 0,   0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0, 0,   0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0, 0,   0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0, 0,   0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0, 0,   0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0, 0,   0, 0, 0,   0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        },
-        {
-                0,   2,   0, 0,  5,   0, 0, 8,   0, 0, 0, 12,  0,   0,  0,   0,   0, 0,   0,   0,
-                0,   0,   0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   0,   34, 0,   0,   0, 0,   0,   0,
-                0,   0,   0, 44, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0,  55,  0,   0, 0,   0,   0,
-                0,   62,  0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   73,  0,  0,   0,   0, 0,   0,   0,
-                0,   0,   0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   0,   0,  0,   0,   0, 98,  0,   0,
-                0,   0,   0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   113, 0,  0,   0,   0, 0,   0,   120,
-                0,   0,   0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   0,   0,  0,   0,   0, 0,   0,   0,
-                141, 0,   0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   0,   0,  155, 0,   0, 0,   0,   0,
-                0,   162, 0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   0,   0,  0,   0,   0, 178, 0,   0,
-                0,   182, 0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   193, 0,  0,   0,   0, 0,   0,   200,
-                0,   0,   0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   0,   0,  0,   216, 0, 0,   0,   0,
-                0,   0,   0, 0,  225, 0, 0, 0,   0, 0, 0, 0,   0,   0,  0,   0,   0, 0,   0,   0,
-                0,   0,   0, 0,  0,   0, 0, 248, 0, 0, 0, 0,   0,   0,  0,   0,   0, 0,   0,   0,
-                0,   0,   0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   0,   0,  0,   0,   0, 0,   279, 0,
-                0,   0,   0, 0,  0,   0, 0, 288, 0, 0, 0, 292, 0,   0,  0,   0,   0, 0,   0,   0,
-                301, 0,   0, 0,  0,   0, 0, 0,   0, 0, 0, 0,   0,   0,  0,   0,   0, 0,   319, 0,
-                0,   0,   0, 0,  325, 0,
-        },
-        {
-                0,   238, 0, 0,   0,   0,  0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0, 19, 0, 0,  0,
-                129, 0,   0, 0,   0,   0,  0, 0, 0, 0, 33,  0, 0,   0, 37, 0,   39, 0, 0,  0, 0,  0,
-                0,   46,  0, 0,   0,   0,  0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0, 0,  0, 0,  0,
-                0,   0,   0, 0,   0,   72, 0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0, 0,  0, 87, 0,
-                89,  0,   0, 0,   0,   0,  0, 0, 0, 0, 99,  0, 0,   0, 0,  0,   0,  0, 0,  0, 0,  0,
-                0,   112, 0, 0,   0,   0,  0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0, 0,  0, 0,  0,
-                0,   0,   0, 0,   142, 0,  0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0, 0,  0, 0,  0,
-                0,   0,   0, 0,   0,   0,  0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0, 0,  0, 0,  0,
-                0,   0,   0, 0,   0,   0,  0, 0, 0, 0, 187, 0, 0,   0, 0,  192, 0,  0, 0,  0, 0,  0,
-                219, 0,   0, 0,   0,   0,  0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0, 0,  0, 0,  0,
-                0,   0,   0, 224, 0,   0,  0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0, 0,  0, 0,  0,
-                0,   0,   0, 0,   0,   0,  0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0, 0,  0, 0,  0,
-                0,   0,   0, 0,   269, 0,  0, 0, 0, 0, 0,   0, 277, 0, 0,  0,   0,  0, 0,  0, 0,  0,
-                287, 0,   0, 0,   0,   0,  0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0, 0,  0, 0,  0,
-                0,   0,   0, 0,   0,   0,  0, 0, 0, 0, 0,   0, 0,   0, 0,  0,   0,  0,
-        },
-        {
-                0, 276, 0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   17, 18, 0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 126, 0,  0,  0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
-                0, 0,   0, 0, 159, 0, 0, 0, 166, 0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0, 0, 0, 207, 0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0, 0, 0, 251, 252, 0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   0,  0,  0, 0, 0, 0,
-                0, 310, 0, 0, 0,   0, 0, 0, 0,   0,   0, 0, 0, 0, 0, 0,   0,  0,
-        },
-        {
-                0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        },
-        {
-                0, 2,   0,   0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0,   0, 0,  0, 0,   0,   20,
-                0, 0,   0,   0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0,   0, 0,  0, 0,   0,   40,
-                0, 0,   43,  0, 0,   0, 0, 0,   0, 0,  0, 52,  0, 0,   0, 0,  0, 0,   0,   60,
-                0, 0,   0,   0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0,   0, 76, 0, 0,   0,   0,
-                0, 0,   0,   0, 0,   0, 0, 0,   0, 90, 0, 0,   0, 0,   0, 0,  0, 0,   0,   0,
-                0, 0,   0,   0, 0,   0, 0, 108, 0, 0,  0, 0,   0, 0,   0, 0,  0, 0,   0,   0,
-                0, 0,   0,   0, 0,   0, 0, 0,   0, 0,  0, 132, 0, 0,   0, 0,  0, 138, 0,   0,
-                0, 0,   0,   0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0,   0, 0,  0, 0,   0,   0,
-                0, 0,   0,   0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0,   0, 0,  0, 0,   0,   0,
-                0, 0,   0,   0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0,   0, 0,  0, 0,   0,   0,
-                0, 0,   0,   0, 205, 0, 0, 0,   0, 0,  0, 0,   0, 0,   0, 0,  0, 0,   0,   0,
-                0, 0,   0,   0, 0,   0, 0, 0,   0, 0,  0, 232, 0, 0,   0, 0,  0, 0,   244, 0,
-                0, 0,   0,   0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 254, 0, 0,  0, 0,   0,   0,
-                0, 262, 263, 0, 0,   0, 0, 0,   0, 0,  0, 272, 0, 0,   0, 0,  0, 0,   0,   0,
-                0, 0,   0,   0, 0,   0, 0, 0,   0, 0,  0, 0,   0, 0,   0, 0,  0, 298, 0,   0,
-                0, 0,   0,   0, 0,   0, 0, 308, 0, 0,  0, 0,   0, 0,   0, 0,  0, 0,   0,   0,
-                0, 0,   0,   0, 0,   0,
-        },
-        {
-                0, 294, 0, 0, 0,   0,   0,  0,   0, 0,   0,   0,   0,   0,   15, 0,   0, 0, 0, 0, 0,
-                0, 136, 0, 0, 0,   0,   0,  0,   0, 0,   0,   0,   0,   35,  0,  0,   0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0,   0,  0,   0, 0,   0,   0,   0,   0,   0,  0,   0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0,   70, 0,   0, 0,   0,   83,  0,   0,   0,  0,   0, 0, 0, 0, 0,
-                0, 104, 0, 0, 0,   0,   0,  0,   0, 0,   0,   0,   0,   0,   0,  100, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0,   0,  0,   0, 0,   0,   0,   0,   0,   0,  0,   0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0,   0,  0,   0, 0,   0,   0,   0,   0,   0,  0,   0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0,   0,  0,   0, 0,   0,   0,   0,   0,   0,  0,   0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0,   0,  0,   0, 0,   0,   0,   0,   0,   0,  0,   0, 0, 0, 0, 0,
-                0, 0,   0, 0, 194, 0,   0,  0,   0, 0,   0,   0,   208, 203, 0,  0,   0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0,   0,  0,   0, 0,   0,   0,   0,   0,   0,  0,   0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0,   237, 0,  0,   0, 241, 0,   0,   0,   0,   0,  0,   0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0,   0,  0,   0, 0,   0,   0,   0,   0,   0,  0,   0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0,   0,  281, 0, 283, 0,   0,   0,   0,   0,  289, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0,   0,  0,   0, 0,   311, 306, 0,   0,   0,  0,   0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0,   0,   0,  0,   0, 0,   0,
-        },
-        {
-                0,   297, 0,  0, 0,   0,   0,   0,   0,   0,   0, 0,   0,   0, 0, 0,   0,   0,
-                0,   0,   21, 0, 0,   0,   0,   0,   0,   0,   0, 0,   31,  0, 0, 0,   0,   0,
-                0,   0,   0,  0, 0,   0,   0,   0,   0,   0,   0, 0,   0,   0, 0, 0,   0,   0,
-                0,   0,   0,  0, 0,   0,   0,   0,   0,   0,   0, 0,   0,   0, 0, 0,   0,   0,
-                0,   0,   0,  0, 0,   0,   0,   0,   0,   82,  0, 0,   0,   0, 0, 0,   0,   0,
-                0,   0,   0,  0, 0,   0,   0,   0,   0,   0,   0, 102, 0,   0, 0, 106, 0,   0,
-                0,   110, 0,  0, 0,   0,   0,   0,   0,   118, 0, 0,   0,   0, 0, 124, 0,   0,
-                0,   0,   0,  0, 0,   0,   0,   0,   0,   0,   0, 0,   0,   0, 0, 0,   0,   144,
-                0,   0,   0,  0, 149, 0,   0,   0,   153, 0,   0, 0,   157, 0, 0, 0,   0,   0,
-                0,   0,   0,  0, 0,   168, 0,   0,   171, 172, 0, 0,   0,   0, 0, 0,   179, 0,
-                0,   0,   0,  0, 0,   0,   0,   0,   0,   190, 0, 0,   0,   0, 0, 0,   0,   0,
-                0,   0,   0,  0, 0,   204, 0,   0,   0,   0,   0, 0,   0,   0, 0, 0,   0,   0,
-                0,   0,   0,  0, 0,   222, 0,   0,   0,   0,   0, 0,   0,   0, 0, 0,   233, 0,
-                0,   0,   0,  0, 0,   0,   0,   0,   243, 0,   0, 0,   0,   0, 0, 0,   0,   0,
-                0,   0,   0,  0, 0,   0,   259, 0,   0,   0,   0, 0,   0,   0, 0, 0,   0,   0,
-                0,   0,   0,  0, 0,   0,   0,   0,   0,   280, 0, 0,   0,   0, 0, 0,   0,   0,
-                0,   290, 0,  0, 293, 0,   0,   296, 0,   0,   0, 0,   0,   0, 0, 0,   0,   0,
-                307, 0,   0,  0, 0,   0,   0,   0,   0,   0,   0, 0,   0,   0, 0, 0,   0,   0,
-                0,   0,
-        },
-        {
-                0, 2, 0,  150, 0, 0, 0,  0,   0, 0, 0, 0,   0,   0, 0, 16, 0, 0, 0,   0,  0, 0,
-                0, 0, 0,  0,   0, 0, 29, 0,   0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,   42, 0, 0,
-                0, 0, 0,  0,   0, 0, 0,  0,   0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,   0,  0, 0,
-                0, 0, 69, 0,   0, 0, 0,  0,   0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,   0,  0, 0,
-                0, 0, 0,  92,  0, 0, 95, 0,   0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 107, 0,  0, 0,
-                0, 0, 0,  0,   0, 0, 0,  0,   0, 0, 0, 122, 0,   0, 0, 0,  0, 0, 0,   0,  0, 0,
-                0, 0, 0,  0,   0, 0, 0,  0,   0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,   0,  0, 0,
-                0, 0, 0,  0,   0, 0, 0,  0,   0, 0, 0, 0,   167, 0, 0, 0,  0, 0, 0,   0,  0, 0,
-                0, 0, 0,  0,   0, 0, 0,  0,   0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,   0,  0, 0,
-                0, 0, 0,  0,   0, 0, 0,  0,   0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,   0,  0, 0,
-                0, 0, 0,  0,   0, 0, 0,  0,   0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,   0,  0, 0,
-                0, 0, 0,  0,   0, 0, 0,  250, 0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,   0,  0, 0,
-                0, 0, 0,  0,   0, 0, 0,  0,   0, 0, 0, 0,   282, 0, 0, 0,  0, 0, 0,   0,  0, 0,
-                0, 0, 0,  0,   0, 0, 0,  0,   0, 0, 0, 0,   0,   0, 0, 0,  0, 0, 0,   0,  0, 0,
-                0, 0, 0,  0,   0, 0, 0,  0,   0, 0, 0, 0,   0,   0, 0, 0,  0, 0,
-        },
-        {
-                0, 2, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0,   0, 0, 0, 130, 0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 186, 0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 230, 0, 0, 0, 0, 0,   0, 0, 0, 260, 0,
-                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 270, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0, 0,   0, 0, 0, 0,   0,
-                0, 0, 0, 0, 0, 0,   0, 0, 0, 0,   0, 0, 0, 0,
-        },
-        {
-                0, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-                0, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        },
-        {
-                0, 2, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0, 0, 0, 165, 0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
-                0, 0, 185, 0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,  0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0, 0,
-                0, 0, 0,   0, 0, 0, 0, 0, 0,   0, 0, 0, 0, 0,
-        },
-        {
-                0, 2, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   0,   0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   0,   0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   0,   0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   0,   0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 103, 0, 0, 0,   0, 0,   0,   0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 128, 0, 0,   0,   0,
-                0, 0, 135, 0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   0,   0,
-                0, 0, 0,   158, 0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   0,   0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   197, 0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 218, 0,   0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   0,   0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   0,   0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   0,   0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 0,   0, 0,   0, 0, 0,   0, 0,   0,   0,
-                0, 0, 0,   0,   0, 0, 0, 0, 0, 0, 0, 0, 321, 0, 0,   0, 0, 0,
-        },
-};
-
-static int8_t accepts[326] = {
-        -1, -1, 39, 39, -1, -1, -1, -1, -1, 3,  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, -1, -1, -1, -1, -1, -1,
-        17, -1, -1, -1, -1, 16, -1, -1, -1, -1, -1, 14, -1, -1, -1, -1, -1, -1, -1, -1, 20, -1,
-        -1, -1, -1, -1, -1, -1, -1, 21, -1, -1, -1, -1, -1, -1, -1, -1, 18, -1, -1, -1, -1, -1,
-        -1, -1, 24, -1, -1, 22, -1, -1, -1, -1, -1, -1, -1, -1, -1, 25, -1, -1, -1, -1, -1, -1,
-        -1, -1, -1, 23, -1, -1, -1, -1, -1, -1, 15, -1, -1, -1, -1, -1, -1, -1, 11, -1, -1, -1,
-        -1, -1, -1, 13, -1, -1, -1, -1, -1, 12, -1, -1, -1, -1, -1, -1, -1, 19, -1, -1, -1, -1,
-        -1, 6,  39, -1, -1, -1, 38, 39, -1, -1, -1, 4,  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-        -1, -1, -1, -1, -1, -1, -1, -1, -1, 7,  -1, -1, -1, -1, -1, -1, -1, -1, 35, 39, -1, 37,
-        39, -1, -1, -1, -1, -1, -1, -1, -1, 29, 28, -1, -1, -1, -1, -1, -1, -1, -1, -1, 30, -1,
-        -1, -1, -1, -1, -1, 1,  39, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 34, 39, -1, -1, -1,
-        -1, 2,  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8,  -1, -1, -1, -1,
-        -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9,  39, -1, -1, -1, -1, 27, -1, -1, -1, -1,
-        -1, -1, -1, -1, -1, -1, -1, 26, 39, -1, 5,  39, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-        -1, -1, 32, 31, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, 39, -1, -1, 36,
-};
-
-LayoutToken LayoutLexer::next() {
-    int startOffset = fOffset;
-    if (startOffset == fLength) {
-        return LayoutToken(LayoutToken::END_OF_FILE, startOffset, 0);
-    }
-    int offset = startOffset;
-    int state = 1;
-    LayoutToken::Kind lastAccept = LayoutToken::Kind::INVALID;
-    int lastAcceptEnd = startOffset + 1;
-    while (offset < fLength) {
-        if ((uint8_t)fText[offset] >= 127) {
-            break;
-        }
-        state = transitions[mappings[(int)fText[offset]]][state];
-        ++offset;
-        if (!state) {
-            break;
-        }
-        // We seem to be getting away without doing this check.
-        /*if (accepts[state] != -1)*/ {
-            lastAccept = (LayoutToken::Kind)accepts[state];
-            lastAcceptEnd = offset;
-        }
-    }
-    fOffset = lastAcceptEnd;
-    return LayoutToken(lastAccept, startOffset, lastAcceptEnd - startOffset);
-}
-
-}  // namespace SkSL
diff --git a/src/sksl/SkSLLayoutLexer.h b/src/sksl/SkSLLayoutLexer.h
deleted file mode 100644
index e95f20e..0000000
--- a/src/sksl/SkSLLayoutLexer.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-/*****************************************************************************************
- ******************** This file was generated by sksllex. Do not edit. *******************
- *****************************************************************************************/
-#ifndef SKSL_LayoutLexer
-#define SKSL_LayoutLexer
-#include <cstddef>
-#include <cstdint>
-namespace SkSL {
-
-struct LayoutToken {
-    enum Kind {
-#undef END_OF_FILE
-        END_OF_FILE,
-#undef LOCATION
-        LOCATION,
-#undef OFFSET
-        OFFSET,
-#undef BINDING
-        BINDING,
-#undef INDEX
-        INDEX,
-#undef SET
-        SET,
-#undef BUILTIN
-        BUILTIN,
-#undef INPUT_ATTACHMENT_INDEX
-        INPUT_ATTACHMENT_INDEX,
-#undef ORIGIN_UPPER_LEFT
-        ORIGIN_UPPER_LEFT,
-#undef OVERRIDE_COVERAGE
-        OVERRIDE_COVERAGE,
-#undef BLEND_SUPPORT_ALL_EQUATIONS
-        BLEND_SUPPORT_ALL_EQUATIONS,
-#undef BLEND_SUPPORT_MULTIPLY
-        BLEND_SUPPORT_MULTIPLY,
-#undef BLEND_SUPPORT_SCREEN
-        BLEND_SUPPORT_SCREEN,
-#undef BLEND_SUPPORT_OVERLAY
-        BLEND_SUPPORT_OVERLAY,
-#undef BLEND_SUPPORT_DARKEN
-        BLEND_SUPPORT_DARKEN,
-#undef BLEND_SUPPORT_LIGHTEN
-        BLEND_SUPPORT_LIGHTEN,
-#undef BLEND_SUPPORT_COLORDODGE
-        BLEND_SUPPORT_COLORDODGE,
-#undef BLEND_SUPPORT_COLORBURN
-        BLEND_SUPPORT_COLORBURN,
-#undef BLEND_SUPPORT_HARDLIGHT
-        BLEND_SUPPORT_HARDLIGHT,
-#undef BLEND_SUPPORT_SOFTLIGHT
-        BLEND_SUPPORT_SOFTLIGHT,
-#undef BLEND_SUPPORT_DIFFERENCE
-        BLEND_SUPPORT_DIFFERENCE,
-#undef BLEND_SUPPORT_EXCLUSION
-        BLEND_SUPPORT_EXCLUSION,
-#undef BLEND_SUPPORT_HSL_HUE
-        BLEND_SUPPORT_HSL_HUE,
-#undef BLEND_SUPPORT_HSL_SATURATION
-        BLEND_SUPPORT_HSL_SATURATION,
-#undef BLEND_SUPPORT_HSL_COLOR
-        BLEND_SUPPORT_HSL_COLOR,
-#undef BLEND_SUPPORT_HSL_LUMINOSITY
-        BLEND_SUPPORT_HSL_LUMINOSITY,
-#undef PUSH_CONSTANT
-        PUSH_CONSTANT,
-#undef POINTS
-        POINTS,
-#undef LINES
-        LINES,
-#undef LINE_STRIP
-        LINE_STRIP,
-#undef LINES_ADJACENCY
-        LINES_ADJACENCY,
-#undef TRIANGLES
-        TRIANGLES,
-#undef TRIANGLE_STRIP
-        TRIANGLE_STRIP,
-#undef TRIANGLES_ADJACENCY
-        TRIANGLES_ADJACENCY,
-#undef MAX_VERTICES
-        MAX_VERTICES,
-#undef INVOCATIONS
-        INVOCATIONS,
-#undef WHEN
-        WHEN,
-#undef KEY
-        KEY,
-#undef CTYPE
-        CTYPE,
-#undef INVALID
-        INVALID,
-    };
-
-    LayoutToken() : fKind(Kind::INVALID), fOffset(-1), fLength(-1) {}
-
-    LayoutToken(Kind kind, int offset, int length)
-            : fKind(kind), fOffset(offset), fLength(length) {}
-
-    Kind fKind;
-    int fOffset;
-    int fLength;
-};
-
-class LayoutLexer {
-public:
-    void start(const char* text, size_t length) {
-        fText = text;
-        fLength = length;
-        fOffset = 0;
-    }
-
-    LayoutToken next();
-
-private:
-    const char* fText;
-    int fLength;
-    int fOffset;
-};
-
-}  // namespace SkSL
-#endif
diff --git a/src/sksl/SkSLParser.cpp b/src/sksl/SkSLParser.cpp
index 46dce11..bdff116 100644
--- a/src/sksl/SkSLParser.cpp
+++ b/src/sksl/SkSLParser.cpp
@@ -46,6 +46,10 @@
 #include "ir/SkSLModifiers.h"
 #include "ir/SkSLType.h"
 
+#ifndef SKSL_STANDALONE
+#include "SkOnce.h"
+#endif
+
 namespace SkSL {
 
 #define MAX_PARSE_DEPTH 50
@@ -73,12 +77,63 @@
     Parser* fParser;
 };
 
+std::unordered_map<String, Parser::LayoutToken> Parser::layoutTokens;
+
+void Parser::InitLayoutMap() {
+    #define TOKEN(name, text) layoutTokens[text] = LayoutToken::name;
+    TOKEN(LOCATION,                     "location");
+    TOKEN(OFFSET,                       "offset");
+    TOKEN(BINDING,                      "binding");
+    TOKEN(INDEX,                        "index");
+    TOKEN(SET,                          "set");
+    TOKEN(BUILTIN,                      "builtin");
+    TOKEN(INPUT_ATTACHMENT_INDEX,       "input_attachment_index");
+    TOKEN(ORIGIN_UPPER_LEFT,            "origin_upper_left");
+    TOKEN(OVERRIDE_COVERAGE,            "override_coverage");
+    TOKEN(BLEND_SUPPORT_ALL_EQUATIONS,  "blend_support_all_equations");
+    TOKEN(BLEND_SUPPORT_MULTIPLY,       "blend_support_multiply");
+    TOKEN(BLEND_SUPPORT_SCREEN,         "blend_support_screen");
+    TOKEN(BLEND_SUPPORT_OVERLAY,        "blend_support_overlay");
+    TOKEN(BLEND_SUPPORT_DARKEN,         "blend_support_darken");
+    TOKEN(BLEND_SUPPORT_LIGHTEN,        "blend_support_lighten");
+    TOKEN(BLEND_SUPPORT_COLORDODGE,     "blend_support_colordodge");
+    TOKEN(BLEND_SUPPORT_COLORBURN,      "blend_support_colorburn");
+    TOKEN(BLEND_SUPPORT_HARDLIGHT,      "blend_support_hardlight");
+    TOKEN(BLEND_SUPPORT_SOFTLIGHT,      "blend_support_softlight");
+    TOKEN(BLEND_SUPPORT_DIFFERENCE,     "blend_support_difference");
+    TOKEN(BLEND_SUPPORT_EXCLUSION,      "blend_support_exclusion");
+    TOKEN(BLEND_SUPPORT_HSL_HUE,        "blend_support_hsl_hue");
+    TOKEN(BLEND_SUPPORT_HSL_SATURATION, "blend_support_hsl_saturation");
+    TOKEN(BLEND_SUPPORT_HSL_COLOR,      "blend_support_hsl_color");
+    TOKEN(BLEND_SUPPORT_HSL_LUMINOSITY, "blend_support_hsl_luminosity");
+    TOKEN(PUSH_CONSTANT,                "push_constant");
+    TOKEN(POINTS,                       "points");
+    TOKEN(LINES,                        "lines");
+    TOKEN(LINE_STRIP,                   "line_strip");
+    TOKEN(LINES_ADJACENCY,              "lines_adjacency");
+    TOKEN(TRIANGLES,                    "triangles");
+    TOKEN(TRIANGLE_STRIP,               "triangle_strip");
+    TOKEN(TRIANGLES_ADJACENCY,          "triangles_adjacency");
+    TOKEN(MAX_VERTICES,                 "max_vertices");
+    TOKEN(INVOCATIONS,                  "invocations");
+    TOKEN(WHEN,                         "when");
+    TOKEN(KEY,                          "key");
+    TOKEN(CTYPE,                        "ctype");
+    #undef TOKEN
+}
+
 Parser::Parser(const char* text, size_t length, SymbolTable& types, ErrorReporter& errors)
 : fText(text)
 , fPushback(Token::INVALID, -1, -1)
 , fTypes(types)
 , fErrors(errors) {
     fLexer.start(text, length);
+#ifdef SKSL_STANDALONE
+    InitLayoutMap();
+#else
+    static SkOnce once;
+    once([] { InitLayoutMap(); });
+#endif
 }
 
 /* (directive | section | declaration)* END_OF_FILE */
@@ -690,10 +745,9 @@
         for (;;) {
             Token t = this->nextToken();
             String text = this->text(t);
-            fLayoutLexer.start(text.c_str(), text.size());
-            int token = fLayoutLexer.next().fKind;
-            if (token != LayoutToken::INVALID) {
-                switch (token) {
+            auto found = layoutTokens.find(text);
+            if (found != layoutTokens.end()) {
+                switch (found->second) {
                     case LayoutToken::LOCATION:
                         location = this->layoutInt();
                         break;
@@ -809,10 +863,10 @@
                         ctype = this->layoutIdentifier();
                         break;
                 }
-            } else if (Layout::ReadFormat(this->text(t), &format)) {
+            } else if (Layout::ReadFormat(text, &format)) {
                // AST::ReadFormat stored the result in 'format'.
             } else {
-                this->error(t, ("'" + this->text(t) + "' is not a valid layout qualifier").c_str());
+                this->error(t, ("'" + text + "' is not a valid layout qualifier").c_str());
             }
             if (this->checkNext(Token::RPAREN)) {
                 break;
diff --git a/src/sksl/SkSLParser.h b/src/sksl/SkSLParser.h
index f067c48..e52eaf9 100644
--- a/src/sksl/SkSLParser.h
+++ b/src/sksl/SkSLParser.h
@@ -15,7 +15,6 @@
 #include "SkSLErrorReporter.h"
 #include "ir/SkSLLayout.h"
 #include "SkSLLexer.h"
-#include "SkSLLayoutLexer.h"
 
 struct yy_buffer_state;
 #define YY_TYPEDEF_YY_BUFFER_STATE
@@ -52,6 +51,47 @@
  */
 class Parser {
 public:
+    enum class LayoutToken {
+        LOCATION,
+        OFFSET,
+        BINDING,
+        INDEX,
+        SET,
+        BUILTIN,
+        INPUT_ATTACHMENT_INDEX,
+        ORIGIN_UPPER_LEFT,
+        OVERRIDE_COVERAGE,
+        BLEND_SUPPORT_ALL_EQUATIONS,
+        BLEND_SUPPORT_MULTIPLY,
+        BLEND_SUPPORT_SCREEN,
+        BLEND_SUPPORT_OVERLAY,
+        BLEND_SUPPORT_DARKEN,
+        BLEND_SUPPORT_LIGHTEN,
+        BLEND_SUPPORT_COLORDODGE,
+        BLEND_SUPPORT_COLORBURN,
+        BLEND_SUPPORT_HARDLIGHT,
+        BLEND_SUPPORT_SOFTLIGHT,
+        BLEND_SUPPORT_DIFFERENCE,
+        BLEND_SUPPORT_EXCLUSION,
+        BLEND_SUPPORT_HSL_HUE,
+        BLEND_SUPPORT_HSL_SATURATION,
+        BLEND_SUPPORT_HSL_COLOR,
+        BLEND_SUPPORT_HSL_LUMINOSITY,
+        PUSH_CONSTANT,
+        POINTS,
+        LINES,
+        LINE_STRIP,
+        LINES_ADJACENCY,
+        TRIANGLES,
+        TRIANGLE_STRIP,
+        TRIANGLES_ADJACENCY,
+        MAX_VERTICES,
+        INVOCATIONS,
+        WHEN,
+        KEY,
+        CTYPE
+    };
+
     Parser(const char* text, size_t length, SymbolTable& types, ErrorReporter& errors);
 
     /**
@@ -66,6 +106,8 @@
     Position position(Token token);
 
 private:
+    static void InitLayoutMap();
+
     /**
      * Return the next token, including whitespace tokens, from the parse stream.
      */
@@ -230,9 +272,10 @@
 
     bool identifier(StringFragment* dest);
 
+    static std::unordered_map<String, LayoutToken> layoutTokens;
+
     const char* fText;
     Lexer fLexer;
-    LayoutLexer fLayoutLexer;
     YY_BUFFER_STATE fBuffer;
     // current parse depth, used to enforce a recursion limit to try to keep us from overflowing the
     // stack on pathological inputs
diff --git a/src/sksl/lex/layout.lex b/src/sksl/lex/layout.lex
deleted file mode 100644
index 87fc944..0000000
--- a/src/sksl/lex/layout.lex
+++ /dev/null
@@ -1,39 +0,0 @@
-LOCATION                     = "location"
-OFFSET                       = "offset"
-BINDING                      = "binding"
-INDEX                        = "index"
-SET                          = "set"
-BUILTIN                      = "builtin"
-INPUT_ATTACHMENT_INDEX       = "input_attachment_index"
-ORIGIN_UPPER_LEFT            = "origin_upper_left"
-OVERRIDE_COVERAGE            = "override_coverage"
-BLEND_SUPPORT_ALL_EQUATIONS  = "blend_support_all_equations"
-BLEND_SUPPORT_MULTIPLY       = "blend_support_multiply"
-BLEND_SUPPORT_SCREEN         = "blend_support_screen"
-BLEND_SUPPORT_OVERLAY        = "blend_support_overlay"
-BLEND_SUPPORT_DARKEN         = "blend_support_darken"
-BLEND_SUPPORT_LIGHTEN        = "blend_support_lighten"
-BLEND_SUPPORT_COLORDODGE     = "blend_support_colordodge"
-BLEND_SUPPORT_COLORBURN      = "blend_support_colorburn"
-BLEND_SUPPORT_HARDLIGHT      = "blend_support_hardlight"
-BLEND_SUPPORT_SOFTLIGHT      = "blend_support_softlight"
-BLEND_SUPPORT_DIFFERENCE     = "blend_support_difference"
-BLEND_SUPPORT_EXCLUSION      = "blend_support_exclusion"
-BLEND_SUPPORT_HSL_HUE        = "blend_support_hsl_hue"
-BLEND_SUPPORT_HSL_SATURATION = "blend_support_hsl_saturation"
-BLEND_SUPPORT_HSL_COLOR      = "blend_support_hsl_color"
-BLEND_SUPPORT_HSL_LUMINOSITY = "blend_support_hsl_luminosity"
-PUSH_CONSTANT                = "push_constant"
-POINTS                       = "points"
-LINES                        = "lines"
-LINE_STRIP                   = "line_strip"
-LINES_ADJACENCY              = "lines_adjacency"
-TRIANGLES                    = "triangles"
-TRIANGLE_STRIP               = "triangle_strip"
-TRIANGLES_ADJACENCY          = "triangles_adjacency"
-MAX_VERTICES                 = "max_vertices"
-INVOCATIONS                  = "invocations"
-WHEN                         = "when"
-KEY                          = "key"
-CTYPE                        = "ctype"
-INVALID                      = .