Add parsing (but not full support) for global default layout qualifiers for block storage and matrix packing.

TRAC #23268

Signed-off-by: Geoff Lang
Signed-off-by: Nicolas Capens
Authored-by: Jamie Madill
diff --git a/src/compiler/BaseTypes.h b/src/compiler/BaseTypes.h
index 9d3811d..a6058d7 100644
--- a/src/compiler/BaseTypes.h
+++ b/src/compiler/BaseTypes.h
@@ -164,6 +164,11 @@
 
         return layoutQualifier;
     }
+
+    bool isEmpty() const
+    {
+        return location == -1 && matrixPacking == EmpUnspecified && blockStorage == EbsUnspecified;
+    }
 };
 
 //
diff --git a/src/compiler/ParseHelper.cpp b/src/compiler/ParseHelper.cpp
index ace297c..25106ec 100644
--- a/src/compiler/ParseHelper.cpp
+++ b/src/compiler/ParseHelper.cpp
@@ -1308,6 +1308,34 @@
     }
 }
 
+void TParseContext::parseGlobalLayoutQualifier(const TPublicType &typeQualifier)
+{
+    if (typeQualifier.qualifier != EvqUniform)
+    {
+        error(typeQualifier.line, "invalid qualifier:", getQualifierString(typeQualifier.qualifier), "global layout must be uniform");
+        recover();
+        return;
+    }
+
+    const TLayoutQualifier layoutQualifier = typeQualifier.layoutQualifier;
+    ASSERT(!layoutQualifier.isEmpty());
+
+    if (shaderVersion < 300)
+    {
+        error(typeQualifier.line, "layout qualifiers supported in GLSL ES 3.00 only", "layout");
+        recover();
+        return;
+    }
+
+    if (layoutLocationErrorCheck(typeQualifier.line, typeQualifier.layoutQualifier))
+    {
+        recover();
+        return;
+    }
+
+    // TODO: global matrix packing and block storage
+}
+
 TFunction *TParseContext::addConstructorFunc(TPublicType publicType)
 {
     TOperator op = EOpNull;
diff --git a/src/compiler/ParseHelper.h b/src/compiler/ParseHelper.h
index d184e26..b0509fb 100644
--- a/src/compiler/ParseHelper.h
+++ b/src/compiler/ParseHelper.h
@@ -122,6 +122,7 @@
     TIntermAggregate* parseSingleDeclaration(TPublicType &publicType, TSourceLoc identifierLocation, const TString &identifier);
     TIntermAggregate* parseSingleArrayDeclaration(TPublicType &publicType, TSourceLoc identifierLocation, const TString &identifier, TSourceLoc indexLocation, TIntermTyped *indexExpression);
     TIntermAggregate* parseSingleInitDeclaration(TPublicType &publicType, TSourceLoc identifierLocation, const TString &identifier, TSourceLoc initLocation, TIntermTyped *initializer);
+    void parseGlobalLayoutQualifier(const TPublicType &typeQualifier);
     TFunction *addConstructorFunc(TPublicType publicType);
     TIntermTyped* addConstructor(TIntermNode*, const TType*, TOperator, TFunction*, TSourceLoc);
     TIntermTyped* foldConstConstructor(TIntermAggregate* aggrNode, const TType& type);
diff --git a/src/compiler/glslang.y b/src/compiler/glslang.y
index d27a87d..23e0d2e 100644
--- a/src/compiler/glslang.y
+++ b/src/compiler/glslang.y
@@ -813,6 +813,10 @@
         ES3_ONLY(getQualifierString($1.qualifier), $1.line, "interface blocks");
         $$ = context->addInterfaceBlock($1, $2.line, *$2.string, $3, *$5.string, $5.line, $7, $6.line);
     }
+    | type_qualifier SEMICOLON {
+        context->parseGlobalLayoutQualifier($1);
+        $$ = 0;
+    }
     ;
 
 function_prototype
diff --git a/src/compiler/glslang_tab.cpp b/src/compiler/glslang_tab.cpp
index 607e79d..da287aa 100644
--- a/src/compiler/glslang_tab.cpp
+++ b/src/compiler/glslang_tab.cpp
@@ -570,18 +570,18 @@
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  100
+#define YYFINAL  101
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2042
+#define YYLAST   2057
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  117
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  91
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  236
+#define YYNRULES  237
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  359
+#define YYNSTATES  360
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -646,22 +646,22 @@
      136,   140,   144,   146,   148,   150,   152,   156,   158,   162,
      164,   168,   170,   176,   178,   182,   184,   186,   188,   190,
      192,   194,   198,   200,   203,   206,   209,   214,   220,   227,
-     237,   240,   242,   244,   247,   251,   255,   258,   264,   268,
-     271,   275,   278,   279,   281,   283,   285,   287,   289,   293,
-     299,   306,   312,   314,   317,   322,   328,   333,   336,   338,
-     341,   343,   345,   347,   349,   351,   354,   356,   359,   361,
-     363,   366,   368,   370,   372,   375,   378,   380,   382,   385,
-     387,   389,   391,   396,   398,   402,   404,   408,   412,   414,
-     419,   421,   423,   425,   427,   429,   431,   433,   435,   437,
-     439,   441,   443,   445,   447,   449,   451,   453,   455,   457,
-     459,   461,   463,   465,   467,   469,   471,   473,   475,   477,
-     479,   481,   483,   484,   491,   492,   498,   500,   503,   507,
-     512,   514,   518,   520,   525,   527,   529,   531,   533,   535,
-     537,   539,   541,   543,   546,   547,   548,   554,   556,   558,
-     559,   562,   563,   566,   569,   573,   575,   578,   580,   583,
-     589,   593,   595,   597,   602,   603,   610,   611,   620,   621,
-     629,   631,   633,   635,   636,   639,   643,   646,   649,   652,
-     656,   659,   661,   664,   666,   668,   669
+     237,   240,   243,   245,   247,   250,   254,   258,   261,   267,
+     271,   274,   278,   281,   282,   284,   286,   288,   290,   292,
+     296,   302,   309,   315,   317,   320,   325,   331,   336,   339,
+     341,   344,   346,   348,   350,   352,   354,   357,   359,   362,
+     364,   366,   369,   371,   373,   375,   378,   381,   383,   385,
+     388,   390,   392,   394,   399,   401,   405,   407,   411,   415,
+     417,   422,   424,   426,   428,   430,   432,   434,   436,   438,
+     440,   442,   444,   446,   448,   450,   452,   454,   456,   458,
+     460,   462,   464,   466,   468,   470,   472,   474,   476,   478,
+     480,   482,   484,   486,   487,   494,   495,   501,   503,   506,
+     510,   515,   517,   521,   523,   528,   530,   532,   534,   536,
+     538,   540,   542,   544,   546,   549,   550,   551,   557,   559,
+     561,   562,   565,   566,   569,   572,   576,   578,   581,   583,
+     586,   592,   596,   598,   600,   605,   606,   613,   614,   623,
+     624,   632,   634,   636,   638,   639,   642,   646,   649,   652,
+     655,   659,   662,   664,   667,   669,   671,   672
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -690,51 +690,51 @@
       65,    97,    -1,   150,   103,    -1,   158,   103,    -1,     7,
      166,   170,   103,    -1,   163,   148,   175,    98,   103,    -1,
      163,   148,   175,    98,    65,   103,    -1,   163,   148,   175,
-      98,    65,    95,   147,    96,   103,    -1,   151,    94,    -1,
-     153,    -1,   152,    -1,   153,   155,    -1,   152,   100,   155,
-      -1,   160,    65,    93,    -1,   165,   118,    -1,   165,   118,
-      95,   147,    96,    -1,   162,   156,   154,    -1,   156,   154,
-      -1,   162,   156,   157,    -1,   156,   157,    -1,    -1,    40,
-      -1,    41,    -1,    42,    -1,   165,    -1,   159,    -1,   158,
-     100,   118,    -1,   158,   100,   118,    95,    96,    -1,   158,
-     100,   118,    95,   147,    96,    -1,   158,   100,   118,   102,
-     179,    -1,   160,    -1,   160,   118,    -1,   160,   118,    95,
-      96,    -1,   160,   118,    95,   147,    96,    -1,   160,   118,
-     102,   179,    -1,     3,    65,    -1,   165,    -1,   163,   165,
-      -1,    53,    -1,    52,    -1,     9,    -1,     8,    -1,    44,
-      -1,     3,    44,    -1,   164,    -1,   161,   164,    -1,   161,
-      -1,   167,    -1,   167,   164,    -1,     9,    -1,    40,    -1,
-      41,    -1,    51,    40,    -1,    51,    41,    -1,    43,    -1,
-     170,    -1,   166,   170,    -1,     4,    -1,     5,    -1,     6,
-      -1,    64,    93,   168,    94,    -1,   169,    -1,   168,   100,
-     169,    -1,    65,    -1,    65,   102,    68,    -1,    65,   102,
-      69,    -1,   171,    -1,   171,    95,   147,    96,    -1,    55,
-      -1,    11,    -1,    12,    -1,    13,    -1,    10,    -1,    31,
-      -1,    32,    -1,    33,    -1,    25,    -1,    26,    -1,    27,
-      -1,    28,    -1,    29,    -1,    30,    -1,    34,    -1,    35,
-      -1,    36,    -1,    37,    -1,    38,    -1,    39,    -1,    45,
-      -1,    46,    -1,    47,    -1,    48,    -1,    49,    -1,    50,
-      -1,    57,    -1,    58,    -1,    59,    -1,    60,    -1,   172,
-      -1,    66,    -1,    -1,    54,   118,    97,   173,   175,    98,
-      -1,    -1,    54,    97,   174,   175,    98,    -1,   176,    -1,
-     175,   176,    -1,   165,   177,   103,    -1,   163,   165,   177,
-     103,    -1,   178,    -1,   177,   100,   178,    -1,   118,    -1,
-     118,    95,   147,    96,    -1,   144,    -1,   149,    -1,   183,
-      -1,   182,    -1,   180,    -1,   192,    -1,   193,    -1,   196,
-      -1,   203,    -1,    97,    98,    -1,    -1,    -1,    97,   184,
-     191,   185,    98,    -1,   190,    -1,   182,    -1,    -1,   188,
-     190,    -1,    -1,   189,   182,    -1,    97,    98,    -1,    97,
-     191,    98,    -1,   181,    -1,   191,   181,    -1,   103,    -1,
-     146,   103,    -1,    19,    93,   146,    94,   194,    -1,   187,
-      17,   187,    -1,   187,    -1,   146,    -1,   160,   118,   102,
-     179,    -1,    -1,    56,    93,   197,   195,    94,   186,    -1,
-      -1,    16,   198,   187,    56,    93,   146,    94,   103,    -1,
-      -1,    18,    93,   199,   200,   202,    94,   186,    -1,   192,
-      -1,   180,    -1,   195,    -1,    -1,   201,   103,    -1,   201,
-     103,   146,    -1,    15,   103,    -1,    14,   103,    -1,    21,
-     103,    -1,    21,   146,   103,    -1,    20,   103,    -1,   205,
-      -1,   204,   205,    -1,   206,    -1,   149,    -1,    -1,   150,
-     207,   190,    -1
+      98,    65,    95,   147,    96,   103,    -1,   163,   103,    -1,
+     151,    94,    -1,   153,    -1,   152,    -1,   153,   155,    -1,
+     152,   100,   155,    -1,   160,    65,    93,    -1,   165,   118,
+      -1,   165,   118,    95,   147,    96,    -1,   162,   156,   154,
+      -1,   156,   154,    -1,   162,   156,   157,    -1,   156,   157,
+      -1,    -1,    40,    -1,    41,    -1,    42,    -1,   165,    -1,
+     159,    -1,   158,   100,   118,    -1,   158,   100,   118,    95,
+      96,    -1,   158,   100,   118,    95,   147,    96,    -1,   158,
+     100,   118,   102,   179,    -1,   160,    -1,   160,   118,    -1,
+     160,   118,    95,    96,    -1,   160,   118,    95,   147,    96,
+      -1,   160,   118,   102,   179,    -1,     3,    65,    -1,   165,
+      -1,   163,   165,    -1,    53,    -1,    52,    -1,     9,    -1,
+       8,    -1,    44,    -1,     3,    44,    -1,   164,    -1,   161,
+     164,    -1,   161,    -1,   167,    -1,   167,   164,    -1,     9,
+      -1,    40,    -1,    41,    -1,    51,    40,    -1,    51,    41,
+      -1,    43,    -1,   170,    -1,   166,   170,    -1,     4,    -1,
+       5,    -1,     6,    -1,    64,    93,   168,    94,    -1,   169,
+      -1,   168,   100,   169,    -1,    65,    -1,    65,   102,    68,
+      -1,    65,   102,    69,    -1,   171,    -1,   171,    95,   147,
+      96,    -1,    55,    -1,    11,    -1,    12,    -1,    13,    -1,
+      10,    -1,    31,    -1,    32,    -1,    33,    -1,    25,    -1,
+      26,    -1,    27,    -1,    28,    -1,    29,    -1,    30,    -1,
+      34,    -1,    35,    -1,    36,    -1,    37,    -1,    38,    -1,
+      39,    -1,    45,    -1,    46,    -1,    47,    -1,    48,    -1,
+      49,    -1,    50,    -1,    57,    -1,    58,    -1,    59,    -1,
+      60,    -1,   172,    -1,    66,    -1,    -1,    54,   118,    97,
+     173,   175,    98,    -1,    -1,    54,    97,   174,   175,    98,
+      -1,   176,    -1,   175,   176,    -1,   165,   177,   103,    -1,
+     163,   165,   177,   103,    -1,   178,    -1,   177,   100,   178,
+      -1,   118,    -1,   118,    95,   147,    96,    -1,   144,    -1,
+     149,    -1,   183,    -1,   182,    -1,   180,    -1,   192,    -1,
+     193,    -1,   196,    -1,   203,    -1,    97,    98,    -1,    -1,
+      -1,    97,   184,   191,   185,    98,    -1,   190,    -1,   182,
+      -1,    -1,   188,   190,    -1,    -1,   189,   182,    -1,    97,
+      98,    -1,    97,   191,    98,    -1,   181,    -1,   191,   181,
+      -1,   103,    -1,   146,   103,    -1,    19,    93,   146,    94,
+     194,    -1,   187,    17,   187,    -1,   187,    -1,   146,    -1,
+     160,   118,   102,   179,    -1,    -1,    56,    93,   197,   195,
+      94,   186,    -1,    -1,    16,   198,   187,    56,    93,   146,
+      94,   103,    -1,    -1,    18,    93,   199,   200,   202,    94,
+     186,    -1,   192,    -1,   180,    -1,   195,    -1,    -1,   201,
+     103,    -1,   201,   103,   146,    -1,    15,   103,    -1,    14,
+     103,    -1,    21,   103,    -1,    21,   146,   103,    -1,    20,
+     103,    -1,   205,    -1,   204,   205,    -1,   206,    -1,   149,
+      -1,    -1,   150,   207,   190,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -748,22 +748,22 @@
      614,   624,   637,   641,   645,   649,   650,   663,   664,   677,
      678,   691,   692,   709,   710,   723,   724,   725,   726,   727,
      731,   734,   745,   753,   761,   788,   793,   804,   808,   812,
-     819,   857,   860,   867,   875,   896,   917,   928,   957,   962,
-     972,   977,   987,   990,   993,   996,  1002,  1009,  1012,  1034,
-    1052,  1076,  1099,  1103,  1107,  1114,  1118,  1122,  1211,  1220,
-    1226,  1230,  1237,  1243,  1250,  1259,  1268,  1271,  1307,  1314,
-    1318,  1325,  1329,  1334,  1339,  1349,  1359,  1368,  1378,  1385,
-    1388,  1391,  1397,  1404,  1407,  1413,  1416,  1419,  1425,  1428,
-    1443,  1447,  1451,  1455,  1459,  1463,  1468,  1473,  1478,  1483,
-    1488,  1493,  1498,  1503,  1508,  1513,  1518,  1523,  1529,  1535,
-    1541,  1546,  1551,  1556,  1561,  1566,  1571,  1576,  1581,  1590,
-    1599,  1604,  1617,  1617,  1620,  1620,  1626,  1629,  1644,  1647,
-    1656,  1660,  1666,  1674,  1690,  1694,  1698,  1699,  1705,  1706,
-    1707,  1708,  1709,  1713,  1714,  1714,  1714,  1724,  1725,  1729,
-    1729,  1730,  1730,  1735,  1738,  1748,  1751,  1757,  1758,  1762,
-    1770,  1774,  1784,  1789,  1806,  1806,  1811,  1811,  1818,  1818,
-    1826,  1829,  1835,  1838,  1844,  1848,  1855,  1862,  1869,  1876,
-    1887,  1896,  1900,  1907,  1910,  1916,  1916
+     816,   823,   861,   864,   871,   879,   900,   921,   932,   961,
+     966,   976,   981,   991,   994,   997,  1000,  1006,  1013,  1016,
+    1038,  1056,  1080,  1103,  1107,  1111,  1118,  1122,  1126,  1215,
+    1224,  1230,  1234,  1241,  1247,  1254,  1263,  1272,  1275,  1311,
+    1318,  1322,  1329,  1333,  1338,  1343,  1353,  1363,  1372,  1382,
+    1389,  1392,  1395,  1401,  1408,  1411,  1417,  1420,  1423,  1429,
+    1432,  1447,  1451,  1455,  1459,  1463,  1467,  1472,  1477,  1482,
+    1487,  1492,  1497,  1502,  1507,  1512,  1517,  1522,  1527,  1533,
+    1539,  1545,  1550,  1555,  1560,  1565,  1570,  1575,  1580,  1585,
+    1594,  1603,  1608,  1621,  1621,  1624,  1624,  1630,  1633,  1648,
+    1651,  1660,  1664,  1670,  1678,  1694,  1698,  1702,  1703,  1709,
+    1710,  1711,  1712,  1713,  1717,  1718,  1718,  1718,  1728,  1729,
+    1733,  1733,  1734,  1734,  1739,  1742,  1752,  1755,  1761,  1762,
+    1766,  1774,  1778,  1788,  1793,  1810,  1810,  1815,  1815,  1822,
+    1822,  1830,  1833,  1839,  1842,  1848,  1852,  1859,  1866,  1873,
+    1880,  1891,  1900,  1904,  1911,  1914,  1920,  1920
 };
 #endif
 
@@ -858,22 +858,22 @@
      136,   136,   137,   138,   139,   140,   140,   141,   141,   142,
      142,   143,   143,   144,   144,   145,   145,   145,   145,   145,
      146,   146,   147,   148,   149,   149,   149,   149,   149,   149,
-     150,   151,   151,   152,   152,   153,   154,   154,   155,   155,
-     155,   155,   156,   156,   156,   156,   157,   158,   158,   158,
-     158,   158,   159,   159,   159,   159,   159,   159,   160,   160,
-     161,   161,   162,   163,   163,   163,   163,   163,   163,   163,
-     163,   164,   164,   164,   164,   164,   164,   165,   165,   166,
-     166,   166,   167,   168,   168,   169,   169,   169,   170,   170,
+     149,   150,   151,   151,   152,   152,   153,   154,   154,   155,
+     155,   155,   155,   156,   156,   156,   156,   157,   158,   158,
+     158,   158,   158,   159,   159,   159,   159,   159,   159,   160,
+     160,   161,   161,   162,   163,   163,   163,   163,   163,   163,
+     163,   163,   164,   164,   164,   164,   164,   164,   165,   165,
+     166,   166,   166,   167,   168,   168,   169,   169,   169,   170,
+     170,   171,   171,   171,   171,   171,   171,   171,   171,   171,
      171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
      171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
-     171,   171,   171,   171,   171,   171,   171,   171,   171,   171,
-     171,   171,   173,   172,   174,   172,   175,   175,   176,   176,
-     177,   177,   178,   178,   179,   180,   181,   181,   182,   182,
-     182,   182,   182,   183,   184,   185,   183,   186,   186,   188,
-     187,   189,   187,   190,   190,   191,   191,   192,   192,   193,
-     194,   194,   195,   195,   197,   196,   198,   196,   199,   196,
-     200,   200,   201,   201,   202,   202,   203,   203,   203,   203,
-     203,   204,   204,   205,   205,   207,   206
+     171,   171,   171,   173,   172,   174,   172,   175,   175,   176,
+     176,   177,   177,   178,   178,   179,   180,   181,   181,   182,
+     182,   182,   182,   182,   183,   184,   185,   183,   186,   186,
+     188,   187,   189,   187,   190,   190,   191,   191,   192,   192,
+     193,   194,   194,   195,   195,   197,   196,   198,   196,   199,
+     196,   200,   200,   201,   201,   202,   202,   203,   203,   203,
+     203,   203,   204,   204,   205,   205,   207,   206
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -887,22 +887,22 @@
        3,     3,     1,     1,     1,     1,     3,     1,     3,     1,
        3,     1,     5,     1,     3,     1,     1,     1,     1,     1,
        1,     3,     1,     2,     2,     2,     4,     5,     6,     9,
-       2,     1,     1,     2,     3,     3,     2,     5,     3,     2,
-       3,     2,     0,     1,     1,     1,     1,     1,     3,     5,
-       6,     5,     1,     2,     4,     5,     4,     2,     1,     2,
-       1,     1,     1,     1,     1,     2,     1,     2,     1,     1,
-       2,     1,     1,     1,     2,     2,     1,     1,     2,     1,
-       1,     1,     4,     1,     3,     1,     3,     3,     1,     4,
+       2,     2,     1,     1,     2,     3,     3,     2,     5,     3,
+       2,     3,     2,     0,     1,     1,     1,     1,     1,     3,
+       5,     6,     5,     1,     2,     4,     5,     4,     2,     1,
+       2,     1,     1,     1,     1,     1,     2,     1,     2,     1,
+       1,     2,     1,     1,     1,     2,     2,     1,     1,     2,
+       1,     1,     1,     4,     1,     3,     1,     3,     3,     1,
+       4,     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,     0,     6,     0,     5,     1,     2,     3,     4,
-       1,     3,     1,     4,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     2,     0,     0,     5,     1,     1,     0,
-       2,     0,     2,     2,     3,     1,     2,     1,     2,     5,
-       3,     1,     1,     4,     0,     6,     0,     8,     0,     7,
-       1,     1,     1,     0,     2,     3,     2,     2,     2,     3,
-       2,     1,     2,     1,     1,     0,     3
+       1,     1,     1,     0,     6,     0,     5,     1,     2,     3,
+       4,     1,     3,     1,     4,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     2,     0,     0,     5,     1,     1,
+       0,     2,     0,     2,     2,     3,     1,     2,     1,     2,
+       5,     3,     1,     1,     4,     0,     6,     0,     8,     0,
+       7,     1,     1,     1,     0,     2,     3,     2,     2,     2,
+       3,     2,     1,     2,     1,     1,     0,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
@@ -910,388 +910,380 @@
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,   129,   130,   131,     0,   113,   121,   144,   141,
-     142,   143,   148,   149,   150,   151,   152,   153,   145,   146,
-     147,   154,   155,   156,   157,   158,   159,   122,   123,   126,
-     114,   160,   161,   162,   163,   164,   165,     0,   111,   110,
-       0,   140,   166,   167,   168,   169,     0,   171,   234,   235,
-       0,    82,    92,     0,    97,   102,   118,     0,   116,   108,
-       0,   119,   127,   138,   170,     0,   231,   233,   115,   107,
-       0,   124,   125,     2,     3,   174,     0,     0,    74,     0,
-      80,    92,   112,    93,    94,    95,    83,     0,    92,     0,
-      75,     2,   103,   117,     0,     0,   109,   128,   120,     0,
-       1,   232,     0,     0,   172,   135,     0,   133,     0,   236,
-      84,    89,    91,    96,     0,    98,    85,     0,     0,    73,
-       0,     0,     0,     0,   176,     4,     8,     6,     7,     9,
-       0,     0,     0,    36,    35,    34,     5,    11,    30,    13,
-      18,    19,     0,     0,    24,     0,    37,     0,    40,    43,
-      44,    49,    52,    53,    54,    55,    57,    59,    61,    72,
-       0,    28,    76,     0,     0,     0,   132,     0,     0,     0,
-     216,     0,     0,     0,     0,     0,   194,   203,   207,    37,
-      63,    70,     0,   185,     0,   138,   188,   205,   187,   186,
-       0,   189,   190,   191,   192,    86,    88,    90,     0,     0,
-     104,     0,   184,   106,     0,   182,     0,   180,     0,   177,
-      31,    32,     0,    15,    16,     0,     0,    22,    21,     0,
-      23,    25,    27,    33,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   139,   175,
-       0,   136,   137,   134,   227,   226,   201,   218,     0,   230,
-     228,     0,   214,   193,     0,    66,    67,    68,    69,    65,
-       0,     0,   208,   204,   206,     0,    99,     0,   101,   105,
-       0,     0,     0,   178,     0,    77,    10,     0,    17,     2,
-       3,    14,    20,    26,    38,    39,    42,    41,    47,    48,
-      45,    46,    50,    51,    56,    58,    60,     0,   173,     0,
-       0,     0,     0,     0,   229,     0,   195,    64,    71,     0,
-     100,   179,     0,   181,     0,    78,    12,     0,     0,   200,
-     202,   221,   220,   223,   201,   212,     0,     0,     0,     0,
-      87,   183,     0,    62,     0,   222,     0,     0,   211,   209,
-       0,     0,   196,     0,     0,   224,     0,   201,     0,   198,
-     215,   197,    79,     0,   225,   219,   210,   213,   217
+       0,     0,   130,   131,   132,     0,   114,   122,   145,   142,
+     143,   144,   149,   150,   151,   152,   153,   154,   146,   147,
+     148,   155,   156,   157,   158,   159,   160,   123,   124,   127,
+     115,   161,   162,   163,   164,   165,   166,     0,   112,   111,
+       0,   141,   167,   168,   169,   170,     0,   172,   235,   236,
+       0,    83,    93,     0,    98,   103,   119,     0,   117,   109,
+       0,   120,   128,   139,   171,     0,   232,   234,   116,   108,
+       0,   125,   126,     2,     3,   175,     0,     0,    74,     0,
+      81,    93,   113,    94,    95,    96,    84,     0,    93,     0,
+      75,     2,   104,   118,     0,    80,     0,   110,   129,   121,
+       0,     1,   233,     0,     0,   173,   136,     0,   134,     0,
+     237,    85,    90,    92,    97,     0,    99,    86,     0,     0,
+      73,     0,     0,     0,     0,   177,     4,     8,     6,     7,
+       9,     0,     0,     0,    36,    35,    34,     5,    11,    30,
+      13,    18,    19,     0,     0,    24,     0,    37,     0,    40,
+      43,    44,    49,    52,    53,    54,    55,    57,    59,    61,
+      72,     0,    28,    76,     0,     0,     0,   133,     0,     0,
+       0,   217,     0,     0,     0,     0,     0,   195,   204,   208,
+      37,    63,    70,     0,   186,     0,   139,   189,   206,   188,
+     187,     0,   190,   191,   192,   193,    87,    89,    91,     0,
+       0,   105,     0,   185,   107,     0,   183,     0,   181,     0,
+     178,    31,    32,     0,    15,    16,     0,     0,    22,    21,
+       0,    23,    25,    27,    33,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   140,
+     176,     0,   137,   138,   135,   228,   227,   202,   219,     0,
+     231,   229,     0,   215,   194,     0,    66,    67,    68,    69,
+      65,     0,     0,   209,   205,   207,     0,   100,     0,   102,
+     106,     0,     0,     0,   179,     0,    77,    10,     0,    17,
+       2,     3,    14,    20,    26,    38,    39,    42,    41,    47,
+      48,    45,    46,    50,    51,    56,    58,    60,     0,   174,
+       0,     0,     0,     0,     0,   230,     0,   196,    64,    71,
+       0,   101,   180,     0,   182,     0,    78,    12,     0,     0,
+     201,   203,   222,   221,   224,   202,   213,     0,     0,     0,
+       0,    88,   184,     0,    62,     0,   223,     0,     0,   212,
+     210,     0,     0,   197,     0,     0,   225,     0,   202,     0,
+     199,   216,   198,    79,     0,   226,   220,   211,   214,   218
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   205,   136,   137,   138,   277,   139,   140,   141,   142,
-     143,   144,   145,   179,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   180,   181,   260,   182,
-     160,    95,   183,   184,    50,    51,    52,   111,    86,    87,
-     112,    53,    54,    55,    56,    88,    57,    58,    59,    60,
-      61,   106,   107,    62,   161,    64,   164,   103,   123,   124,
-     206,   207,   203,   186,   187,   188,   189,   254,   329,   350,
-     299,   300,   301,   351,   190,   191,   192,   339,   328,   193,
-     305,   246,   302,   323,   336,   337,   194,    65,    66,    67,
+      -1,   206,   137,   138,   139,   278,   140,   141,   142,   143,
+     144,   145,   146,   180,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   181,   182,   261,   183,
+     161,    96,   184,   185,    50,    51,    52,   112,    86,    87,
+     113,    53,    54,    55,    56,    88,    57,    58,    59,    60,
+      61,   107,   108,    62,   162,    64,   165,   104,   124,   125,
+     207,   208,   204,   187,   188,   189,   190,   255,   330,   351,
+     300,   301,   302,   352,   191,   192,   193,   340,   329,   194,
+     306,   247,   303,   324,   337,   338,   195,    65,    66,    67,
       79
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -299
+#define YYPACT_NINF -286
 static const yytype_int16 yypact[] =
 {
-    1753,   -13,  -299,  -299,  -299,   189,  -299,  -299,  -299,  -299,
-    -299,  -299,  -299,  -299,  -299,  -299,  -299,  -299,  -299,  -299,
-    -299,  -299,  -299,  -299,  -299,  -299,  -299,  -299,  -299,  -299,
-    -299,  -299,  -299,  -299,  -299,  -299,  -299,    87,  -299,  -299,
-      16,  -299,  -299,  -299,  -299,  -299,   -71,  -299,  -299,   -70,
-       6,   -58,     5,     7,  -299,   104,    50,   231,  -299,  -299,
-    1976,    50,  -299,   -56,  -299,  1689,  -299,  -299,  -299,  -299,
-    1976,  -299,  -299,  -299,  -299,  -299,   -44,    29,  -299,    12,
-    -299,   113,  -299,  -299,  -299,  -299,  -299,  1874,   156,   110,
-    -299,    59,   -61,  -299,    88,  1817,  -299,  -299,  -299,  1297,
-    -299,  -299,    84,  1817,  -299,    99,   -17,  -299,   344,  -299,
-    -299,  -299,  -299,   110,  1874,   -27,  -299,  1039,  1297,  -299,
-     147,  1874,   110,  1467,  -299,   123,  -299,  -299,  -299,  -299,
-    1297,  1297,  1297,  -299,  -299,  -299,  -299,  -299,   -55,  -299,
-    -299,  -299,   109,   -15,  1381,   124,  -299,  1297,    91,   -41,
-    -299,    39,    69,  -299,  -299,  -299,   139,   136,   -60,  -299,
-     128,  -299,  -299,  1541,  1817,   138,  -299,    29,   117,   122,
-    -299,   134,   135,   126,  1126,   137,   133,  -299,  -299,    82,
-    -299,  -299,    17,  -299,   -70,    66,  -299,  -299,  -299,  -299,
-     449,  -299,  -299,  -299,  -299,   143,  -299,  -299,  1210,  1297,
-    -299,   149,  -299,  -299,   110,   144,    57,  -299,   -42,  -299,
-    -299,  -299,    -8,  -299,  -299,  1297,  1925,  -299,  -299,  1297,
-     141,  -299,  -299,  -299,  1297,  1297,  1297,  1297,  1297,  1297,
-    1297,  1297,  1297,  1297,  1297,  1297,  1297,  1297,  -299,  -299,
-    1615,  -299,  -299,  -299,  -299,  -299,   150,  -299,  1297,  -299,
-    -299,    68,  -299,  -299,   554,  -299,  -299,  -299,  -299,  -299,
-    1297,  1297,  -299,  -299,  -299,  1297,  -299,   152,  -299,  -299,
-      89,  1297,   110,  -299,   -67,  -299,  -299,   153,   146,   123,
-     157,  -299,  -299,  -299,  -299,  -299,    91,    91,  -299,  -299,
-    -299,  -299,    39,    39,  -299,   139,   136,   108,  -299,   195,
-      12,   764,   869,    25,  -299,   955,   554,  -299,  -299,   159,
-    -299,  -299,   175,  -299,  1297,  -299,  -299,  1297,   160,  -299,
-    -299,  -299,  -299,   955,   150,   146,   110,  1874,   158,   174,
-    -299,  -299,   177,  -299,  1297,  -299,   171,   188,   266,  -299,
-     182,   659,  -299,   190,    30,  1297,   659,   150,  1297,  -299,
-    -299,  -299,  -299,   191,   146,  -299,  -299,  -299,  -299
+    1768,   -17,  -286,  -286,  -286,   147,  -286,  -286,  -286,  -286,
+    -286,  -286,  -286,  -286,  -286,  -286,  -286,  -286,  -286,  -286,
+    -286,  -286,  -286,  -286,  -286,  -286,  -286,  -286,  -286,  -286,
+    -286,  -286,  -286,  -286,  -286,  -286,  -286,   126,  -286,  -286,
+     -43,  -286,  -286,  -286,  -286,  -286,   -72,  -286,  -286,   -67,
+     -13,   -15,     5,    -5,  -286,   103,     1,   232,  -286,  -286,
+    1991,     1,  -286,    10,  -286,  1704,  -286,  -286,  -286,  -286,
+    1991,  -286,  -286,  -286,  -286,  -286,     3,    45,  -286,    28,
+    -286,    26,  -286,  -286,  -286,  -286,  -286,  1889,   117,   105,
+    -286,    48,   -65,  -286,    35,  -286,  1832,  -286,  -286,  -286,
+    1312,  -286,  -286,    43,  1832,  -286,    52,   -22,  -286,   359,
+    -286,  -286,  -286,  -286,   105,  1889,   -64,  -286,  1054,  1312,
+    -286,    91,  1889,   105,  1482,  -286,    67,  -286,  -286,  -286,
+    -286,  1312,  1312,  1312,  -286,  -286,  -286,  -286,  -286,     2,
+    -286,  -286,  -286,    78,    -8,  1396,    92,  -286,  1312,    66,
+      42,  -286,   -21,    98,  -286,  -286,  -286,   107,   113,   -55,
+    -286,   100,  -286,  -286,  1556,  1832,   112,  -286,    45,    94,
+      95,  -286,   101,   106,    97,  1141,   110,   108,  -286,  -286,
+      46,  -286,  -286,    33,  -286,   -67,    68,  -286,  -286,  -286,
+    -286,   464,  -286,  -286,  -286,  -286,   114,  -286,  -286,  1225,
+    1312,  -286,   111,  -286,  -286,   105,   115,    34,  -286,   -45,
+    -286,  -286,  -286,    13,  -286,  -286,  1312,  1940,  -286,  -286,
+    1312,   118,  -286,  -286,  -286,  1312,  1312,  1312,  1312,  1312,
+    1312,  1312,  1312,  1312,  1312,  1312,  1312,  1312,  1312,  -286,
+    -286,  1630,  -286,  -286,  -286,  -286,  -286,   119,  -286,  1312,
+    -286,  -286,    39,  -286,  -286,   569,  -286,  -286,  -286,  -286,
+    -286,  1312,  1312,  -286,  -286,  -286,  1312,  -286,   116,  -286,
+    -286,    40,  1312,   105,  -286,   -71,  -286,  -286,   123,   120,
+      67,   121,  -286,  -286,  -286,  -286,  -286,    66,    66,  -286,
+    -286,  -286,  -286,   -21,   -21,  -286,   107,   113,    82,  -286,
+     152,    28,   779,   884,    14,  -286,   970,   569,  -286,  -286,
+     125,  -286,  -286,   127,  -286,  1312,  -286,  -286,  1312,   133,
+    -286,  -286,  -286,  -286,   970,   119,   120,   105,  1889,   134,
+     129,  -286,  -286,   135,  -286,  1312,  -286,   132,   136,   212,
+    -286,   137,   674,  -286,   143,    23,  1312,   674,   119,  1312,
+    -286,  -286,  -286,  -286,   144,   120,  -286,  -286,  -286,  -286
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -299,   -39,  -299,  -299,  -299,  -299,  -299,  -299,    76,  -299,
-    -299,  -299,  -299,   -93,  -299,   -16,  -299,   -48,   -20,  -299,
-    -299,  -299,    61,    63,    64,  -299,   -92,  -115,  -299,  -119,
-    -109,  -299,    11,    15,  -299,  -299,  -299,   185,   222,   216,
-     193,  -299,  -299,  -275,  -299,  -299,   -91,    41,   -52,   303,
-    -299,  -299,   142,    28,     0,  -299,  -299,  -299,   -86,   -96,
-     106,    40,  -190,     9,  -180,  -283,  -299,  -299,  -299,   -33,
-    -298,  -299,  -299,   -77,    60,    13,  -299,  -299,    -7,  -299,
-    -299,  -299,  -299,  -299,  -299,  -299,  -299,  -299,   252,  -299,
-    -299
+    -286,   -39,  -286,  -286,  -286,  -286,  -286,  -286,    31,  -286,
+    -286,  -286,  -286,    86,  -286,   -38,  -286,  -111,   -41,  -286,
+    -286,  -286,    16,     4,    12,  -286,   -93,  -117,  -286,  -122,
+    -110,  -286,    15,    17,  -286,  -286,  -286,   138,   169,   164,
+     139,  -286,  -286,  -222,  -286,  -286,   -91,    32,   -53,   251,
+    -286,  -286,   104,   -31,     0,  -286,  -286,  -286,   -86,  -115,
+      69,    11,  -194,   -30,  -179,  -283,  -286,  -286,  -286,   -54,
+    -285,  -286,  -286,   -76,    21,   -20,  -286,  -286,   -29,  -286,
+    -286,  -286,  -286,  -286,  -286,  -286,  -286,  -286,   229,  -286,
+    -286
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -200
+#define YYTABLE_NINF -201
 static const yytype_int16 yytable[] =
 {
-      63,    76,   109,   202,   121,    96,   146,   159,   201,   268,
-     264,    48,   121,   212,    82,    49,    92,   163,   320,   213,
-     214,   236,    77,   274,   146,   159,   338,   209,   314,   221,
-     326,    68,   121,    78,   117,   113,   315,   210,   211,    99,
-     215,   118,    81,   122,   216,    83,    84,    85,   326,   356,
-     115,   122,    69,   104,   223,   251,   237,    63,   349,     7,
-      63,   275,   113,   349,   226,    63,   227,   209,   198,   204,
-      63,   122,   121,   121,   195,   199,    48,   166,   240,   218,
-      49,    73,    74,   167,   202,   219,   276,    63,    97,   267,
-      27,    28,   261,    29,   105,    63,   278,    93,   102,   -81,
-      80,    37,    98,    63,   283,   146,   159,    89,   185,   108,
-      90,   122,   122,    75,    63,   228,   229,   261,   297,   324,
-     262,    63,    82,    63,   353,   261,   264,    71,    72,   303,
-     261,   284,   285,   146,   146,   146,   146,   146,   146,   146,
-     146,   146,   146,   146,   209,   307,   308,   232,   233,   121,
-     230,   231,   116,    83,    84,    85,   309,   272,   357,   -28,
-     273,    99,   312,    63,    63,   255,   256,   257,   261,    91,
-      74,   304,   146,   159,   258,    73,    74,   281,   146,   159,
-     288,   289,   290,   291,   259,   119,   325,   162,   122,   272,
-     185,    68,   311,     2,     3,     4,    83,    84,    85,   224,
-     225,   165,   333,   217,   325,   332,   241,   242,   261,   317,
-     286,   287,   292,   293,   327,   344,   -29,   222,   235,   234,
-     244,   146,   159,   319,   238,   245,   354,   247,   248,   249,
-     252,   253,   327,   202,  -140,     2,     3,     4,   265,   271,
-      63,     8,     9,    10,    11,   269,   261,  -199,   310,   316,
-    -171,   318,   341,   334,   185,   330,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,   331,   342,   343,   345,    96,    31,    32,    33,    34,
-      35,    36,   346,   347,   348,    40,    41,   340,    42,    43,
-      44,    45,   282,   352,   358,   294,    94,    47,   295,   196,
-     296,   185,   185,   110,   114,   185,   185,   197,    70,   243,
-     270,   321,   313,   355,   306,   322,   335,   101,     0,     0,
-       0,     0,     0,   185,     0,     0,     0,    63,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   185,     0,     0,     0,     0,   185,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,   168,   169,
-     170,     0,   171,   172,   173,   174,     0,     0,     0,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-     175,    42,    43,    44,    45,     0,     0,     0,    46,   125,
-      47,   126,   127,   128,   129,     0,     0,     0,   130,   131,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   132,     0,     0,
-       0,   176,   177,     0,     0,     0,     0,   178,   133,   134,
-       0,   135,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,   168,   169,   170,     0,   171,   172,   173,
-     174,     0,     0,     0,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,     0,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,   175,    42,    43,    44,    45,
-       0,     0,     0,    46,   125,    47,   126,   127,   128,   129,
-       0,     0,     0,   130,   131,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   132,     0,     0,     0,   176,   263,     0,     0,
-       0,     0,   178,   133,   134,     0,   135,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,   168,   169,
-     170,     0,   171,   172,   173,   174,     0,     0,     0,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-     175,    42,    43,    44,    45,     0,     0,     0,    46,   125,
-      47,   126,   127,   128,   129,     0,     0,     0,   130,   131,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   132,     0,     0,
-       0,   176,     0,     0,     0,     0,     0,   178,   133,   134,
-       0,   135,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,   168,   169,   170,     0,   171,   172,   173,
-     174,     0,     0,     0,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,     0,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,   175,    42,    43,    44,    45,
-       0,     0,     0,    46,   125,    47,   126,   127,   128,   129,
-       0,     0,     0,   130,   131,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   132,     0,     0,     0,   108,     0,     0,     0,
-       0,     0,   178,   133,   134,     0,   135,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,   168,   169,
-     170,     0,   171,   172,   173,   174,     0,     0,     0,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-     175,    42,    43,    44,    45,     0,     0,     0,    46,   125,
-      47,   126,   127,   128,   129,     0,     0,     0,   130,   131,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   132,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   178,   133,   134,
-       0,   135,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,     0,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,     0,    42,    43,    44,    45,
-       0,     0,     0,    46,   125,    47,   126,   127,   128,   129,
-       0,     0,     0,   130,   131,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   120,     2,
-       3,     4,   132,     6,     7,     8,     9,    10,    11,     0,
-       0,     0,   178,   133,   134,     0,   135,     0,     0,     0,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,     0,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,     0,    42,    43,    44,    45,     0,     0,     0,    46,
-     125,    47,   126,   127,   128,   129,     0,     0,     0,   130,
-     131,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   132,     8,
-       9,    10,    11,     0,     0,     0,     0,     0,     0,   133,
-     134,     0,   135,     0,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,     0,
-       0,     0,     0,     0,    31,    32,    33,    34,    35,    36,
-       0,     0,     0,    40,    41,     0,    42,    43,    44,    45,
-       0,     0,     0,     0,   125,    47,   126,   127,   128,   129,
-       0,     0,     0,   130,   131,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   132,     0,     0,   200,     8,     9,    10,    11,
-       0,     0,     0,   133,   134,     0,   135,     0,     0,     0,
-       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
-       0,    31,    32,    33,    34,    35,    36,     0,     0,     0,
-      40,    41,     0,    42,    43,    44,    45,     0,     0,     0,
-       0,   125,    47,   126,   127,   128,   129,     0,     0,     0,
-     130,   131,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   132,
-       8,     9,    10,    11,     0,     0,     0,     0,     0,   250,
-     133,   134,     0,   135,     0,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-       0,     0,     0,     0,     0,    31,    32,    33,    34,    35,
-      36,     0,     0,     0,    40,    41,     0,    42,    43,    44,
-      45,     0,     0,     0,     0,   125,    47,   126,   127,   128,
-     129,     0,     0,     0,   130,   131,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   132,     0,     0,   266,     8,     9,    10,
-      11,     0,     0,     0,   133,   134,     0,   135,     0,     0,
-       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,     0,     0,     0,
-       0,     0,    31,    32,    33,    34,    35,    36,     0,     0,
-       0,    40,    41,     0,    42,    43,    44,    45,     0,     0,
-       0,     0,   125,    47,   126,   127,   128,   129,     0,     0,
-       0,   130,   131,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     132,     8,     9,    10,    11,     0,     0,     0,     0,     0,
-       0,   133,   134,     0,   135,     0,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,     0,     0,     0,     0,     0,    31,    32,    33,    34,
-      35,    36,     0,     0,     0,    40,   220,     0,    42,    43,
-      44,    45,     0,     0,     0,     0,   125,    47,   126,   127,
-     128,   129,     0,     0,     0,   130,   131,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     120,     2,     3,     4,   132,     6,     7,     8,     9,    10,
-      11,     0,     0,     0,     0,   133,   134,     0,   135,     0,
-       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,     0,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,     0,    42,    43,    44,    45,     0,     0,
-       0,    46,     0,    47,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   120,     2,     3,     4,     0,     6,
-       7,     8,     9,    10,    11,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   208,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,     0,    42,    43,
-      44,    45,     0,     0,     0,    46,     0,    47,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   120,     2,
-       3,     4,     0,     6,     7,     8,     9,    10,    11,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   239,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,     0,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,     0,    42,    43,    44,    45,     0,     0,     0,    46,
-       0,    47,     0,     0,     0,     0,     0,     0,     0,   100,
+      63,    76,   203,   110,    97,   122,   269,   160,   202,   210,
+       7,   213,   265,   122,    82,    48,    92,    49,   164,   321,
+     275,    77,    73,    74,   315,   160,   237,    68,   222,    98,
+     118,   199,   316,   122,   114,    82,    78,   119,   200,   103,
+     339,    27,    28,   123,    29,    83,    84,    85,    69,   210,
+     116,   123,    37,   252,    75,   229,   230,    63,   276,   350,
+      63,   238,   114,   357,   350,    63,    83,    84,    85,   205,
+      63,   123,   167,   122,   122,   196,   214,   215,   168,   241,
+      48,    80,    49,   203,   327,    81,   219,    63,    93,   268,
+     231,   232,   220,    99,   279,    89,    63,   216,    90,   -82,
+     105,   217,   327,   284,    63,   100,   160,   277,   325,   186,
+     106,   123,   123,   262,   262,    63,   298,   354,   289,   290,
+     291,   292,    63,   262,    63,   109,   210,   304,   265,   256,
+     257,   258,   120,   262,   273,    68,   263,   274,   259,   262,
+     273,   117,   305,   312,   308,   309,   163,   227,   260,   228,
+     122,     2,     3,     4,   166,   358,   310,    83,    84,    85,
+     -29,   -28,   313,   100,    63,    63,    71,    72,    91,    74,
+      73,    74,   218,   160,   225,   226,   233,   234,   282,   160,
+     242,   243,   262,   318,   326,   223,   147,   235,   123,   287,
+     288,   186,   293,   294,   248,   236,   239,   245,   246,   249,
+     250,   334,   326,   253,   147,   333,   254,   270,   319,   266,
+     272,  -141,   311,   345,  -172,   328,  -200,   211,   212,   317,
+     262,   331,   160,   332,   355,   320,   335,   343,   342,   348,
+     347,   344,   203,   328,   224,   346,     2,     3,     4,   349,
+     296,    63,     8,     9,    10,    11,   353,   359,   283,   297,
+     111,   295,   115,   197,   198,   186,    70,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,   244,   322,   271,    97,   307,    31,    32,    33,
+      34,    35,    36,   323,   314,   147,    40,    41,   341,    42,
+      43,    44,    45,   356,   102,   336,     0,    94,    47,     0,
+       0,     0,   186,   186,     0,     0,   186,   186,     0,     0,
+       0,   285,   286,   147,   147,   147,   147,   147,   147,   147,
+     147,   147,   147,   147,   186,     0,     0,     0,    63,     0,
+       0,     0,     0,     0,     0,    95,     0,     0,     0,     0,
+       0,     0,   186,     0,     0,     0,     0,   186,     0,     0,
+       0,     0,   147,     0,     0,     0,     0,     0,   147,     0,
        0,     0,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   298,    12,    13,    14,    15,    16,    17,
+       9,    10,    11,   169,   170,   171,     0,   172,   173,   174,
+     175,     0,     0,     0,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,   147,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,   176,    42,    43,    44,    45,
+       0,     0,     0,    46,   126,    47,   127,   128,   129,   130,
+       0,     0,     0,   131,   132,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   133,     0,     0,     0,   177,   178,     0,     0,
+       0,     0,   179,   134,   135,     0,   136,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,   169,   170,
+     171,     0,   172,   173,   174,   175,     0,     0,     0,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+     176,    42,    43,    44,    45,     0,     0,     0,    46,   126,
+      47,   127,   128,   129,   130,     0,     0,     0,   131,   132,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   133,     0,     0,
+       0,   177,   264,     0,     0,     0,     0,   179,   134,   135,
+       0,   136,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,   169,   170,   171,     0,   172,   173,   174,
+     175,     0,     0,     0,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,     0,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,     0,    42,    43,    44,    45,
-       0,     0,     0,    46,     0,    47,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,     0,
-      42,    43,    44,    45,     0,     0,     0,    46,     0,    47,
-     120,     2,     3,     4,     0,     6,     7,     8,     9,    10,
-      11,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,     0,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,     0,    42,    43,    44,    45,     2,     3,
-       4,    46,     0,    47,     8,     9,    10,    11,     0,     0,
+      37,    38,    39,    40,    41,   176,    42,    43,    44,    45,
+       0,     0,     0,    46,   126,    47,   127,   128,   129,   130,
+       0,     0,     0,   131,   132,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   133,     0,     0,     0,   177,     0,     0,     0,
+       0,     0,   179,   134,   135,     0,   136,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,   169,   170,
+     171,     0,   172,   173,   174,   175,     0,     0,     0,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+     176,    42,    43,    44,    45,     0,     0,     0,    46,   126,
+      47,   127,   128,   129,   130,     0,     0,     0,   131,   132,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   133,     0,     0,
+       0,   109,     0,     0,     0,     0,     0,   179,   134,   135,
+       0,   136,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,   169,   170,   171,     0,   172,   173,   174,
+     175,     0,     0,     0,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,     0,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,   176,    42,    43,    44,    45,
+       0,     0,     0,    46,   126,    47,   127,   128,   129,   130,
+       0,     0,     0,   131,   132,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   133,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   179,   134,   135,     0,   136,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+       0,    42,    43,    44,    45,     0,     0,     0,    46,   126,
+      47,   127,   128,   129,   130,     0,     0,     0,   131,   132,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   121,     2,     3,     4,   133,     6,     7,
+       8,     9,    10,    11,     0,     0,     0,   179,   134,   135,
+       0,   136,     0,     0,     0,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,     0,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,     0,    42,    43,    44,
+      45,     0,     0,     0,    46,   126,    47,   127,   128,   129,
+     130,     0,     0,     0,   131,   132,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   133,     8,     9,    10,    11,     0,     0,
+       0,     0,     0,     0,   134,   135,     0,   136,     0,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,     0,     0,     0,     0,     0,    31,
       32,    33,    34,    35,    36,     0,     0,     0,    40,    41,
-       0,    42,    43,    44,    45,     8,     9,    10,    11,     0,
-      47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    42,    43,    44,    45,     0,     0,     0,     0,   126,
+      47,   127,   128,   129,   130,     0,     0,     0,   131,   132,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   133,     0,     0,
+     201,     8,     9,    10,    11,     0,     0,     0,   134,   135,
+       0,   136,     0,     0,     0,     0,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,     0,     0,     0,     0,     0,    31,    32,    33,    34,
+      35,    36,     0,     0,     0,    40,    41,     0,    42,    43,
+      44,    45,     0,     0,     0,     0,   126,    47,   127,   128,
+     129,   130,     0,     0,     0,   131,   132,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   133,     8,     9,    10,    11,     0,
+       0,     0,     0,     0,   251,   134,   135,     0,   136,     0,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,     0,     0,     0,     0,     0,
       31,    32,    33,    34,    35,    36,     0,     0,     0,    40,
-      41,     0,    42,    43,    44,    45,     8,     9,    10,    11,
-     279,   280,     0,     0,     0,     0,     0,     0,     0,     0,
+      41,     0,    42,    43,    44,    45,     0,     0,     0,     0,
+     126,    47,   127,   128,   129,   130,     0,     0,     0,   131,
+     132,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   133,     0,
+       0,   267,     8,     9,    10,    11,     0,     0,     0,   134,
+     135,     0,   136,     0,     0,     0,     0,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,     0,     0,     0,     0,     0,    31,    32,    33,
+      34,    35,    36,     0,     0,     0,    40,    41,     0,    42,
+      43,    44,    45,     0,     0,     0,     0,   126,    47,   127,
+     128,   129,   130,     0,     0,     0,   131,   132,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   133,     8,     9,    10,    11,
+       0,     0,     0,     0,     0,     0,   134,   135,     0,   136,
        0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
        0,    31,    32,    33,    34,    35,    36,     0,     0,     0,
+      40,   221,     0,    42,    43,    44,    45,     0,     0,     0,
+       0,   126,    47,   127,   128,   129,   130,     0,     0,     0,
+     131,   132,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   121,     2,     3,     4,   133,
+       6,     7,     8,     9,    10,    11,     0,     0,     0,     0,
+     134,   135,     0,   136,     0,     0,     0,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,     0,    42,
+      43,    44,    45,     0,     0,     0,    46,     0,    47,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   121,
+       2,     3,     4,     0,     6,     7,     8,     9,    10,    11,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     209,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,     0,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
       40,    41,     0,    42,    43,    44,    45,     0,     0,     0,
-       0,     0,    47
+      46,     0,    47,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   121,     2,     3,     4,     0,     6,     7,
+       8,     9,    10,    11,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   240,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,     0,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,     0,    42,    43,    44,
+      45,     0,     0,     0,    46,     0,    47,     0,     0,     0,
+       0,     0,     0,     0,   101,     0,     0,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   299,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+       0,    42,    43,    44,    45,     0,     0,     0,    46,     0,
+      47,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+       0,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,     0,    42,    43,    44,    45,     0,
+       0,     0,    46,     0,    47,   121,     2,     3,     4,     0,
+       6,     7,     8,     9,    10,    11,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,     0,    42,
+      43,    44,    45,     2,     3,     4,    46,     0,    47,     8,
+       9,    10,    11,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,     0,
+       0,     0,     0,     0,    31,    32,    33,    34,    35,    36,
+       0,     0,     0,    40,    41,     0,    42,    43,    44,    45,
+       8,     9,    10,    11,     0,    47,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+       0,     0,     0,     0,     0,    31,    32,    33,    34,    35,
+      36,     0,     0,     0,    40,    41,     0,    42,    43,    44,
+      45,     8,     9,    10,    11,   280,   281,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,     0,     0,     0,     0,     0,    31,    32,    33,    34,
+      35,    36,     0,     0,     0,    40,    41,     0,    42,    43,
+      44,    45,     0,     0,     0,     0,     0,    47
 };
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-299)))
+  (!!((Yystate) == (-286)))
 
 #define yytable_value_is_error(Yytable_value) \
   YYID (0)
 
 static const yytype_int16 yycheck[] =
 {
-       0,    40,    79,   118,    95,    57,    99,    99,   117,   199,
-     190,     0,   103,   132,     9,     0,    55,   103,   301,    74,
-      75,    81,    93,    65,   117,   117,   324,   123,    95,   144,
-     305,    44,   123,   103,    95,    87,   103,   130,   131,    95,
-      95,   102,   100,    95,    99,    40,    41,    42,   323,   347,
-      89,   103,    65,    97,   147,   174,   116,    57,   341,     9,
-      60,   103,   114,   346,   105,    65,   107,   163,    95,   121,
-      70,   123,   163,   164,   113,   102,    65,    94,   164,    94,
-      65,    65,    66,   100,   199,   100,    94,    87,    60,   198,
-      40,    41,   100,    43,    65,    95,   215,    56,    70,    94,
-      94,    51,    61,   103,   219,   198,   198,   100,   108,    97,
-     103,   163,   164,    97,   114,    76,    77,   100,   237,    94,
-     103,   121,     9,   123,    94,   100,   306,    40,    41,   248,
-     100,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   240,   260,   261,    78,    79,   240,
-     111,   112,    93,    40,    41,    42,   265,   100,   348,    93,
-     103,    95,   271,   163,   164,    83,    84,    85,   100,    65,
-      66,   103,   265,   265,    92,    65,    66,   216,   271,   271,
-     228,   229,   230,   231,   102,    97,   305,   103,   240,   100,
-     190,    44,   103,     4,     5,     6,    40,    41,    42,   108,
-     109,   102,   317,    94,   323,   314,    68,    69,   100,   101,
-     226,   227,   232,   233,   305,   334,    93,    93,    82,    80,
-     103,   314,   314,   300,    96,   103,   345,    93,    93,   103,
-      93,    98,   323,   348,    93,     4,     5,     6,    95,    95,
-     240,    10,    11,    12,    13,    96,   100,    97,    96,    96,
-      93,    56,    94,    93,   254,    96,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    96,    98,    96,   103,   327,    45,    46,    47,    48,
-      49,    50,    94,    17,   102,    54,    55,   326,    57,    58,
-      59,    60,   216,   103,   103,   234,    65,    66,   235,   114,
-     236,   301,   302,    81,    88,   305,   306,   114,     5,   167,
-     204,   302,   272,   346,   254,   302,   323,    65,    -1,    -1,
-      -1,    -1,    -1,   323,    -1,    -1,    -1,   327,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   341,    -1,    -1,    -1,    -1,   346,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    -1,    18,    19,    20,    21,    -1,    -1,    -1,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    -1,    -1,    -1,    64,    65,
-      66,    67,    68,    69,    70,    -1,    -1,    -1,    74,    75,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,
-      -1,    97,    98,    -1,    -1,    -1,    -1,   103,   104,   105,
-      -1,   107,     3,     4,     5,     6,     7,     8,     9,    10,
+       0,    40,   119,    79,    57,    96,   200,   100,   118,   124,
+       9,   133,   191,   104,     9,     0,    55,     0,   104,   302,
+      65,    93,    65,    66,    95,   118,    81,    44,   145,    60,
+      95,    95,   103,   124,    87,     9,   103,   102,   102,    70,
+     325,    40,    41,    96,    43,    40,    41,    42,    65,   164,
+      89,   104,    51,   175,    97,    76,    77,    57,   103,   342,
+      60,   116,   115,   348,   347,    65,    40,    41,    42,   122,
+      70,   124,    94,   164,   165,   114,    74,    75,   100,   165,
+      65,    94,    65,   200,   306,   100,    94,    87,    56,   199,
+     111,   112,   100,    61,   216,   100,    96,    95,   103,    94,
+      97,    99,   324,   220,   104,    95,   199,    94,    94,   109,
+      65,   164,   165,   100,   100,   115,   238,    94,   229,   230,
+     231,   232,   122,   100,   124,    97,   241,   249,   307,    83,
+      84,    85,    97,   100,   100,    44,   103,   103,    92,   100,
+     100,    93,   103,   103,   261,   262,   103,   105,   102,   107,
+     241,     4,     5,     6,   102,   349,   266,    40,    41,    42,
+      93,    93,   272,    95,   164,   165,    40,    41,    65,    66,
+      65,    66,    94,   266,   108,   109,    78,    79,   217,   272,
+      68,    69,   100,   101,   306,    93,   100,    80,   241,   227,
+     228,   191,   233,   234,    93,    82,    96,   103,   103,    93,
+     103,   318,   324,    93,   118,   315,    98,    96,    56,    95,
+      95,    93,    96,   335,    93,   306,    97,   131,   132,    96,
+     100,    96,   315,    96,   346,   301,    93,    98,    94,    17,
+      94,    96,   349,   324,   148,   103,     4,     5,     6,   102,
+     236,   241,    10,    11,    12,    13,   103,   103,   217,   237,
+      81,   235,    88,   115,   115,   255,     5,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,   168,   303,   205,   328,   255,    45,    46,    47,
+      48,    49,    50,   303,   273,   199,    54,    55,   327,    57,
+      58,    59,    60,   347,    65,   324,    -1,    65,    66,    -1,
+      -1,    -1,   302,   303,    -1,    -1,   306,   307,    -1,    -1,
+      -1,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   324,    -1,    -1,    -1,   328,    -1,
+      -1,    -1,    -1,    -1,    -1,   103,    -1,    -1,    -1,    -1,
+      -1,    -1,   342,    -1,    -1,    -1,    -1,   347,    -1,    -1,
+      -1,    -1,   266,    -1,    -1,    -1,    -1,    -1,   272,    -1,
+      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
       21,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    -1,    43,    44,    45,    46,    47,    48,    49,    50,
+      41,   315,    43,    44,    45,    46,    47,    48,    49,    50,
       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
       -1,    -1,    -1,    64,    65,    66,    67,    68,    69,    70,
       -1,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,    -1,
@@ -1307,7 +1299,7 @@
       66,    67,    68,    69,    70,    -1,    -1,    -1,    74,    75,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,
-      -1,    97,    -1,    -1,    -1,    -1,    -1,   103,   104,   105,
+      -1,    97,    98,    -1,    -1,    -1,    -1,   103,   104,   105,
       -1,   107,     3,     4,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
       21,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
@@ -1328,125 +1320,135 @@
       66,    67,    68,    69,    70,    -1,    -1,    -1,    74,    75,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   103,   104,   105,
+      -1,    97,    -1,    -1,    -1,    -1,    -1,   103,   104,   105,
       -1,   107,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
+      11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
+      21,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
       41,    -1,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    -1,    57,    58,    59,    60,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
       -1,    -1,    -1,    64,    65,    66,    67,    68,    69,    70,
       -1,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
-       5,     6,    93,     8,     9,    10,    11,    12,    13,    -1,
-      -1,    -1,   103,   104,   105,    -1,   107,    -1,    -1,    -1,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    -1,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    -1,    57,    58,    59,    60,    -1,    -1,    -1,    64,
-      65,    66,    67,    68,    69,    70,    -1,    -1,    -1,    74,
-      75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    10,
-      11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,   104,
-     105,    -1,   107,    -1,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
-      -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
-      -1,    -1,    -1,    54,    55,    -1,    57,    58,    59,    60,
-      -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,    70,
-      -1,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    93,    -1,    -1,    96,    10,    11,    12,    13,
-      -1,    -1,    -1,   104,   105,    -1,   107,    -1,    -1,    -1,
-      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
-      -1,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
-      54,    55,    -1,    57,    58,    59,    60,    -1,    -1,    -1,
-      -1,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
-      74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,
-      10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,   103,
-     104,   105,    -1,   107,    -1,    25,    26,    27,    28,    29,
+      -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   103,   104,   105,    -1,   107,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      -1,    57,    58,    59,    60,    -1,    -1,    -1,    64,    65,
+      66,    67,    68,    69,    70,    -1,    -1,    -1,    74,    75,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,     3,     4,     5,     6,    93,     8,     9,
+      10,    11,    12,    13,    -1,    -1,    -1,   103,   104,   105,
+      -1,   107,    -1,    -1,    -1,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,
-      50,    -1,    -1,    -1,    54,    55,    -1,    57,    58,    59,
-      60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,    69,
+      40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    -1,    57,    58,    59,
+      60,    -1,    -1,    -1,    64,    65,    66,    67,    68,    69,
       70,    -1,    -1,    -1,    74,    75,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    93,    -1,    -1,    96,    10,    11,    12,
-      13,    -1,    -1,    -1,   104,   105,    -1,   107,    -1,    -1,
-      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    -1,    -1,    -1,
-      -1,    -1,    45,    46,    47,    48,    49,    50,    -1,    -1,
-      -1,    54,    55,    -1,    57,    58,    59,    60,    -1,    -1,
-      -1,    -1,    65,    66,    67,    68,    69,    70,    -1,    -1,
-      -1,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    93,    10,    11,    12,    13,    -1,    -1,
+      -1,    -1,    -1,    -1,   104,   105,    -1,   107,    -1,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
+      46,    47,    48,    49,    50,    -1,    -1,    -1,    54,    55,
+      -1,    57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,
+      66,    67,    68,    69,    70,    -1,    -1,    -1,    74,    75,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      93,    10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,
-      -1,   104,   105,    -1,   107,    -1,    25,    26,    27,    28,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,
+      96,    10,    11,    12,    13,    -1,    -1,    -1,   104,   105,
+      -1,   107,    -1,    -1,    -1,    -1,    25,    26,    27,    28,
       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
       39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,
       49,    50,    -1,    -1,    -1,    54,    55,    -1,    57,    58,
       59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,    68,
       69,    70,    -1,    -1,    -1,    74,    75,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       3,     4,     5,     6,    93,     8,     9,    10,    11,    12,
-      13,    -1,    -1,    -1,    -1,   104,   105,    -1,   107,    -1,
-      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    -1,    57,    58,    59,    60,    -1,    -1,
-      -1,    64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     3,     4,     5,     6,    -1,     8,
-       9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    98,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    -1,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
-      59,    60,    -1,    -1,    -1,    64,    -1,    66,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
-       5,     6,    -1,     8,     9,    10,    11,    12,    13,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    98,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    -1,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    -1,    57,    58,    59,    60,    -1,    -1,    -1,    64,
-      -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     0,
-      -1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    98,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    -1,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    -1,    57,    58,    59,    60,
-      -1,    -1,    -1,    64,    -1,    66,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    -1,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    -1,
-      57,    58,    59,    60,    -1,    -1,    -1,    64,    -1,    66,
-       3,     4,     5,     6,    -1,     8,     9,    10,    11,    12,
-      13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    -1,    57,    58,    59,    60,     4,     5,
-       6,    64,    -1,    66,    10,    11,    12,    13,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
-      46,    47,    48,    49,    50,    -1,    -1,    -1,    54,    55,
-      -1,    57,    58,    59,    60,    10,    11,    12,    13,    -1,
-      66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    93,    10,    11,    12,    13,    -1,
+      -1,    -1,    -1,    -1,   103,   104,   105,    -1,   107,    -1,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
       45,    46,    47,    48,    49,    50,    -1,    -1,    -1,    54,
-      55,    -1,    57,    58,    59,    60,    10,    11,    12,    13,
-      65,    66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      55,    -1,    57,    58,    59,    60,    -1,    -1,    -1,    -1,
+      65,    66,    67,    68,    69,    70,    -1,    -1,    -1,    74,
+      75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,
+      -1,    96,    10,    11,    12,    13,    -1,    -1,    -1,   104,
+     105,    -1,   107,    -1,    -1,    -1,    -1,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
+      48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,    57,
+      58,    59,    60,    -1,    -1,    -1,    -1,    65,    66,    67,
+      68,    69,    70,    -1,    -1,    -1,    74,    75,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    93,    10,    11,    12,    13,
+      -1,    -1,    -1,    -1,    -1,    -1,   104,   105,    -1,   107,
       -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
       -1,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
       54,    55,    -1,    57,    58,    59,    60,    -1,    -1,    -1,
-      -1,    -1,    66
+      -1,    65,    66,    67,    68,    69,    70,    -1,    -1,    -1,
+      74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,    93,
+       8,     9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
+     104,   105,    -1,   107,    -1,    -1,    -1,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    -1,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
+      58,    59,    60,    -1,    -1,    -1,    64,    -1,    66,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
+       4,     5,     6,    -1,     8,     9,    10,    11,    12,    13,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      98,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    -1,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    -1,    57,    58,    59,    60,    -1,    -1,    -1,
+      64,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,     3,     4,     5,     6,    -1,     8,     9,
+      10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    98,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    -1,    57,    58,    59,
+      60,    -1,    -1,    -1,    64,    -1,    66,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,     0,    -1,    -1,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    98,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      -1,    57,    58,    59,    60,    -1,    -1,    -1,    64,    -1,
+      66,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    -1,    57,    58,    59,    60,    -1,
+      -1,    -1,    64,    -1,    66,     3,     4,     5,     6,    -1,
+       8,     9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    -1,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
+      58,    59,    60,     4,     5,     6,    64,    -1,    66,    10,
+      11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
+      -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
+      -1,    -1,    -1,    54,    55,    -1,    57,    58,    59,    60,
+      10,    11,    12,    13,    -1,    66,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,
+      50,    -1,    -1,    -1,    54,    55,    -1,    57,    58,    59,
+      60,    10,    11,    12,    13,    65,    66,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,
+      49,    50,    -1,    -1,    -1,    54,    55,    -1,    57,    58,
+      59,    60,    -1,    -1,    -1,    -1,    -1,    66
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1462,33 +1464,33 @@
      166,   167,   170,   171,   172,   204,   205,   206,    44,    65,
      166,    40,    41,    65,    66,    97,   118,    93,   103,   207,
       94,   100,     9,    40,    41,    42,   155,   156,   162,   100,
-     103,    65,   118,   164,    65,   148,   165,   170,   164,    95,
-       0,   205,   170,   174,    97,    65,   168,   169,    97,   190,
-     155,   154,   157,   165,   156,   118,    93,    95,   102,    97,
-       3,   163,   165,   175,   176,    65,    67,    68,    69,    70,
-      74,    75,    93,   104,   105,   107,   119,   120,   121,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     147,   171,   103,   175,   173,   102,    94,   100,    14,    15,
-      16,    18,    19,    20,    21,    56,    97,    98,   103,   130,
-     143,   144,   146,   149,   150,   171,   180,   181,   182,   183,
-     191,   192,   193,   196,   203,   118,   154,   157,    95,   102,
-      96,   147,   144,   179,   165,   118,   177,   178,    98,   176,
-     130,   130,   146,    74,    75,    95,    99,    94,    94,   100,
-      55,   144,    93,   130,   108,   109,   105,   107,    76,    77,
-     111,   112,    78,    79,    80,    82,    81,   116,    96,    98,
-     175,    68,    69,   169,   103,   103,   198,    93,    93,   103,
-     103,   146,    93,    98,   184,    83,    84,    85,    92,   102,
-     145,   100,   103,    98,   181,    95,    96,   147,   179,    96,
-     177,    95,   100,   103,    65,   103,    94,   122,   146,    65,
-      66,   118,   125,   144,   130,   130,   132,   132,   134,   134,
-     134,   134,   135,   135,   139,   140,   141,   146,    98,   187,
-     188,   189,   199,   146,   103,   197,   191,   144,   144,   147,
-      96,   103,   147,   178,    95,   103,    96,   101,    56,   190,
-     182,   180,   192,   200,    94,   146,   160,   163,   195,   185,
-      96,    96,   147,   144,    93,   195,   201,   202,   187,   194,
-     118,    94,    98,    96,   146,   103,    94,    17,   102,   182,
-     186,   190,   103,    94,   146,   186,   187,   179,   103
+     103,    65,   118,   164,    65,   103,   148,   165,   170,   164,
+      95,     0,   205,   170,   174,    97,    65,   168,   169,    97,
+     190,   155,   154,   157,   165,   156,   118,    93,    95,   102,
+      97,     3,   163,   165,   175,   176,    65,    67,    68,    69,
+      70,    74,    75,    93,   104,   105,   107,   119,   120,   121,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   147,   171,   103,   175,   173,   102,    94,   100,    14,
+      15,    16,    18,    19,    20,    21,    56,    97,    98,   103,
+     130,   143,   144,   146,   149,   150,   171,   180,   181,   182,
+     183,   191,   192,   193,   196,   203,   118,   154,   157,    95,
+     102,    96,   147,   144,   179,   165,   118,   177,   178,    98,
+     176,   130,   130,   146,    74,    75,    95,    99,    94,    94,
+     100,    55,   144,    93,   130,   108,   109,   105,   107,    76,
+      77,   111,   112,    78,    79,    80,    82,    81,   116,    96,
+      98,   175,    68,    69,   169,   103,   103,   198,    93,    93,
+     103,   103,   146,    93,    98,   184,    83,    84,    85,    92,
+     102,   145,   100,   103,    98,   181,    95,    96,   147,   179,
+      96,   177,    95,   100,   103,    65,   103,    94,   122,   146,
+      65,    66,   118,   125,   144,   130,   130,   132,   132,   134,
+     134,   134,   134,   135,   135,   139,   140,   141,   146,    98,
+     187,   188,   189,   199,   146,   103,   197,   191,   144,   144,
+     147,    96,   103,   147,   178,    95,   103,    96,   101,    56,
+     190,   182,   180,   192,   200,    94,   146,   160,   163,   195,
+     185,    96,    96,   147,   144,    93,   195,   201,   202,   187,
+     194,   118,    94,    98,    96,   146,   103,    94,    17,   102,
+     182,   186,   190,   103,    94,   146,   186,   187,   179,   103
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -3140,6 +3142,14 @@
   case 80:
 
     {
+        context->parseGlobalLayoutQualifier((yyvsp[(1) - (2)].interm.type));
+        (yyval.interm.intermNode) = 0;
+    }
+    break;
+
+  case 81:
+
+    {
         //
         // Multiple declarations of the same function are allowed.
         //
@@ -3176,13 +3186,6 @@
     }
     break;
 
-  case 81:
-
-    {
-        (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function);
-    }
-    break;
-
   case 82:
 
     {
@@ -3193,6 +3196,13 @@
   case 83:
 
     {
+        (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function);
+    }
+    break;
+
+  case 84:
+
+    {
         // Add the parameter
         (yyval.interm.function) = (yyvsp[(1) - (2)].interm.function);
         if ((yyvsp[(2) - (2)].interm).param.type->getBasicType() != EbtVoid)
@@ -3202,7 +3212,7 @@
     }
     break;
 
-  case 84:
+  case 85:
 
     {
         //
@@ -3224,7 +3234,7 @@
     }
     break;
 
-  case 85:
+  case 86:
 
     {
         if ((yyvsp[(1) - (3)].interm.type).qualifier != EvqGlobal && (yyvsp[(1) - (3)].interm.type).qualifier != EvqTemporary) {
@@ -3245,7 +3255,7 @@
     }
     break;
 
-  case 86:
+  case 87:
 
     {
         if ((yyvsp[(1) - (2)].interm.type).type == EbtVoid) {
@@ -3260,7 +3270,7 @@
     }
     break;
 
-  case 87:
+  case 88:
 
     {
         // Check that we can make an array out of this type
@@ -3282,7 +3292,7 @@
     }
     break;
 
-  case 88:
+  case 89:
 
     {
         (yyval.interm) = (yyvsp[(3) - (3)].interm);
@@ -3291,29 +3301,9 @@
     }
     break;
 
-  case 89:
-
-    {
-        (yyval.interm) = (yyvsp[(2) - (2)].interm);
-        if (context->parameterSamplerErrorCheck((yyvsp[(2) - (2)].interm).line, (yyvsp[(1) - (2)].interm.qualifier), *(yyvsp[(2) - (2)].interm).param.type))
-            context->recover();
-        if (context->paramErrorCheck((yyvsp[(2) - (2)].interm).line, EvqTemporary, (yyvsp[(1) - (2)].interm.qualifier), (yyval.interm).param.type))
-            context->recover();
-    }
-    break;
-
   case 90:
 
     {
-        (yyval.interm) = (yyvsp[(3) - (3)].interm);
-        if (context->paramErrorCheck((yyvsp[(3) - (3)].interm).line, (yyvsp[(1) - (3)].interm.qualifier), (yyvsp[(2) - (3)].interm.qualifier), (yyval.interm).param.type))
-            context->recover();
-    }
-    break;
-
-  case 91:
-
-    {
         (yyval.interm) = (yyvsp[(2) - (2)].interm);
         if (context->parameterSamplerErrorCheck((yyvsp[(2) - (2)].interm).line, (yyvsp[(1) - (2)].interm.qualifier), *(yyvsp[(2) - (2)].interm).param.type))
             context->recover();
@@ -3322,10 +3312,23 @@
     }
     break;
 
+  case 91:
+
+    {
+        (yyval.interm) = (yyvsp[(3) - (3)].interm);
+        if (context->paramErrorCheck((yyvsp[(3) - (3)].interm).line, (yyvsp[(1) - (3)].interm.qualifier), (yyvsp[(2) - (3)].interm.qualifier), (yyval.interm).param.type))
+            context->recover();
+    }
+    break;
+
   case 92:
 
     {
-        (yyval.interm.qualifier) = EvqIn;
+        (yyval.interm) = (yyvsp[(2) - (2)].interm);
+        if (context->parameterSamplerErrorCheck((yyvsp[(2) - (2)].interm).line, (yyvsp[(1) - (2)].interm.qualifier), *(yyvsp[(2) - (2)].interm).param.type))
+            context->recover();
+        if (context->paramErrorCheck((yyvsp[(2) - (2)].interm).line, EvqTemporary, (yyvsp[(1) - (2)].interm.qualifier), (yyval.interm).param.type))
+            context->recover();
     }
     break;
 
@@ -3339,33 +3342,40 @@
   case 94:
 
     {
-        (yyval.interm.qualifier) = EvqOut;
+        (yyval.interm.qualifier) = EvqIn;
     }
     break;
 
   case 95:
 
     {
-        (yyval.interm.qualifier) = EvqInOut;
+        (yyval.interm.qualifier) = EvqOut;
     }
     break;
 
   case 96:
 
     {
+        (yyval.interm.qualifier) = EvqInOut;
+    }
+    break;
+
+  case 97:
+
+    {
         TParameter param = { 0, new TType((yyvsp[(1) - (1)].interm.type)) };
         (yyval.interm).param = param;
     }
     break;
 
-  case 97:
+  case 98:
 
     {
         (yyval.interm) = (yyvsp[(1) - (1)].interm);
     }
     break;
 
-  case 98:
+  case 99:
 
     {
         if ((yyvsp[(1) - (3)].interm).type.type == EbtInvariant && !(yyvsp[(3) - (3)].lex).symbol)
@@ -3391,7 +3401,7 @@
     }
     break;
 
-  case 99:
+  case 100:
 
     {
         if (context->structQualifierErrorCheck((yyvsp[(3) - (5)].lex).line, (yyvsp[(1) - (5)].interm).type))
@@ -3413,7 +3423,7 @@
     }
     break;
 
-  case 100:
+  case 101:
 
     {
         if (context->structQualifierErrorCheck((yyvsp[(3) - (6)].lex).line, (yyvsp[(1) - (6)].interm).type))
@@ -3441,7 +3451,7 @@
     }
     break;
 
-  case 101:
+  case 102:
 
     {
         if (context->structQualifierErrorCheck((yyvsp[(3) - (5)].lex).line, (yyvsp[(1) - (5)].interm).type))
@@ -3465,7 +3475,7 @@
     }
     break;
 
-  case 102:
+  case 103:
 
     {
         (yyval.interm).type = (yyvsp[(1) - (1)].interm.type);
@@ -3473,7 +3483,7 @@
     }
     break;
 
-  case 103:
+  case 104:
 
     {
         (yyval.interm).type = (yyvsp[(1) - (2)].interm.type);
@@ -3481,7 +3491,7 @@
     }
     break;
 
-  case 104:
+  case 105:
 
     {
         context->error((yyvsp[(2) - (4)].lex).line, "unsized array declarations not supported", (yyvsp[(2) - (4)].lex).string->c_str());
@@ -3492,7 +3502,7 @@
     }
     break;
 
-  case 105:
+  case 106:
 
     {
         (yyval.interm).type = (yyvsp[(1) - (5)].interm.type);
@@ -3500,7 +3510,7 @@
     }
     break;
 
-  case 106:
+  case 107:
 
     {
         (yyval.interm).type = (yyvsp[(1) - (4)].interm.type);
@@ -3508,7 +3518,7 @@
     }
     break;
 
-  case 107:
+  case 108:
 
     {
         VERTEX_ONLY("invariant declaration", (yyvsp[(1) - (2)].lex).line);
@@ -3530,7 +3540,7 @@
     }
     break;
 
-  case 108:
+  case 109:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
@@ -3543,14 +3553,14 @@
     }
     break;
 
-  case 109:
+  case 110:
 
     {
         (yyval.interm.type) = context->addFullySpecifiedType((yyvsp[(1) - (2)].interm.type).qualifier, (yyvsp[(1) - (2)].interm.type).layoutQualifier, (yyvsp[(2) - (2)].interm.type));
     }
     break;
 
-  case 110:
+  case 111:
 
     {
         (yyval.interm.type).qualifier = EvqSmooth;
@@ -3558,7 +3568,7 @@
     }
     break;
 
-  case 111:
+  case 112:
 
     {
         (yyval.interm.type).qualifier = EvqFlat;
@@ -3566,14 +3576,14 @@
     }
     break;
 
-  case 112:
+  case 113:
 
     {
         (yyval.interm.qualifier) = EvqConst;
     }
     break;
 
-  case 113:
+  case 114:
 
     {
         VERTEX_ONLY("attribute", (yyvsp[(1) - (1)].lex).line);
@@ -3584,7 +3594,7 @@
     }
     break;
 
-  case 114:
+  case 115:
 
     {
         ES2_ONLY("varying", (yyvsp[(1) - (1)].lex).line);
@@ -3597,7 +3607,7 @@
     }
     break;
 
-  case 115:
+  case 116:
 
     {
         ES2_ONLY("varying", (yyvsp[(1) - (2)].lex).line);
@@ -3610,14 +3620,14 @@
     }
     break;
 
-  case 116:
+  case 117:
 
     {
         (yyval.interm.type).setBasic(EbtVoid, (yyvsp[(1) - (1)].interm.type).qualifier, (yyvsp[(1) - (1)].interm.type).line);
     }
     break;
 
-  case 117:
+  case 118:
 
     {
         if ((yyvsp[(2) - (2)].interm.type).qualifier == EvqSmoothIn) {
@@ -3657,7 +3667,7 @@
     }
     break;
 
-  case 118:
+  case 119:
 
     {
         context->error((yyvsp[(1) - (1)].interm.type).line, "interpolation qualifier requires a fragment 'in' or vertex 'out' storage qualifier", getInterpolationString((yyvsp[(1) - (1)].interm.type).qualifier));
@@ -3668,7 +3678,7 @@
     }
     break;
 
-  case 119:
+  case 120:
 
     {
         (yyval.interm.type).qualifier = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3676,7 +3686,7 @@
     }
     break;
 
-  case 120:
+  case 121:
 
     {
         (yyval.interm.type).setBasic(EbtVoid, (yyvsp[(2) - (2)].interm.type).qualifier, (yyvsp[(2) - (2)].interm.type).line);
@@ -3684,7 +3694,7 @@
     }
     break;
 
-  case 121:
+  case 122:
 
     {
         (yyval.interm.type).qualifier = EvqConst;
@@ -3692,7 +3702,7 @@
     }
     break;
 
-  case 122:
+  case 123:
 
     {
         ES3_ONLY("in", (yyvsp[(1) - (1)].lex).line, "storage qualifier");
@@ -3701,7 +3711,7 @@
     }
     break;
 
-  case 123:
+  case 124:
 
     {
         ES3_ONLY("out", (yyvsp[(1) - (1)].lex).line, "storage qualifier");
@@ -3710,7 +3720,7 @@
     }
     break;
 
-  case 124:
+  case 125:
 
     {
         ES3_ONLY("centroid in", (yyvsp[(1) - (2)].lex).line, "storage qualifier");
@@ -3724,7 +3734,7 @@
     }
     break;
 
-  case 125:
+  case 126:
 
     {
         ES3_ONLY("centroid out", (yyvsp[(1) - (2)].lex).line, "storage qualifier");
@@ -3738,7 +3748,7 @@
     }
     break;
 
-  case 126:
+  case 127:
 
     {
         if (context->globalErrorCheck((yyvsp[(1) - (1)].lex).line, context->symbolTable.atGlobalLevel(), "uniform"))
@@ -3748,7 +3758,7 @@
     }
     break;
 
-  case 127:
+  case 128:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
@@ -3762,7 +3772,7 @@
     }
     break;
 
-  case 128:
+  case 129:
 
     {
         (yyval.interm.type) = (yyvsp[(2) - (2)].interm.type);
@@ -3770,28 +3780,28 @@
     }
     break;
 
-  case 129:
+  case 130:
 
     {
         (yyval.interm.precision) = EbpHigh;
     }
     break;
 
-  case 130:
+  case 131:
 
     {
         (yyval.interm.precision) = EbpMedium;
     }
     break;
 
-  case 131:
+  case 132:
 
     {
         (yyval.interm.precision) = EbpLow;
     }
     break;
 
-  case 132:
+  case 133:
 
     {
         ES3_ONLY("layout", (yyvsp[(1) - (4)].lex).line, "qualifier");
@@ -3799,31 +3809,24 @@
     }
     break;
 
-  case 133:
+  case 134:
 
     {
         (yyval.interm.layoutQualifier) = (yyvsp[(1) - (1)].interm.layoutQualifier);
     }
     break;
 
-  case 134:
+  case 135:
 
     {
         (yyval.interm.layoutQualifier) = context->joinLayoutQualifiers((yyvsp[(1) - (3)].interm.layoutQualifier), (yyvsp[(3) - (3)].interm.layoutQualifier));
     }
     break;
 
-  case 135:
-
-    {
-        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[(1) - (1)].lex).string, (yyvsp[(1) - (1)].lex).line);
-    }
-    break;
-
   case 136:
 
     {
-        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[(1) - (3)].lex).string, (yyvsp[(1) - (3)].lex).line, *(yyvsp[(3) - (3)].lex).string, (yyvsp[(3) - (3)].lex).i, (yyvsp[(3) - (3)].lex).line);
+        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[(1) - (1)].lex).string, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
@@ -3837,13 +3840,20 @@
   case 138:
 
     {
-        (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
+        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[(1) - (3)].lex).string, (yyvsp[(1) - (3)].lex).line, *(yyvsp[(3) - (3)].lex).string, (yyvsp[(3) - (3)].lex).i, (yyvsp[(3) - (3)].lex).line);
     }
     break;
 
   case 139:
 
     {
+        (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
+    }
+    break;
+
+  case 140:
+
+    {
         (yyval.interm.type) = (yyvsp[(1) - (4)].interm.type);
 
         if (context->arrayTypeErrorCheck((yyvsp[(2) - (4)].lex).line, (yyvsp[(1) - (4)].interm.type)))
@@ -3857,7 +3867,7 @@
     }
     break;
 
-  case 140:
+  case 141:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3865,19 +3875,11 @@
     }
     break;
 
-  case 141:
-
-    {
-        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-    }
-    break;
-
   case 142:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
@@ -3885,7 +3887,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtUInt, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
@@ -3893,7 +3895,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setBasic(EbtUInt, qual, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
@@ -3901,8 +3903,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(2);
+        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
@@ -3911,7 +3912,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(3);
+        (yyval.interm.type).setAggregate(2);
     }
     break;
 
@@ -3920,7 +3921,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(4);
+        (yyval.interm.type).setAggregate(3);
     }
     break;
 
@@ -3928,8 +3929,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(2);
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(4);
     }
     break;
 
@@ -3938,7 +3939,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(3);
+        (yyval.interm.type).setAggregate(2);
     }
     break;
 
@@ -3947,7 +3948,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(4);
+        (yyval.interm.type).setAggregate(3);
     }
     break;
 
@@ -3955,8 +3956,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(2);
+        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(4);
     }
     break;
 
@@ -3965,7 +3966,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(3);
+        (yyval.interm.type).setAggregate(2);
     }
     break;
 
@@ -3974,7 +3975,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(4);
+        (yyval.interm.type).setAggregate(3);
     }
     break;
 
@@ -3982,8 +3983,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtUInt, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(2);
+        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(4);
     }
     break;
 
@@ -3992,7 +3993,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtUInt, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(3);
+        (yyval.interm.type).setAggregate(2);
     }
     break;
 
@@ -4001,13 +4002,22 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtUInt, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(4);
+        (yyval.interm.type).setAggregate(3);
     }
     break;
 
   case 157:
 
     {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtUInt, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(4);
+    }
+    break;
+
+  case 158:
+
+    {
         FRAG_VERT_ONLY("mat2", (yyvsp[(1) - (1)].lex).line);
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
@@ -4015,7 +4025,7 @@
     }
     break;
 
-  case 158:
+  case 159:
 
     {
         FRAG_VERT_ONLY("mat3", (yyvsp[(1) - (1)].lex).line);
@@ -4025,7 +4035,7 @@
     }
     break;
 
-  case 159:
+  case 160:
 
     {
         FRAG_VERT_ONLY("mat4", (yyvsp[(1) - (1)].lex).line);
@@ -4035,7 +4045,7 @@
     }
     break;
 
-  case 160:
+  case 161:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4044,7 +4054,7 @@
     }
     break;
 
-  case 161:
+  case 162:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4053,7 +4063,7 @@
     }
     break;
 
-  case 162:
+  case 163:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4062,7 +4072,7 @@
     }
     break;
 
-  case 163:
+  case 164:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4071,7 +4081,7 @@
     }
     break;
 
-  case 164:
+  case 165:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4080,7 +4090,7 @@
     }
     break;
 
-  case 165:
+  case 166:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4089,7 +4099,7 @@
     }
     break;
 
-  case 166:
+  case 167:
 
     {
         FRAG_VERT_ONLY("sampler2D", (yyvsp[(1) - (1)].lex).line);
@@ -4098,7 +4108,7 @@
     }
     break;
 
-  case 167:
+  case 168:
 
     {
         FRAG_VERT_ONLY("samplerCube", (yyvsp[(1) - (1)].lex).line);
@@ -4107,7 +4117,7 @@
     }
     break;
 
-  case 168:
+  case 169:
 
     {
         if (!context->supportsExtension("GL_OES_EGL_image_external")) {
@@ -4120,7 +4130,7 @@
     }
     break;
 
-  case 169:
+  case 170:
 
     {
         if (!context->supportsExtension("GL_ARB_texture_rectangle")) {
@@ -4133,7 +4143,7 @@
     }
     break;
 
-  case 170:
+  case 171:
 
     {
         FRAG_VERT_ONLY("struct", (yyvsp[(1) - (1)].interm.type).line);
@@ -4142,7 +4152,7 @@
     }
     break;
 
-  case 171:
+  case 172:
 
     {
         //
@@ -4156,38 +4166,38 @@
     }
     break;
 
-  case 172:
+  case 173:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (3)].lex).line, *(yyvsp[(2) - (3)].lex).string)) context->recover(); }
     break;
 
-  case 173:
+  case 174:
 
     {
         (yyval.interm.type) = context->addStructure((yyvsp[(1) - (6)].lex).line, (yyvsp[(2) - (6)].lex).line, *(yyvsp[(2) - (6)].lex).string, (yyvsp[(5) - (6)].interm.typeList));
     }
     break;
 
-  case 174:
+  case 175:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (2)].lex).line, *(yyvsp[(2) - (2)].lex).string)) context->recover(); }
     break;
 
-  case 175:
+  case 176:
 
     {
         (yyval.interm.type) = context->addStructure((yyvsp[(1) - (5)].lex).line, 0, "", (yyvsp[(4) - (5)].interm.typeList));
     }
     break;
 
-  case 176:
+  case 177:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (1)].interm.typeList);
     }
     break;
 
-  case 177:
+  case 178:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (2)].interm.typeList);
@@ -4203,14 +4213,14 @@
     }
     break;
 
-  case 178:
+  case 179:
 
     {
         (yyval.interm.typeList) = context->addStructDeclaratorList((yyvsp[(1) - (3)].interm.type), (yyvsp[(2) - (3)].interm.typeList));
     }
     break;
 
-  case 179:
+  case 180:
 
     {
         // ES3 Only, but errors should be handled elsewhere
@@ -4220,7 +4230,7 @@
     }
     break;
 
-  case 180:
+  case 181:
 
     {
         (yyval.interm.typeList) = NewPoolTTypeList();
@@ -4228,14 +4238,14 @@
     }
     break;
 
-  case 181:
+  case 182:
 
     {
         (yyval.interm.typeList)->push_back((yyvsp[(3) - (3)].interm.typeLine));
     }
     break;
 
-  case 182:
+  case 183:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
@@ -4247,7 +4257,7 @@
     }
     break;
 
-  case 183:
+  case 184:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (4)].lex).line, *(yyvsp[(1) - (4)].lex).string))
@@ -4264,24 +4274,19 @@
     }
     break;
 
-  case 184:
+  case 185:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 185:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
   case 186:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 187:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
     break;
 
   case 188:
@@ -4311,21 +4316,26 @@
 
   case 193:
 
-    { (yyval.interm.intermAggregate) = 0; }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 194:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermAggregate) = 0; }
     break;
 
   case 195:
 
-    { context->symbolTable.pop(); }
+    { context->symbolTable.push(); }
     break;
 
   case 196:
 
+    { context->symbolTable.pop(); }
+    break;
+
+  case 197:
+
     {
         if ((yyvsp[(3) - (5)].interm.intermAggregate) != 0) {
             (yyvsp[(3) - (5)].interm.intermAggregate)->setOp(EOpSequence);
@@ -4335,11 +4345,6 @@
     }
     break;
 
-  case 197:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
   case 198:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
@@ -4347,32 +4352,37 @@
 
   case 199:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 200:
 
-    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    { context->symbolTable.push(); }
     break;
 
   case 201:
 
-    { context->symbolTable.push(); }
+    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
     break;
 
   case 202:
 
-    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    { context->symbolTable.push(); }
     break;
 
   case 203:
 
+    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    break;
+
+  case 204:
+
     {
         (yyval.interm.intermNode) = 0;
     }
     break;
 
-  case 204:
+  case 205:
 
     {
         if ((yyvsp[(2) - (3)].interm.intermAggregate)) {
@@ -4383,31 +4393,31 @@
     }
     break;
 
-  case 205:
+  case 206:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.makeAggregate((yyvsp[(1) - (1)].interm.intermNode), 0);
     }
     break;
 
-  case 206:
+  case 207:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermAggregate), (yyvsp[(2) - (2)].interm.intermNode), 0);
     }
     break;
 
-  case 207:
+  case 208:
 
     { (yyval.interm.intermNode) = 0; }
     break;
 
-  case 208:
+  case 209:
 
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[(1) - (2)].interm.intermTypedNode)); }
     break;
 
-  case 209:
+  case 210:
 
     {
         if (context->boolErrorCheck((yyvsp[(1) - (5)].lex).line, (yyvsp[(3) - (5)].interm.intermTypedNode)))
@@ -4416,7 +4426,7 @@
     }
     break;
 
-  case 210:
+  case 211:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermNode);
@@ -4424,7 +4434,7 @@
     }
     break;
 
-  case 211:
+  case 212:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4432,7 +4442,7 @@
     }
     break;
 
-  case 212:
+  case 213:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
@@ -4441,7 +4451,7 @@
     }
     break;
 
-  case 213:
+  case 214:
 
     {
         TIntermNode* intermNode;
@@ -4459,12 +4469,12 @@
     }
     break;
 
-  case 214:
+  case 215:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 215:
+  case 216:
 
     {
         context->symbolTable.pop();
@@ -4473,12 +4483,12 @@
     }
     break;
 
-  case 216:
+  case 217:
 
     { ++context->loopNestingLevel; }
     break;
 
-  case 217:
+  case 218:
 
     {
         if (context->boolErrorCheck((yyvsp[(8) - (8)].lex).line, (yyvsp[(6) - (8)].interm.intermTypedNode)))
@@ -4489,24 +4499,17 @@
     }
     break;
 
-  case 218:
-
-    { context->symbolTable.push(); ++context->loopNestingLevel; }
-    break;
-
   case 219:
 
-    {
-        context->symbolTable.pop();
-        (yyval.interm.intermNode) = context->intermediate.addLoop(ELoopFor, (yyvsp[(4) - (7)].interm.intermNode), reinterpret_cast<TIntermTyped*>((yyvsp[(5) - (7)].interm.nodePair).node1), reinterpret_cast<TIntermTyped*>((yyvsp[(5) - (7)].interm.nodePair).node2), (yyvsp[(7) - (7)].interm.intermNode), (yyvsp[(1) - (7)].lex).line);
-        --context->loopNestingLevel;
-    }
+    { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
   case 220:
 
     {
-        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
+        context->symbolTable.pop();
+        (yyval.interm.intermNode) = context->intermediate.addLoop(ELoopFor, (yyvsp[(4) - (7)].interm.intermNode), reinterpret_cast<TIntermTyped*>((yyvsp[(5) - (7)].interm.nodePair).node1), reinterpret_cast<TIntermTyped*>((yyvsp[(5) - (7)].interm.nodePair).node2), (yyvsp[(7) - (7)].interm.intermNode), (yyvsp[(1) - (7)].lex).line);
+        --context->loopNestingLevel;
     }
     break;
 
@@ -4520,26 +4523,33 @@
   case 222:
 
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
   case 223:
 
     {
-        (yyval.interm.intermTypedNode) = 0;
+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
   case 224:
 
     {
+        (yyval.interm.intermTypedNode) = 0;
+    }
+    break;
+
+  case 225:
+
+    {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (2)].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
     break;
 
-  case 225:
+  case 226:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermTypedNode);
@@ -4547,7 +4557,7 @@
     }
     break;
 
-  case 226:
+  case 227:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4558,7 +4568,7 @@
     }
     break;
 
-  case 227:
+  case 228:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4569,7 +4579,7 @@
     }
     break;
 
-  case 228:
+  case 229:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(1) - (2)].lex).line);
@@ -4580,7 +4590,7 @@
     }
     break;
 
-  case 229:
+  case 230:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(2) - (3)].interm.intermTypedNode), (yyvsp[(1) - (3)].lex).line);
@@ -4595,7 +4605,7 @@
     }
     break;
 
-  case 230:
+  case 231:
 
     {
         FRAG_ONLY("discard", (yyvsp[(1) - (2)].lex).line);
@@ -4603,18 +4613,10 @@
     }
     break;
 
-  case 231:
-
-    {
-        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
-        context->treeRoot = (yyval.interm.intermNode);
-    }
-    break;
-
   case 232:
 
     {
-        (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode), 0);
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
         context->treeRoot = (yyval.interm.intermNode);
     }
     break;
@@ -4622,7 +4624,8 @@
   case 233:
 
     {
-        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
+        (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode), 0);
+        context->treeRoot = (yyval.interm.intermNode);
     }
     break;
 
@@ -4636,6 +4639,13 @@
   case 235:
 
     {
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
+    }
+    break;
+
+  case 236:
+
+    {
         TFunction* function = (yyvsp[(1) - (1)].interm).function;
         
         const TSymbol *builtIn = context->symbolTable.findBuiltIn(function->getMangledName(), context->shaderVersion);
@@ -4722,7 +4732,7 @@
     }
     break;
 
-  case 236:
+  case 237:
 
     {
         //?? Check that all paths return a value if return type != void ?